@szum-tech/design-system 3.13.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/chunk-4IGU5SVP.js +54 -0
  2. package/dist/{chunk-XJZOANXX.cjs → chunk-6HX7ETL3.cjs} +1 -1
  3. package/dist/chunk-B4M7Q5KX.cjs +25 -0
  4. package/dist/chunk-BUJO4FB6.js +252 -0
  5. package/dist/{chunk-S2BCU6WG.cjs → chunk-CAIAZGSW.cjs} +5 -4
  6. package/dist/chunk-CL2C6STG.cjs +278 -0
  7. package/dist/chunk-EOTQVIA5.js +993 -0
  8. package/dist/chunk-G24PWQKG.js +20 -0
  9. package/dist/chunk-GEDBA3JU.cjs +49 -0
  10. package/dist/chunk-IZU3KULT.js +41 -0
  11. package/dist/{chunk-KQ6QE7BT.cjs → chunk-MNDQXDV4.cjs} +4 -4
  12. package/dist/chunk-N4TYSZSU.cjs +44 -0
  13. package/dist/chunk-OH323B3O.js +2299 -0
  14. package/dist/chunk-OZSNSRLV.cjs +1027 -0
  15. package/dist/chunk-PTZVUZNQ.cjs +2355 -0
  16. package/dist/{chunk-DL54DIMD.js → chunk-Q2MJKFIE.js} +2 -1
  17. package/dist/chunk-S3ZUFD6U.js +23 -0
  18. package/dist/{chunk-WXZE35FK.js → chunk-VK2FJ65F.js} +1 -1
  19. package/dist/{chunk-E5TYGWGE.js → chunk-XKCLVPUC.js} +1 -1
  20. package/dist/{chunk-XIQUR62A.cjs → chunk-XY3ZNUWR.cjs} +32 -20
  21. package/dist/color-picker.types-GI7dq2Ig.d.cts +42 -0
  22. package/dist/color-picker.types-GI7dq2Ig.d.ts +42 -0
  23. package/dist/components/badge-overflow/index.cjs +3 -2
  24. package/dist/components/badge-overflow/index.js +2 -1
  25. package/dist/components/button/index.cjs +21 -17
  26. package/dist/components/button/index.d.cts +1 -0
  27. package/dist/components/button/index.d.ts +1 -0
  28. package/dist/components/button/index.js +20 -16
  29. package/dist/components/carousel/index.cjs +22 -18
  30. package/dist/components/carousel/index.d.cts +1 -0
  31. package/dist/components/carousel/index.d.ts +1 -0
  32. package/dist/components/carousel/index.js +20 -16
  33. package/dist/components/color-picker/index.cjs +89 -0
  34. package/dist/components/color-picker/index.d.cts +71 -0
  35. package/dist/components/color-picker/index.d.ts +71 -0
  36. package/dist/components/color-picker/index.js +40 -0
  37. package/dist/components/dialog/index.d.cts +1 -0
  38. package/dist/components/dialog/index.d.ts +1 -0
  39. package/dist/components/file-upload/index.cjs +60 -0
  40. package/dist/components/file-upload/index.d.cts +131 -0
  41. package/dist/components/file-upload/index.d.ts +131 -0
  42. package/dist/components/file-upload/index.js +3 -0
  43. package/dist/components/index.cjs +294 -146
  44. package/dist/components/index.d.cts +9 -1
  45. package/dist/components/index.d.ts +9 -1
  46. package/dist/components/index.js +20 -16
  47. package/dist/components/input/index.cjs +2 -2
  48. package/dist/components/input/index.js +1 -1
  49. package/dist/components/item/index.d.cts +1 -0
  50. package/dist/components/item/index.d.ts +1 -0
  51. package/dist/components/masonry/index.cjs +5 -4
  52. package/dist/components/masonry/index.js +3 -2
  53. package/dist/components/popover/index.cjs +35 -0
  54. package/dist/components/popover/index.d.cts +18 -0
  55. package/dist/components/popover/index.d.ts +18 -0
  56. package/dist/components/popover/index.js +2 -0
  57. package/dist/components/select/index.cjs +7 -7
  58. package/dist/components/select/index.d.cts +8 -14
  59. package/dist/components/select/index.d.ts +8 -14
  60. package/dist/components/select/index.js +1 -1
  61. package/dist/components/sheet/index.d.cts +2 -1
  62. package/dist/components/sheet/index.d.ts +2 -1
  63. package/dist/components/sortable/index.cjs +27 -0
  64. package/dist/components/sortable/index.d.cts +50 -0
  65. package/dist/components/sortable/index.d.ts +50 -0
  66. package/dist/components/sortable/index.js +2 -0
  67. package/dist/components/stepper/index.cjs +39 -35
  68. package/dist/components/stepper/index.d.cts +1 -0
  69. package/dist/components/stepper/index.d.ts +1 -0
  70. package/dist/components/stepper/index.js +20 -16
  71. package/dist/components/timeline/index.cjs +12 -11
  72. package/dist/components/timeline/index.d.cts +1 -0
  73. package/dist/components/timeline/index.d.ts +1 -0
  74. package/dist/components/timeline/index.js +3 -2
  75. package/dist/components/toaster/index.cjs +22 -18
  76. package/dist/components/toaster/index.js +20 -16
  77. package/dist/components/typing-text/index.d.cts +1 -0
  78. package/dist/components/typing-text/index.d.ts +1 -0
  79. package/dist/components/word-rotate/index.d.cts +1 -0
  80. package/dist/components/word-rotate/index.d.ts +1 -0
  81. package/dist/hooks/index.cjs +17 -8
  82. package/dist/hooks/index.d.cts +15 -4
  83. package/dist/hooks/index.d.ts +15 -4
  84. package/dist/hooks/index.js +2 -1
  85. package/dist/popover-trigger-Cf4PPj0z.d.cts +14 -0
  86. package/dist/popover-trigger-Cf4PPj0z.d.ts +14 -0
  87. package/dist/select-Bf6XQtt-.d.cts +12 -0
  88. package/dist/select-Bf6XQtt-.d.ts +12 -0
  89. package/package.json +4 -1
  90. package/dist/chunk-5AA4IE2T.cjs +0 -27
  91. package/dist/chunk-IDOJLUDL.cjs +0 -1065
  92. package/dist/chunk-SB5UG7OC.js +0 -41
  93. package/dist/chunk-U2HEQZMY.js +0 -1020
  94. package/dist/chunk-UGSNASZM.js +0 -25
@@ -0,0 +1,54 @@
1
+ import * as React from 'react';
2
+
3
+ // src/hooks/use-validation-log.tsx
4
+ function useValidationLog({ check, scope, message }) {
5
+ React.useEffect(() => {
6
+ if (!check) {
7
+ console.error(
8
+ `%c[Szum Tech-Design System]%c
9
+ ${scope}%c
10
+ ${message}`,
11
+ "color: #ef4444; font-weight: bold;",
12
+ "color: #3b82f6; font-weight: bold;",
13
+ "color: #f59e0b;"
14
+ );
15
+ }
16
+ }, [check, scope, message]);
17
+ }
18
+ function setRef(ref, value) {
19
+ if (typeof ref === "function") {
20
+ return ref(value);
21
+ }
22
+ if (ref !== null && ref !== void 0) {
23
+ ref.current = value;
24
+ }
25
+ }
26
+ function composeRefs(...refs) {
27
+ return (node) => {
28
+ let hasCleanup = false;
29
+ const cleanups = refs.map((ref) => {
30
+ const cleanup = setRef(ref, node);
31
+ if (!hasCleanup && typeof cleanup === "function") {
32
+ hasCleanup = true;
33
+ }
34
+ return cleanup;
35
+ });
36
+ if (hasCleanup) {
37
+ return () => {
38
+ for (let i = 0; i < cleanups.length; i++) {
39
+ const cleanup = cleanups[i];
40
+ if (typeof cleanup === "function") {
41
+ cleanup();
42
+ } else {
43
+ setRef(refs[i], null);
44
+ }
45
+ }
46
+ };
47
+ }
48
+ };
49
+ }
50
+ function useComposedRefs(...refs) {
51
+ return React.useCallback(composeRefs(...refs), refs);
52
+ }
53
+
54
+ export { composeRefs, useComposedRefs, useValidationLog };
@@ -50,7 +50,7 @@ function Select({
50
50
  "aria-invalid": triggerProps["aria-invalid"] || invalid ? true : void 0,
51
51
  "data-size": size,
52
52
  className: chunkH2BWO3SI_cjs.cn(
53
- "border-input dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none",
53
+ "border-input dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none",
54
54
  "*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2",
55
55
  "disabled:cursor-not-allowed disabled:opacity-50",
56
56
  "aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error",
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var chunkH2BWO3SI_cjs = require('./chunk-H2BWO3SI.cjs');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ function Input({ className, type, invalid = false, ...props }) {
7
+ return /* @__PURE__ */ jsxRuntime.jsx(
8
+ "input",
9
+ {
10
+ type,
11
+ "data-slot": "input",
12
+ "aria-invalid": props["aria-invalid"] || invalid,
13
+ className: chunkH2BWO3SI_cjs.cn(
14
+ "dark:bg-input/30 border-input file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm",
15
+ "aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error dark:aria-invalid:border-error/50",
16
+ "focus-visible:border-ring focus-visible:ring-ring/50",
17
+ "disabled:bg-input/50 dark:disabled:bg-input/80",
18
+ className
19
+ ),
20
+ ...props
21
+ }
22
+ );
23
+ }
24
+
25
+ exports.Input = Input;
@@ -0,0 +1,252 @@
1
+ import { cn } from './chunk-ZD2QRAOX.js';
2
+ import * as React2 from 'react';
3
+ import { Slot } from 'radix-ui';
4
+ import { createPortal } from 'react-dom';
5
+ import { defaultDropAnimationSideEffects, useSensors, useSensor, MouseSensor, TouchSensor, KeyboardSensor, DndContext, MeasuringStrategy, DragOverlay } from '@dnd-kit/core';
6
+ import { sortableKeyboardCoordinates, arrayMove, SortableContext, useSortable, verticalListSortingStrategy, rectSortingStrategy, defaultAnimateLayoutChanges } from '@dnd-kit/sortable';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { CSS } from '@dnd-kit/utilities';
9
+
10
+ var SORTABLE_ROOT_NAME = "Sortable";
11
+ var SORTABLE_ITEM_NAME = "SortableItem";
12
+ var SORTABLE_ITEM_HANDLE_NAME = "SortableItemHandle";
13
+ var SORTABLE_OVERLAY_NAME = "SortableOverlay";
14
+ var animateLayoutChanges = (args) => defaultAnimateLayoutChanges({ ...args, wasDragging: true });
15
+ var dropAnimationConfig = {
16
+ sideEffects: defaultDropAnimationSideEffects({
17
+ styles: {
18
+ active: {
19
+ opacity: "0.4"
20
+ }
21
+ }
22
+ })
23
+ };
24
+ var SortableItemContext = React2.createContext(null);
25
+ function useSortableItemContext(consumerName) {
26
+ const context = React2.useContext(SortableItemContext);
27
+ if (!context) {
28
+ throw new Error(`\`${consumerName}\` must be used within \`${SORTABLE_ITEM_NAME}\``);
29
+ }
30
+ return context;
31
+ }
32
+ var IsOverlayContext = React2.createContext(false);
33
+ var SortableInternalContext = React2.createContext(null);
34
+ function useSortableInternalContext(consumerName) {
35
+ const context = React2.useContext(SortableInternalContext);
36
+ if (!context) {
37
+ throw new Error(`\`${consumerName}\` must be used within \`${SORTABLE_ROOT_NAME}\``);
38
+ }
39
+ return context;
40
+ }
41
+ function Sortable({
42
+ value,
43
+ onValueChange,
44
+ getItemValue,
45
+ className,
46
+ asChild = false,
47
+ onMove,
48
+ strategy = "vertical",
49
+ onDragStart,
50
+ onDragEnd,
51
+ modifiers,
52
+ children,
53
+ ...props
54
+ }) {
55
+ const [activeId, setActiveId] = React2.useState(null);
56
+ const [mounted, setMounted] = React2.useState(false);
57
+ React2.useLayoutEffect(() => setMounted(true), []);
58
+ const sensors = useSensors(
59
+ useSensor(MouseSensor, {
60
+ activationConstraint: {
61
+ distance: 10
62
+ }
63
+ }),
64
+ useSensor(TouchSensor, {
65
+ activationConstraint: {
66
+ delay: 250,
67
+ tolerance: 5
68
+ }
69
+ }),
70
+ useSensor(KeyboardSensor, {
71
+ coordinateGetter: sortableKeyboardCoordinates
72
+ })
73
+ );
74
+ const handleDragStart = React2.useCallback(
75
+ (event) => {
76
+ setActiveId(event.active.id);
77
+ onDragStart?.(event);
78
+ },
79
+ [onDragStart]
80
+ );
81
+ const handleDragEnd = React2.useCallback(
82
+ (event) => {
83
+ const { active, over } = event;
84
+ setActiveId(null);
85
+ onDragEnd?.(event);
86
+ if (!over) return;
87
+ const activeIndex = value.findIndex((item) => getItemValue(item) === active.id);
88
+ const overIndex = value.findIndex((item) => getItemValue(item) === over.id);
89
+ if (activeIndex !== overIndex) {
90
+ if (onMove) {
91
+ onMove({ event, activeIndex, overIndex });
92
+ } else {
93
+ const newValue = arrayMove(value, activeIndex, overIndex);
94
+ onValueChange(newValue);
95
+ }
96
+ }
97
+ },
98
+ [value, getItemValue, onValueChange, onMove, onDragEnd]
99
+ );
100
+ const handleDragCancel = React2.useCallback(() => {
101
+ setActiveId(null);
102
+ }, []);
103
+ const getStrategy = () => {
104
+ switch (strategy) {
105
+ case "horizontal":
106
+ return rectSortingStrategy;
107
+ case "grid":
108
+ return rectSortingStrategy;
109
+ case "vertical":
110
+ default:
111
+ return verticalListSortingStrategy;
112
+ }
113
+ };
114
+ const itemIds = React2.useMemo(() => value.map(getItemValue), [value, getItemValue]);
115
+ const contextValue = React2.useMemo(() => ({ activeId, modifiers }), [activeId, modifiers]);
116
+ const overlayContent = React2.useMemo(() => {
117
+ if (!activeId) return null;
118
+ let result = null;
119
+ React2.Children.forEach(children, (child) => {
120
+ if (React2.isValidElement(child) && child.props.value === activeId) {
121
+ result = React2.cloneElement(child, {
122
+ ...child.props,
123
+ className: cn(child.props.className, "z-50")
124
+ });
125
+ }
126
+ });
127
+ return result;
128
+ }, [activeId, children]);
129
+ const Comp = asChild ? Slot.Root : "div";
130
+ return /* @__PURE__ */ jsx(SortableInternalContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(
131
+ DndContext,
132
+ {
133
+ sensors,
134
+ modifiers,
135
+ measuring: {
136
+ droppable: {
137
+ strategy: MeasuringStrategy.Always
138
+ }
139
+ },
140
+ onDragStart: handleDragStart,
141
+ onDragEnd: handleDragEnd,
142
+ onDragCancel: handleDragCancel,
143
+ children: [
144
+ /* @__PURE__ */ jsx(SortableContext, { items: itemIds, strategy: getStrategy(), children: /* @__PURE__ */ jsx(
145
+ Comp,
146
+ {
147
+ "data-slot": "sortable",
148
+ "data-dragging": activeId !== null,
149
+ className: cn(activeId !== null && "cursor-grabbing!", className),
150
+ ...props,
151
+ children
152
+ }
153
+ ) }),
154
+ mounted && createPortal(
155
+ /* @__PURE__ */ jsx(
156
+ DragOverlay,
157
+ {
158
+ dropAnimation: dropAnimationConfig,
159
+ modifiers,
160
+ className: cn("z-50", activeId && "cursor-grabbing"),
161
+ children: /* @__PURE__ */ jsx(IsOverlayContext.Provider, { value: true, children: overlayContent })
162
+ }
163
+ ),
164
+ document.body
165
+ )
166
+ ]
167
+ }
168
+ ) });
169
+ }
170
+ function SortableItem({ value, className, asChild = false, disabled, children, ...props }) {
171
+ const isOverlay = React2.useContext(IsOverlayContext);
172
+ const {
173
+ setNodeRef,
174
+ transform,
175
+ transition,
176
+ attributes,
177
+ listeners,
178
+ isDragging: isSortableDragging
179
+ } = useSortable({
180
+ id: value,
181
+ disabled: disabled || isOverlay,
182
+ animateLayoutChanges
183
+ });
184
+ if (isOverlay) {
185
+ const Comp2 = asChild ? Slot.Root : "div";
186
+ return /* @__PURE__ */ jsx(SortableItemContext.Provider, { value: { listeners: void 0, isDragging: true, disabled: false }, children: /* @__PURE__ */ jsx(Comp2, { "data-slot": "sortable-item", "data-value": value, "data-dragging": true, className: cn(className), ...props, children }) });
187
+ }
188
+ const style = {
189
+ transition,
190
+ transform: CSS.Transform.toString(transform)
191
+ };
192
+ const Comp = asChild ? Slot.Root : "div";
193
+ return /* @__PURE__ */ jsx(SortableItemContext.Provider, { value: { listeners, isDragging: isSortableDragging, disabled }, children: /* @__PURE__ */ jsx(
194
+ Comp,
195
+ {
196
+ "data-slot": "sortable-item",
197
+ "data-value": value,
198
+ "data-dragging": isSortableDragging,
199
+ "data-disabled": disabled,
200
+ ref: setNodeRef,
201
+ style,
202
+ ...attributes,
203
+ className: cn(isSortableDragging && "z-50 opacity-50", disabled && "opacity-50", className),
204
+ ...props,
205
+ children
206
+ }
207
+ ) });
208
+ }
209
+ function SortableItemHandle({
210
+ className,
211
+ asChild = false,
212
+ cursor = true,
213
+ children,
214
+ ...props
215
+ }) {
216
+ const { listeners, isDragging, disabled } = useSortableItemContext(SORTABLE_ITEM_HANDLE_NAME);
217
+ const Comp = asChild ? Slot.Root : "div";
218
+ return /* @__PURE__ */ jsx(
219
+ Comp,
220
+ {
221
+ "data-slot": "sortable-item-handle",
222
+ "data-dragging": isDragging,
223
+ "data-disabled": disabled,
224
+ ...listeners,
225
+ className: cn(cursor && (isDragging ? "cursor-grabbing!" : "cursor-grab!"), className),
226
+ ...props,
227
+ children
228
+ }
229
+ );
230
+ }
231
+ function SortableOverlay({ children, className, ...props }) {
232
+ const { activeId, modifiers } = useSortableInternalContext(SORTABLE_OVERLAY_NAME);
233
+ const [mounted, setMounted] = React2.useState(false);
234
+ React2.useLayoutEffect(() => setMounted(true), []);
235
+ const content = activeId && children ? typeof children === "function" ? children({ value: activeId }) : children : null;
236
+ if (!mounted) return null;
237
+ return createPortal(
238
+ /* @__PURE__ */ jsx(
239
+ DragOverlay,
240
+ {
241
+ dropAnimation: dropAnimationConfig,
242
+ modifiers,
243
+ className: cn("z-50", activeId && "cursor-grabbing", className),
244
+ ...props,
245
+ children: /* @__PURE__ */ jsx(IsOverlayContext.Provider, { value: true, children: content })
246
+ }
247
+ ),
248
+ document.body
249
+ );
250
+ }
251
+
252
+ export { Sortable, SortableItem, SortableItemHandle, SortableOverlay, useSortableItemContext };
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkXIQUR62A_cjs = require('./chunk-XIQUR62A.cjs');
3
+ var chunkXY3ZNUWR_cjs = require('./chunk-XY3ZNUWR.cjs');
4
+ var chunkN4TYSZSU_cjs = require('./chunk-N4TYSZSU.cjs');
4
5
  var React3 = require('react');
5
6
  var reactSlot = require('@radix-ui/react-slot');
6
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -67,7 +68,7 @@ function MasonryViewport({ children, style, ref, ...props }) {
67
68
  const [layoutVersion, setLayoutVersion] = React3__namespace.useState(0);
68
69
  const rafId = React3__namespace.useRef(null);
69
70
  const [mounted, setMounted] = React3__namespace.useState(false);
70
- chunkXIQUR62A_cjs.useIsomorphicLayoutEffect(() => {
71
+ chunkN4TYSZSU_cjs.useIsomorphicLayoutEffect(() => {
71
72
  setMounted(true);
72
73
  }, []);
73
74
  const validChildren = React3__namespace.Children.toArray(children).filter(
@@ -976,14 +977,14 @@ function Masonry(props) {
976
977
  const columnGap = gapValue.column;
977
978
  const rowGap = gapValue.row;
978
979
  const containerRef = React3__namespace.useRef(null);
979
- const composedRef = chunkXIQUR62A_cjs.useComposedRefs(ref, containerRef);
980
+ const composedRef = chunkXY3ZNUWR_cjs.useComposedRefs(ref, containerRef);
980
981
  const size = useDebouncedWindowSize({
981
982
  containerRef,
982
983
  defaultWidth,
983
984
  defaultHeight
984
985
  });
985
986
  const [containerPosition, setContainerPosition] = React3__namespace.useState({ offset: 0, width: 0 });
986
- chunkXIQUR62A_cjs.useIsomorphicLayoutEffect(() => {
987
+ chunkN4TYSZSU_cjs.useIsomorphicLayoutEffect(() => {
987
988
  if (!containerRef.current) return;
988
989
  let offset = 0;
989
990
  let container = containerRef.current;
@@ -0,0 +1,278 @@
1
+ 'use strict';
2
+
3
+ var chunkH2BWO3SI_cjs = require('./chunk-H2BWO3SI.cjs');
4
+ var React2 = require('react');
5
+ var radixUi = require('radix-ui');
6
+ var reactDom = require('react-dom');
7
+ var core = require('@dnd-kit/core');
8
+ var sortable = require('@dnd-kit/sortable');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+ var utilities = require('@dnd-kit/utilities');
11
+
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
31
+
32
+ var SORTABLE_ROOT_NAME = "Sortable";
33
+ var SORTABLE_ITEM_NAME = "SortableItem";
34
+ var SORTABLE_ITEM_HANDLE_NAME = "SortableItemHandle";
35
+ var SORTABLE_OVERLAY_NAME = "SortableOverlay";
36
+ var animateLayoutChanges = (args) => sortable.defaultAnimateLayoutChanges({ ...args, wasDragging: true });
37
+ var dropAnimationConfig = {
38
+ sideEffects: core.defaultDropAnimationSideEffects({
39
+ styles: {
40
+ active: {
41
+ opacity: "0.4"
42
+ }
43
+ }
44
+ })
45
+ };
46
+ var SortableItemContext = React2__namespace.createContext(null);
47
+ function useSortableItemContext(consumerName) {
48
+ const context = React2__namespace.useContext(SortableItemContext);
49
+ if (!context) {
50
+ throw new Error(`\`${consumerName}\` must be used within \`${SORTABLE_ITEM_NAME}\``);
51
+ }
52
+ return context;
53
+ }
54
+ var IsOverlayContext = React2__namespace.createContext(false);
55
+ var SortableInternalContext = React2__namespace.createContext(null);
56
+ function useSortableInternalContext(consumerName) {
57
+ const context = React2__namespace.useContext(SortableInternalContext);
58
+ if (!context) {
59
+ throw new Error(`\`${consumerName}\` must be used within \`${SORTABLE_ROOT_NAME}\``);
60
+ }
61
+ return context;
62
+ }
63
+ function Sortable({
64
+ value,
65
+ onValueChange,
66
+ getItemValue,
67
+ className,
68
+ asChild = false,
69
+ onMove,
70
+ strategy = "vertical",
71
+ onDragStart,
72
+ onDragEnd,
73
+ modifiers,
74
+ children,
75
+ ...props
76
+ }) {
77
+ const [activeId, setActiveId] = React2__namespace.useState(null);
78
+ const [mounted, setMounted] = React2__namespace.useState(false);
79
+ React2__namespace.useLayoutEffect(() => setMounted(true), []);
80
+ const sensors = core.useSensors(
81
+ core.useSensor(core.MouseSensor, {
82
+ activationConstraint: {
83
+ distance: 10
84
+ }
85
+ }),
86
+ core.useSensor(core.TouchSensor, {
87
+ activationConstraint: {
88
+ delay: 250,
89
+ tolerance: 5
90
+ }
91
+ }),
92
+ core.useSensor(core.KeyboardSensor, {
93
+ coordinateGetter: sortable.sortableKeyboardCoordinates
94
+ })
95
+ );
96
+ const handleDragStart = React2__namespace.useCallback(
97
+ (event) => {
98
+ setActiveId(event.active.id);
99
+ onDragStart?.(event);
100
+ },
101
+ [onDragStart]
102
+ );
103
+ const handleDragEnd = React2__namespace.useCallback(
104
+ (event) => {
105
+ const { active, over } = event;
106
+ setActiveId(null);
107
+ onDragEnd?.(event);
108
+ if (!over) return;
109
+ const activeIndex = value.findIndex((item) => getItemValue(item) === active.id);
110
+ const overIndex = value.findIndex((item) => getItemValue(item) === over.id);
111
+ if (activeIndex !== overIndex) {
112
+ if (onMove) {
113
+ onMove({ event, activeIndex, overIndex });
114
+ } else {
115
+ const newValue = sortable.arrayMove(value, activeIndex, overIndex);
116
+ onValueChange(newValue);
117
+ }
118
+ }
119
+ },
120
+ [value, getItemValue, onValueChange, onMove, onDragEnd]
121
+ );
122
+ const handleDragCancel = React2__namespace.useCallback(() => {
123
+ setActiveId(null);
124
+ }, []);
125
+ const getStrategy = () => {
126
+ switch (strategy) {
127
+ case "horizontal":
128
+ return sortable.rectSortingStrategy;
129
+ case "grid":
130
+ return sortable.rectSortingStrategy;
131
+ case "vertical":
132
+ default:
133
+ return sortable.verticalListSortingStrategy;
134
+ }
135
+ };
136
+ const itemIds = React2__namespace.useMemo(() => value.map(getItemValue), [value, getItemValue]);
137
+ const contextValue = React2__namespace.useMemo(() => ({ activeId, modifiers }), [activeId, modifiers]);
138
+ const overlayContent = React2__namespace.useMemo(() => {
139
+ if (!activeId) return null;
140
+ let result = null;
141
+ React2__namespace.Children.forEach(children, (child) => {
142
+ if (React2__namespace.isValidElement(child) && child.props.value === activeId) {
143
+ result = React2__namespace.cloneElement(child, {
144
+ ...child.props,
145
+ className: chunkH2BWO3SI_cjs.cn(child.props.className, "z-50")
146
+ });
147
+ }
148
+ });
149
+ return result;
150
+ }, [activeId, children]);
151
+ const Comp = asChild ? radixUi.Slot.Root : "div";
152
+ return /* @__PURE__ */ jsxRuntime.jsx(SortableInternalContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsxs(
153
+ core.DndContext,
154
+ {
155
+ sensors,
156
+ modifiers,
157
+ measuring: {
158
+ droppable: {
159
+ strategy: core.MeasuringStrategy.Always
160
+ }
161
+ },
162
+ onDragStart: handleDragStart,
163
+ onDragEnd: handleDragEnd,
164
+ onDragCancel: handleDragCancel,
165
+ children: [
166
+ /* @__PURE__ */ jsxRuntime.jsx(sortable.SortableContext, { items: itemIds, strategy: getStrategy(), children: /* @__PURE__ */ jsxRuntime.jsx(
167
+ Comp,
168
+ {
169
+ "data-slot": "sortable",
170
+ "data-dragging": activeId !== null,
171
+ className: chunkH2BWO3SI_cjs.cn(activeId !== null && "cursor-grabbing!", className),
172
+ ...props,
173
+ children
174
+ }
175
+ ) }),
176
+ mounted && reactDom.createPortal(
177
+ /* @__PURE__ */ jsxRuntime.jsx(
178
+ core.DragOverlay,
179
+ {
180
+ dropAnimation: dropAnimationConfig,
181
+ modifiers,
182
+ className: chunkH2BWO3SI_cjs.cn("z-50", activeId && "cursor-grabbing"),
183
+ children: /* @__PURE__ */ jsxRuntime.jsx(IsOverlayContext.Provider, { value: true, children: overlayContent })
184
+ }
185
+ ),
186
+ document.body
187
+ )
188
+ ]
189
+ }
190
+ ) });
191
+ }
192
+ function SortableItem({ value, className, asChild = false, disabled, children, ...props }) {
193
+ const isOverlay = React2__namespace.useContext(IsOverlayContext);
194
+ const {
195
+ setNodeRef,
196
+ transform,
197
+ transition,
198
+ attributes,
199
+ listeners,
200
+ isDragging: isSortableDragging
201
+ } = sortable.useSortable({
202
+ id: value,
203
+ disabled: disabled || isOverlay,
204
+ animateLayoutChanges
205
+ });
206
+ if (isOverlay) {
207
+ const Comp2 = asChild ? radixUi.Slot.Root : "div";
208
+ return /* @__PURE__ */ jsxRuntime.jsx(SortableItemContext.Provider, { value: { listeners: void 0, isDragging: true, disabled: false }, children: /* @__PURE__ */ jsxRuntime.jsx(Comp2, { "data-slot": "sortable-item", "data-value": value, "data-dragging": true, className: chunkH2BWO3SI_cjs.cn(className), ...props, children }) });
209
+ }
210
+ const style = {
211
+ transition,
212
+ transform: utilities.CSS.Transform.toString(transform)
213
+ };
214
+ const Comp = asChild ? radixUi.Slot.Root : "div";
215
+ return /* @__PURE__ */ jsxRuntime.jsx(SortableItemContext.Provider, { value: { listeners, isDragging: isSortableDragging, disabled }, children: /* @__PURE__ */ jsxRuntime.jsx(
216
+ Comp,
217
+ {
218
+ "data-slot": "sortable-item",
219
+ "data-value": value,
220
+ "data-dragging": isSortableDragging,
221
+ "data-disabled": disabled,
222
+ ref: setNodeRef,
223
+ style,
224
+ ...attributes,
225
+ className: chunkH2BWO3SI_cjs.cn(isSortableDragging && "z-50 opacity-50", disabled && "opacity-50", className),
226
+ ...props,
227
+ children
228
+ }
229
+ ) });
230
+ }
231
+ function SortableItemHandle({
232
+ className,
233
+ asChild = false,
234
+ cursor = true,
235
+ children,
236
+ ...props
237
+ }) {
238
+ const { listeners, isDragging, disabled } = useSortableItemContext(SORTABLE_ITEM_HANDLE_NAME);
239
+ const Comp = asChild ? radixUi.Slot.Root : "div";
240
+ return /* @__PURE__ */ jsxRuntime.jsx(
241
+ Comp,
242
+ {
243
+ "data-slot": "sortable-item-handle",
244
+ "data-dragging": isDragging,
245
+ "data-disabled": disabled,
246
+ ...listeners,
247
+ className: chunkH2BWO3SI_cjs.cn(cursor && (isDragging ? "cursor-grabbing!" : "cursor-grab!"), className),
248
+ ...props,
249
+ children
250
+ }
251
+ );
252
+ }
253
+ function SortableOverlay({ children, className, ...props }) {
254
+ const { activeId, modifiers } = useSortableInternalContext(SORTABLE_OVERLAY_NAME);
255
+ const [mounted, setMounted] = React2__namespace.useState(false);
256
+ React2__namespace.useLayoutEffect(() => setMounted(true), []);
257
+ const content = activeId && children ? typeof children === "function" ? children({ value: activeId }) : children : null;
258
+ if (!mounted) return null;
259
+ return reactDom.createPortal(
260
+ /* @__PURE__ */ jsxRuntime.jsx(
261
+ core.DragOverlay,
262
+ {
263
+ dropAnimation: dropAnimationConfig,
264
+ modifiers,
265
+ className: chunkH2BWO3SI_cjs.cn("z-50", activeId && "cursor-grabbing", className),
266
+ ...props,
267
+ children: /* @__PURE__ */ jsxRuntime.jsx(IsOverlayContext.Provider, { value: true, children: content })
268
+ }
269
+ ),
270
+ document.body
271
+ );
272
+ }
273
+
274
+ exports.Sortable = Sortable;
275
+ exports.SortableItem = SortableItem;
276
+ exports.SortableItemHandle = SortableItemHandle;
277
+ exports.SortableOverlay = SortableOverlay;
278
+ exports.useSortableItemContext = useSortableItemContext;