@avenue-ticketing/ui 0.12.0-beta.1 → 0.12.0-beta.3
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/react/badge-groups.js +2 -2
- package/dist/react/badge-groups.js.map +1 -1
- package/dist/react/badge.js +49 -18
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button.js +2 -2
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.js +10 -7
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/combobox.d.ts +3 -2
- package/dist/react/combobox.js +284 -32
- package/dist/react/combobox.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.js +176 -14
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -1
- package/dist/react/dropdown-account-button.js +190 -25
- package/dist/react/dropdown-account-button.js.map +1 -1
- package/dist/react/dropdown-account-card-md.js +189 -24
- package/dist/react/dropdown-account-card-md.js.map +1 -1
- package/dist/react/dropdown-account-card-sm.js +189 -24
- package/dist/react/dropdown-account-card-sm.js.map +1 -1
- package/dist/react/dropdown-account-card-xs.js +189 -24
- package/dist/react/dropdown-account-card-xs.js.map +1 -1
- package/dist/react/dropdown-avatar.js +190 -25
- package/dist/react/dropdown-avatar.js.map +1 -1
- package/dist/react/dropdown-button-advanced.js +190 -25
- package/dist/react/dropdown-button-advanced.js.map +1 -1
- package/dist/react/dropdown-button-link.js +189 -24
- package/dist/react/dropdown-button-link.js.map +1 -1
- package/dist/react/dropdown-button-simple.js +190 -25
- package/dist/react/dropdown-button-simple.js.map +1 -1
- package/dist/react/dropdown-icon-advanced.js +189 -24
- package/dist/react/dropdown-icon-advanced.js.map +1 -1
- package/dist/react/dropdown-icon-simple.js +189 -24
- package/dist/react/dropdown-icon-simple.js.map +1 -1
- package/dist/react/dropdown-integration.js +190 -25
- package/dist/react/dropdown-integration.js.map +1 -1
- package/dist/react/dropdown-search-advanced.js +191 -26
- package/dist/react/dropdown-search-advanced.js.map +1 -1
- package/dist/react/dropdown-search-simple.js +191 -26
- package/dist/react/dropdown-search-simple.js.map +1 -1
- package/dist/react/dropdown.d.ts +4 -1
- package/dist/react/dropdown.js +189 -24
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/input-date.js.map +1 -1
- package/dist/react/input-file.js +3 -3
- package/dist/react/input-file.js.map +1 -1
- package/dist/react/input-group.js.map +1 -1
- package/dist/react/input-number.js +2 -2
- package/dist/react/input-number.js.map +1 -1
- package/dist/react/input-payment.js +1 -1
- package/dist/react/input-payment.js.map +1 -1
- package/dist/react/input-tags-outer.js +9 -9
- package/dist/react/input-tags-outer.js.map +1 -1
- package/dist/react/input-tags.js +8 -8
- package/dist/react/input-tags.js.map +1 -1
- package/dist/react/input.js +1 -1
- package/dist/react/input.js.map +1 -1
- package/dist/react/multi-select.d.ts +3 -2
- package/dist/react/multi-select.js +230 -29
- package/dist/react/multi-select.js.map +1 -1
- package/dist/react/popover.d.ts +10 -1
- package/dist/react/popover.js +195 -18
- package/dist/react/popover.js.map +1 -1
- package/dist/react/radio-buttons.js +2 -1
- package/dist/react/radio-buttons.js.map +1 -1
- package/dist/react/select-item.d.ts +2 -1
- package/dist/react/select-item.js +11 -7
- package/dist/react/select-item.js.map +1 -1
- package/dist/react/select.d.ts +4 -3
- package/dist/react/select.js +298 -42
- package/dist/react/select.js.map +1 -1
- package/dist/react/switch.js +1 -1
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +5 -2
- package/dist/react/tag-select.js +215 -25
- package/dist/react/tag-select.js.map +1 -1
- package/dist/react/tags.js +8 -8
- package/dist/react/tags.js.map +1 -1
- package/dist/react/textarea.js.map +1 -1
- package/dist/select-mobile-sheet-CB2ptDTJ.d.ts +12 -0
- package/dist/{select-shared-B3Y5SMXU.d.ts → select-shared-oJEeJxeB.d.ts} +6 -0
- package/package.json +1 -1
- package/theme.css +3 -1
package/dist/react/dropdown.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as react_aria_components from 'react-aria-components';
|
|
|
2
2
|
import { MenuTrigger, PopoverProps, MenuProps, MenuItemProps, SeparatorProps, ButtonProps } from 'react-aria-components';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { FC, RefAttributes } from 'react';
|
|
5
|
+
import { S as SelectMobileOptions } from '../select-mobile-sheet-CB2ptDTJ.js';
|
|
5
6
|
|
|
6
7
|
interface DropdownItemProps extends MenuItemProps {
|
|
7
8
|
/** The label of the item to be displayed. */
|
|
@@ -22,10 +23,12 @@ interface DropdownItemProps extends MenuItemProps {
|
|
|
22
23
|
interface DropdownMenuProps<T extends object> extends MenuProps<T> {
|
|
23
24
|
}
|
|
24
25
|
interface DropdownPopoverProps extends PopoverProps {
|
|
26
|
+
/** Narrow-viewport (≤1024px) bottom-sheet options. */
|
|
27
|
+
mobileOptions?: SelectMobileOptions;
|
|
25
28
|
}
|
|
26
29
|
declare const Dropdown: {
|
|
27
30
|
Root: typeof MenuTrigger;
|
|
28
|
-
Popover: (props: DropdownPopoverProps) => react.JSX.Element;
|
|
31
|
+
Popover: ({ mobileOptions, children, className, style, ...props }: DropdownPopoverProps) => react.JSX.Element;
|
|
29
32
|
Menu: <T extends object>(props: DropdownMenuProps<T>) => react.JSX.Element;
|
|
30
33
|
Section: <T>(props: react_aria_components.MenuSectionProps<T> & React.RefAttributes<HTMLElement>) => react.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
|
|
31
34
|
SectionHeader: (props: react_aria_components.HeaderProps & React.RefAttributes<HTMLElement>) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
|
package/dist/react/dropdown.js
CHANGED
|
@@ -1,13 +1,90 @@
|
|
|
1
|
-
import { createContext, useCallback,
|
|
1
|
+
import { createContext, useCallback, useMemo, useContext, useEffect, useState, useLayoutEffect, useRef } from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
2
3
|
import { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';
|
|
3
4
|
import { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';
|
|
4
5
|
import { DotsThreeVerticalIcon } from '@phosphor-icons/react/dist/csr/DotsThreeVertical';
|
|
5
|
-
import {
|
|
6
|
+
import { XIcon } from '@phosphor-icons/react/dist/csr/X';
|
|
7
|
+
import { Header, MenuSection, MenuTrigger, MenuItem, Menu, OverlayTriggerStateContext, Popover, Separator, Button } from 'react-aria-components';
|
|
6
8
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
7
9
|
import { UserIcon } from '@phosphor-icons/react/dist/csr/User';
|
|
8
10
|
import '@phosphor-icons/react/dist/csr/Plus';
|
|
9
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
11
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
12
|
|
|
13
|
+
var MOBILE_SHEET_MOTION_MS = 175;
|
|
14
|
+
var MOBILE_SHEET_ENTRY_EASING = "cubic-bezier(0.85, 0, 0.15, 1)";
|
|
15
|
+
var MOBILE_SHEET_EXIT_EASING = "cubic-bezier(0.85, 0, 1, 0.15)";
|
|
16
|
+
var MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX = 120;
|
|
17
|
+
function resolveSelectMobileOptions(mobileOptions) {
|
|
18
|
+
return {
|
|
19
|
+
sheet: mobileOptions?.sheet ?? true,
|
|
20
|
+
title: mobileOptions?.title,
|
|
21
|
+
sheetClassName: mobileOptions?.className,
|
|
22
|
+
contentClassName: mobileOptions?.contentClassName
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function useMobileSheetAnimation(open, enabled, slideEntrance = true, slideOffsetPx = MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX) {
|
|
26
|
+
const [shouldRender, setShouldRender] = useState(open);
|
|
27
|
+
const [isAnimating, setIsAnimating] = useState(false);
|
|
28
|
+
useLayoutEffect(() => {
|
|
29
|
+
if (!enabled) {
|
|
30
|
+
setShouldRender(open);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (open) {
|
|
34
|
+
setShouldRender(true);
|
|
35
|
+
}
|
|
36
|
+
}, [open, enabled]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!enabled || open) return;
|
|
39
|
+
const timer = setTimeout(() => setShouldRender(false), MOBILE_SHEET_MOTION_MS);
|
|
40
|
+
return () => clearTimeout(timer);
|
|
41
|
+
}, [open, enabled]);
|
|
42
|
+
useLayoutEffect(() => {
|
|
43
|
+
if (!enabled || open || !shouldRender) return;
|
|
44
|
+
setIsAnimating(false);
|
|
45
|
+
}, [enabled, open, shouldRender]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!enabled || !shouldRender || !open) return;
|
|
48
|
+
let raf2 = 0;
|
|
49
|
+
const raf1 = requestAnimationFrame(() => {
|
|
50
|
+
raf2 = requestAnimationFrame(() => setIsAnimating(true));
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
cancelAnimationFrame(raf1);
|
|
54
|
+
if (raf2) cancelAnimationFrame(raf2);
|
|
55
|
+
};
|
|
56
|
+
}, [shouldRender, open, enabled]);
|
|
57
|
+
const motionEasing = open ? MOBILE_SHEET_ENTRY_EASING : MOBILE_SHEET_EXIT_EASING;
|
|
58
|
+
const hiddenTransform = slideEntrance ? `translateY(${slideOffsetPx}px)` : "translateY(100%)";
|
|
59
|
+
const panelStyle = enabled ? {
|
|
60
|
+
transform: isAnimating ? "translateY(0)" : hiddenTransform,
|
|
61
|
+
opacity: isAnimating ? 1 : 0,
|
|
62
|
+
transitionProperty: "transform, opacity",
|
|
63
|
+
transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
|
|
64
|
+
transitionTimingFunction: motionEasing
|
|
65
|
+
} : void 0;
|
|
66
|
+
const backdropStyle = enabled ? {
|
|
67
|
+
opacity: isAnimating ? 1 : 0,
|
|
68
|
+
transitionProperty: "opacity",
|
|
69
|
+
transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
|
|
70
|
+
transitionTimingFunction: motionEasing
|
|
71
|
+
} : void 0;
|
|
72
|
+
return { shouldRender, isAnimating, panelStyle, backdropStyle };
|
|
73
|
+
}
|
|
74
|
+
var MOBILE_SHEET_MAX_PX = 1024;
|
|
75
|
+
function useIsMobile(breakpoint = MOBILE_SHEET_MAX_PX + 1) {
|
|
76
|
+
const [isMobile, setIsMobile] = useState(() => {
|
|
77
|
+
if (typeof window === "undefined") return false;
|
|
78
|
+
return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;
|
|
79
|
+
});
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
|
|
82
|
+
const handler = (e) => setIsMobile(e.matches);
|
|
83
|
+
mq.addEventListener("change", handler);
|
|
84
|
+
return () => mq.removeEventListener("change", handler);
|
|
85
|
+
}, [breakpoint]);
|
|
86
|
+
return isMobile;
|
|
87
|
+
}
|
|
11
88
|
var twMerge = extendTailwindMerge({
|
|
12
89
|
extend: {
|
|
13
90
|
theme: {
|
|
@@ -168,7 +245,7 @@ var Avatar = ({
|
|
|
168
245
|
};
|
|
169
246
|
var CHECKBOX_TICK_DELAY_MS = 60;
|
|
170
247
|
var CHECKBOX_TICK_DRAW_MS = 100;
|
|
171
|
-
function CheckboxAnimatedCheckMark({ className }) {
|
|
248
|
+
function CheckboxAnimatedCheckMark({ pixelSize, className }) {
|
|
172
249
|
const pathRef = useRef(null);
|
|
173
250
|
useLayoutEffect(() => {
|
|
174
251
|
const path = pathRef.current;
|
|
@@ -189,7 +266,7 @@ function CheckboxAnimatedCheckMark({ className }) {
|
|
|
189
266
|
});
|
|
190
267
|
return () => anim.cancel();
|
|
191
268
|
}, []);
|
|
192
|
-
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 14 14", fill: "none", className: cx("block
|
|
269
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", width: pixelSize, height: pixelSize, viewBox: "0 0 14 14", fill: "none", className: cx("block", className), children: /* @__PURE__ */ jsx(
|
|
193
270
|
"path",
|
|
194
271
|
{
|
|
195
272
|
ref: pathRef,
|
|
@@ -204,14 +281,15 @@ function CheckboxAnimatedCheckMark({ className }) {
|
|
|
204
281
|
var focusRingShadow = "outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
205
282
|
var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = "sm", isFocusVisible = false }) => {
|
|
206
283
|
const isChecked = isSelected || isIndeterminate;
|
|
207
|
-
const
|
|
284
|
+
const iconPixelSize = size === "sm" ? 10 : 14;
|
|
208
285
|
return /* @__PURE__ */ jsxs(
|
|
209
286
|
"div",
|
|
210
287
|
{
|
|
211
288
|
className: cx(
|
|
212
|
-
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary",
|
|
289
|
+
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip border border-solid border-primary",
|
|
213
290
|
size === "sm" ? "size-4 rounded-xs" : "size-5 rounded-sm",
|
|
214
291
|
isChecked ? "border-transparent bg-brand-solid" : "bg-primary",
|
|
292
|
+
!isChecked && !isDisabled && "group-hover:bg-primary_hover",
|
|
215
293
|
isDisabled && "cursor-not-allowed opacity-50",
|
|
216
294
|
isDisabled && !isChecked && "bg-tertiary",
|
|
217
295
|
isFocusVisible && !isDisabled && focusRingShadow,
|
|
@@ -222,13 +300,15 @@ var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size =
|
|
|
222
300
|
"svg",
|
|
223
301
|
{
|
|
224
302
|
"aria-hidden": "true",
|
|
303
|
+
width: iconPixelSize,
|
|
304
|
+
height: iconPixelSize,
|
|
225
305
|
viewBox: "0 0 14 14",
|
|
226
306
|
fill: "none",
|
|
227
|
-
className:
|
|
307
|
+
className: "pointer-events-none block text-fg-white",
|
|
228
308
|
children: /* @__PURE__ */ jsx("path", { d: "M2.91675 7H11.0834", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
229
309
|
}
|
|
230
310
|
),
|
|
231
|
-
isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { className:
|
|
311
|
+
isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { pixelSize: iconPixelSize, className: "pointer-events-none text-fg-white" })
|
|
232
312
|
]
|
|
233
313
|
}
|
|
234
314
|
);
|
|
@@ -273,6 +353,7 @@ var RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size
|
|
|
273
353
|
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary",
|
|
274
354
|
size === "sm" ? "size-4" : "size-5",
|
|
275
355
|
isSelected && "border-transparent bg-brand-solid",
|
|
356
|
+
!isSelected && !isDisabled && "group-hover:bg-primary_hover",
|
|
276
357
|
isDisabled && "cursor-not-allowed opacity-50",
|
|
277
358
|
isDisabled && !isSelected && "bg-tertiary",
|
|
278
359
|
isFocusVisible && !isDisabled && focusRingShadow2,
|
|
@@ -314,7 +395,7 @@ var ToggleBase = ({ className, isHovered, isDisabled, isFocusVisible, isSelected
|
|
|
314
395
|
const classes = slim ? styles2.slim[size] : styles2.default[size];
|
|
315
396
|
const offTrackBackground = (() => {
|
|
316
397
|
if (isDisabled) return "bg-tertiary";
|
|
317
|
-
if (isHovered) return
|
|
398
|
+
if (isHovered) return "bg-toggle-track_hover";
|
|
318
399
|
return "bg-quaternary";
|
|
319
400
|
})();
|
|
320
401
|
return /* @__PURE__ */ jsx(
|
|
@@ -410,11 +491,11 @@ var DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, s
|
|
|
410
491
|
children: [
|
|
411
492
|
state.selectionMode !== "none" && !avatarUrl && !Icon && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "mr-2" }),
|
|
412
493
|
avatarUrl && /* @__PURE__ */ jsx("div", { className: "mr-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(Avatar, { "aria-hidden": "true", size: "xs", src: avatarUrl, alt: label, className: "size-5" }) }),
|
|
413
|
-
Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-
|
|
494
|
+
Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-secondary" }),
|
|
414
495
|
/* @__PURE__ */ jsx("span", { className: cx("grow truncate text-sm font-semibold text-secondary", state.isFocused && "text-secondary_hover"), children: label || (typeof children === "function" ? children(state) : children) }),
|
|
415
496
|
addon && /* @__PURE__ */ jsx("span", { className: "ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary", children: addon }),
|
|
416
497
|
state.selectionMode !== "none" && (avatarUrl || Icon) && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "ml-1" }),
|
|
417
|
-
state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-
|
|
498
|
+
state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-secondary" })
|
|
418
499
|
]
|
|
419
500
|
}
|
|
420
501
|
)
|
|
@@ -430,21 +511,105 @@ var DropdownMenu = (props) => {
|
|
|
430
511
|
}
|
|
431
512
|
);
|
|
432
513
|
};
|
|
433
|
-
var
|
|
434
|
-
|
|
435
|
-
|
|
514
|
+
var DropdownSheetDepthContext = createContext(0);
|
|
515
|
+
function DropdownSheetCloseButton({ onClose }) {
|
|
516
|
+
return /* @__PURE__ */ jsxs(
|
|
517
|
+
"button",
|
|
436
518
|
{
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
519
|
+
type: "button",
|
|
520
|
+
onClick: (e) => {
|
|
521
|
+
e.stopPropagation();
|
|
522
|
+
onClose();
|
|
523
|
+
},
|
|
524
|
+
className: "flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full text-fg-primary transition duration-100 ease-linear hover:bg-primary_hover active:scale-[0.96] focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]",
|
|
525
|
+
children: [
|
|
526
|
+
/* @__PURE__ */ jsx(XIcon, { className: "size-5", "aria-hidden": "true" }),
|
|
527
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
528
|
+
]
|
|
446
529
|
}
|
|
447
530
|
);
|
|
531
|
+
}
|
|
532
|
+
function DropdownSheetChrome({ title, onClose, children }) {
|
|
533
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
534
|
+
/* @__PURE__ */ jsxs("div", { className: cx("flex w-full shrink-0 items-center py-2 pl-4 pr-2", title ? "justify-between gap-3" : "justify-end"), children: [
|
|
535
|
+
title ? /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-base font-semibold text-primary", children: title }) : null,
|
|
536
|
+
/* @__PURE__ */ jsx(DropdownSheetCloseButton, { onClose })
|
|
537
|
+
] }),
|
|
538
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-[max(2.5rem,calc(env(safe-area-inset-bottom)+2rem))]", children })
|
|
539
|
+
] });
|
|
540
|
+
}
|
|
541
|
+
var DropdownPopover = ({ mobileOptions, children, className, style, ...props }) => {
|
|
542
|
+
const isMobile = useIsMobile();
|
|
543
|
+
const resolvedMobile = useMemo(() => resolveSelectMobileOptions(mobileOptions), [mobileOptions]);
|
|
544
|
+
const useMobileSheet = isMobile && resolvedMobile.sheet;
|
|
545
|
+
const overlayState = useContext(OverlayTriggerStateContext);
|
|
546
|
+
const open = overlayState?.isOpen ?? false;
|
|
547
|
+
const parentDepth = useContext(DropdownSheetDepthContext);
|
|
548
|
+
const depth = parentDepth + 1;
|
|
549
|
+
const { shouldRender, panelStyle, backdropStyle } = useMobileSheetAnimation(open, useMobileSheet);
|
|
550
|
+
useEffect(() => {
|
|
551
|
+
if (!useMobileSheet || !open) return;
|
|
552
|
+
const prev = document.body.style.overflow;
|
|
553
|
+
document.body.style.overflow = "hidden";
|
|
554
|
+
return () => {
|
|
555
|
+
document.body.style.overflow = prev;
|
|
556
|
+
};
|
|
557
|
+
}, [useMobileSheet, open]);
|
|
558
|
+
if (!useMobileSheet) {
|
|
559
|
+
return /* @__PURE__ */ jsx(
|
|
560
|
+
Popover,
|
|
561
|
+
{
|
|
562
|
+
placement: "bottom right",
|
|
563
|
+
...props,
|
|
564
|
+
style,
|
|
565
|
+
className: (state) => cx(
|
|
566
|
+
"w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform",
|
|
567
|
+
state.isEntering && "duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5",
|
|
568
|
+
state.isExiting && "duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5",
|
|
569
|
+
typeof className === "function" ? className(state) : className
|
|
570
|
+
),
|
|
571
|
+
children
|
|
572
|
+
}
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
const close = () => overlayState?.close();
|
|
576
|
+
const showMobileSheet = shouldRender;
|
|
577
|
+
const isMobileSheetExiting = showMobileSheet && !open;
|
|
578
|
+
const scrimZIndex = 50 + (depth - 1) * 10;
|
|
579
|
+
const sheetZIndex = scrimZIndex + 1;
|
|
580
|
+
const mobileScrim = shouldRender && typeof document !== "undefined" ? createPortal(
|
|
581
|
+
/* @__PURE__ */ jsx(
|
|
582
|
+
"div",
|
|
583
|
+
{
|
|
584
|
+
className: "fixed inset-0 bg-overlay/70",
|
|
585
|
+
style: { ...backdropStyle, zIndex: scrimZIndex },
|
|
586
|
+
onClick: close,
|
|
587
|
+
"aria-hidden": "true"
|
|
588
|
+
}
|
|
589
|
+
),
|
|
590
|
+
document.body
|
|
591
|
+
) : null;
|
|
592
|
+
return /* @__PURE__ */ jsxs(DropdownSheetDepthContext.Provider, { value: depth, children: [
|
|
593
|
+
mobileScrim,
|
|
594
|
+
/* @__PURE__ */ jsx(
|
|
595
|
+
Popover,
|
|
596
|
+
{
|
|
597
|
+
placement: "bottom",
|
|
598
|
+
containerPadding: 0,
|
|
599
|
+
offset: 0,
|
|
600
|
+
...props,
|
|
601
|
+
isExiting: isMobileSheetExiting,
|
|
602
|
+
"data-dropdown-mobile-sheet": true,
|
|
603
|
+
style: { ...panelStyle, zIndex: sheetZIndex, ...style },
|
|
604
|
+
className: (state) => cx(
|
|
605
|
+
"fixed! inset-x-0! bottom-0! top-auto! right-0! left-0! flex max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] w-full! max-w-none! flex-col overflow-hidden rounded-t-2xl rounded-b-none border-x-0 border-t border-secondary bg-primary shadow-xl outline-hidden",
|
|
606
|
+
resolvedMobile.sheetClassName,
|
|
607
|
+
typeof className === "function" ? className(state) : className
|
|
608
|
+
),
|
|
609
|
+
children: /* @__PURE__ */ jsx(DropdownSheetChrome, { title: resolvedMobile.title, onClose: close, children: typeof children === "function" ? null : children })
|
|
610
|
+
}
|
|
611
|
+
)
|
|
612
|
+
] });
|
|
448
613
|
};
|
|
449
614
|
var DropdownSeparator = (props) => {
|
|
450
615
|
return /* @__PURE__ */ jsx(Separator, { ...props, className: cx("my-1 h-px w-full bg-border-secondary", props.className) });
|