@lobehub/ui 5.40.3 → 5.41.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.
- package/es/base-ui/DraggablePanel/DraggablePanel.d.mts +6 -0
- package/es/base-ui/DraggablePanel/DraggablePanel.mjs +68 -0
- package/es/base-ui/DraggablePanel/DraggablePanel.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/atoms.d.mts +47 -0
- package/es/base-ui/DraggablePanel/atoms.mjs +333 -0
- package/es/base-ui/DraggablePanel/atoms.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/context.d.mts +17 -0
- package/es/base-ui/DraggablePanel/context.mjs +13 -0
- package/es/base-ui/DraggablePanel/context.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/axes.d.mts +16 -0
- package/es/base-ui/DraggablePanel/core/axes.mjs +51 -0
- package/es/base-ui/DraggablePanel/core/axes.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/controller.d.mts +56 -0
- package/es/base-ui/DraggablePanel/core/controller.mjs +206 -0
- package/es/base-ui/DraggablePanel/core/controller.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/dom.mjs +34 -0
- package/es/base-ui/DraggablePanel/core/dom.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/env.mjs +28 -0
- package/es/base-ui/DraggablePanel/core/env.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/internal.mjs +9 -0
- package/es/base-ui/DraggablePanel/core/internal.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/transition.mjs +17 -0
- package/es/base-ui/DraggablePanel/core/transition.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/core/utils.mjs +20 -0
- package/es/base-ui/DraggablePanel/core/utils.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/index.d.mts +5 -0
- package/es/base-ui/DraggablePanel/style.mjs +356 -0
- package/es/base-ui/DraggablePanel/style.mjs.map +1 -0
- package/es/base-ui/DraggablePanel/type.d.mts +53 -0
- package/es/base-ui/Input/style.d.mts +1 -1
- package/es/base-ui/index.d.mts +6 -1
- package/es/base-ui/index.mjs +4 -1
- package/package.json +1 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DraggablePanelProps } from "./type.mjs";
|
|
2
|
+
//#region src/base-ui/DraggablePanel/DraggablePanel.d.ts
|
|
3
|
+
declare const DraggablePanel: import("react").NamedExoticComponent<DraggablePanelProps>;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { DraggablePanel as default };
|
|
6
|
+
//# sourceMappingURL=DraggablePanel.d.mts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { AXES } from "./core/axes.mjs";
|
|
3
|
+
import { DraggablePanelContent, DraggablePanelHandle, DraggablePanelRoot, DraggablePanelToggle } from "./atoms.mjs";
|
|
4
|
+
import { memo, useCallback } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cx } from "antd-style";
|
|
7
|
+
//#region src/base-ui/DraggablePanel/DraggablePanel.tsx
|
|
8
|
+
const toNumber = (value) => typeof value === "number" ? Math.max(value, 0) : void 0;
|
|
9
|
+
const DraggablePanel = memo(({ backgroundColor, children, className, classNames, collapseThreshold, defaultExpand, defaultSize, expand, expandable = true, maxHeight, maxWidth, minHeight, minWidth, mode = "fixed", onExpandChange, onSizeChange, onSizeDragging, placement = "right", showBorder = true, showHandleWhenCollapsed, showHandleWideArea = true, size, styles: customStyles, ...rest }) => {
|
|
10
|
+
const { vertical } = AXES[placement];
|
|
11
|
+
const toSize = useCallback((value) => vertical ? {
|
|
12
|
+
height: value,
|
|
13
|
+
width: "100%"
|
|
14
|
+
} : {
|
|
15
|
+
height: "100%",
|
|
16
|
+
width: value
|
|
17
|
+
}, [vertical]);
|
|
18
|
+
const toDelta = useCallback((value) => vertical ? {
|
|
19
|
+
height: value,
|
|
20
|
+
width: 0
|
|
21
|
+
} : {
|
|
22
|
+
height: 0,
|
|
23
|
+
width: value
|
|
24
|
+
}, [vertical]);
|
|
25
|
+
const handleSizeChange = useCallback((next, delta) => onSizeChange?.(toDelta(delta), toSize(next)), [
|
|
26
|
+
onSizeChange,
|
|
27
|
+
toDelta,
|
|
28
|
+
toSize
|
|
29
|
+
]);
|
|
30
|
+
const handleSizeDragging = useCallback((next, delta) => onSizeDragging?.(toDelta(delta), toSize(next)), [
|
|
31
|
+
onSizeDragging,
|
|
32
|
+
toDelta,
|
|
33
|
+
toSize
|
|
34
|
+
]);
|
|
35
|
+
return /* @__PURE__ */ jsxs(DraggablePanelRoot, {
|
|
36
|
+
backgroundColor,
|
|
37
|
+
className,
|
|
38
|
+
collapseThreshold,
|
|
39
|
+
defaultExpand,
|
|
40
|
+
defaultSize: toNumber(vertical ? defaultSize?.height : defaultSize?.width),
|
|
41
|
+
expand,
|
|
42
|
+
expandable,
|
|
43
|
+
max: toNumber(vertical ? maxHeight : maxWidth),
|
|
44
|
+
min: toNumber(vertical ? minHeight : minWidth) ?? 0,
|
|
45
|
+
mode,
|
|
46
|
+
placement,
|
|
47
|
+
showBorder,
|
|
48
|
+
size: toNumber(vertical ? size?.height : size?.width),
|
|
49
|
+
onExpandChange,
|
|
50
|
+
onSizeChange: handleSizeChange,
|
|
51
|
+
onSizeDragging: handleSizeDragging,
|
|
52
|
+
...rest,
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ jsx(DraggablePanelToggle, { showHandleWhenCollapsed }),
|
|
55
|
+
/* @__PURE__ */ jsx(DraggablePanelContent, {
|
|
56
|
+
className: cx(classNames?.content),
|
|
57
|
+
style: customStyles?.content,
|
|
58
|
+
children
|
|
59
|
+
}),
|
|
60
|
+
/* @__PURE__ */ jsx(DraggablePanelHandle, { wideArea: showHandleWideArea })
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
DraggablePanel.displayName = "DraggablePanel";
|
|
65
|
+
//#endregion
|
|
66
|
+
export { DraggablePanel as default };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=DraggablePanel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraggablePanel.mjs","names":[],"sources":["../../../src/base-ui/DraggablePanel/DraggablePanel.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, useCallback } from 'react';\n\nimport {\n DraggablePanelContent,\n DraggablePanelHandle,\n DraggablePanelRoot,\n DraggablePanelToggle,\n} from './atoms';\nimport { AXES } from './core/axes';\nimport type { DraggablePanelProps, DraggablePanelSize } from './type';\n\nconst toNumber = (value: number | string | undefined) =>\n typeof value === 'number' ? Math.max(value, 0) : undefined;\n\nconst DraggablePanel = memo<DraggablePanelProps>(\n ({\n backgroundColor,\n children,\n className,\n classNames,\n collapseThreshold,\n defaultExpand,\n defaultSize,\n expand,\n expandable = true,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n mode = 'fixed',\n onExpandChange,\n onSizeChange,\n onSizeDragging,\n placement = 'right',\n showBorder = true,\n showHandleWhenCollapsed,\n showHandleWideArea = true,\n size,\n styles: customStyles,\n ...rest\n }) => {\n const { vertical } = AXES[placement];\n\n const toSize = useCallback(\n (value: number): DraggablePanelSize =>\n vertical ? { height: value, width: '100%' } : { height: '100%', width: value },\n [vertical],\n );\n const toDelta = useCallback(\n (value: number): DraggablePanelSize =>\n vertical ? { height: value, width: 0 } : { height: 0, width: value },\n [vertical],\n );\n\n const handleSizeChange = useCallback(\n (next: number, delta: number) => onSizeChange?.(toDelta(delta), toSize(next)),\n [onSizeChange, toDelta, toSize],\n );\n const handleSizeDragging = useCallback(\n (next: number, delta: number) => onSizeDragging?.(toDelta(delta), toSize(next)),\n [onSizeDragging, toDelta, toSize],\n );\n\n return (\n <DraggablePanelRoot\n backgroundColor={backgroundColor}\n className={className}\n collapseThreshold={collapseThreshold}\n defaultExpand={defaultExpand}\n defaultSize={toNumber(vertical ? defaultSize?.height : defaultSize?.width)}\n expand={expand}\n expandable={expandable}\n max={toNumber(vertical ? maxHeight : maxWidth)}\n min={toNumber(vertical ? minHeight : minWidth) ?? 0}\n mode={mode}\n placement={placement}\n showBorder={showBorder}\n size={toNumber(vertical ? size?.height : size?.width)}\n onExpandChange={onExpandChange}\n onSizeChange={handleSizeChange}\n onSizeDragging={handleSizeDragging}\n {...rest}\n >\n <DraggablePanelToggle showHandleWhenCollapsed={showHandleWhenCollapsed} />\n <DraggablePanelContent className={cx(classNames?.content)} style={customStyles?.content}>\n {children}\n </DraggablePanelContent>\n <DraggablePanelHandle wideArea={showHandleWideArea} />\n </DraggablePanelRoot>\n );\n },\n);\n\nDraggablePanel.displayName = 'DraggablePanel';\n\nexport default DraggablePanel;\n"],"mappings":";;;;;;;AAcA,MAAM,YAAY,UAChB,OAAO,UAAU,WAAW,KAAK,IAAI,OAAO,CAAC,IAAI,KAAA;AAEnD,MAAM,iBAAiB,MACpB,EACC,iBACA,UACA,WACA,YACA,mBACA,eACA,aACA,QACA,aAAa,MACb,WACA,UACA,WACA,UACA,OAAO,SACP,gBACA,cACA,gBACA,YAAY,SACZ,aAAa,MACb,yBACA,qBAAqB,MACrB,MACA,QAAQ,cACR,GAAG,WACC;CACJ,MAAM,EAAE,aAAa,KAAK;CAE1B,MAAM,SAAS,aACZ,UACC,WAAW;EAAE,QAAQ;EAAO,OAAO;CAAO,IAAI;EAAE,QAAQ;EAAQ,OAAO;CAAM,GAC/E,CAAC,QAAQ,CACX;CACA,MAAM,UAAU,aACb,UACC,WAAW;EAAE,QAAQ;EAAO,OAAO;CAAE,IAAI;EAAE,QAAQ;EAAG,OAAO;CAAM,GACrE,CAAC,QAAQ,CACX;CAEA,MAAM,mBAAmB,aACtB,MAAc,UAAkB,eAAe,QAAQ,KAAK,GAAG,OAAO,IAAI,CAAC,GAC5E;EAAC;EAAc;EAAS;CAAM,CAChC;CACA,MAAM,qBAAqB,aACxB,MAAc,UAAkB,iBAAiB,QAAQ,KAAK,GAAG,OAAO,IAAI,CAAC,GAC9E;EAAC;EAAgB;EAAS;CAAM,CAClC;CAEA,OACE,qBAAC,oBAAD;EACmB;EACN;EACQ;EACJ;EACf,aAAa,SAAS,WAAW,aAAa,SAAS,aAAa,KAAK;EACjE;EACI;EACZ,KAAK,SAAS,WAAW,YAAY,QAAQ;EAC7C,KAAK,SAAS,WAAW,YAAY,QAAQ,KAAK;EAC5C;EACK;EACC;EACZ,MAAM,SAAS,WAAW,MAAM,SAAS,MAAM,KAAK;EACpC;EAChB,cAAc;EACd,gBAAgB;EAChB,GAAI;EAjBN,UAAA;GAmBE,oBAAC,sBAAD,EAA+C,wBAA0B,CAAA;GACzE,oBAAC,uBAAD;IAAuB,WAAW,GAAG,YAAY,OAAO;IAAG,OAAO,cAAc;IAC7E;GACoB,CAAA;GACvB,oBAAC,sBAAD,EAAsB,UAAU,mBAAqB,CAAA;EACnC;;AAExB,CACF;AAEA,eAAe,cAAc"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DivProps } from "../../types/index.mjs";
|
|
2
|
+
import { Placement } from "./core/axes.mjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
//#region src/base-ui/DraggablePanel/atoms.d.ts
|
|
5
|
+
interface DraggablePanelRootProps extends Omit<DivProps, 'onDrag'> {
|
|
6
|
+
backgroundColor?: string;
|
|
7
|
+
collapseThreshold?: number;
|
|
8
|
+
defaultExpand?: boolean;
|
|
9
|
+
defaultSize?: number;
|
|
10
|
+
expand?: boolean;
|
|
11
|
+
expandable?: boolean;
|
|
12
|
+
max?: number;
|
|
13
|
+
min?: number;
|
|
14
|
+
mode?: 'fixed' | 'float';
|
|
15
|
+
onExpandChange?: (expand: boolean) => void;
|
|
16
|
+
onSizeChange?: (size: number, delta: number) => void;
|
|
17
|
+
onSizeDragging?: (size: number, delta: number) => void;
|
|
18
|
+
placement?: Placement;
|
|
19
|
+
showBorder?: boolean;
|
|
20
|
+
size?: number;
|
|
21
|
+
}
|
|
22
|
+
declare const DraggablePanelRoot: import("react").NamedExoticComponent<DraggablePanelRootProps>;
|
|
23
|
+
interface DraggablePanelContentProps extends Omit<DivProps, 'onDrag'> {}
|
|
24
|
+
declare const DraggablePanelContent: import("react").NamedExoticComponent<DraggablePanelContentProps>;
|
|
25
|
+
interface DraggablePanelHandleProps extends Omit<DivProps, 'onDrag'> {
|
|
26
|
+
wideArea?: boolean;
|
|
27
|
+
}
|
|
28
|
+
declare const DraggablePanelHandle: import("react").NamedExoticComponent<DraggablePanelHandleProps>;
|
|
29
|
+
interface DraggablePanelToggleProps extends Omit<DivProps, 'onDrag'> {
|
|
30
|
+
showHandleWhenCollapsed?: boolean;
|
|
31
|
+
}
|
|
32
|
+
declare const DraggablePanelToggle: import("react").NamedExoticComponent<DraggablePanelToggleProps>;
|
|
33
|
+
type DraggablePanelContainerProps = DivProps;
|
|
34
|
+
declare const DraggablePanelContainer: import("react").NamedExoticComponent<DivProps>;
|
|
35
|
+
type DraggablePanelBodyProps = DivProps;
|
|
36
|
+
declare const DraggablePanelBody: import("react").NamedExoticComponent<DivProps>;
|
|
37
|
+
type DraggablePanelFooterProps = DivProps;
|
|
38
|
+
declare const DraggablePanelFooter: import("react").NamedExoticComponent<DivProps>;
|
|
39
|
+
interface DraggablePanelHeaderProps extends Omit<DivProps, 'children' | 'title'> {
|
|
40
|
+
extra?: ReactNode;
|
|
41
|
+
onCollapse?: () => void;
|
|
42
|
+
title?: ReactNode;
|
|
43
|
+
}
|
|
44
|
+
declare const DraggablePanelHeader: import("react").NamedExoticComponent<DraggablePanelHeaderProps>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { DraggablePanelBody, DraggablePanelBodyProps, DraggablePanelContainer, DraggablePanelContainerProps, DraggablePanelContent, DraggablePanelContentProps, DraggablePanelFooter, DraggablePanelFooterProps, DraggablePanelHandle, DraggablePanelHandleProps, DraggablePanelHeader, DraggablePanelHeaderProps, DraggablePanelRoot, DraggablePanelRootProps, DraggablePanelToggle, DraggablePanelToggleProps };
|
|
47
|
+
//# sourceMappingURL=atoms.d.mts.map
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import ActionIcon from "../ActionIcon/ActionIcon.mjs";
|
|
3
|
+
import { DraggablePanelContext, useDraggablePanelContext } from "./context.mjs";
|
|
4
|
+
import { AXES } from "./core/axes.mjs";
|
|
5
|
+
import { coarsePointer, handleSize } from "./core/env.mjs";
|
|
6
|
+
import { timing } from "./core/transition.mjs";
|
|
7
|
+
import { createPanelController } from "./core/controller.mjs";
|
|
8
|
+
import { useIsomorphicLayoutEffect, useStore } from "./core/internal.mjs";
|
|
9
|
+
import { BOW, handleVariants, rootVariants, styles, toggleVariants } from "./style.mjs";
|
|
10
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { cx } from "antd-style";
|
|
13
|
+
import { motion, useTransform } from "motion/react";
|
|
14
|
+
import useMergeState from "use-merge-value";
|
|
15
|
+
import { ChevronLeft } from "lucide-react";
|
|
16
|
+
//#region src/base-ui/DraggablePanel/atoms.tsx
|
|
17
|
+
const PAN_THRESHOLD = 3;
|
|
18
|
+
const BOW_CX = 15;
|
|
19
|
+
const BOW_CY = BOW.half + 8;
|
|
20
|
+
const BOW_W = 30;
|
|
21
|
+
const BOW_H = BOW_CY * 2;
|
|
22
|
+
const bowPath = (direction, verticalSeam) => {
|
|
23
|
+
const k = BOW.half * BOW.curve;
|
|
24
|
+
const b = BOW_CX + BOW.bulge * direction;
|
|
25
|
+
const a0 = BOW_CY - BOW.half;
|
|
26
|
+
const a1 = BOW_CY + BOW.half;
|
|
27
|
+
const pt = (along, across) => verticalSeam ? `${along} ${across}` : `${across} ${along}`;
|
|
28
|
+
return [
|
|
29
|
+
`M${pt(BOW_CX, a0)}`,
|
|
30
|
+
`C${pt(BOW_CX, a0 + k)} ${pt(b, BOW_CY - k)} ${pt(b, BOW_CY)}`,
|
|
31
|
+
`C${pt(b, BOW_CY + k)} ${pt(BOW_CX, a1 - k)} ${pt(BOW_CX, a1)}`
|
|
32
|
+
].join(" ");
|
|
33
|
+
};
|
|
34
|
+
const BOW_PATHS = {
|
|
35
|
+
horizontalSeam: [bowPath(-1, false), bowPath(1, false)],
|
|
36
|
+
verticalSeam: [bowPath(-1, true), bowPath(1, true)]
|
|
37
|
+
};
|
|
38
|
+
/** The chevron points the way a click moves the panel. */
|
|
39
|
+
const CHEVRON_TURN = {
|
|
40
|
+
bottom: 270,
|
|
41
|
+
left: 0,
|
|
42
|
+
right: 180,
|
|
43
|
+
top: 90
|
|
44
|
+
};
|
|
45
|
+
const chevronPath = (cx, cy) => `M${cx + 2.4} ${cy - 4.8} L${cx - 2.4} ${cy} L${cx + 2.4} ${cy + 4.8}`;
|
|
46
|
+
const ORIGIN_MAP = {
|
|
47
|
+
bottom: "center bottom",
|
|
48
|
+
left: "left center",
|
|
49
|
+
right: "right center",
|
|
50
|
+
top: "center top"
|
|
51
|
+
};
|
|
52
|
+
const COLLAPSED_SCALE = .97;
|
|
53
|
+
const EDGE_INSET = {
|
|
54
|
+
bottom: "insetBlockEnd",
|
|
55
|
+
left: "insetInlineStart",
|
|
56
|
+
right: "insetInlineEnd",
|
|
57
|
+
top: "insetBlockStart"
|
|
58
|
+
};
|
|
59
|
+
const DraggablePanelRoot = memo(({ backgroundColor, children, className, collapseThreshold, defaultExpand = true, defaultSize, expand, expandable = true, max, min = 0, mode = "fixed", onExpandChange, onSizeChange, onSizeDragging, placement = "right", showBorder = true, size, style, ...rest }) => {
|
|
60
|
+
const axis = AXES[placement];
|
|
61
|
+
const fallbackSize = axis.vertical ? 180 : 280;
|
|
62
|
+
const resolvedDefaultSize = defaultSize ?? fallbackSize;
|
|
63
|
+
const [isExpand, setIsExpand] = useMergeState(defaultExpand, {
|
|
64
|
+
onChange: onExpandChange,
|
|
65
|
+
value: expand
|
|
66
|
+
});
|
|
67
|
+
const [innerSize, setInnerSize] = useState(resolvedDefaultSize);
|
|
68
|
+
const currentSize = size ?? innerSize;
|
|
69
|
+
const commitSize = useCallback((next, delta) => {
|
|
70
|
+
if (size === void 0) setInnerSize(next);
|
|
71
|
+
onSizeChange?.(next, delta);
|
|
72
|
+
}, [onSizeChange, size]);
|
|
73
|
+
const options = {
|
|
74
|
+
collapseThreshold: expandable ? collapseThreshold : void 0,
|
|
75
|
+
defaultSize: resolvedDefaultSize,
|
|
76
|
+
expand: isExpand,
|
|
77
|
+
max,
|
|
78
|
+
min,
|
|
79
|
+
onExpandChange: expandable ? setIsExpand : void 0,
|
|
80
|
+
onSizeChange: commitSize,
|
|
81
|
+
onSizeDragging,
|
|
82
|
+
placement,
|
|
83
|
+
size: currentSize
|
|
84
|
+
};
|
|
85
|
+
const [controller] = useState(() => createPanelController(options));
|
|
86
|
+
const state = useStore(controller.subscribe, () => controller.state);
|
|
87
|
+
const elementRef = useRef(null);
|
|
88
|
+
useIsomorphicLayoutEffect(() => {
|
|
89
|
+
controller.sync(options);
|
|
90
|
+
});
|
|
91
|
+
useIsomorphicLayoutEffect(() => {
|
|
92
|
+
const node = elementRef.current;
|
|
93
|
+
return node ? controller.attach(node) : void 0;
|
|
94
|
+
}, [controller]);
|
|
95
|
+
const toggleExpand = useCallback(() => {
|
|
96
|
+
if (expandable) setIsExpand(!isExpand);
|
|
97
|
+
}, [
|
|
98
|
+
expandable,
|
|
99
|
+
isExpand,
|
|
100
|
+
setIsExpand
|
|
101
|
+
]);
|
|
102
|
+
const context = useMemo(() => ({
|
|
103
|
+
axis,
|
|
104
|
+
controller,
|
|
105
|
+
expand: isExpand,
|
|
106
|
+
expandable,
|
|
107
|
+
placement,
|
|
108
|
+
showBorder,
|
|
109
|
+
state,
|
|
110
|
+
toggleExpand
|
|
111
|
+
}), [
|
|
112
|
+
axis,
|
|
113
|
+
controller,
|
|
114
|
+
isExpand,
|
|
115
|
+
expandable,
|
|
116
|
+
placement,
|
|
117
|
+
showBorder,
|
|
118
|
+
state,
|
|
119
|
+
toggleExpand
|
|
120
|
+
]);
|
|
121
|
+
return /* @__PURE__ */ jsx(DraggablePanelContext, {
|
|
122
|
+
value: context,
|
|
123
|
+
children: /* @__PURE__ */ jsx("aside", {
|
|
124
|
+
className: cx(rootVariants({
|
|
125
|
+
mode,
|
|
126
|
+
placement
|
|
127
|
+
}), className),
|
|
128
|
+
"data-expand": isExpand,
|
|
129
|
+
"data-expandable": expandable,
|
|
130
|
+
"data-resizing": state.dragging,
|
|
131
|
+
ref: elementRef,
|
|
132
|
+
style: {
|
|
133
|
+
"--draggable-panel-bg": backgroundColor || "",
|
|
134
|
+
"flexDirection": axis.vertical ? "column" : "row",
|
|
135
|
+
...style
|
|
136
|
+
},
|
|
137
|
+
...rest,
|
|
138
|
+
children
|
|
139
|
+
})
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
DraggablePanelRoot.displayName = "DraggablePanelRoot";
|
|
143
|
+
const DraggablePanelContent = memo(({ children, className, style, ...rest }) => {
|
|
144
|
+
const { axis, controller, expand, placement, state } = useDraggablePanelContext();
|
|
145
|
+
const extent = useTransform(controller.motion.size, (value) => Math.max(0, value));
|
|
146
|
+
const clipping = state.dragging || state.folding || controller.target === 0;
|
|
147
|
+
const shrunk = state.collapsing || !expand;
|
|
148
|
+
return /* @__PURE__ */ jsx(motion.div, {
|
|
149
|
+
inert: !expand,
|
|
150
|
+
style: {
|
|
151
|
+
display: "flex",
|
|
152
|
+
flexDirection: axis.vertical ? "column" : "row",
|
|
153
|
+
flexShrink: 0,
|
|
154
|
+
justifyContent: axis.anchorEnd ? "flex-end" : "flex-start",
|
|
155
|
+
overflow: clipping ? "clip" : "visible",
|
|
156
|
+
[axis.cross]: "100%",
|
|
157
|
+
[axis.extent]: extent
|
|
158
|
+
},
|
|
159
|
+
children: /* @__PURE__ */ jsx(motion.div, {
|
|
160
|
+
animate: { scale: shrunk ? COLLAPSED_SCALE : 1 },
|
|
161
|
+
className: cx(styles.content, className),
|
|
162
|
+
transition: timing(),
|
|
163
|
+
style: {
|
|
164
|
+
transformOrigin: ORIGIN_MAP[placement],
|
|
165
|
+
[axis.cross]: "100%",
|
|
166
|
+
[axis.extent]: controller.motion.content,
|
|
167
|
+
...style
|
|
168
|
+
},
|
|
169
|
+
...rest,
|
|
170
|
+
children
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
DraggablePanelContent.displayName = "DraggablePanelContent";
|
|
175
|
+
const DraggablePanelHandle = memo(({ className, style, wideArea = true, ...rest }) => {
|
|
176
|
+
const { axis, controller, expand, showBorder, state } = useDraggablePanelContext();
|
|
177
|
+
const size = useStore(coarsePointer.subscribe, () => handleSize(wideArea));
|
|
178
|
+
const target = useStore(controller.subscribe, () => controller.target);
|
|
179
|
+
useEffect(() => () => controller.drag.cancel(), [controller]);
|
|
180
|
+
const pressedRef = useRef(null);
|
|
181
|
+
const draggingRef = useRef(false);
|
|
182
|
+
const draggedRef = useRef(false);
|
|
183
|
+
const { max, min } = controller.bounds();
|
|
184
|
+
if (!expand) return null;
|
|
185
|
+
return /* @__PURE__ */ jsx("div", {
|
|
186
|
+
"aria-orientation": axis.ariaOrientation,
|
|
187
|
+
"aria-valuemax": Number.isFinite(max) ? max : void 0,
|
|
188
|
+
"aria-valuemin": min,
|
|
189
|
+
"aria-valuenow": target,
|
|
190
|
+
"aria-valuetext": `${target} pixels`,
|
|
191
|
+
className: cx(handleVariants({ edge: axis.edge }), className),
|
|
192
|
+
"data-border": showBorder,
|
|
193
|
+
"data-resizing": state.dragging || void 0,
|
|
194
|
+
role: "separator",
|
|
195
|
+
tabIndex: 0,
|
|
196
|
+
style: {
|
|
197
|
+
"--draggable-panel-handle-size": `${size}px`,
|
|
198
|
+
[EDGE_INSET[axis.edge]]: -size / 2,
|
|
199
|
+
...style
|
|
200
|
+
},
|
|
201
|
+
onKeyDown: (event) => controller.resizeByKey(event),
|
|
202
|
+
onDoubleClick: () => {
|
|
203
|
+
if (!draggedRef.current) controller.reset();
|
|
204
|
+
},
|
|
205
|
+
onLostPointerCapture: () => {
|
|
206
|
+
if (draggingRef.current) controller.drag.cancel();
|
|
207
|
+
pressedRef.current = null;
|
|
208
|
+
draggingRef.current = false;
|
|
209
|
+
},
|
|
210
|
+
onPointerCancel: () => {
|
|
211
|
+
controller.drag.cancel();
|
|
212
|
+
pressedRef.current = null;
|
|
213
|
+
draggingRef.current = false;
|
|
214
|
+
},
|
|
215
|
+
onPointerDown: (event) => {
|
|
216
|
+
draggedRef.current = false;
|
|
217
|
+
pressedRef.current = {
|
|
218
|
+
x: event.clientX,
|
|
219
|
+
y: event.clientY
|
|
220
|
+
};
|
|
221
|
+
try {
|
|
222
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
223
|
+
} catch {}
|
|
224
|
+
},
|
|
225
|
+
onPointerMove: (event) => {
|
|
226
|
+
if (!pressedRef.current) return;
|
|
227
|
+
const offset = {
|
|
228
|
+
x: event.clientX - pressedRef.current.x,
|
|
229
|
+
y: event.clientY - pressedRef.current.y
|
|
230
|
+
};
|
|
231
|
+
if (!draggingRef.current) {
|
|
232
|
+
if (Math.hypot(offset.x, offset.y) < PAN_THRESHOLD) return;
|
|
233
|
+
draggingRef.current = true;
|
|
234
|
+
draggedRef.current = true;
|
|
235
|
+
controller.drag.start();
|
|
236
|
+
}
|
|
237
|
+
controller.drag.move(offset);
|
|
238
|
+
},
|
|
239
|
+
onPointerUp: () => {
|
|
240
|
+
if (draggingRef.current) controller.drag.end();
|
|
241
|
+
pressedRef.current = null;
|
|
242
|
+
draggingRef.current = false;
|
|
243
|
+
},
|
|
244
|
+
...rest
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
DraggablePanelHandle.displayName = "DraggablePanelHandle";
|
|
248
|
+
const DraggablePanelToggle = memo(({ className, showHandleWhenCollapsed, style, ...rest }) => {
|
|
249
|
+
const { axis, expand, expandable, placement, toggleExpand } = useDraggablePanelContext();
|
|
250
|
+
if (!expandable) return null;
|
|
251
|
+
const turn = CHEVRON_TURN[placement] + (expand ? 0 : 180);
|
|
252
|
+
const chevX = axis.vertical ? BOW_CY : BOW_CX;
|
|
253
|
+
const chevY = axis.vertical ? BOW_CX : BOW_CY;
|
|
254
|
+
return /* @__PURE__ */ jsx("div", {
|
|
255
|
+
className: cx(toggleVariants({ placement }), className),
|
|
256
|
+
style: {
|
|
257
|
+
opacity: expand ? void 0 : showHandleWhenCollapsed ? 1 : 0,
|
|
258
|
+
...style
|
|
259
|
+
},
|
|
260
|
+
...rest,
|
|
261
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
262
|
+
"aria-label": expand ? "Collapse panel" : "Expand panel",
|
|
263
|
+
type: "button",
|
|
264
|
+
onClick: toggleExpand,
|
|
265
|
+
children: /* @__PURE__ */ jsxs("svg", {
|
|
266
|
+
fill: "none",
|
|
267
|
+
height: axis.vertical ? BOW_W : BOW_H,
|
|
268
|
+
viewBox: `0 0 ${axis.vertical ? BOW_H : BOW_W} ${axis.vertical ? BOW_W : BOW_H}`,
|
|
269
|
+
width: axis.vertical ? BOW_H : BOW_W,
|
|
270
|
+
children: [BOW_PATHS[axis.vertical ? "horizontalSeam" : "verticalSeam"].map((d) => /* @__PURE__ */ jsx("path", {
|
|
271
|
+
d,
|
|
272
|
+
"data-bow": "",
|
|
273
|
+
strokeLinecap: "round",
|
|
274
|
+
strokeWidth: BOW.stroke
|
|
275
|
+
}, d)), /* @__PURE__ */ jsx("g", {
|
|
276
|
+
style: {
|
|
277
|
+
rotate: `${turn}deg`,
|
|
278
|
+
transformOrigin: `${chevX}px ${chevY}px`,
|
|
279
|
+
transition: "rotate 0.25s var(--ant-motion-ease-out, ease)"
|
|
280
|
+
},
|
|
281
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
282
|
+
d: chevronPath(chevX, chevY),
|
|
283
|
+
stroke: "currentColor",
|
|
284
|
+
strokeLinecap: "round",
|
|
285
|
+
strokeLinejoin: "round",
|
|
286
|
+
strokeWidth: 1.6
|
|
287
|
+
})
|
|
288
|
+
})]
|
|
289
|
+
})
|
|
290
|
+
})
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
DraggablePanelToggle.displayName = "DraggablePanelToggle";
|
|
294
|
+
const DraggablePanelContainer = memo(({ className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
295
|
+
className: cx(styles.container, className),
|
|
296
|
+
...rest
|
|
297
|
+
}));
|
|
298
|
+
DraggablePanelContainer.displayName = "DraggablePanelContainer";
|
|
299
|
+
const DraggablePanelBody = memo(({ className, style, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
300
|
+
className: cx(styles.body, className),
|
|
301
|
+
style: {
|
|
302
|
+
flex: 1,
|
|
303
|
+
...style
|
|
304
|
+
},
|
|
305
|
+
...rest
|
|
306
|
+
}));
|
|
307
|
+
DraggablePanelBody.displayName = "DraggablePanelBody";
|
|
308
|
+
const DraggablePanelFooter = memo(({ className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
309
|
+
className: cx(styles.footer, className),
|
|
310
|
+
...rest
|
|
311
|
+
}));
|
|
312
|
+
DraggablePanelFooter.displayName = "DraggablePanelFooter";
|
|
313
|
+
const DraggablePanelHeader = memo(({ className, extra, onCollapse, title, ...rest }) => {
|
|
314
|
+
const { toggleExpand } = useDraggablePanelContext();
|
|
315
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
316
|
+
className: cx(styles.header, className),
|
|
317
|
+
...rest,
|
|
318
|
+
children: [
|
|
319
|
+
/* @__PURE__ */ jsx(ActionIcon, {
|
|
320
|
+
icon: ChevronLeft,
|
|
321
|
+
size: "small",
|
|
322
|
+
onClick: onCollapse ?? toggleExpand
|
|
323
|
+
}),
|
|
324
|
+
title,
|
|
325
|
+
extra
|
|
326
|
+
]
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
DraggablePanelHeader.displayName = "DraggablePanelHeader";
|
|
330
|
+
//#endregion
|
|
331
|
+
export { DraggablePanelBody, DraggablePanelContainer, DraggablePanelContent, DraggablePanelFooter, DraggablePanelHandle, DraggablePanelHeader, DraggablePanelRoot, DraggablePanelToggle };
|
|
332
|
+
|
|
333
|
+
//# sourceMappingURL=atoms.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atoms.mjs","names":["useControlledState","getHandleSize"],"sources":["../../../src/base-ui/DraggablePanel/atoms.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronLeft } from 'lucide-react';\nimport type { HTMLMotionProps, MotionStyle } from 'motion/react';\nimport { motion, useTransform } from 'motion/react';\nimport {\n type CSSProperties,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport type { DivProps } from '@/types';\n\nimport { DraggablePanelContext, useDraggablePanelContext } from './context';\nimport type { Placement } from './core/axes';\nimport { AXES } from './core/axes';\nimport type { PanelControllerOptions } from './core/controller';\nimport { createPanelController } from './core/controller';\nimport { coarsePointer, handleSize as getHandleSize } from './core/env';\nimport { useIsomorphicLayoutEffect, useStore } from './core/internal';\nimport { timing } from './core/transition';\nimport { BOW, handleVariants, rootVariants, styles, toggleVariants } from './style';\n\nconst PAN_THRESHOLD = 3;\n\nconst BOW_CX = 15;\nconst BOW_CY = BOW.half + 8;\nconst BOW_W = BOW_CX * 2;\nconst BOW_H = BOW_CY * 2;\n\nconst bowPath = (direction: 1 | -1, verticalSeam: boolean) => {\n const k = BOW.half * BOW.curve;\n const b = BOW_CX + BOW.bulge * direction;\n const a0 = BOW_CY - BOW.half;\n const a1 = BOW_CY + BOW.half;\n // `a` runs along the seam, `b` across it; a horizontal seam swaps the two.\n const pt = (along: number, across: number) =>\n verticalSeam ? `${along} ${across}` : `${across} ${along}`;\n return [\n `M${pt(BOW_CX, a0)}`,\n `C${pt(BOW_CX, a0 + k)} ${pt(b, BOW_CY - k)} ${pt(b, BOW_CY)}`,\n `C${pt(b, BOW_CY + k)} ${pt(BOW_CX, a1 - k)} ${pt(BOW_CX, a1)}`,\n ].join(' ');\n};\n\nconst BOW_PATHS = {\n horizontalSeam: [bowPath(-1, false), bowPath(1, false)],\n verticalSeam: [bowPath(-1, true), bowPath(1, true)],\n};\n\n/** The chevron points the way a click moves the panel. */\nconst CHEVRON_TURN = { bottom: 270, left: 0, right: 180, top: 90 } as const;\n\nconst chevronPath = (cx: number, cy: number) =>\n `M${cx + 2.4} ${cy - 4.8} L${cx - 2.4} ${cy} L${cx + 2.4} ${cy + 4.8}`;\n\nconst ORIGIN_MAP = {\n bottom: 'center bottom',\n left: 'left center',\n right: 'right center',\n top: 'center top',\n} as const;\n\nconst COLLAPSED_SCALE = 0.97;\n\nconst EDGE_INSET = {\n bottom: 'insetBlockEnd',\n left: 'insetInlineStart',\n right: 'insetInlineEnd',\n top: 'insetBlockStart',\n} as const;\n\nexport interface DraggablePanelRootProps extends Omit<DivProps, 'onDrag'> {\n backgroundColor?: string;\n collapseThreshold?: number;\n defaultExpand?: boolean;\n defaultSize?: number;\n expand?: boolean;\n expandable?: boolean;\n max?: number;\n min?: number;\n mode?: 'fixed' | 'float';\n onExpandChange?: (expand: boolean) => void;\n onSizeChange?: (size: number, delta: number) => void;\n onSizeDragging?: (size: number, delta: number) => void;\n placement?: Placement;\n showBorder?: boolean;\n size?: number;\n}\n\nexport const DraggablePanelRoot = memo<DraggablePanelRootProps>(\n ({\n backgroundColor,\n children,\n className,\n collapseThreshold,\n defaultExpand = true,\n defaultSize,\n expand,\n expandable = true,\n max,\n min = 0,\n mode = 'fixed',\n onExpandChange,\n onSizeChange,\n onSizeDragging,\n placement = 'right',\n showBorder = true,\n size,\n style,\n ...rest\n }) => {\n const axis = AXES[placement];\n const fallbackSize = axis.vertical ? 180 : 280;\n const resolvedDefaultSize = defaultSize ?? fallbackSize;\n\n const [isExpand, setIsExpand] = useControlledState(defaultExpand, {\n onChange: onExpandChange,\n value: expand,\n });\n const [innerSize, setInnerSize] = useState(resolvedDefaultSize);\n const currentSize = size ?? innerSize;\n\n const commitSize = useCallback(\n (next: number, delta: number) => {\n if (size === undefined) setInnerSize(next);\n onSizeChange?.(next, delta);\n },\n [onSizeChange, size],\n );\n\n const options: PanelControllerOptions = {\n collapseThreshold: expandable ? collapseThreshold : undefined,\n defaultSize: resolvedDefaultSize,\n expand: isExpand,\n max,\n min,\n onExpandChange: expandable ? setIsExpand : undefined,\n onSizeChange: commitSize,\n onSizeDragging,\n placement,\n size: currentSize,\n };\n\n const [controller] = useState(() => createPanelController(options));\n const state = useStore(controller.subscribe, () => controller.state);\n const elementRef = useRef<HTMLElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n controller.sync(options);\n });\n\n useIsomorphicLayoutEffect(() => {\n const node = elementRef.current;\n return node ? controller.attach(node) : undefined;\n }, [controller]);\n\n const toggleExpand = useCallback(() => {\n if (expandable) setIsExpand(!isExpand);\n }, [expandable, isExpand, setIsExpand]);\n\n const context = useMemo(\n () => ({\n axis,\n controller,\n expand: isExpand,\n expandable,\n placement,\n showBorder,\n state,\n toggleExpand,\n }),\n [axis, controller, isExpand, expandable, placement, showBorder, state, toggleExpand],\n );\n\n return (\n <DraggablePanelContext value={context}>\n <aside\n className={cx(rootVariants({ mode, placement }), className)}\n data-expand={isExpand}\n data-expandable={expandable}\n data-resizing={state.dragging}\n ref={elementRef}\n style={\n {\n '--draggable-panel-bg': backgroundColor || '',\n 'flexDirection': axis.vertical ? 'column' : 'row',\n ...style,\n } as CSSProperties\n }\n {...rest}\n >\n {children}\n </aside>\n </DraggablePanelContext>\n );\n },\n);\n\nDraggablePanelRoot.displayName = 'DraggablePanelRoot';\n\nexport interface DraggablePanelContentProps extends Omit<DivProps, 'onDrag'> {}\n\nexport const DraggablePanelContent = memo<DraggablePanelContentProps>(\n ({ children, className, style, ...rest }) => {\n const { axis, controller, expand, placement, state } = useDraggablePanelContext();\n const extent = useTransform(controller.motion.size, (value) => Math.max(0, value));\n const clipping = state.dragging || state.folding || controller.target === 0;\n const shrunk = state.collapsing || !expand;\n\n return (\n <motion.div\n inert={!expand}\n style={\n {\n display: 'flex',\n flexDirection: axis.vertical ? 'column' : 'row',\n flexShrink: 0,\n justifyContent: axis.anchorEnd ? 'flex-end' : 'flex-start',\n overflow: clipping ? 'clip' : 'visible',\n [axis.cross]: '100%',\n [axis.extent]: extent,\n } as MotionStyle\n }\n >\n <motion.div\n animate={{ scale: shrunk ? COLLAPSED_SCALE : 1 }}\n className={cx(styles.content, className)}\n transition={timing()}\n style={\n {\n transformOrigin: ORIGIN_MAP[placement],\n [axis.cross]: '100%',\n [axis.extent]: controller.motion.content,\n ...style,\n } as MotionStyle\n }\n {...(rest as HTMLMotionProps<'div'>)}\n >\n {children}\n </motion.div>\n </motion.div>\n );\n },\n);\n\nDraggablePanelContent.displayName = 'DraggablePanelContent';\n\nexport interface DraggablePanelHandleProps extends Omit<DivProps, 'onDrag'> {\n wideArea?: boolean;\n}\n\nexport const DraggablePanelHandle = memo<DraggablePanelHandleProps>(\n ({ className, style, wideArea = true, ...rest }) => {\n const { axis, controller, expand, showBorder, state } = useDraggablePanelContext();\n const size = useStore(coarsePointer.subscribe, () => getHandleSize(wideArea));\n const target = useStore(controller.subscribe, () => controller.target);\n useEffect(() => () => controller.drag.cancel(), [controller]);\n\n const pressedRef = useRef<{ x: number; y: number } | null>(null);\n const draggingRef = useRef(false);\n const draggedRef = useRef(false);\n const { max, min } = controller.bounds();\n\n if (!expand) return null;\n\n return (\n <div\n aria-orientation={axis.ariaOrientation}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n aria-valuemin={min}\n aria-valuenow={target}\n aria-valuetext={`${target} pixels`}\n className={cx(handleVariants({ edge: axis.edge }), className)}\n data-border={showBorder}\n data-resizing={state.dragging || undefined}\n role=\"separator\"\n tabIndex={0}\n style={\n {\n '--draggable-panel-handle-size': `${size}px`,\n [EDGE_INSET[axis.edge]]: -size / 2,\n ...style,\n } as CSSProperties\n }\n onKeyDown={(event) => controller.resizeByKey(event)}\n onDoubleClick={() => {\n if (!draggedRef.current) controller.reset();\n }}\n onLostPointerCapture={() => {\n if (draggingRef.current) controller.drag.cancel();\n pressedRef.current = null;\n draggingRef.current = false;\n }}\n onPointerCancel={() => {\n controller.drag.cancel();\n pressedRef.current = null;\n draggingRef.current = false;\n }}\n onPointerDown={(event) => {\n draggedRef.current = false;\n pressedRef.current = { x: event.clientX, y: event.clientY };\n // A synthetic pointerdown carries no active pointer, and capturing throws.\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n /* empty */\n }\n }}\n onPointerMove={(event) => {\n if (!pressedRef.current) return;\n const offset = {\n x: event.clientX - pressedRef.current.x,\n y: event.clientY - pressedRef.current.y,\n };\n if (!draggingRef.current) {\n if (Math.hypot(offset.x, offset.y) < PAN_THRESHOLD) return;\n draggingRef.current = true;\n draggedRef.current = true;\n controller.drag.start();\n }\n controller.drag.move(offset);\n }}\n onPointerUp={() => {\n if (draggingRef.current) controller.drag.end();\n pressedRef.current = null;\n draggingRef.current = false;\n }}\n {...rest}\n />\n );\n },\n);\n\nDraggablePanelHandle.displayName = 'DraggablePanelHandle';\n\nexport interface DraggablePanelToggleProps extends Omit<DivProps, 'onDrag'> {\n showHandleWhenCollapsed?: boolean;\n}\n\nexport const DraggablePanelToggle = memo<DraggablePanelToggleProps>(\n ({ className, showHandleWhenCollapsed, style, ...rest }) => {\n const { axis, expand, expandable, placement, toggleExpand } = useDraggablePanelContext();\n\n if (!expandable) return null;\n\n const turn = CHEVRON_TURN[placement] + (expand ? 0 : 180);\n const chevX = axis.vertical ? BOW_CY : BOW_CX;\n const chevY = axis.vertical ? BOW_CX : BOW_CY;\n\n return (\n <div\n className={cx(toggleVariants({ placement }), className)}\n style={{ opacity: expand ? undefined : showHandleWhenCollapsed ? 1 : 0, ...style }}\n {...rest}\n >\n <button\n aria-label={expand ? 'Collapse panel' : 'Expand panel'}\n type=\"button\"\n onClick={toggleExpand}\n >\n <svg\n fill=\"none\"\n height={axis.vertical ? BOW_W : BOW_H}\n viewBox={`0 0 ${axis.vertical ? BOW_H : BOW_W} ${axis.vertical ? BOW_W : BOW_H}`}\n width={axis.vertical ? BOW_H : BOW_W}\n >\n {BOW_PATHS[axis.vertical ? 'horizontalSeam' : 'verticalSeam'].map((d) => (\n <path d={d} data-bow=\"\" key={d} strokeLinecap=\"round\" strokeWidth={BOW.stroke} />\n ))}\n <g\n style={{\n rotate: `${turn}deg`,\n transformOrigin: `${chevX}px ${chevY}px`,\n transition: 'rotate 0.25s var(--ant-motion-ease-out, ease)',\n }}\n >\n <path\n d={chevronPath(chevX, chevY)}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.6}\n />\n </g>\n </svg>\n </button>\n </div>\n );\n },\n);\n\nDraggablePanelToggle.displayName = 'DraggablePanelToggle';\n\nexport type DraggablePanelContainerProps = DivProps;\n\nexport const DraggablePanelContainer = memo<DraggablePanelContainerProps>(\n ({ className, ...rest }) => <div className={cx(styles.container, className)} {...rest} />,\n);\n\nDraggablePanelContainer.displayName = 'DraggablePanelContainer';\n\nexport type DraggablePanelBodyProps = DivProps;\n\nexport const DraggablePanelBody = memo<DraggablePanelBodyProps>(({ className, style, ...rest }) => (\n <div className={cx(styles.body, className)} style={{ flex: 1, ...style }} {...rest} />\n));\n\nDraggablePanelBody.displayName = 'DraggablePanelBody';\n\nexport type DraggablePanelFooterProps = DivProps;\n\nexport const DraggablePanelFooter = memo<DraggablePanelFooterProps>(({ className, ...rest }) => (\n <div className={cx(styles.footer, className)} {...rest} />\n));\n\nDraggablePanelFooter.displayName = 'DraggablePanelFooter';\n\nexport interface DraggablePanelHeaderProps extends Omit<DivProps, 'children' | 'title'> {\n extra?: ReactNode;\n onCollapse?: () => void;\n title?: ReactNode;\n}\n\nexport const DraggablePanelHeader = memo<DraggablePanelHeaderProps>(\n ({ className, extra, onCollapse, title, ...rest }) => {\n const { toggleExpand } = useDraggablePanelContext();\n\n return (\n <div className={cx(styles.header, className)} {...rest}>\n <ActionIcon icon={ChevronLeft} size={'small'} onClick={onCollapse ?? toggleExpand} />\n {title}\n {extra}\n </div>\n );\n },\n);\n\nDraggablePanelHeader.displayName = 'DraggablePanelHeader';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Axis, Placement } from "./core/axes.mjs";
|
|
2
|
+
import { PanelController, PanelState } from "./core/controller.mjs";
|
|
3
|
+
//#region src/base-ui/DraggablePanel/context.d.ts
|
|
4
|
+
interface DraggablePanelContextValue {
|
|
5
|
+
axis: Axis;
|
|
6
|
+
controller: PanelController;
|
|
7
|
+
expand: boolean;
|
|
8
|
+
expandable: boolean;
|
|
9
|
+
placement: Placement;
|
|
10
|
+
showBorder: boolean;
|
|
11
|
+
state: PanelState;
|
|
12
|
+
toggleExpand: () => void;
|
|
13
|
+
}
|
|
14
|
+
declare const useDraggablePanelContext: () => DraggablePanelContextValue;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { DraggablePanelContextValue, useDraggablePanelContext };
|
|
17
|
+
//# sourceMappingURL=context.d.mts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext, use } from "react";
|
|
3
|
+
//#region src/base-ui/DraggablePanel/context.ts
|
|
4
|
+
const DraggablePanelContext = createContext(null);
|
|
5
|
+
const useDraggablePanelContext = () => {
|
|
6
|
+
const context = use(DraggablePanelContext);
|
|
7
|
+
if (!context) throw new Error("DraggablePanel atoms must be used inside DraggablePanelRoot");
|
|
8
|
+
return context;
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { DraggablePanelContext, useDraggablePanelContext };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.mjs","names":[],"sources":["../../../src/base-ui/DraggablePanel/context.ts"],"sourcesContent":["'use client';\n\nimport { createContext, use } from 'react';\n\nimport type { Axis, Placement } from './core/axes';\nimport type { PanelController, PanelState } from './core/controller';\n\nexport interface DraggablePanelContextValue {\n axis: Axis;\n controller: PanelController;\n expand: boolean;\n expandable: boolean;\n placement: Placement;\n showBorder: boolean;\n state: PanelState;\n toggleExpand: () => void;\n}\n\nexport const DraggablePanelContext = createContext<DraggablePanelContextValue | null>(null);\n\nexport const useDraggablePanelContext = () => {\n const context = use(DraggablePanelContext);\n if (!context) throw new Error('DraggablePanel atoms must be used inside DraggablePanelRoot');\n return context;\n};\n"],"mappings":";;;AAkBA,MAAa,wBAAwB,cAAiD,IAAI;AAE1F,MAAa,iCAAiC;CAC5C,MAAM,UAAU,IAAI,qBAAqB;CACzC,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,6DAA6D;CAC3F,OAAO;AACT"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/base-ui/DraggablePanel/core/axes.d.ts
|
|
2
|
+
type Placement = 'bottom' | 'left' | 'right' | 'top';
|
|
3
|
+
interface Axis {
|
|
4
|
+
anchorEnd: boolean;
|
|
5
|
+
ariaOrientation: 'horizontal' | 'vertical';
|
|
6
|
+
cross: 'height' | 'width';
|
|
7
|
+
cursor: 'col-resize' | 'row-resize';
|
|
8
|
+
edge: Placement;
|
|
9
|
+
extent: 'height' | 'width';
|
|
10
|
+
grow: 1 | -1;
|
|
11
|
+
point: 'x' | 'y';
|
|
12
|
+
vertical: boolean;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Axis, Placement };
|
|
16
|
+
//# sourceMappingURL=axes.d.mts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/base-ui/DraggablePanel/core/axes.ts
|
|
2
|
+
const AXES = {
|
|
3
|
+
bottom: {
|
|
4
|
+
anchorEnd: true,
|
|
5
|
+
ariaOrientation: "horizontal",
|
|
6
|
+
cross: "width",
|
|
7
|
+
cursor: "row-resize",
|
|
8
|
+
edge: "top",
|
|
9
|
+
extent: "height",
|
|
10
|
+
grow: -1,
|
|
11
|
+
point: "y",
|
|
12
|
+
vertical: true
|
|
13
|
+
},
|
|
14
|
+
left: {
|
|
15
|
+
anchorEnd: false,
|
|
16
|
+
ariaOrientation: "vertical",
|
|
17
|
+
cross: "height",
|
|
18
|
+
cursor: "col-resize",
|
|
19
|
+
edge: "right",
|
|
20
|
+
extent: "width",
|
|
21
|
+
grow: 1,
|
|
22
|
+
point: "x",
|
|
23
|
+
vertical: false
|
|
24
|
+
},
|
|
25
|
+
right: {
|
|
26
|
+
anchorEnd: true,
|
|
27
|
+
ariaOrientation: "vertical",
|
|
28
|
+
cross: "height",
|
|
29
|
+
cursor: "col-resize",
|
|
30
|
+
edge: "left",
|
|
31
|
+
extent: "width",
|
|
32
|
+
grow: -1,
|
|
33
|
+
point: "x",
|
|
34
|
+
vertical: false
|
|
35
|
+
},
|
|
36
|
+
top: {
|
|
37
|
+
anchorEnd: false,
|
|
38
|
+
ariaOrientation: "horizontal",
|
|
39
|
+
cross: "width",
|
|
40
|
+
cursor: "row-resize",
|
|
41
|
+
edge: "bottom",
|
|
42
|
+
extent: "height",
|
|
43
|
+
grow: 1,
|
|
44
|
+
point: "y",
|
|
45
|
+
vertical: true
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { AXES };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=axes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axes.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/axes.ts"],"sourcesContent":["export type Placement = 'bottom' | 'left' | 'right' | 'top';\n\nexport interface Axis {\n anchorEnd: boolean;\n ariaOrientation: 'horizontal' | 'vertical';\n cross: 'height' | 'width';\n cursor: 'col-resize' | 'row-resize';\n edge: Placement;\n extent: 'height' | 'width';\n grow: 1 | -1;\n point: 'x' | 'y';\n vertical: boolean;\n}\n\nexport const AXES: Record<Placement, Axis> = {\n bottom: {\n anchorEnd: true,\n ariaOrientation: 'horizontal',\n cross: 'width',\n cursor: 'row-resize',\n edge: 'top',\n extent: 'height',\n grow: -1,\n point: 'y',\n vertical: true,\n },\n left: {\n anchorEnd: false,\n ariaOrientation: 'vertical',\n cross: 'height',\n cursor: 'col-resize',\n edge: 'right',\n extent: 'width',\n grow: 1,\n point: 'x',\n vertical: false,\n },\n right: {\n anchorEnd: true,\n ariaOrientation: 'vertical',\n cross: 'height',\n cursor: 'col-resize',\n edge: 'left',\n extent: 'width',\n grow: -1,\n point: 'x',\n vertical: false,\n },\n top: {\n anchorEnd: false,\n ariaOrientation: 'horizontal',\n cross: 'width',\n cursor: 'row-resize',\n edge: 'bottom',\n extent: 'height',\n grow: 1,\n point: 'y',\n vertical: true,\n },\n};\n\nexport const mirrorPlacement = (placement: Placement): Placement => {\n if (placement === 'left') return 'right';\n if (placement === 'right') return 'left';\n return placement;\n};\n"],"mappings":";AAcA,MAAa,OAAgC;CAC3C,QAAQ;EACN,WAAW;EACX,iBAAiB;EACjB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,OAAO;EACP,UAAU;CACZ;CACA,MAAM;EACJ,WAAW;EACX,iBAAiB;EACjB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,OAAO;EACP,UAAU;CACZ;CACA,OAAO;EACL,WAAW;EACX,iBAAiB;EACjB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,OAAO;EACP,UAAU;CACZ;CACA,KAAK;EACH,WAAW;EACX,iBAAiB;EACjB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,OAAO;EACP,UAAU;CACZ;AACF"}
|