@dxos/react-ui-dnd 0.8.3 → 0.8.4-main.1068cf700f

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.
@@ -1,31 +1,12 @@
1
- // packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx
2
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
1
+ // src/components/ResizeHandle.tsx
3
2
  import { draggable } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
4
3
  import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
5
4
  import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/prevent-unhandled";
6
5
  import { useControllableState } from "@radix-ui/react-use-controllable-state";
7
6
  import React, { useLayoutEffect, useRef } from "react";
8
7
  import { useElevationContext } from "@dxos/react-ui";
9
- import { mx, surfaceZIndex } from "@dxos/react-ui-theme";
10
-
11
- // packages/ui/react-ui-dnd/src/util/sizeStyle.ts
12
- var sizeStyle = (size, sideOrOrientation, calcSize) => {
13
- let sizeProperty = "inlineSize";
14
- switch (sideOrOrientation) {
15
- case "vertical":
16
- case "block-start":
17
- case "block-end":
18
- sizeProperty = "blockSize";
19
- }
20
- return {
21
- [sizeProperty]: size === "min-content" ? calcSize ? "var(--dx-calc-min)" : "min-content" : `${size}rem`
22
- };
23
- };
24
-
25
- // packages/ui/react-ui-dnd/src/util/rem.ts
8
+ import { mx, surfaceZIndex } from "@dxos/ui-theme";
26
9
  var REM = parseFloat(getComputedStyle(document.documentElement).fontSize);
27
-
28
- // packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx
29
10
  var measureSubject = (element, fallbackSize) => {
30
11
  const stackItemElement = element.closest("[data-dx-resize-subject]");
31
12
  return stackItemElement?.getBoundingClientRect() ?? {
@@ -39,100 +20,106 @@ var getNextSize = (startSize, location, client, side, minSize, maxSize) => {
39
20
  var RESIZE_SUBJECT = "data-dx-resize-subject";
40
21
  var RESIZE_SUBJECT_DRAGGING = "data-dx-resizing";
41
22
  var resizeAttributes = {
42
- "data-dx-resize-subject": true
23
+ [RESIZE_SUBJECT]: true
43
24
  };
44
- var ResizeHandle = ({ classNames, side, iconPosition = "start", defaultSize, fallbackSize, size: propsSize, minSize, maxSize, onSizeChange }) => {
45
- var _effect = _useSignals();
46
- try {
47
- const buttonRef = useRef(null);
48
- const [size = "min-content", setSize] = useControllableState({
49
- prop: propsSize,
50
- defaultProp: defaultSize,
51
- onChange: onSizeChange
52
- });
53
- const dragStartSize = useRef(size);
54
- const elevation = useElevationContext();
55
- const orientation = side.startsWith("inline") ? "horizontal" : "vertical";
56
- const client = orientation === "horizontal" ? "clientX" : "clientY";
57
- useLayoutEffect(() => {
58
- if (!buttonRef.current) {
59
- return;
60
- }
61
- return draggable({
62
- element: buttonRef.current,
63
- onGenerateDragPreview: ({ nativeSetDragImage }) => {
64
- disableNativeDragPreview({
65
- nativeSetDragImage
66
- });
67
- preventUnhandled.start();
68
- },
69
- onDragStart: () => {
70
- dragStartSize.current = dragStartSize.current === "min-content" ? measureSubject(buttonRef.current, fallbackSize)[orientation === "horizontal" ? "width" : "height"] / REM : dragStartSize.current;
71
- buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, "true");
72
- },
73
- onDrag: ({ location }) => {
74
- if (typeof dragStartSize.current !== "number") {
75
- return;
76
- }
77
- setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));
78
- },
79
- onDrop: ({ location }) => {
80
- if (typeof dragStartSize.current !== "number") {
81
- return;
82
- }
83
- const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);
84
- setSize(nextSize);
85
- onSizeChange?.(nextSize, true);
86
- dragStartSize.current = nextSize;
87
- buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);
25
+ var ResizeHandle = ({ classNames, side, iconPosition = "start", defaultSize, fallbackSize, size: _size, minSize, maxSize, onSizeChange }) => {
26
+ const buttonRef = useRef(null);
27
+ const [size = "min-content", setSize] = useControllableState({
28
+ prop: _size,
29
+ defaultProp: defaultSize,
30
+ onChange: onSizeChange
31
+ });
32
+ const dragStartSize = useRef(size);
33
+ const elevation = useElevationContext();
34
+ const orientation = side.startsWith("inline") ? "horizontal" : "vertical";
35
+ const client = orientation === "horizontal" ? "clientX" : "clientY";
36
+ useLayoutEffect(() => {
37
+ if (!buttonRef.current) {
38
+ return;
39
+ }
40
+ return draggable({
41
+ element: buttonRef.current,
42
+ onGenerateDragPreview: ({ nativeSetDragImage }) => {
43
+ disableNativeDragPreview({
44
+ nativeSetDragImage
45
+ });
46
+ preventUnhandled.start();
47
+ },
48
+ onDragStart: () => {
49
+ dragStartSize.current = dragStartSize.current === "min-content" ? measureSubject(buttonRef.current, fallbackSize)[orientation === "horizontal" ? "width" : "height"] / REM : dragStartSize.current;
50
+ buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, "true");
51
+ },
52
+ // NOTE: Throttling here doesn't prevent the warning:
53
+ // Measure loop restarted more than 5 times
54
+ onDrag: ({ location }) => {
55
+ if (typeof dragStartSize.current !== "number") {
56
+ return;
88
57
  }
89
- });
90
- }, [
91
- // Note that `size` should not be a dependency here since dragging this adjusts the size.
92
- minSize,
93
- maxSize
94
- ]);
95
- return /* @__PURE__ */ React.createElement("button", {
96
- ref: buttonRef,
97
- "data-side": side,
98
- className: mx("group absolute flex focus-visible:outline-none", surfaceZIndex({
99
- elevation,
100
- level: "tooltip"
101
- }), orientation === "horizontal" ? 'cursor-col-resize is-4 inset-block-0 data-[side="inline-end"]:inline-end-0 data-[side="inline-end"]:before:inline-end-0 data-[side="inline-start"]:inline-start-0 data-[side="inline-start"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1' : 'cursor-row-resize bs-4 inset-inline-0 data-[side="block-end"]:block-end-0 data-[side="block-end"]:before:block-end-0 data-[side="block-start"]:block-start-0 data-[side="block-start"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1', orientation === "horizontal" ? iconPosition === "end" ? "align-end" : iconPosition === "center" ? "align-center" : "align-start" : iconPosition === "end" ? "justify-end" : iconPosition === "center" ? "justify-center" : "justify-start", "before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100", "before:absolute before:block before:bg-neutralFocusIndicator", classNames)
102
- }, /* @__PURE__ */ React.createElement("div", {
103
- role: "none",
104
- "data-side": side,
105
- className: mx("grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0", orientation === "horizontal" ? "bs-[--rail-size] is-4" : "is-[--rail-size] bs-4")
106
- }, /* @__PURE__ */ React.createElement(DragHandleSignifier, {
107
- side
108
- })));
109
- } finally {
110
- _effect.f();
111
- }
58
+ setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));
59
+ },
60
+ onDrop: ({ location }) => {
61
+ if (typeof dragStartSize.current !== "number") {
62
+ return;
63
+ }
64
+ const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);
65
+ setSize(nextSize);
66
+ onSizeChange?.(nextSize, true);
67
+ dragStartSize.current = nextSize;
68
+ buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);
69
+ }
70
+ });
71
+ }, [
72
+ // Note that `size` should not be a dependency here since dragging this adjusts the size.
73
+ minSize,
74
+ maxSize
75
+ ]);
76
+ return /* @__PURE__ */ React.createElement("button", {
77
+ ref: buttonRef,
78
+ "data-side": side,
79
+ className: mx("group absolute flex focus-visible:outline-none", surfaceZIndex({
80
+ elevation,
81
+ level: "tooltip"
82
+ }), orientation === "horizontal" ? 'cursor-col-resize is-4 inset-block-0 data-[side="inline-end"]:inline-end-0 data-[side="inline-end"]:before:inline-end-0 data-[side="inline-start"]:inline-start-0 data-[side="inline-start"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1' : 'cursor-row-resize bs-4 inset-inline-0 data-[side="block-end"]:block-end-0 data-[side="block-end"]:before:block-end-0 data-[side="block-start"]:block-start-0 data-[side="block-start"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1', orientation === "horizontal" ? iconPosition === "end" ? "align-end" : iconPosition === "center" ? "align-center" : "align-start" : iconPosition === "end" ? "justify-end" : iconPosition === "center" ? "justify-center" : "justify-start", "before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100", "before:absolute before:block before:bg-neutralFocusIndicator", classNames)
83
+ }, /* @__PURE__ */ React.createElement("div", {
84
+ role: "none",
85
+ "data-side": side,
86
+ className: mx("grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0", orientation === "horizontal" ? "bs-[--rail-size] is-4" : "is-[--rail-size] bs-4")
87
+ }, /* @__PURE__ */ React.createElement(DragHandleSignifier, {
88
+ side
89
+ })));
112
90
  };
113
91
  var DragHandleSignifier = ({ side }) => {
114
- var _effect = _useSignals();
115
- try {
116
- return /* @__PURE__ */ React.createElement("svg", {
117
- xmlns: "http://www.w3.org/2000/svg",
118
- viewBox: "0 0 256 256",
119
- fill: "currentColor",
120
- className: mx("shrink-0 bs-4 is-4 text-unAccent", side === "block-end" ? "rotate-90" : side === "block-start" ? "-rotate-90" : side === "inline-start" && "rotate-180")
121
- }, /* @__PURE__ */ React.createElement("path", {
122
- d: "M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
123
- }), /* @__PURE__ */ React.createElement("path", {
124
- d: "M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
125
- }), /* @__PURE__ */ React.createElement("path", {
126
- d: "M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
127
- }), /* @__PURE__ */ React.createElement("path", {
128
- d: "M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
129
- }));
130
- } finally {
131
- _effect.f();
92
+ return /* @__PURE__ */ React.createElement("svg", {
93
+ xmlns: "http://www.w3.org/2000/svg",
94
+ viewBox: "0 0 256 256",
95
+ fill: "currentColor",
96
+ className: mx("shrink-0 bs-4 is-4 text-unAccent", side === "block-end" ? "rotate-90" : side === "block-start" ? "-rotate-90" : side === "inline-start" && "rotate-180")
97
+ }, /* @__PURE__ */ React.createElement("path", {
98
+ d: "M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
99
+ }), /* @__PURE__ */ React.createElement("path", {
100
+ d: "M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
101
+ }), /* @__PURE__ */ React.createElement("path", {
102
+ d: "M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
103
+ }), /* @__PURE__ */ React.createElement("path", {
104
+ d: "M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
105
+ }));
106
+ };
107
+
108
+ // src/util/sizeStyle.ts
109
+ var sizeStyle = (size, sideOrOrientation, calcSize) => {
110
+ let sizeProperty = "inlineSize";
111
+ switch (sideOrOrientation) {
112
+ case "vertical":
113
+ case "block-start":
114
+ case "block-end":
115
+ sizeProperty = "blockSize";
116
+ break;
132
117
  }
118
+ return {
119
+ [sizeProperty]: size === "min-content" ? calcSize ? "var(--dx-calc-min)" : "min-content" : `${size}rem`
120
+ };
133
121
  };
134
122
  export {
135
- REM,
136
123
  ResizeHandle,
137
124
  resizeAttributes,
138
125
  sizeStyle
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/components/ResizeHandle.tsx", "../../../src/util/sizeStyle.ts", "../../../src/util/rem.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';\nimport { type DragLocationHistory } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { useLayoutEffect, useRef } from 'react';\n\nimport { type ThemedClassName, useElevationContext } from '@dxos/react-ui';\nimport { mx, surfaceZIndex } from '@dxos/react-ui-theme';\n\nimport { type Size, type Side } from '../types';\nimport { REM } from '../util';\n\nconst measureSubject = (element: HTMLButtonElement, fallbackSize: number): { width: number; height: number } => {\n const stackItemElement = element.closest('[data-dx-resize-subject]');\n return stackItemElement?.getBoundingClientRect() ?? { width: fallbackSize, height: fallbackSize };\n};\n\nconst getNextSize = (\n startSize: number,\n location: DragLocationHistory,\n client: 'clientX' | 'clientY',\n side: Side,\n minSize: number,\n maxSize: number | undefined,\n) => {\n return Math.min(\n maxSize ?? Infinity,\n Math.max(\n minSize,\n startSize +\n ((location.current.input[client] - location.initial.input[client]) / REM) * (side.endsWith('end') ? 1 : -1),\n ),\n );\n};\n\nconst RESIZE_SUBJECT = 'data-dx-resize-subject';\nconst RESIZE_SUBJECT_DRAGGING = 'data-dx-resizing';\n\nexport const resizeAttributes = {\n 'data-dx-resize-subject': true,\n};\n\nexport type ResizeHandleProps = ThemedClassName<{\n side: Side;\n defaultSize?: Size;\n fallbackSize: number;\n size?: Size;\n minSize: number;\n maxSize?: number;\n unit?: 'rem';\n iconPosition?: 'start' | 'center' | 'end';\n onSizeChange?: (nextSize: Size, commit?: boolean) => void;\n}>;\n\nexport const ResizeHandle = ({\n classNames,\n side,\n iconPosition = 'start',\n defaultSize,\n fallbackSize,\n size: propsSize,\n minSize,\n maxSize,\n onSizeChange,\n}: ResizeHandleProps) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [size = 'min-content', setSize] = useControllableState({\n prop: propsSize,\n defaultProp: defaultSize,\n onChange: onSizeChange,\n });\n const dragStartSize = useRef<Size>(size);\n const elevation = useElevationContext();\n\n const orientation = side.startsWith('inline') ? 'horizontal' : 'vertical';\n const client = orientation === 'horizontal' ? 'clientX' : 'clientY';\n\n useLayoutEffect(() => {\n if (!buttonRef.current) {\n return;\n }\n\n // TODO(thure): This should handle StackItem state vs local state better.\n return draggable({\n element: buttonRef.current,\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\n // We will be moving the line to indicate a drag; we can disable the native drag preview.\n disableNativeDragPreview({ nativeSetDragImage });\n // We don't want any native drop animation for when the user does not drop on a drop target.\n // We want the drag to finish immediately.\n preventUnhandled.start();\n },\n onDragStart: () => {\n dragStartSize.current =\n dragStartSize.current === 'min-content'\n ? measureSubject(buttonRef.current!, fallbackSize)[orientation === 'horizontal' ? 'width' : 'height'] / REM\n : dragStartSize.current;\n buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, 'true');\n },\n onDrag: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));\n },\n onDrop: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);\n setSize(nextSize);\n onSizeChange?.(nextSize, true);\n dragStartSize.current = nextSize;\n buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);\n },\n });\n }, [\n // Note that `size` should not be a dependency here since dragging this adjusts the size.\n minSize,\n maxSize,\n ]);\n\n return (\n <button\n ref={buttonRef}\n data-side={side}\n className={mx(\n 'group absolute flex focus-visible:outline-none',\n surfaceZIndex({ elevation, level: 'tooltip' }),\n orientation === 'horizontal'\n ? 'cursor-col-resize is-4 inset-block-0 data-[side=\"inline-end\"]:inline-end-0 data-[side=\"inline-end\"]:before:inline-end-0 data-[side=\"inline-start\"]:inline-start-0 data-[side=\"inline-start\"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1'\n : 'cursor-row-resize bs-4 inset-inline-0 data-[side=\"block-end\"]:block-end-0 data-[side=\"block-end\"]:before:block-end-0 data-[side=\"block-start\"]:block-start-0 data-[side=\"block-start\"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1',\n orientation === 'horizontal'\n ? iconPosition === 'end'\n ? 'align-end'\n : iconPosition === 'center'\n ? 'align-center'\n : 'align-start'\n : iconPosition === 'end'\n ? 'justify-end'\n : iconPosition === 'center'\n ? 'justify-center'\n : 'justify-start',\n 'before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100',\n 'before:absolute before:block before:bg-neutralFocusIndicator',\n classNames,\n )}\n >\n <div\n role='none'\n data-side={side}\n className={mx(\n 'grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0',\n orientation === 'horizontal' ? 'bs-[--rail-size] is-4' : 'is-[--rail-size] bs-4',\n )}\n >\n <DragHandleSignifier side={side} />\n </div>\n </button>\n );\n};\n\nconst DragHandleSignifier = ({ side }: Pick<ResizeHandleProps, 'side'>) => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 256 256'\n fill='currentColor'\n className={mx(\n 'shrink-0 bs-4 is-4 text-unAccent',\n side === 'block-end'\n ? 'rotate-90'\n : side === 'block-start'\n ? '-rotate-90'\n : side === 'inline-start' && 'rotate-180',\n )}\n >\n {/* two pips: <path d='M256,120c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' /> */}\n <path d='M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n </svg>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ResizeHandleProps } from '../components';\nimport { type Size } from '../types';\n\nexport const sizeStyle = (\n size: Size,\n sideOrOrientation: ResizeHandleProps['side'] | 'horizontal' | 'vertical',\n // TODO(thure): This is an experimental feature under evaluation; remove if the default should become `true`.\n calcSize?: boolean,\n) => {\n let sizeProperty = 'inlineSize';\n switch (sideOrOrientation) {\n case 'vertical':\n case 'block-start':\n case 'block-end':\n sizeProperty = 'blockSize';\n }\n return { [sizeProperty]: size === 'min-content' ? (calcSize ? 'var(--dx-calc-min)' : 'min-content') : `${size}rem` };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const REM = parseFloat(getComputedStyle(document.documentElement).fontSize);\n"],
5
- "mappings": "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",
6
- "names": ["draggable", "disableNativeDragPreview", "preventUnhandled", "useControllableState", "React", "useLayoutEffect", "useRef", "useElevationContext", "mx", "surfaceZIndex", "sizeStyle", "size", "sideOrOrientation", "calcSize", "sizeProperty", "REM", "parseFloat", "getComputedStyle", "document", "documentElement", "fontSize", "measureSubject", "element", "fallbackSize", "stackItemElement", "closest", "getBoundingClientRect", "width", "height", "getNextSize", "startSize", "location", "client", "side", "minSize", "maxSize", "Math", "min", "Infinity", "max", "current", "input", "initial", "REM", "endsWith", "RESIZE_SUBJECT", "RESIZE_SUBJECT_DRAGGING", "resizeAttributes", "ResizeHandle", "classNames", "iconPosition", "defaultSize", "size", "propsSize", "onSizeChange", "buttonRef", "useRef", "setSize", "useControllableState", "prop", "defaultProp", "onChange", "dragStartSize", "elevation", "useElevationContext", "orientation", "startsWith", "useLayoutEffect", "draggable", "onGenerateDragPreview", "nativeSetDragImage", "disableNativeDragPreview", "preventUnhandled", "start", "onDragStart", "setAttribute", "onDrag", "onDrop", "nextSize", "removeAttribute", "button", "ref", "data-side", "className", "mx", "surfaceZIndex", "level", "div", "role", "DragHandleSignifier", "svg", "xmlns", "viewBox", "fill", "path", "d"]
3
+ "sources": ["../../../src/components/ResizeHandle.tsx", "../../../src/util/sizeStyle.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';\nimport { type DragLocationHistory } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { useLayoutEffect, useRef } from 'react';\n\nimport { type ThemedClassName, useElevationContext } from '@dxos/react-ui';\nimport { mx, surfaceZIndex } from '@dxos/ui-theme';\n\nimport { type Side, type Size } from '../types';\n\nconst REM = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\nconst measureSubject = (element: HTMLButtonElement, fallbackSize: number): { width: number; height: number } => {\n const stackItemElement = element.closest('[data-dx-resize-subject]');\n return stackItemElement?.getBoundingClientRect() ?? { width: fallbackSize, height: fallbackSize };\n};\n\nconst getNextSize = (\n startSize: number,\n location: DragLocationHistory,\n client: 'clientX' | 'clientY',\n side: Side,\n minSize: number,\n maxSize: number | undefined,\n) => {\n return Math.min(\n maxSize ?? Infinity,\n Math.max(\n minSize,\n startSize +\n ((location.current.input[client] - location.initial.input[client]) / REM) * (side.endsWith('end') ? 1 : -1),\n ),\n );\n};\n\nconst RESIZE_SUBJECT = 'data-dx-resize-subject';\nconst RESIZE_SUBJECT_DRAGGING = 'data-dx-resizing';\n\nexport const resizeAttributes = {\n [RESIZE_SUBJECT]: true,\n};\n\nexport type ResizeHandleProps = ThemedClassName<{\n side: Side;\n iconPosition?: 'start' | 'center' | 'end';\n defaultSize?: Size;\n fallbackSize: number;\n size?: Size;\n minSize: number;\n maxSize?: number;\n unit?: 'rem';\n onSizeChange?: (nextSize: Size, commit?: boolean) => void;\n}>;\n\nexport const ResizeHandle = ({\n classNames,\n side,\n iconPosition = 'start',\n defaultSize,\n fallbackSize,\n size: _size,\n minSize,\n maxSize,\n onSizeChange,\n}: ResizeHandleProps) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [size = 'min-content', setSize] = useControllableState({\n prop: _size,\n defaultProp: defaultSize,\n onChange: onSizeChange,\n });\n const dragStartSize = useRef<Size>(size);\n const elevation = useElevationContext();\n\n const orientation = side.startsWith('inline') ? 'horizontal' : 'vertical';\n const client = orientation === 'horizontal' ? 'clientX' : 'clientY';\n\n useLayoutEffect(() => {\n if (!buttonRef.current) {\n return;\n }\n\n // TODO(thure): This should handle StackItem state vs local state better.\n return draggable({\n element: buttonRef.current,\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\n // We will be moving the line to indicate a drag; we can disable the native drag preview.\n disableNativeDragPreview({ nativeSetDragImage });\n // We don't want any native drop animation for when the user does not drop on a drop target.\n // We want the drag to finish immediately.\n preventUnhandled.start();\n },\n onDragStart: () => {\n dragStartSize.current =\n dragStartSize.current === 'min-content'\n ? measureSubject(buttonRef.current!, fallbackSize)[orientation === 'horizontal' ? 'width' : 'height'] / REM\n : dragStartSize.current;\n buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, 'true');\n },\n // NOTE: Throttling here doesn't prevent the warning:\n // Measure loop restarted more than 5 times\n onDrag: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));\n },\n onDrop: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);\n setSize(nextSize);\n onSizeChange?.(nextSize, true);\n dragStartSize.current = nextSize;\n buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);\n },\n });\n }, [\n // Note that `size` should not be a dependency here since dragging this adjusts the size.\n minSize,\n maxSize,\n ]);\n\n return (\n <button\n ref={buttonRef}\n data-side={side}\n className={mx(\n 'group absolute flex focus-visible:outline-none',\n surfaceZIndex({ elevation, level: 'tooltip' }),\n orientation === 'horizontal'\n ? 'cursor-col-resize is-4 inset-block-0 data-[side=\"inline-end\"]:inline-end-0 data-[side=\"inline-end\"]:before:inline-end-0 data-[side=\"inline-start\"]:inline-start-0 data-[side=\"inline-start\"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1'\n : 'cursor-row-resize bs-4 inset-inline-0 data-[side=\"block-end\"]:block-end-0 data-[side=\"block-end\"]:before:block-end-0 data-[side=\"block-start\"]:block-start-0 data-[side=\"block-start\"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1',\n orientation === 'horizontal'\n ? iconPosition === 'end'\n ? 'align-end'\n : iconPosition === 'center'\n ? 'align-center'\n : 'align-start'\n : iconPosition === 'end'\n ? 'justify-end'\n : iconPosition === 'center'\n ? 'justify-center'\n : 'justify-start',\n 'before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100',\n 'before:absolute before:block before:bg-neutralFocusIndicator',\n classNames,\n )}\n >\n <div\n role='none'\n data-side={side}\n className={mx(\n 'grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0',\n orientation === 'horizontal' ? 'bs-[--rail-size] is-4' : 'is-[--rail-size] bs-4',\n )}\n >\n <DragHandleSignifier side={side} />\n </div>\n </button>\n );\n};\n\nconst DragHandleSignifier = ({ side }: Pick<ResizeHandleProps, 'side'>) => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 256 256'\n fill='currentColor'\n className={mx(\n 'shrink-0 bs-4 is-4 text-unAccent',\n side === 'block-end'\n ? 'rotate-90'\n : side === 'block-start'\n ? '-rotate-90'\n : side === 'inline-start' && 'rotate-180',\n )}\n >\n {/* two pips: <path d='M256,120c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' /> */}\n <path d='M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n </svg>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ResizeHandleProps } from '../components';\nimport { type Size } from '../types';\n\nexport const sizeStyle = (\n size: Size,\n sideOrOrientation: ResizeHandleProps['side'] | 'horizontal' | 'vertical',\n // TODO(thure): This is an experimental feature under evaluation; remove if the default should become `true`.\n calcSize?: boolean,\n) => {\n let sizeProperty = 'inlineSize';\n switch (sideOrOrientation) {\n case 'vertical':\n case 'block-start':\n case 'block-end':\n sizeProperty = 'blockSize';\n break;\n }\n\n return {\n [sizeProperty]: size === 'min-content' ? (calcSize ? 'var(--dx-calc-min)' : 'min-content') : `${size}rem`,\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["draggable", "disableNativeDragPreview", "preventUnhandled", "useControllableState", "React", "useLayoutEffect", "useRef", "useElevationContext", "mx", "surfaceZIndex", "REM", "parseFloat", "getComputedStyle", "document", "documentElement", "fontSize", "measureSubject", "element", "fallbackSize", "stackItemElement", "closest", "getBoundingClientRect", "width", "height", "getNextSize", "startSize", "location", "client", "side", "minSize", "maxSize", "Math", "min", "Infinity", "max", "current", "input", "initial", "endsWith", "RESIZE_SUBJECT", "RESIZE_SUBJECT_DRAGGING", "resizeAttributes", "ResizeHandle", "classNames", "iconPosition", "defaultSize", "size", "_size", "onSizeChange", "buttonRef", "useRef", "setSize", "useControllableState", "prop", "defaultProp", "onChange", "dragStartSize", "elevation", "useElevationContext", "orientation", "startsWith", "useLayoutEffect", "draggable", "onGenerateDragPreview", "nativeSetDragImage", "disableNativeDragPreview", "preventUnhandled", "start", "onDragStart", "setAttribute", "onDrag", "onDrop", "nextSize", "removeAttribute", "button", "ref", "data-side", "className", "mx", "surfaceZIndex", "level", "div", "role", "DragHandleSignifier", "svg", "xmlns", "viewBox", "fill", "path", "d", "sizeStyle", "size", "sideOrOrientation", "calcSize", "sizeProperty"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/react-ui-dnd/src/util/sizeStyle.ts":{"bytes":2175,"imports":[],"format":"esm"},"packages/ui/react-ui-dnd/src/util/rem.ts":{"bytes":763,"imports":[],"format":"esm"},"packages/ui/react-ui-dnd/src/util/index.ts":{"bytes":549,"imports":[{"path":"packages/ui/react-ui-dnd/src/util/sizeStyle.ts","kind":"import-statement","original":"./sizeStyle"},{"path":"packages/ui/react-ui-dnd/src/util/rem.ts","kind":"import-statement","original":"./rem"}],"format":"esm"},"packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx":{"bytes":22003,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-dnd/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-dnd/src/components/index.ts":{"bytes":487,"imports":[{"path":"packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx","kind":"import-statement","original":"./ResizeHandle"}],"format":"esm"},"packages/ui/react-ui-dnd/src/types.ts":{"bytes":572,"imports":[],"format":"esm"},"packages/ui/react-ui-dnd/src/index.ts":{"bytes":631,"imports":[{"path":"packages/ui/react-ui-dnd/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-dnd/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/react-ui-dnd/src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-dnd/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12481},"packages/ui/react-ui-dnd/dist/lib/browser/index.mjs":{"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["REM","ResizeHandle","resizeAttributes","sizeStyle"],"entryPoint":"packages/ui/react-ui-dnd/src/index.ts","inputs":{"packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx":{"bytesInOutput":6015},"packages/ui/react-ui-dnd/src/util/sizeStyle.ts":{"bytesInOutput":355},"packages/ui/react-ui-dnd/src/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-dnd/src/util/rem.ts":{"bytesInOutput":75},"packages/ui/react-ui-dnd/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-dnd/src/index.ts":{"bytesInOutput":0}},"bytes":6764}}}
1
+ {"inputs":{"src/components/ResizeHandle.tsx":{"bytes":21898,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/index.ts":{"bytes":474,"imports":[{"path":"src/components/ResizeHandle.tsx","kind":"import-statement","original":"./ResizeHandle"}],"format":"esm"},"src/util/sizeStyle.ts":{"bytes":2217,"imports":[],"format":"esm"},"src/util/index.ts":{"bytes":461,"imports":[{"path":"src/util/sizeStyle.ts","kind":"import-statement","original":"./sizeStyle"}],"format":"esm"},"src/index.ts":{"bytes":577,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12481},"dist/lib/browser/index.mjs":{"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["ResizeHandle","resizeAttributes","sizeStyle"],"entryPoint":"src/index.ts","inputs":{"src/components/ResizeHandle.tsx":{"bytesInOutput":5798},"src/index.ts":{"bytesInOutput":0},"src/util/sizeStyle.ts":{"bytesInOutput":368}},"bytes":6322}}}
@@ -1,33 +1,14 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx
4
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
3
+ // src/components/ResizeHandle.tsx
5
4
  import { draggable } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
6
5
  import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
7
6
  import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/prevent-unhandled";
8
7
  import { useControllableState } from "@radix-ui/react-use-controllable-state";
9
8
  import React, { useLayoutEffect, useRef } from "react";
10
9
  import { useElevationContext } from "@dxos/react-ui";
11
- import { mx, surfaceZIndex } from "@dxos/react-ui-theme";
12
-
13
- // packages/ui/react-ui-dnd/src/util/sizeStyle.ts
14
- var sizeStyle = (size, sideOrOrientation, calcSize) => {
15
- let sizeProperty = "inlineSize";
16
- switch (sideOrOrientation) {
17
- case "vertical":
18
- case "block-start":
19
- case "block-end":
20
- sizeProperty = "blockSize";
21
- }
22
- return {
23
- [sizeProperty]: size === "min-content" ? calcSize ? "var(--dx-calc-min)" : "min-content" : `${size}rem`
24
- };
25
- };
26
-
27
- // packages/ui/react-ui-dnd/src/util/rem.ts
10
+ import { mx, surfaceZIndex } from "@dxos/ui-theme";
28
11
  var REM = parseFloat(getComputedStyle(document.documentElement).fontSize);
29
-
30
- // packages/ui/react-ui-dnd/src/components/ResizeHandle.tsx
31
12
  var measureSubject = (element, fallbackSize) => {
32
13
  const stackItemElement = element.closest("[data-dx-resize-subject]");
33
14
  return stackItemElement?.getBoundingClientRect() ?? {
@@ -41,100 +22,106 @@ var getNextSize = (startSize, location, client, side, minSize, maxSize) => {
41
22
  var RESIZE_SUBJECT = "data-dx-resize-subject";
42
23
  var RESIZE_SUBJECT_DRAGGING = "data-dx-resizing";
43
24
  var resizeAttributes = {
44
- "data-dx-resize-subject": true
25
+ [RESIZE_SUBJECT]: true
45
26
  };
46
- var ResizeHandle = ({ classNames, side, iconPosition = "start", defaultSize, fallbackSize, size: propsSize, minSize, maxSize, onSizeChange }) => {
47
- var _effect = _useSignals();
48
- try {
49
- const buttonRef = useRef(null);
50
- const [size = "min-content", setSize] = useControllableState({
51
- prop: propsSize,
52
- defaultProp: defaultSize,
53
- onChange: onSizeChange
54
- });
55
- const dragStartSize = useRef(size);
56
- const elevation = useElevationContext();
57
- const orientation = side.startsWith("inline") ? "horizontal" : "vertical";
58
- const client = orientation === "horizontal" ? "clientX" : "clientY";
59
- useLayoutEffect(() => {
60
- if (!buttonRef.current) {
61
- return;
62
- }
63
- return draggable({
64
- element: buttonRef.current,
65
- onGenerateDragPreview: ({ nativeSetDragImage }) => {
66
- disableNativeDragPreview({
67
- nativeSetDragImage
68
- });
69
- preventUnhandled.start();
70
- },
71
- onDragStart: () => {
72
- dragStartSize.current = dragStartSize.current === "min-content" ? measureSubject(buttonRef.current, fallbackSize)[orientation === "horizontal" ? "width" : "height"] / REM : dragStartSize.current;
73
- buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, "true");
74
- },
75
- onDrag: ({ location }) => {
76
- if (typeof dragStartSize.current !== "number") {
77
- return;
78
- }
79
- setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));
80
- },
81
- onDrop: ({ location }) => {
82
- if (typeof dragStartSize.current !== "number") {
83
- return;
84
- }
85
- const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);
86
- setSize(nextSize);
87
- onSizeChange?.(nextSize, true);
88
- dragStartSize.current = nextSize;
89
- buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);
27
+ var ResizeHandle = ({ classNames, side, iconPosition = "start", defaultSize, fallbackSize, size: _size, minSize, maxSize, onSizeChange }) => {
28
+ const buttonRef = useRef(null);
29
+ const [size = "min-content", setSize] = useControllableState({
30
+ prop: _size,
31
+ defaultProp: defaultSize,
32
+ onChange: onSizeChange
33
+ });
34
+ const dragStartSize = useRef(size);
35
+ const elevation = useElevationContext();
36
+ const orientation = side.startsWith("inline") ? "horizontal" : "vertical";
37
+ const client = orientation === "horizontal" ? "clientX" : "clientY";
38
+ useLayoutEffect(() => {
39
+ if (!buttonRef.current) {
40
+ return;
41
+ }
42
+ return draggable({
43
+ element: buttonRef.current,
44
+ onGenerateDragPreview: ({ nativeSetDragImage }) => {
45
+ disableNativeDragPreview({
46
+ nativeSetDragImage
47
+ });
48
+ preventUnhandled.start();
49
+ },
50
+ onDragStart: () => {
51
+ dragStartSize.current = dragStartSize.current === "min-content" ? measureSubject(buttonRef.current, fallbackSize)[orientation === "horizontal" ? "width" : "height"] / REM : dragStartSize.current;
52
+ buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.setAttribute(RESIZE_SUBJECT_DRAGGING, "true");
53
+ },
54
+ // NOTE: Throttling here doesn't prevent the warning:
55
+ // Measure loop restarted more than 5 times
56
+ onDrag: ({ location }) => {
57
+ if (typeof dragStartSize.current !== "number") {
58
+ return;
90
59
  }
91
- });
92
- }, [
93
- // Note that `size` should not be a dependency here since dragging this adjusts the size.
94
- minSize,
95
- maxSize
96
- ]);
97
- return /* @__PURE__ */ React.createElement("button", {
98
- ref: buttonRef,
99
- "data-side": side,
100
- className: mx("group absolute flex focus-visible:outline-none", surfaceZIndex({
101
- elevation,
102
- level: "tooltip"
103
- }), orientation === "horizontal" ? 'cursor-col-resize is-4 inset-block-0 data-[side="inline-end"]:inline-end-0 data-[side="inline-end"]:before:inline-end-0 data-[side="inline-start"]:inline-start-0 data-[side="inline-start"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1' : 'cursor-row-resize bs-4 inset-inline-0 data-[side="block-end"]:block-end-0 data-[side="block-end"]:before:block-end-0 data-[side="block-start"]:block-start-0 data-[side="block-start"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1', orientation === "horizontal" ? iconPosition === "end" ? "align-end" : iconPosition === "center" ? "align-center" : "align-start" : iconPosition === "end" ? "justify-end" : iconPosition === "center" ? "justify-center" : "justify-start", "before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100", "before:absolute before:block before:bg-neutralFocusIndicator", classNames)
104
- }, /* @__PURE__ */ React.createElement("div", {
105
- role: "none",
106
- "data-side": side,
107
- className: mx("grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0", orientation === "horizontal" ? "bs-[--rail-size] is-4" : "is-[--rail-size] bs-4")
108
- }, /* @__PURE__ */ React.createElement(DragHandleSignifier, {
109
- side
110
- })));
111
- } finally {
112
- _effect.f();
113
- }
60
+ setSize(getNextSize(dragStartSize.current, location, client, side, minSize, maxSize));
61
+ },
62
+ onDrop: ({ location }) => {
63
+ if (typeof dragStartSize.current !== "number") {
64
+ return;
65
+ }
66
+ const nextSize = getNextSize(dragStartSize.current, location, client, side, minSize, maxSize);
67
+ setSize(nextSize);
68
+ onSizeChange?.(nextSize, true);
69
+ dragStartSize.current = nextSize;
70
+ buttonRef.current?.closest(`[${RESIZE_SUBJECT}]`)?.removeAttribute(RESIZE_SUBJECT_DRAGGING);
71
+ }
72
+ });
73
+ }, [
74
+ // Note that `size` should not be a dependency here since dragging this adjusts the size.
75
+ minSize,
76
+ maxSize
77
+ ]);
78
+ return /* @__PURE__ */ React.createElement("button", {
79
+ ref: buttonRef,
80
+ "data-side": side,
81
+ className: mx("group absolute flex focus-visible:outline-none", surfaceZIndex({
82
+ elevation,
83
+ level: "tooltip"
84
+ }), orientation === "horizontal" ? 'cursor-col-resize is-4 inset-block-0 data-[side="inline-end"]:inline-end-0 data-[side="inline-end"]:before:inline-end-0 data-[side="inline-start"]:inline-start-0 data-[side="inline-start"]:before:inline-start-0 !border-lb-0 before:inset-block-0 before:is-1' : 'cursor-row-resize bs-4 inset-inline-0 data-[side="block-end"]:block-end-0 data-[side="block-end"]:before:block-end-0 data-[side="block-start"]:block-start-0 data-[side="block-start"]:before:block-start-0 !border-li-0 before:inset-inline-0 before:bs-1', orientation === "horizontal" ? iconPosition === "end" ? "align-end" : iconPosition === "center" ? "align-center" : "align-start" : iconPosition === "end" ? "justify-end" : iconPosition === "center" ? "justify-center" : "justify-start", "before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100", "before:absolute before:block before:bg-neutralFocusIndicator", classNames)
85
+ }, /* @__PURE__ */ React.createElement("div", {
86
+ role: "none",
87
+ "data-side": side,
88
+ className: mx("grid place-items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0", orientation === "horizontal" ? "bs-[--rail-size] is-4" : "is-[--rail-size] bs-4")
89
+ }, /* @__PURE__ */ React.createElement(DragHandleSignifier, {
90
+ side
91
+ })));
114
92
  };
115
93
  var DragHandleSignifier = ({ side }) => {
116
- var _effect = _useSignals();
117
- try {
118
- return /* @__PURE__ */ React.createElement("svg", {
119
- xmlns: "http://www.w3.org/2000/svg",
120
- viewBox: "0 0 256 256",
121
- fill: "currentColor",
122
- className: mx("shrink-0 bs-4 is-4 text-unAccent", side === "block-end" ? "rotate-90" : side === "block-start" ? "-rotate-90" : side === "inline-start" && "rotate-180")
123
- }, /* @__PURE__ */ React.createElement("path", {
124
- d: "M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
125
- }), /* @__PURE__ */ React.createElement("path", {
126
- d: "M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
127
- }), /* @__PURE__ */ React.createElement("path", {
128
- d: "M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
129
- }), /* @__PURE__ */ React.createElement("path", {
130
- d: "M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
131
- }));
132
- } finally {
133
- _effect.f();
94
+ return /* @__PURE__ */ React.createElement("svg", {
95
+ xmlns: "http://www.w3.org/2000/svg",
96
+ viewBox: "0 0 256 256",
97
+ fill: "currentColor",
98
+ className: mx("shrink-0 bs-4 is-4 text-unAccent", side === "block-end" ? "rotate-90" : side === "block-start" ? "-rotate-90" : side === "inline-start" && "rotate-180")
99
+ }, /* @__PURE__ */ React.createElement("path", {
100
+ d: "M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
101
+ }), /* @__PURE__ */ React.createElement("path", {
102
+ d: "M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
103
+ }), /* @__PURE__ */ React.createElement("path", {
104
+ d: "M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
105
+ }), /* @__PURE__ */ React.createElement("path", {
106
+ d: "M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z"
107
+ }));
108
+ };
109
+
110
+ // src/util/sizeStyle.ts
111
+ var sizeStyle = (size, sideOrOrientation, calcSize) => {
112
+ let sizeProperty = "inlineSize";
113
+ switch (sideOrOrientation) {
114
+ case "vertical":
115
+ case "block-start":
116
+ case "block-end":
117
+ sizeProperty = "blockSize";
118
+ break;
134
119
  }
120
+ return {
121
+ [sizeProperty]: size === "min-content" ? calcSize ? "var(--dx-calc-min)" : "min-content" : `${size}rem`
122
+ };
135
123
  };
136
124
  export {
137
- REM,
138
125
  ResizeHandle,
139
126
  resizeAttributes,
140
127
  sizeStyle