@lobehub/ui 5.40.2 → 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.
Files changed (59) hide show
  1. package/es/base-ui/AutoComplete/AutoComplete.mjs +2 -0
  2. package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
  3. package/es/base-ui/ContextMenu/ContextMenuHost.mjs +2 -0
  4. package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
  5. package/es/base-ui/ContextMenu/renderItems.mjs +3 -1
  6. package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
  7. package/es/base-ui/DraggablePanel/DraggablePanel.d.mts +6 -0
  8. package/es/base-ui/DraggablePanel/DraggablePanel.mjs +68 -0
  9. package/es/base-ui/DraggablePanel/DraggablePanel.mjs.map +1 -0
  10. package/es/base-ui/DraggablePanel/atoms.d.mts +47 -0
  11. package/es/base-ui/DraggablePanel/atoms.mjs +333 -0
  12. package/es/base-ui/DraggablePanel/atoms.mjs.map +1 -0
  13. package/es/base-ui/DraggablePanel/context.d.mts +17 -0
  14. package/es/base-ui/DraggablePanel/context.mjs +13 -0
  15. package/es/base-ui/DraggablePanel/context.mjs.map +1 -0
  16. package/es/base-ui/DraggablePanel/core/axes.d.mts +16 -0
  17. package/es/base-ui/DraggablePanel/core/axes.mjs +51 -0
  18. package/es/base-ui/DraggablePanel/core/axes.mjs.map +1 -0
  19. package/es/base-ui/DraggablePanel/core/controller.d.mts +56 -0
  20. package/es/base-ui/DraggablePanel/core/controller.mjs +206 -0
  21. package/es/base-ui/DraggablePanel/core/controller.mjs.map +1 -0
  22. package/es/base-ui/DraggablePanel/core/dom.mjs +34 -0
  23. package/es/base-ui/DraggablePanel/core/dom.mjs.map +1 -0
  24. package/es/base-ui/DraggablePanel/core/env.mjs +28 -0
  25. package/es/base-ui/DraggablePanel/core/env.mjs.map +1 -0
  26. package/es/base-ui/DraggablePanel/core/internal.mjs +9 -0
  27. package/es/base-ui/DraggablePanel/core/internal.mjs.map +1 -0
  28. package/es/base-ui/DraggablePanel/core/transition.mjs +17 -0
  29. package/es/base-ui/DraggablePanel/core/transition.mjs.map +1 -0
  30. package/es/base-ui/DraggablePanel/core/utils.mjs +20 -0
  31. package/es/base-ui/DraggablePanel/core/utils.mjs.map +1 -0
  32. package/es/base-ui/DraggablePanel/index.d.mts +5 -0
  33. package/es/base-ui/DraggablePanel/style.mjs +356 -0
  34. package/es/base-ui/DraggablePanel/style.mjs.map +1 -0
  35. package/es/base-ui/DraggablePanel/type.d.mts +53 -0
  36. package/es/base-ui/DropdownMenu/atoms.d.mts +1 -1
  37. package/es/base-ui/DropdownMenu/atoms.mjs +3 -1
  38. package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
  39. package/es/base-ui/Input/style.d.mts +2 -2
  40. package/es/base-ui/Popover/atoms.d.mts +1 -1
  41. package/es/base-ui/Popover/atoms.mjs +3 -1
  42. package/es/base-ui/Popover/atoms.mjs.map +1 -1
  43. package/es/base-ui/Select/Select.mjs +0 -1
  44. package/es/base-ui/Select/Select.mjs.map +1 -1
  45. package/es/base-ui/Select/atoms.d.mts +1 -1
  46. package/es/base-ui/Select/atoms.mjs +3 -1
  47. package/es/base-ui/Select/atoms.mjs.map +1 -1
  48. package/es/base-ui/Select/style.mjs +2 -1
  49. package/es/base-ui/Select/style.mjs.map +1 -1
  50. package/es/base-ui/Tooltip/TooltipGroup.mjs +2 -0
  51. package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
  52. package/es/base-ui/Tooltip/TooltipStandalone.mjs +2 -0
  53. package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
  54. package/es/base-ui/floating/collisionPadding.d.mts +7 -0
  55. package/es/base-ui/floating/collisionPadding.mjs +17 -0
  56. package/es/base-ui/floating/collisionPadding.mjs.map +1 -0
  57. package/es/base-ui/index.d.mts +7 -1
  58. package/es/base-ui/index.mjs +5 -1
  59. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ import { AXES } from "./axes.mjs";
2
+ import { isRtl, lockBody } from "./dom.mjs";
3
+ import { timing } from "./transition.mjs";
4
+ import { clamp, emitter } from "./utils.mjs";
5
+ import { animate, motionValue } from "motion/react";
6
+ //#region src/base-ui/DraggablePanel/core/controller.ts
7
+ const KEY_STEP = 10;
8
+ const KEY_STEP_FAST = 50;
9
+ const SCREEN_DELTA = {
10
+ ArrowDown: 1,
11
+ ArrowLeft: -1,
12
+ ArrowRight: 1,
13
+ ArrowUp: -1
14
+ };
15
+ const createPanelController = (initial) => {
16
+ const { emit: notify, subscribe } = emitter();
17
+ let element = null;
18
+ let options = initial;
19
+ let target = initial.expand ? initial.size : 0;
20
+ let state = {
21
+ collapsing: false,
22
+ dragging: false,
23
+ folding: false
24
+ };
25
+ let unlock;
26
+ let foldTo = target;
27
+ const size = motionValue(target);
28
+ const content = motionValue(initial.size);
29
+ const session = {
30
+ collapsing: false,
31
+ max: 0,
32
+ min: 0,
33
+ sign: 1,
34
+ start: 0
35
+ };
36
+ const patch = (next) => {
37
+ if (Object.entries(next).some(([key, value]) => state[key] !== value)) {
38
+ state = {
39
+ ...state,
40
+ ...next
41
+ };
42
+ notify();
43
+ }
44
+ };
45
+ const bounds = () => {
46
+ const min = Math.max(0, options.min);
47
+ return {
48
+ max: options.max === void 0 ? Number.POSITIVE_INFINITY : Math.max(min, options.max),
49
+ min
50
+ };
51
+ };
52
+ const growSign = () => {
53
+ const axis = AXES[options.placement];
54
+ return axis.grow * (axis.vertical || !isRtl(element) ? 1 : -1);
55
+ };
56
+ const fold = (to) => {
57
+ foldTo = to;
58
+ patch({ folding: true });
59
+ if (size.get() === 0) content.jump(to || content.get());
60
+ else if (to > 0) animate(content, to, timing());
61
+ animate(size, to, timing());
62
+ };
63
+ const release = () => {
64
+ unlock?.();
65
+ unlock = void 0;
66
+ };
67
+ const stopDragging = () => {
68
+ release();
69
+ patch({
70
+ collapsing: false,
71
+ dragging: false
72
+ });
73
+ };
74
+ const drag = {
75
+ cancel: () => {
76
+ if (!state.dragging) return;
77
+ size.jump(session.start);
78
+ content.jump(session.start);
79
+ stopDragging();
80
+ },
81
+ end: () => {
82
+ if (!state.dragging) return;
83
+ const { collapsing, start } = session;
84
+ const committed = collapsing ? start : size.get();
85
+ stopDragging();
86
+ if (collapsing) {
87
+ content.jump(start);
88
+ options.onExpandChange?.(false);
89
+ }
90
+ options.onSizeChange?.(committed, committed - start);
91
+ },
92
+ move: (offset) => {
93
+ if (!state.dragging) return;
94
+ const axis = AXES[options.placement];
95
+ const pixels = session.start + offset[axis.point] * session.sign;
96
+ const collapsing = options.collapseThreshold !== void 0 && pixels < options.collapseThreshold;
97
+ const next = collapsing ? 0 : Math.round(clamp(pixels, session.min, session.max));
98
+ size.jump(next);
99
+ if (!collapsing) content.jump(next);
100
+ if (collapsing !== session.collapsing) {
101
+ session.collapsing = collapsing;
102
+ patch({ collapsing });
103
+ }
104
+ const reported = collapsing ? session.start : next;
105
+ options.onSizeDragging?.(reported, reported - session.start);
106
+ },
107
+ start: () => {
108
+ Object.assign(session, {
109
+ ...bounds(),
110
+ collapsing: false,
111
+ sign: growSign(),
112
+ start: size.get()
113
+ });
114
+ release();
115
+ unlock = lockBody(AXES[options.placement].cursor, drag.cancel);
116
+ patch({
117
+ dragging: true,
118
+ folding: false
119
+ });
120
+ }
121
+ };
122
+ const resizeByKey = (event) => {
123
+ if (event.key === "Enter" || event.key === " ") {
124
+ if (!options.onExpandChange) return;
125
+ event.preventDefault();
126
+ options.onExpandChange(!options.expand);
127
+ return;
128
+ }
129
+ const { max, min } = bounds();
130
+ const step = (event.shiftKey || event.key === "PageUp" || event.key === "PageDown" ? KEY_STEP_FAST : KEY_STEP) * growSign();
131
+ const screen = (AXES[options.placement].vertical ? event.key === "ArrowUp" || event.key === "ArrowDown" : event.key === "ArrowLeft" || event.key === "ArrowRight") ? SCREEN_DELTA[event.key] : void 0;
132
+ const moves = {
133
+ End: Number.isFinite(max) ? max : target,
134
+ Home: min,
135
+ PageDown: target + step,
136
+ PageUp: target - step
137
+ };
138
+ const next = screen === void 0 ? moves[event.key] : target + screen * step;
139
+ if (next === void 0) return;
140
+ event.preventDefault();
141
+ const value = clamp(next, min, max);
142
+ if (!options.expand && value > 0) options.onExpandChange?.(true);
143
+ options.onSizeChange?.(value, value - target);
144
+ };
145
+ const sync = (next) => {
146
+ options = next;
147
+ const value = next.expand ? next.size : 0;
148
+ if (size.get() === 0 && value > 0) content.jump(next.size);
149
+ if (value !== target) {
150
+ target = value;
151
+ notify();
152
+ }
153
+ if (state.dragging) return;
154
+ if (size.get() === target) {
155
+ size.stop();
156
+ content.stop();
157
+ if (state.folding) {
158
+ patch({ folding: false });
159
+ content.jump(target || content.get());
160
+ }
161
+ foldTo = target;
162
+ } else if (!state.folding || foldTo !== target) fold(target);
163
+ };
164
+ return {
165
+ attach: (node) => {
166
+ element = node;
167
+ const stopSettle = size.on("animationComplete", () => {
168
+ if (size.get() === target) patch({ folding: false });
169
+ });
170
+ return () => {
171
+ stopSettle();
172
+ release();
173
+ element = null;
174
+ };
175
+ },
176
+ get axis() {
177
+ return AXES[options.placement];
178
+ },
179
+ bounds,
180
+ drag,
181
+ motion: {
182
+ content,
183
+ size
184
+ },
185
+ get options() {
186
+ return options;
187
+ },
188
+ reset: () => {
189
+ if (!options.expand) options.onExpandChange?.(true);
190
+ options.onSizeChange?.(options.defaultSize, options.defaultSize - target);
191
+ },
192
+ resizeByKey,
193
+ get state() {
194
+ return state;
195
+ },
196
+ subscribe,
197
+ sync,
198
+ get target() {
199
+ return target;
200
+ }
201
+ };
202
+ };
203
+ //#endregion
204
+ export { createPanelController };
205
+
206
+ //# sourceMappingURL=controller.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/controller.ts"],"sourcesContent":["import { animate, type MotionValue, motionValue } from 'motion/react';\n\nimport type { Axis, Placement } from './axes';\nimport { AXES } from './axes';\nimport { isRtl, lockBody } from './dom';\nimport { timing } from './transition';\nimport { clamp, emitter } from './utils';\n\nconst KEY_STEP = 10;\nconst KEY_STEP_FAST = 50;\n\nconst SCREEN_DELTA: Record<string, number> = {\n ArrowDown: 1,\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -1,\n};\n\nexport interface PanelControllerOptions {\n collapseThreshold?: number;\n defaultSize: number;\n expand: boolean;\n max?: number;\n min: number;\n onExpandChange?: (expand: boolean) => void;\n onSizeChange?: (size: number, delta: number) => void;\n onSizeDragging?: (size: number, delta: number) => void;\n placement: Placement;\n size: number;\n}\n\nexport interface PanelState {\n collapsing: boolean;\n dragging: boolean;\n folding: boolean;\n}\n\nexport interface PanelKeyEvent {\n key: string;\n preventDefault: () => void;\n shiftKey: boolean;\n}\n\nexport interface PanelController {\n attach: (element: HTMLElement) => () => void;\n axis: Axis;\n bounds: () => { max: number; min: number };\n drag: {\n cancel: () => void;\n end: () => void;\n move: (offset: { x: number; y: number }) => void;\n start: () => void;\n };\n motion: { content: MotionValue<number>; size: MotionValue<number> };\n options: PanelControllerOptions;\n reset: () => void;\n resizeByKey: (event: PanelKeyEvent) => void;\n state: PanelState;\n subscribe: (listener: () => void) => () => void;\n sync: (options: PanelControllerOptions) => void;\n target: number;\n}\n\nexport const createPanelController = (initial: PanelControllerOptions): PanelController => {\n const { emit: notify, subscribe } = emitter();\n\n let element: HTMLElement | null = null;\n let options = initial;\n let target = initial.expand ? initial.size : 0;\n let state: PanelState = { collapsing: false, dragging: false, folding: false };\n let unlock: (() => void) | undefined;\n let foldTo = target;\n\n const size = motionValue(target);\n const content = motionValue(initial.size);\n\n const session = {\n collapsing: false,\n max: 0,\n min: 0,\n sign: 1,\n start: 0,\n };\n\n const patch = (next: Partial<PanelState>) => {\n const entries = Object.entries(next) as [keyof PanelState, boolean][];\n if (entries.some(([key, value]) => state[key] !== value)) {\n state = { ...state, ...next };\n notify();\n }\n };\n\n const bounds = () => {\n const min = Math.max(0, options.min);\n const max = options.max === undefined ? Number.POSITIVE_INFINITY : Math.max(min, options.max);\n return { max, min };\n };\n\n const growSign = () => {\n const axis = AXES[options.placement];\n return axis.grow * (axis.vertical || !isRtl(element) ? 1 : -1);\n };\n\n const fold = (to: number) => {\n foldTo = to;\n patch({ folding: true });\n if (size.get() === 0) content.jump(to || content.get());\n else if (to > 0) animate(content, to, timing());\n animate(size, to, timing());\n };\n\n const release = () => {\n unlock?.();\n unlock = undefined;\n };\n\n const stopDragging = () => {\n release();\n patch({ collapsing: false, dragging: false });\n };\n\n const drag = {\n cancel: () => {\n if (!state.dragging) return;\n size.jump(session.start);\n content.jump(session.start);\n stopDragging();\n },\n end: () => {\n if (!state.dragging) return;\n const { collapsing, start } = session;\n const committed = collapsing ? start : size.get();\n stopDragging();\n if (collapsing) {\n content.jump(start);\n options.onExpandChange?.(false);\n }\n options.onSizeChange?.(committed, committed - start);\n },\n move: (offset: { x: number; y: number }) => {\n if (!state.dragging) return;\n const axis = AXES[options.placement];\n const pixels = session.start + offset[axis.point] * session.sign;\n const collapsing =\n options.collapseThreshold !== undefined && pixels < options.collapseThreshold;\n const next = collapsing ? 0 : Math.round(clamp(pixels, session.min, session.max));\n\n size.jump(next);\n if (!collapsing) content.jump(next);\n if (collapsing !== session.collapsing) {\n session.collapsing = collapsing;\n patch({ collapsing });\n }\n const reported = collapsing ? session.start : next;\n options.onSizeDragging?.(reported, reported - session.start);\n },\n start: () => {\n Object.assign(session, {\n ...bounds(),\n collapsing: false,\n sign: growSign(),\n start: size.get(),\n });\n release();\n unlock = lockBody(AXES[options.placement].cursor, drag.cancel);\n patch({ dragging: true, folding: false });\n },\n };\n\n const resizeByKey = (event: PanelKeyEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n if (!options.onExpandChange) return;\n event.preventDefault();\n options.onExpandChange(!options.expand);\n return;\n }\n\n const { max, min } = bounds();\n const fast = event.shiftKey || event.key === 'PageUp' || event.key === 'PageDown';\n const step = (fast ? KEY_STEP_FAST : KEY_STEP) * growSign();\n const axis = AXES[options.placement];\n const onAxis = axis.vertical\n ? event.key === 'ArrowUp' || event.key === 'ArrowDown'\n : event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const screen = onAxis ? SCREEN_DELTA[event.key] : undefined;\n const moves: Record<string, number> = {\n End: Number.isFinite(max) ? max : target,\n Home: min,\n PageDown: target + step,\n PageUp: target - step,\n };\n const next = screen === undefined ? moves[event.key] : target + screen * step;\n if (next === undefined) return;\n\n event.preventDefault();\n const value = clamp(next, min, max);\n if (!options.expand && value > 0) options.onExpandChange?.(true);\n options.onSizeChange?.(value, value - target);\n };\n\n const sync = (next: PanelControllerOptions) => {\n options = next;\n const value = next.expand ? next.size : 0;\n if (size.get() === 0 && value > 0) content.jump(next.size);\n if (value !== target) {\n target = value;\n notify();\n }\n if (state.dragging) return;\n if (size.get() === target) {\n // A reversal can land back on the target before the outgoing animation\n // has moved; without this it keeps running past the new target.\n size.stop();\n content.stop();\n if (state.folding) {\n patch({ folding: false });\n content.jump(target || content.get());\n }\n // A settled panel still needs its content aligned after a controlled reset.\n foldTo = target;\n } else if (!state.folding || foldTo !== target) {\n fold(target);\n }\n };\n\n return {\n attach: (node) => {\n element = node;\n const stopSettle = size.on('animationComplete', () => {\n if (size.get() === target) patch({ folding: false });\n });\n return () => {\n stopSettle();\n release();\n element = null;\n };\n },\n get axis() {\n return AXES[options.placement];\n },\n bounds,\n drag,\n motion: { content, size },\n get options() {\n return options;\n },\n reset: () => {\n if (!options.expand) options.onExpandChange?.(true);\n options.onSizeChange?.(options.defaultSize, options.defaultSize - target);\n },\n resizeByKey,\n get state() {\n return state;\n },\n subscribe,\n sync,\n get target() {\n return target;\n },\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ //#region src/base-ui/DraggablePanel/core/dom.ts
2
+ const isRtl = (element) => !!element && getComputedStyle(element).direction === "rtl";
3
+ let locks = 0;
4
+ let saved = {};
5
+ const lockBody = (cursor, onEscape) => {
6
+ const { style } = document.body;
7
+ const onKeyDown = (event) => {
8
+ if (event.key === "Escape") {
9
+ event.preventDefault();
10
+ onEscape();
11
+ }
12
+ };
13
+ if (locks === 0) saved = {
14
+ cursor: style.cursor,
15
+ userSelect: style.userSelect,
16
+ webkitUserSelect: style.webkitUserSelect
17
+ };
18
+ locks += 1;
19
+ Object.assign(style, {
20
+ cursor,
21
+ userSelect: "none",
22
+ webkitUserSelect: "none"
23
+ });
24
+ addEventListener("keydown", onKeyDown, true);
25
+ return () => {
26
+ locks -= 1;
27
+ if (locks === 0) Object.assign(style, saved);
28
+ removeEventListener("keydown", onKeyDown, true);
29
+ };
30
+ };
31
+ //#endregion
32
+ export { isRtl, lockBody };
33
+
34
+ //# sourceMappingURL=dom.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/dom.ts"],"sourcesContent":["export const isRtl = (element: Element | null) =>\n !!element && getComputedStyle(element).direction === 'rtl';\n\nlet locks = 0;\nlet saved: Partial<CSSStyleDeclaration> = {};\n\nexport const lockBody = (cursor: string, onEscape: () => void) => {\n const { style } = document.body;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onEscape();\n }\n };\n\n if (locks === 0) {\n saved = {\n cursor: style.cursor,\n userSelect: style.userSelect,\n webkitUserSelect: style.webkitUserSelect,\n };\n }\n locks += 1;\n Object.assign(style, { cursor, userSelect: 'none', webkitUserSelect: 'none' });\n addEventListener('keydown', onKeyDown, true);\n\n return () => {\n locks -= 1;\n if (locks === 0) Object.assign(style, saved);\n removeEventListener('keydown', onKeyDown, true);\n };\n};\n"],"mappings":";AAAA,MAAa,SAAS,YACpB,CAAC,CAAC,WAAW,iBAAiB,OAAO,CAAC,CAAC,cAAc;AAEvD,IAAI,QAAQ;AACZ,IAAI,QAAsC,CAAC;AAE3C,MAAa,YAAY,QAAgB,aAAyB;CAChE,MAAM,EAAE,UAAU,SAAS;CAC3B,MAAM,aAAa,UAAyB;EAC1C,IAAI,MAAM,QAAQ,UAAU;GAC1B,MAAM,eAAe;GACrB,SAAS;EACX;CACF;CAEA,IAAI,UAAU,GACZ,QAAQ;EACN,QAAQ,MAAM;EACd,YAAY,MAAM;EAClB,kBAAkB,MAAM;CAC1B;CAEF,SAAS;CACT,OAAO,OAAO,OAAO;EAAE;EAAQ,YAAY;EAAQ,kBAAkB;CAAO,CAAC;CAC7E,iBAAiB,WAAW,WAAW,IAAI;CAE3C,aAAa;EACX,SAAS;EACT,IAAI,UAAU,GAAG,OAAO,OAAO,OAAO,KAAK;EAC3C,oBAAoB,WAAW,WAAW,IAAI;CAChD;AACF"}
@@ -0,0 +1,28 @@
1
+ //#region src/base-ui/DraggablePanel/core/env.ts
2
+ const media = (query) => {
3
+ let list;
4
+ const get = () => {
5
+ list ??= typeof matchMedia === "function" ? matchMedia(query) : void 0;
6
+ return list;
7
+ };
8
+ return {
9
+ get: () => get()?.matches ?? false,
10
+ subscribe: (listener) => {
11
+ get()?.addEventListener("change", listener);
12
+ return () => get()?.removeEventListener("change", listener);
13
+ }
14
+ };
15
+ };
16
+ const coarsePointer = media("(pointer: coarse)");
17
+ const reducedMotion = media("(prefers-reduced-motion: reduce)");
18
+ const HANDLE_SIZE_FINE = 8;
19
+ const HANDLE_SIZE_WIDE = 16;
20
+ const HANDLE_SIZE_COARSE = 20;
21
+ const handleSize = (wide = true) => {
22
+ if (coarsePointer.get()) return HANDLE_SIZE_COARSE;
23
+ return wide ? HANDLE_SIZE_WIDE : HANDLE_SIZE_FINE;
24
+ };
25
+ //#endregion
26
+ export { coarsePointer, handleSize, reducedMotion };
27
+
28
+ //# sourceMappingURL=env.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/env.ts"],"sourcesContent":["const media = (query: string) => {\n let list: MediaQueryList | undefined;\n const get = () => {\n list ??= typeof matchMedia === 'function' ? matchMedia(query) : undefined;\n return list;\n };\n\n return {\n get: () => get()?.matches ?? false,\n subscribe: (listener: () => void) => {\n get()?.addEventListener('change', listener);\n return () => get()?.removeEventListener('change', listener);\n },\n };\n};\n\nexport const coarsePointer = media('(pointer: coarse)');\nexport const reducedMotion = media('(prefers-reduced-motion: reduce)');\n\nconst HANDLE_SIZE_FINE = 8;\nconst HANDLE_SIZE_WIDE = 16;\nconst HANDLE_SIZE_COARSE = 20;\n\nexport const handleSize = (wide = true) => {\n if (coarsePointer.get()) return HANDLE_SIZE_COARSE;\n return wide ? HANDLE_SIZE_WIDE : HANDLE_SIZE_FINE;\n};\n"],"mappings":";AAAA,MAAM,SAAS,UAAkB;CAC/B,IAAI;CACJ,MAAM,YAAY;EAChB,SAAS,OAAO,eAAe,aAAa,WAAW,KAAK,IAAI,KAAA;EAChE,OAAO;CACT;CAEA,OAAO;EACL,WAAW,IAAI,CAAC,EAAE,WAAW;EAC7B,YAAY,aAAyB;GACnC,IAAI,CAAC,EAAE,iBAAiB,UAAU,QAAQ;GAC1C,aAAa,IAAI,CAAC,EAAE,oBAAoB,UAAU,QAAQ;EAC5D;CACF;AACF;AAEA,MAAa,gBAAgB,MAAM,mBAAmB;AACtD,MAAa,gBAAgB,MAAM,kCAAkC;AAErE,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,MAAa,cAAc,OAAO,SAAS;CACzC,IAAI,cAAc,IAAI,GAAG,OAAO;CAChC,OAAO,OAAO,mBAAmB;AACnC"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useEffect, useLayoutEffect, useSyncExternalStore } from "react";
3
+ //#region src/base-ui/DraggablePanel/core/internal.ts
4
+ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
5
+ const useStore = (subscribe, get) => useSyncExternalStore(subscribe, get, get);
6
+ //#endregion
7
+ export { useIsomorphicLayoutEffect, useStore };
8
+
9
+ //# sourceMappingURL=internal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/internal.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useLayoutEffect, useSyncExternalStore } from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nexport const useStore = <T>(subscribe: (listener: () => void) => () => void, get: () => T) =>\n useSyncExternalStore(subscribe, get, get);\n"],"mappings":";;;AAIA,MAAa,4BACX,OAAO,WAAW,cAAc,YAAY;AAE9C,MAAa,YAAe,WAAiD,QAC3E,qBAAqB,WAAW,KAAK,GAAG"}
@@ -0,0 +1,17 @@
1
+ import { reducedMotion } from "./env.mjs";
2
+ //#region src/base-ui/DraggablePanel/core/transition.ts
3
+ const TRANSITION = {
4
+ duration: .25,
5
+ ease: [
6
+ .32,
7
+ .72,
8
+ 0,
9
+ 1
10
+ ]
11
+ };
12
+ const INSTANT = { duration: 0 };
13
+ const timing = (transition) => reducedMotion.get() ? INSTANT : transition ?? TRANSITION;
14
+ //#endregion
15
+ export { TRANSITION, timing };
16
+
17
+ //# sourceMappingURL=transition.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/transition.ts"],"sourcesContent":["import type { Transition } from 'motion/react';\n\nimport { reducedMotion } from './env';\n\nexport const TRANSITION: Transition = {\n duration: 0.25,\n ease: [0.32, 0.72, 0, 1],\n};\n\nconst INSTANT: Transition = { duration: 0 };\n\nexport const timing = (transition?: Transition): Transition =>\n reducedMotion.get() ? INSTANT : (transition ?? TRANSITION);\n"],"mappings":";;AAIA,MAAa,aAAyB;CACpC,UAAU;CACV,MAAM;EAAC;EAAM;EAAM;EAAG;CAAC;AACzB;AAEA,MAAM,UAAsB,EAAE,UAAU,EAAE;AAE1C,MAAa,UAAU,eACrB,cAAc,IAAI,IAAI,UAAW,cAAc"}
@@ -0,0 +1,20 @@
1
+ //#region src/base-ui/DraggablePanel/core/utils.ts
2
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
3
+ const emitter = () => {
4
+ const listeners = /* @__PURE__ */ new Set();
5
+ return {
6
+ emit: () => {
7
+ for (const listener of listeners) listener();
8
+ },
9
+ subscribe: (listener) => {
10
+ listeners.add(listener);
11
+ return () => {
12
+ listeners.delete(listener);
13
+ };
14
+ }
15
+ };
16
+ };
17
+ //#endregion
18
+ export { clamp, emitter };
19
+
20
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../../../../src/base-ui/DraggablePanel/core/utils.ts"],"sourcesContent":["export const clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nexport const emitter = () => {\n const listeners = new Set<() => void>();\n\n return {\n emit: () => {\n for (const listener of listeners) listener();\n },\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n"],"mappings":";AAAA,MAAa,SAAS,OAAe,KAAa,QAChD,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAEpC,MAAa,gBAAgB;CAC3B,MAAM,4BAAY,IAAI,IAAgB;CAEtC,OAAO;EACL,YAAY;GACV,KAAK,MAAM,YAAY,WAAW,SAAS;EAC7C;EACA,YAAY,aAAyB;GACnC,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;CACF;AACF"}
@@ -0,0 +1,5 @@
1
+ import { DraggablePanelBody, DraggablePanelBodyProps, DraggablePanelContainer, DraggablePanelContainerProps, DraggablePanelContent, DraggablePanelContentProps, DraggablePanelFooter, DraggablePanelFooterProps, DraggablePanelHandle, DraggablePanelHandleProps, DraggablePanelHeader, DraggablePanelHeaderProps, DraggablePanelRoot, DraggablePanelRootProps, DraggablePanelToggle, DraggablePanelToggleProps } from "./atoms.mjs";
2
+ import { useDraggablePanelContext } from "./context.mjs";
3
+ import { DraggablePanelPlacement, DraggablePanelProps, DraggablePanelSize } from "./type.mjs";
4
+ import DraggablePanel from "./DraggablePanel.mjs";
5
+ export { DraggablePanel, DraggablePanelBody, type DraggablePanelBodyProps, DraggablePanelContainer, type DraggablePanelContainerProps, DraggablePanelContent, type DraggablePanelContentProps, DraggablePanelFooter, type DraggablePanelFooterProps, DraggablePanelHandle, type DraggablePanelHandleProps, DraggablePanelHeader, type DraggablePanelHeaderProps, type DraggablePanelPlacement, type DraggablePanelProps, DraggablePanelRoot, type DraggablePanelRootProps, type DraggablePanelSize, DraggablePanelToggle, type DraggablePanelToggleProps, useDraggablePanelContext };