@corvu-next/drawer 0.1.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/dist/index.jsx ADDED
@@ -0,0 +1,771 @@
1
+ // src/Close.tsx
2
+ import Dialog from "@corvu-next/dialog";
3
+ var DrawerClose = (props) => {
4
+ return <Dialog.Close
5
+ data-corvu-drawer-close=""
6
+ data-corvu-dialog-close={null}
7
+ {...props}
8
+ />;
9
+ };
10
+ var Close_default = DrawerClose;
11
+
12
+ // src/Content.tsx
13
+ import { dataIf } from "@corvu-next/utils";
14
+ import {
15
+ createEffect,
16
+ createMemo,
17
+ omit
18
+ } from "solid-js";
19
+
20
+ // src/lib.ts
21
+ var resolveSnapPoint = (snapPoint, drawerSize, index, breakPoints) => {
22
+ if (index === void 0 || breakPoints === void 0) {
23
+ return {
24
+ value: snapPoint,
25
+ offset: resolvePoint(snapPoint, drawerSize)
26
+ };
27
+ }
28
+ const lowerBreakPoint = breakPoints[index - 1];
29
+ const upperBreakPoint = breakPoints[index];
30
+ return {
31
+ value: snapPoint,
32
+ offset: resolvePoint(snapPoint, drawerSize),
33
+ ...lowerBreakPoint !== void 0 && lowerBreakPoint !== null && {
34
+ lowerBreakPoint: resolvePoint(lowerBreakPoint, drawerSize)
35
+ },
36
+ ...upperBreakPoint !== void 0 && upperBreakPoint !== null && {
37
+ upperBreakPoint: resolvePoint(upperBreakPoint, drawerSize)
38
+ }
39
+ };
40
+ };
41
+ var resolvePoint = (point, drawerSize) => {
42
+ if (typeof point === "number") return drawerSize - point * drawerSize;
43
+ if (!point.endsWith("px")) {
44
+ throw new Error(
45
+ `[corvu] Snap and break points must be a number or a string ending with 'px'. Got ${point}`
46
+ );
47
+ }
48
+ return drawerSize - parseInt(point, 10);
49
+ };
50
+ var findClosestSnapPoint = (snapPoints, offset, offsetWithVelocity, allowSkippingSnapPoints) => {
51
+ const upperSnapPoint = findNearbySnapPoint(
52
+ "upper",
53
+ snapPoints,
54
+ allowSkippingSnapPoints ? offsetWithVelocity : offset
55
+ );
56
+ const lowerSnapPoint = findNearbySnapPoint(
57
+ "lower",
58
+ snapPoints,
59
+ allowSkippingSnapPoints ? offsetWithVelocity : offset
60
+ );
61
+ if (!upperSnapPoint) return lowerSnapPoint;
62
+ if (!lowerSnapPoint) return upperSnapPoint;
63
+ if (lowerSnapPoint.upperBreakPoint === void 0 || upperSnapPoint.lowerBreakPoint === void 0) {
64
+ return Math.abs(lowerSnapPoint.offset - offsetWithVelocity) < Math.abs(upperSnapPoint.offset - offsetWithVelocity) ? lowerSnapPoint : upperSnapPoint;
65
+ }
66
+ return offsetWithVelocity < upperSnapPoint.lowerBreakPoint ? lowerSnapPoint : upperSnapPoint;
67
+ };
68
+ var findNearbySnapPoint = (side, snapPoints, offset) => {
69
+ return snapPoints.reduce(
70
+ (previousSnapPoint, currentSnapPoint) => {
71
+ if (side == "upper" && currentSnapPoint.offset >= offset && (!previousSnapPoint || currentSnapPoint.offset < previousSnapPoint.offset)) {
72
+ return currentSnapPoint;
73
+ } else if (side == "lower" && currentSnapPoint.offset <= offset && (!previousSnapPoint || currentSnapPoint.offset > previousSnapPoint.offset)) {
74
+ return currentSnapPoint;
75
+ }
76
+ return previousSnapPoint;
77
+ },
78
+ void 0
79
+ );
80
+ };
81
+ var locationIsDraggable = (location, stopAt, pointerType) => {
82
+ let currentElement = location;
83
+ do {
84
+ if (currentElement.hasAttribute("data-corvu-no-drag") || currentElement.type === "range" || currentElement.tagName === "SELECT" && pointerType === "mouse")
85
+ return false;
86
+ if (currentElement === stopAt) break;
87
+ currentElement = currentElement.parentElement;
88
+ } while (currentElement);
89
+ return true;
90
+ };
91
+
92
+ // src/Content.tsx
93
+ import { combineStyle } from "@corvu-next/utils/dom";
94
+ import Dialog2 from "@corvu-next/dialog";
95
+ import { getScrollAtLocation } from "@corvu-next/utils/scroll";
96
+
97
+ // src/context.ts
98
+ import { createContext, useContext } from "solid-js";
99
+ import {
100
+ createKeyedContext,
101
+ useKeyedContext
102
+ } from "@corvu-next/utils/create/keyedContext";
103
+ var DrawerContext = createContext(null);
104
+ var createDrawerContext = (contextId) => {
105
+ if (contextId === void 0) return DrawerContext;
106
+ const context = createKeyedContext(`drawer-${contextId}`);
107
+ return context;
108
+ };
109
+ var useDrawerContext = (contextId) => {
110
+ if (contextId === void 0) {
111
+ const context2 = useContext(DrawerContext);
112
+ if (!context2) {
113
+ throw new Error(
114
+ "[corvu]: Drawer context not found. Make sure to wrap Drawer components in <Drawer.Root>"
115
+ );
116
+ }
117
+ return context2;
118
+ }
119
+ const context = useKeyedContext(`drawer-${contextId}`);
120
+ if (!context) {
121
+ throw new Error(
122
+ `[corvu]: Drawer context with id "${contextId}" not found. Make sure to wrap Drawer components in <Drawer.Root contextId="${contextId}">`
123
+ );
124
+ }
125
+ return context;
126
+ };
127
+ var InternalDrawerContext = createContext(null);
128
+ var createInternalDrawerContext = (contextId) => {
129
+ if (contextId === void 0) return InternalDrawerContext;
130
+ const context = createKeyedContext(
131
+ `drawer-internal-${contextId}`
132
+ );
133
+ return context;
134
+ };
135
+ var useInternalDrawerContext = (contextId) => {
136
+ if (contextId === void 0) {
137
+ const context2 = useContext(InternalDrawerContext);
138
+ if (!context2) {
139
+ throw new Error(
140
+ "[corvu]: Drawer context not found. Make sure to wrap Drawer components in <Drawer.Root>"
141
+ );
142
+ }
143
+ return context2;
144
+ }
145
+ const context = useKeyedContext(
146
+ `drawer-internal-${contextId}`
147
+ );
148
+ if (!context) {
149
+ throw new Error(
150
+ `[corvu]: Drawer context with id "${contextId}" not found. Make sure to wrap Drawer components in <Drawer.Root contextId="${contextId}">`
151
+ );
152
+ }
153
+ return context;
154
+ };
155
+
156
+ // src/Content.tsx
157
+ var DrawerContent = (props) => {
158
+ const otherProps = omit(
159
+ props,
160
+ "contextId",
161
+ "style"
162
+ );
163
+ let pointerDown = false;
164
+ let dragStartPos = null;
165
+ let currentPointerStart = [0, 0];
166
+ let cachedMoveTimestamp;
167
+ let cachedTranslate = 0;
168
+ const drawerContext = createMemo(
169
+ () => useInternalDrawerContext(props.contextId)
170
+ );
171
+ const dialogContext = createMemo(
172
+ () => Dialog2.useContext(props.contextId)
173
+ );
174
+ const snapPoints = createMemo(
175
+ () => drawerContext().snapPoints().map(
176
+ (snapPoint, index) => resolveSnapPoint(
177
+ snapPoint,
178
+ drawerContext().drawerSize(),
179
+ index,
180
+ drawerContext().breakPoints()
181
+ )
182
+ )
183
+ );
184
+ const transformValue = createMemo(() => {
185
+ switch (drawerContext().side()) {
186
+ case "top":
187
+ return `translate3d(0, ${-drawerContext().translate()}px, 0)`;
188
+ case "bottom":
189
+ return `translate3d(0, ${drawerContext().translate()}px, 0)`;
190
+ case "right":
191
+ return `translate3d(${drawerContext().translate()}px, 0, 0)`;
192
+ case "left":
193
+ return `translate3d(${-drawerContext().translate()}px, 0, 0)`;
194
+ }
195
+ });
196
+ const transitionHeight = createMemo(() => {
197
+ const transitionSize = drawerContext().transitionSize();
198
+ if (transitionSize === null) return void 0;
199
+ switch (drawerContext().side()) {
200
+ case "top":
201
+ case "bottom":
202
+ return `${transitionSize}px`;
203
+ }
204
+ return void 0;
205
+ });
206
+ const transitionWidth = createMemo(() => {
207
+ const transitionSize = drawerContext().transitionSize();
208
+ if (transitionSize === null) return void 0;
209
+ switch (drawerContext().side()) {
210
+ case "left":
211
+ case "right":
212
+ return `${transitionSize}px`;
213
+ }
214
+ return void 0;
215
+ });
216
+ createEffect(
217
+ () => dialogContext().open(),
218
+ (isOpen) => {
219
+ if (!isOpen) return;
220
+ document.addEventListener("pointermove", onPointerMove);
221
+ document.addEventListener("touchmove", onTouchMove);
222
+ document.addEventListener("pointerup", onPointerUp);
223
+ document.addEventListener("touchend", onTouchEnd);
224
+ document.addEventListener("contextmenu", onUp);
225
+ return () => {
226
+ document.removeEventListener("pointermove", onPointerMove);
227
+ document.removeEventListener("touchmove", onTouchMove);
228
+ document.removeEventListener("pointerup", onPointerUp);
229
+ document.removeEventListener("touchend", onTouchEnd);
230
+ document.removeEventListener("contextmenu", onUp);
231
+ };
232
+ }
233
+ );
234
+ createEffect(
235
+ () => drawerContext().transitionState(),
236
+ (state) => {
237
+ if (state === "closing") {
238
+ drawerContext().setIsDragging(false);
239
+ }
240
+ }
241
+ );
242
+ const onPointerDown = (event) => {
243
+ if (event.button !== 0) return;
244
+ if (!locationIsDraggable(
245
+ event.target,
246
+ dialogContext().contentRef(),
247
+ event.pointerType
248
+ ))
249
+ return;
250
+ if (drawerContext().transitionState() === "closing") return;
251
+ pointerDown = true;
252
+ if (drawerContext().handleScrollableElements()) {
253
+ currentPointerStart = [event.clientX, event.clientY];
254
+ }
255
+ };
256
+ const onPointerMove = (event) => {
257
+ onMove(event.target, event.clientX, event.clientY);
258
+ };
259
+ const onTouchMove = (event) => {
260
+ if (!event.touches[0]) return;
261
+ onMove(
262
+ event.target,
263
+ event.touches[0].clientX,
264
+ event.touches[0].clientY
265
+ );
266
+ };
267
+ const onMove = (target, x, y) => {
268
+ if (!pointerDown) return;
269
+ if (!drawerContext().isDragging() || dragStartPos === null) {
270
+ const selection = window.getSelection();
271
+ if (selection && selection.toString().length > 0) {
272
+ onUp();
273
+ return;
274
+ }
275
+ if (drawerContext().handleScrollableElements()) {
276
+ const delta2 = [x, y].map(
277
+ (pointer, i) => currentPointerStart[i] - pointer
278
+ );
279
+ const axis = Math.abs(delta2[0]) > Math.abs(delta2[1]) ? "x" : "y";
280
+ const axisDelta = axis === "x" ? delta2[0] : delta2[1];
281
+ if (Math.abs(axisDelta) < 0.3) return;
282
+ const wrapper = dialogContext().contentRef();
283
+ const [availableScroll, availableScrollTop] = getScrollAtLocation(
284
+ target,
285
+ axis,
286
+ wrapper
287
+ );
288
+ if (axisDelta > 0 && Math.abs(availableScroll) > 1 || axisDelta < 0 && Math.abs(availableScrollTop) > 0) {
289
+ onUp();
290
+ return;
291
+ }
292
+ }
293
+ switch (drawerContext().side()) {
294
+ case "top":
295
+ case "bottom":
296
+ dragStartPos = y;
297
+ break;
298
+ case "right":
299
+ case "left":
300
+ dragStartPos = x;
301
+ }
302
+ cachedMoveTimestamp = /* @__PURE__ */ new Date();
303
+ cachedTranslate = drawerContext().translate();
304
+ drawerContext().setIsDragging(true);
305
+ drawerContext().setTransitionState(null);
306
+ }
307
+ let delta;
308
+ switch (drawerContext().side()) {
309
+ case "top":
310
+ delta = -(dragStartPos - y);
311
+ break;
312
+ case "bottom":
313
+ delta = dragStartPos - y;
314
+ break;
315
+ case "right":
316
+ delta = dragStartPos - x;
317
+ break;
318
+ case "left":
319
+ delta = -(dragStartPos - x);
320
+ break;
321
+ }
322
+ delta -= drawerContext().resolvedActiveSnapPoint().offset;
323
+ if (delta > 0) delta = drawerContext().dampFunction(delta);
324
+ const now = /* @__PURE__ */ new Date();
325
+ if (now.getTime() - cachedMoveTimestamp.getTime() > drawerContext().velocityCacheReset()) {
326
+ cachedMoveTimestamp = now;
327
+ cachedTranslate = drawerContext().translate();
328
+ }
329
+ drawerContext().setTranslate(-delta);
330
+ };
331
+ const onPointerUp = (event) => {
332
+ if (event.pointerType !== "touch") onUp();
333
+ };
334
+ const onTouchEnd = (event) => {
335
+ if (event.touches.length === 0) onUp();
336
+ };
337
+ const onUp = () => {
338
+ pointerDown = false;
339
+ if (!drawerContext().isDragging()) return;
340
+ const now = /* @__PURE__ */ new Date();
341
+ const velocity = drawerContext().velocityFunction(
342
+ -(cachedTranslate - drawerContext().translate()),
343
+ now.getTime() - cachedMoveTimestamp.getTime() || 1
344
+ );
345
+ const translateWithVelocity = drawerContext().translate() * velocity;
346
+ const closestSnapPoint = findClosestSnapPoint(
347
+ snapPoints(),
348
+ drawerContext().translate(),
349
+ translateWithVelocity,
350
+ drawerContext().allowSkippingSnapPoints()
351
+ );
352
+ drawerContext().setTransitionState("snapping");
353
+ drawerContext().setIsDragging(false);
354
+ drawerContext().setActiveSnapPoint(closestSnapPoint.value);
355
+ if (closestSnapPoint.offset === drawerContext().drawerSize()) {
356
+ dialogContext().setOpen(false);
357
+ } else {
358
+ drawerContext().setTranslate(closestSnapPoint.offset);
359
+ const transitionDuration = parseFloat(
360
+ drawerContext().drawerStyles().transitionDuration
361
+ );
362
+ if (transitionDuration === 0) {
363
+ drawerContext().setTransitionState(null);
364
+ }
365
+ }
366
+ };
367
+ return <Dialog2.Content
368
+ contextId={props.contextId}
369
+ style={combineStyle(
370
+ {
371
+ transform: transformValue(),
372
+ "transition-duration": drawerContext().isDragging() ? "0ms" : void 0,
373
+ height: transitionHeight(),
374
+ width: transitionWidth()
375
+ },
376
+ props.style
377
+ )}
378
+ onPointerDown={onPointerDown}
379
+ onTouchStart={(e) => {
380
+ if (e.touches.length !== 1) return;
381
+ dragStartPos = null;
382
+ }}
383
+ onTransitionEnd={(e) => {
384
+ if (e.target !== dialogContext().contentRef()) return;
385
+ if (drawerContext().transitionState() === "closing") {
386
+ drawerContext().closeDrawer();
387
+ }
388
+ if (drawerContext().transitionState() !== "resizing") {
389
+ drawerContext().setTransitionState(null);
390
+ }
391
+ }}
392
+ data-side={drawerContext().side()}
393
+ data-opening={dataIf(drawerContext().transitionState() === "opening")}
394
+ data-closing={dataIf(drawerContext().transitionState() === "closing")}
395
+ data-snapping={dataIf(drawerContext().transitionState() === "snapping")}
396
+ data-transitioning={dataIf(drawerContext().isTransitioning())}
397
+ data-resizing={dataIf(drawerContext().transitionState() === "resizing")}
398
+ data-corvu-drawer-content=""
399
+ data-corvu-dialog-content={null}
400
+ {...otherProps}
401
+ />;
402
+ };
403
+ var Content_default = DrawerContent;
404
+
405
+ // src/Description.tsx
406
+ import Dialog3 from "@corvu-next/dialog";
407
+ var DrawerDescription = (props) => {
408
+ return <Dialog3.Description
409
+ data-corvu-drawer-description=""
410
+ data-corvu-dialog-description={null}
411
+ {...props}
412
+ />;
413
+ };
414
+ var Description_default = DrawerDescription;
415
+
416
+ // src/index.ts
417
+ import {
418
+ Portal,
419
+ useContext as useDialogContext
420
+ } from "@corvu-next/dialog";
421
+
422
+ // src/Label.tsx
423
+ import Dialog4 from "@corvu-next/dialog";
424
+ var DrawerLabel = (props) => {
425
+ return <Dialog4.Label
426
+ data-corvu-drawer-label=""
427
+ data-corvu-dialog-label={null}
428
+ {...props}
429
+ />;
430
+ };
431
+ var Label_default = DrawerLabel;
432
+
433
+ // src/Overlay.tsx
434
+ import {
435
+ createMemo as createMemo2,
436
+ omit as omit2
437
+ } from "solid-js";
438
+ import { dataIf as dataIf2 } from "@corvu-next/utils";
439
+ import Dialog5 from "@corvu-next/dialog";
440
+ var DrawerOverlay = (props) => {
441
+ const otherProps = omit2(
442
+ props,
443
+ "contextId"
444
+ );
445
+ const drawerContext = createMemo2(
446
+ () => useInternalDrawerContext(props.contextId)
447
+ );
448
+ return <Dialog5.Overlay
449
+ contextId={props.contextId}
450
+ data-side={drawerContext().side()}
451
+ data-opening={dataIf2(drawerContext().transitionState() === "opening")}
452
+ data-closing={dataIf2(drawerContext().transitionState() === "closing")}
453
+ data-snapping={dataIf2(drawerContext().transitionState() === "snapping")}
454
+ data-transitioning={dataIf2(drawerContext().isTransitioning())}
455
+ data-resizing={dataIf2(drawerContext().transitionState() === "resizing")}
456
+ data-corvu-drawer-overlay=""
457
+ data-corvu-dialog-overlay={null}
458
+ {...otherProps}
459
+ />;
460
+ };
461
+ var Overlay_default = DrawerOverlay;
462
+
463
+ // src/Root.tsx
464
+ import {
465
+ createEffect as createEffect2,
466
+ createMemo as createMemo3,
467
+ createSignal,
468
+ merge,
469
+ omit as omit3,
470
+ untrack
471
+ } from "solid-js";
472
+ import { isFunction } from "@corvu-next/utils";
473
+ import { afterPaint } from "@corvu-next/utils/dom";
474
+ import createControllableSignal from "@corvu-next/utils/create/controllableSignal";
475
+ import createOnce from "@corvu-next/utils/create/once";
476
+ import createSize from "@corvu-next/utils/create/size";
477
+ import createTransitionSize from "@corvu-next/transition-size";
478
+ import Dialog6 from "@corvu-next/dialog";
479
+ var DrawerRoot = (props) => {
480
+ const defaultedProps = merge(
481
+ {
482
+ initialOpen: false,
483
+ snapPoints: [0, 1],
484
+ breakPoints: [null],
485
+ defaultSnapPoint: 1,
486
+ side: "bottom",
487
+ dampFunction: (distance) => 6 * Math.log(distance + 1),
488
+ velocityFunction: (distance, time) => {
489
+ const velocity = distance / time;
490
+ return velocity < 1 && velocity > -1 ? 1 : velocity;
491
+ },
492
+ velocityCacheReset: 200,
493
+ allowSkippingSnapPoints: true,
494
+ handleScrollableElements: true,
495
+ transitionResize: false,
496
+ closeOnOutsidePointer: true,
497
+ allowPinchZoom: false
498
+ },
499
+ props
500
+ );
501
+ const otherProps = omit3(
502
+ defaultedProps,
503
+ "snapPoints",
504
+ "breakPoints",
505
+ "defaultSnapPoint",
506
+ "activeSnapPoint",
507
+ "onActiveSnapPointChange",
508
+ "side",
509
+ "dampFunction",
510
+ "velocityFunction",
511
+ "velocityCacheReset",
512
+ "allowSkippingSnapPoints",
513
+ "handleScrollableElements",
514
+ "transitionResize",
515
+ "open",
516
+ "initialOpen",
517
+ "onOpenChange",
518
+ "closeOnOutsidePointer",
519
+ "contextId",
520
+ "children"
521
+ );
522
+ const [open, setOpen] = createControllableSignal({
523
+ value: () => defaultedProps.open,
524
+ initialValue: defaultedProps.initialOpen,
525
+ onChange: defaultedProps.onOpenChange
526
+ });
527
+ const [activeSnapPoint, setActiveSnapPoint] = createControllableSignal({
528
+ value: () => defaultedProps.activeSnapPoint,
529
+ initialValue: 0,
530
+ onChange: defaultedProps.onActiveSnapPointChange
531
+ });
532
+ const [dialogContext, setDialogContext] = createSignal();
533
+ const { transitioning: sizeTransitioning, transitionSize } = createTransitionSize({
534
+ element: () => dialogContext()?.contentRef() ?? null,
535
+ enabled: () => open() && defaultedProps.transitionResize,
536
+ dimension: () => {
537
+ switch (defaultedProps.side) {
538
+ case "top":
539
+ case "bottom":
540
+ return "height";
541
+ case "left":
542
+ case "right":
543
+ return "width";
544
+ }
545
+ }
546
+ });
547
+ const [isDragging, setIsDragging] = createSignal(false);
548
+ const [transitionState, setTransitionState] = createSignal(
549
+ () => {
550
+ if (sizeTransitioning()) return "resizing";
551
+ return null;
552
+ }
553
+ );
554
+ const drawerStyles = createMemo3(() => {
555
+ const contentRef = dialogContext()?.contentRef();
556
+ if (!contentRef) return void 0;
557
+ return getComputedStyle(contentRef);
558
+ });
559
+ const [transitionAwareOpen, setTransitionAwareOpen] = createSignal(false);
560
+ createEffect2(
561
+ () => open(),
562
+ (_open) => {
563
+ untrack(() => {
564
+ if (transitionAwareOpen() === _open) {
565
+ return;
566
+ }
567
+ if (_open) {
568
+ setTransitionAwareOpen(true);
569
+ afterPaint(() => {
570
+ setTransitionState("opening");
571
+ setActiveSnapPoint(defaultedProps.defaultSnapPoint);
572
+ const transitionDuration = parseFloat(
573
+ drawerStyles().transitionDuration
574
+ );
575
+ if (transitionDuration === 0) {
576
+ setTransitionState(null);
577
+ }
578
+ });
579
+ } else {
580
+ setTransitionState("closing");
581
+ setActiveSnapPoint(0);
582
+ afterPaint(() => {
583
+ const transitionDuration = parseFloat(
584
+ drawerStyles().transitionDuration
585
+ );
586
+ if (transitionDuration === 0) {
587
+ closeDrawer();
588
+ }
589
+ });
590
+ }
591
+ });
592
+ }
593
+ );
594
+ const closeDrawer = () => {
595
+ setTransitionAwareOpen(false);
596
+ setTransitionState(null);
597
+ };
598
+ const drawerSize = createSize({
599
+ element: () => dialogContext()?.contentRef() ?? null,
600
+ dimension: () => {
601
+ switch (defaultedProps.side) {
602
+ case "top":
603
+ case "bottom":
604
+ return "height";
605
+ case "left":
606
+ case "right":
607
+ return "width";
608
+ }
609
+ }
610
+ });
611
+ const resolvedActiveSnapPoint = createMemo3(
612
+ () => resolveSnapPoint(activeSnapPoint(), drawerSize())
613
+ );
614
+ const [translate, setTranslate] = createSignal(
615
+ () => resolvedActiveSnapPoint().offset
616
+ );
617
+ const openPercentage = createMemo3(() => {
618
+ if (!drawerSize()) return 0;
619
+ return (drawerSize() - translate()) / drawerSize();
620
+ });
621
+ const childrenProps = {
622
+ get snapPoints() {
623
+ return defaultedProps.snapPoints;
624
+ },
625
+ get breakPoints() {
626
+ return defaultedProps.breakPoints;
627
+ },
628
+ get defaultSnapPoint() {
629
+ return defaultedProps.defaultSnapPoint;
630
+ },
631
+ get activeSnapPoint() {
632
+ return activeSnapPoint();
633
+ },
634
+ setActiveSnapPoint,
635
+ get side() {
636
+ return defaultedProps.side;
637
+ },
638
+ get isDragging() {
639
+ return isDragging();
640
+ },
641
+ get isTransitioning() {
642
+ return transitionState() !== null;
643
+ },
644
+ get transitionState() {
645
+ return transitionState();
646
+ },
647
+ get openPercentage() {
648
+ return openPercentage();
649
+ },
650
+ get translate() {
651
+ return translate();
652
+ },
653
+ get velocityCacheReset() {
654
+ return defaultedProps.velocityCacheReset;
655
+ },
656
+ get allowSkippingSnapPoints() {
657
+ return defaultedProps.allowSkippingSnapPoints;
658
+ },
659
+ get handleScrollableElements() {
660
+ return defaultedProps.handleScrollableElements;
661
+ },
662
+ get transitionResize() {
663
+ return defaultedProps.transitionResize;
664
+ }
665
+ };
666
+ const memoizedChildren = createOnce(() => defaultedProps.children);
667
+ const resolveChildren = (dialogChildrenProps) => {
668
+ setDialogContext(Dialog6.useContext(defaultedProps.contextId));
669
+ const children = memoizedChildren()();
670
+ if (isFunction(children)) {
671
+ const mergedProps = merge(dialogChildrenProps, childrenProps);
672
+ return children(mergedProps);
673
+ }
674
+ return children;
675
+ };
676
+ const memoizedDrawerRoot = createMemo3(() => {
677
+ const DrawerContext2 = createDrawerContext(defaultedProps.contextId);
678
+ const InternalDrawerContext2 = createInternalDrawerContext(
679
+ defaultedProps.contextId
680
+ );
681
+ return untrack(() => <DrawerContext2
682
+ value={{
683
+ snapPoints: () => defaultedProps.snapPoints,
684
+ breakPoints: () => defaultedProps.breakPoints,
685
+ defaultSnapPoint: () => defaultedProps.defaultSnapPoint,
686
+ activeSnapPoint,
687
+ setActiveSnapPoint,
688
+ side: () => defaultedProps.side,
689
+ isDragging,
690
+ isTransitioning: () => transitionState() !== null,
691
+ transitionState,
692
+ openPercentage,
693
+ translate,
694
+ velocityCacheReset: () => defaultedProps.velocityCacheReset,
695
+ allowSkippingSnapPoints: () => defaultedProps.allowSkippingSnapPoints,
696
+ handleScrollableElements: () => defaultedProps.handleScrollableElements,
697
+ transitionResize: () => defaultedProps.transitionResize
698
+ }}
699
+ >
700
+ <InternalDrawerContext2
701
+ value={{
702
+ snapPoints: () => defaultedProps.snapPoints,
703
+ breakPoints: () => defaultedProps.breakPoints,
704
+ defaultSnapPoint: () => defaultedProps.defaultSnapPoint,
705
+ activeSnapPoint,
706
+ setActiveSnapPoint,
707
+ side: () => defaultedProps.side,
708
+ isDragging,
709
+ isTransitioning: () => transitionState() !== null,
710
+ transitionState,
711
+ openPercentage,
712
+ translate,
713
+ velocityCacheReset: () => defaultedProps.velocityCacheReset,
714
+ allowSkippingSnapPoints: () => defaultedProps.allowSkippingSnapPoints,
715
+ handleScrollableElements: () => defaultedProps.handleScrollableElements,
716
+ transitionResize: () => defaultedProps.transitionResize,
717
+ dampFunction: defaultedProps.dampFunction,
718
+ velocityFunction: defaultedProps.velocityFunction,
719
+ setIsDragging,
720
+ setTranslate,
721
+ drawerSize,
722
+ resolvedActiveSnapPoint,
723
+ drawerStyles,
724
+ setTransitionState,
725
+ transitionSize,
726
+ closeDrawer
727
+ }}
728
+ >
729
+ <Dialog6
730
+ open={transitionAwareOpen()}
731
+ onOpenChange={setOpen}
732
+ contextId={defaultedProps.contextId}
733
+ closeOnOutsidePointer={!isDragging() && defaultedProps.closeOnOutsidePointer}
734
+ {...otherProps}
735
+ >
736
+ {(dialogChildrenProps) => resolveChildren(dialogChildrenProps)}
737
+ </Dialog6>
738
+ </InternalDrawerContext2>
739
+ </DrawerContext2>);
740
+ });
741
+ return memoizedDrawerRoot;
742
+ };
743
+ var Root_default = DrawerRoot;
744
+
745
+ // src/Trigger.tsx
746
+ import Dialog7 from "@corvu-next/dialog";
747
+ var DrawerTrigger = (props) => {
748
+ return <Dialog7.Trigger
749
+ data-corvu-drawer-trigger=""
750
+ data-corvu-dialog-trigger={null}
751
+ {...props}
752
+ />;
753
+ };
754
+ var Trigger_default = DrawerTrigger;
755
+
756
+ // src/index.ts
757
+ var Drawer = Object.assign(Root_default, {
758
+ Trigger: Trigger_default,
759
+ Portal,
760
+ Overlay: Overlay_default,
761
+ Content: Content_default,
762
+ Label: Label_default,
763
+ Description: Description_default,
764
+ Close: Close_default,
765
+ useContext: useDrawerContext,
766
+ useDialogContext
767
+ });
768
+ var index_default = Drawer;
769
+ export {
770
+ index_default as default
771
+ };