@xingxingmofashu/ui 0.1.0-beta.2 → 0.1.1

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 (56) hide show
  1. package/README.md +115 -66
  2. package/dist/components/accordion.d.ts +1 -1
  3. package/dist/components/{accordion.js → accordion.mjs} +1 -1
  4. package/dist/components/{alert-dialog.js → alert-dialog.mjs} +2 -2
  5. package/dist/components/button.d.ts +1 -1
  6. package/dist/components/{button.js → button.mjs} +1 -1
  7. package/dist/components/{card.js → card.mjs} +1 -1
  8. package/dist/components/checkbox.d.ts +4 -2
  9. package/dist/components/{checkbox.js → checkbox.mjs} +1 -1
  10. package/dist/components/{dialog.js → dialog.mjs} +1 -1
  11. package/dist/components/drawer.d.ts +19 -0
  12. package/dist/components/drawer.mjs +40 -0
  13. package/dist/components/input.d.ts +2 -2
  14. package/dist/components/{input.js → input.mjs} +1 -1
  15. package/dist/components/popover.d.ts +32 -0
  16. package/dist/components/popover.mjs +59 -0
  17. package/dist/components/scroll-area.d.ts +21 -0
  18. package/dist/components/scroll-area.mjs +64 -0
  19. package/dist/components/{slider.js → slider.mjs} +1 -1
  20. package/dist/components/switch.d.ts +4 -2
  21. package/dist/components/{switch.js → switch.mjs} +41 -24
  22. package/dist/components/toast.d.ts +19 -0
  23. package/dist/components/toast.mjs +120 -0
  24. package/dist/components/toggle-group.d.ts +1 -1
  25. package/dist/components/{toggle-group.js → toggle-group.mjs} +1 -1
  26. package/dist/components/toggle.d.ts +17 -0
  27. package/dist/components/toggle.mjs +26 -0
  28. package/dist/composables/create-toast-manager.d.ts +6 -0
  29. package/dist/composables/create-toast-manager.mjs +3 -0
  30. package/dist/composables/use-toast.d.ts +7 -0
  31. package/dist/composables/use-toast.mjs +4 -0
  32. package/dist/index.css +1 -1
  33. package/dist/index.d.ts +17 -10
  34. package/dist/index.mjs +27 -0
  35. package/dist/theme/{button.js → button.mjs} +1 -1
  36. package/dist/theme/drawer.d.ts +98 -0
  37. package/dist/theme/drawer.mjs +87 -0
  38. package/dist/theme/popover.d.ts +80 -0
  39. package/dist/theme/popover.mjs +42 -0
  40. package/dist/theme/scroll-area.d.ts +68 -0
  41. package/dist/theme/scroll-area.mjs +46 -0
  42. package/dist/theme/{switch.js → switch.mjs} +3 -4
  43. package/dist/theme/toast.d.ts +107 -0
  44. package/dist/theme/toast.mjs +104 -0
  45. package/dist/theme/toggle.d.ts +95 -0
  46. package/dist/theme/toggle.mjs +64 -0
  47. package/package.json +16 -9
  48. package/dist/index.js +0 -14
  49. /package/dist/theme/{accordion.js → accordion.mjs} +0 -0
  50. /package/dist/theme/{alert-dialog.js → alert-dialog.mjs} +0 -0
  51. /package/dist/theme/{card.js → card.mjs} +0 -0
  52. /package/dist/theme/{checkbox.js → checkbox.mjs} +0 -0
  53. /package/dist/theme/{dialog.js → dialog.mjs} +0 -0
  54. /package/dist/theme/{input.js → input.mjs} +0 -0
  55. /package/dist/theme/{slider.js → slider.mjs} +0 -0
  56. /package/dist/theme/{toggle-group.js → toggle-group.mjs} +0 -0
@@ -2,9 +2,9 @@
2
2
  import { Switch as UISwitch } from "@base-ui/react/switch";
3
3
  import { cn } from "cn";
4
4
  import * as React from "react";
5
- import theme from "../theme/switch.js";
6
- function LiquidGlassFilter() {
7
- return /* @__PURE__ */ React.createElement("svg", { "aria-hidden": "true", focusable: "false", "data-layer": "filter" }, /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("filter", { id: "ui-switch-goo" }, /* @__PURE__ */ React.createElement(
5
+ import theme from "../theme/switch.mjs";
6
+ function LiquidGlassFilter({ id }) {
7
+ return /* @__PURE__ */ React.createElement("svg", { "aria-hidden": "true", focusable: "false", "data-layer": "filter" }, /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("filter", { id: `${id}-goo` }, /* @__PURE__ */ React.createElement(
8
8
  "feGaussianBlur",
9
9
  {
10
10
  in: "SourceGraphic",
@@ -19,22 +19,31 @@ function LiquidGlassFilter() {
19
19
  type: "matrix",
20
20
  result: "matrix"
21
21
  }
22
- ), /* @__PURE__ */ React.createElement("feComposite", { in: "matrix", operator: "atop", result: "goo" })), /* @__PURE__ */ React.createElement("filter", { id: "ui-switch-remove-black", colorInterpolationFilters: "sRGB" }, /* @__PURE__ */ React.createElement(
23
- "feColorMatrix",
24
- {
25
- type: "matrix",
26
- values: "1 0 0 0 0\n 0 1 0 0 0\n 0 0 1 0 0\n -255 -255 -255 0 1",
27
- result: "black-pixels"
28
- }
29
- ), /* @__PURE__ */ React.createElement(
30
- "feMorphology",
22
+ ), /* @__PURE__ */ React.createElement("feComposite", { in: "matrix", operator: "atop", result: "goo" })), /* @__PURE__ */ React.createElement(
23
+ "filter",
31
24
  {
32
- in: "black-pixels",
33
- operator: "dilate",
34
- radius: "0.5",
35
- result: "smoothed"
36
- }
37
- ), /* @__PURE__ */ React.createElement("feComposite", { in: "SourceGraphic", in2: "smoothed", operator: "out" }))));
25
+ id: `${id}-remove-black`,
26
+ colorInterpolationFilters: "sRGB"
27
+ },
28
+ /* @__PURE__ */ React.createElement(
29
+ "feColorMatrix",
30
+ {
31
+ type: "matrix",
32
+ values: "1 0 0 0 0\n 0 1 0 0 0\n 0 0 1 0 0\n -255 -255 -255 0 1",
33
+ result: "black-pixels"
34
+ }
35
+ ),
36
+ /* @__PURE__ */ React.createElement(
37
+ "feMorphology",
38
+ {
39
+ in: "black-pixels",
40
+ operator: "dilate",
41
+ radius: "0.5",
42
+ result: "smoothed"
43
+ }
44
+ ),
45
+ /* @__PURE__ */ React.createElement("feComposite", { in: "SourceGraphic", in2: "smoothed", operator: "out" })
46
+ )));
38
47
  }
39
48
  function Switch({
40
49
  className,
@@ -47,6 +56,11 @@ function Switch({
47
56
  ...props
48
57
  }) {
49
58
  const ui = theme({ size });
59
+ const filterId = React.useId();
60
+ const filterStyles = {
61
+ "--ui-switch-goo-filter": `url("#${filterId}-goo")`,
62
+ "--ui-switch-remove-black-filter": `url("#${filterId}-remove-black")`
63
+ };
50
64
  const [animating, setAnimating] = React.useState(false);
51
65
  const handleCheckedChange = (checked, details) => {
52
66
  onCheckedChange?.(checked, details);
@@ -73,13 +87,16 @@ function Switch({
73
87
  onCheckedChange: handleCheckedChange,
74
88
  className: cn(ui.root(), className)
75
89
  },
76
- /* @__PURE__ */ React.createElement(
90
+ /* @__PURE__ */ React.createElement("span", { "data-slot": "container", className: ui.container() }, /* @__PURE__ */ React.createElement(
77
91
  "span",
78
92
  {
79
- "data-slot": "container",
80
- className: ui.container()
93
+ "data-slot": "base",
94
+ className: ui.base(),
95
+ style: filterStyles
81
96
  },
82
- /* @__PURE__ */ React.createElement("span", { "data-slot": "base", className: ui.base() }, /* @__PURE__ */ React.createElement(LiquidGlassFilter, null), /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-layer": "mask" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "track" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "track-mask" }))), /* @__PURE__ */ React.createElement(
97
+ /* @__PURE__ */ React.createElement(LiquidGlassFilter, { id: filterId }),
98
+ /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-layer": "mask" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "track" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "track-mask" }))),
99
+ /* @__PURE__ */ React.createElement(
83
100
  UISwitch.Thumb,
84
101
  {
85
102
  "data-slot": "thumb",
@@ -90,8 +107,8 @@ function Switch({
90
107
  /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-layer": "glass-rim" }),
91
108
  /* @__PURE__ */ React.createElement("span", { "data-layer": "glass-lens" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "goo" }, /* @__PURE__ */ React.createElement("span", { "data-layer": "inner-glow" }), /* @__PURE__ */ React.createElement("span", { "data-layer": "fill" }))),
92
109
  /* @__PURE__ */ React.createElement("span", { "data-layer": "cover" })
93
- ))
94
- ),
110
+ )
111
+ )),
95
112
  label || description ? /* @__PURE__ */ React.createElement("span", { "data-slot": "wrapper", className: ui.wrapper() }, label ? /* @__PURE__ */ React.createElement("span", { "data-slot": "label", className: ui.label() }, label) : null, description ? /* @__PURE__ */ React.createElement("span", { "data-slot": "description", className: ui.description() }, description) : null) : null
96
113
  );
97
114
  }
@@ -0,0 +1,19 @@
1
+ import { Toast as UIToast } from "@base-ui/react/toast";
2
+ import * as React from "react";
3
+ /** Corner or edge where the toast stack is anchored. */
4
+ type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
5
+ interface ToastProviderProps extends Omit<UIToast.Provider.Props, "children"> {
6
+ /** App content that can call `useToast`. */
7
+ children?: React.ReactNode;
8
+ /** Corner or edge where the toast stack is anchored. */
9
+ position?: ToastPosition;
10
+ /** Accessible label for the close button. */
11
+ closeLabel?: string;
12
+ /** Accessible label for the notification region. */
13
+ viewportLabel?: string;
14
+ /** Tailwind classes merged into the viewport. */
15
+ className?: string;
16
+ }
17
+ declare function ToastProvider({ children, position, closeLabel, viewportLabel, className, ...props }: ToastProviderProps): React.JSX.Element;
18
+ export { ToastProvider };
19
+ export type { ToastPosition, ToastProviderProps };
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { Toast as UIToast } from "@base-ui/react/toast";
3
+ import { cn } from "cn";
4
+ import * as React from "react";
5
+ import { useToast } from "../composables/use-toast.mjs";
6
+ import theme from "../theme/toast.mjs";
7
+ function CloseIcon() {
8
+ return /* @__PURE__ */ React.createElement(
9
+ "svg",
10
+ {
11
+ "aria-hidden": "true",
12
+ viewBox: "0 0 16 16",
13
+ fill: "none",
14
+ stroke: "currentColor",
15
+ strokeWidth: "1.5",
16
+ strokeLinecap: "round",
17
+ className: "size-4"
18
+ },
19
+ /* @__PURE__ */ React.createElement("path", { d: "m4 4 8 8M12 4l-8 8" })
20
+ );
21
+ }
22
+ function statusIconContent(type) {
23
+ const svgProps = {
24
+ viewBox: "0 0 20 20",
25
+ fill: "none",
26
+ stroke: "currentColor",
27
+ strokeWidth: 1.5,
28
+ strokeLinecap: "round",
29
+ strokeLinejoin: "round",
30
+ className: "size-full"
31
+ };
32
+ switch (type) {
33
+ case "info":
34
+ return /* @__PURE__ */ React.createElement("svg", { ...svgProps }, /* @__PURE__ */ React.createElement("circle", { cx: "10", cy: "10", r: "7.25" }), /* @__PURE__ */ React.createElement("path", { d: "M10 9.25v4" }), /* @__PURE__ */ React.createElement("path", { d: "M10 6.75h.01" }));
35
+ case "success":
36
+ return /* @__PURE__ */ React.createElement("svg", { ...svgProps }, /* @__PURE__ */ React.createElement("circle", { cx: "10", cy: "10", r: "7.25" }), /* @__PURE__ */ React.createElement("path", { d: "m6.75 10.25 2.1 2.1 4.4-4.7" }));
37
+ case "warning":
38
+ return /* @__PURE__ */ React.createElement("svg", { ...svgProps }, /* @__PURE__ */ React.createElement("path", { d: "M10 3.25 17 16.5H3L10 3.25Z" }), /* @__PURE__ */ React.createElement("path", { d: "M10 8v3.5" }), /* @__PURE__ */ React.createElement("path", { d: "M10 14.25h.01" }));
39
+ case "error":
40
+ return /* @__PURE__ */ React.createElement("svg", { ...svgProps }, /* @__PURE__ */ React.createElement("circle", { cx: "10", cy: "10", r: "7.25" }), /* @__PURE__ */ React.createElement("path", { d: "M10 6.5v4.25" }), /* @__PURE__ */ React.createElement("path", { d: "M10 13.75h.01" }));
41
+ case "loading":
42
+ return /* @__PURE__ */ React.createElement("svg", { ...svgProps }, /* @__PURE__ */ React.createElement("circle", { cx: "10", cy: "10", r: "6.75", opacity: "0.25" }), /* @__PURE__ */ React.createElement("path", { d: "M10 3.25a6.75 6.75 0 0 1 6.75 6.75" }));
43
+ default:
44
+ return null;
45
+ }
46
+ }
47
+ function ToastStatusIcon({
48
+ type,
49
+ className
50
+ }) {
51
+ const content = statusIconContent(type);
52
+ if (!content) {
53
+ return null;
54
+ }
55
+ return /* @__PURE__ */ React.createElement(
56
+ "span",
57
+ {
58
+ "aria-hidden": "true",
59
+ "data-slot": "icon",
60
+ "data-icon": type,
61
+ className
62
+ },
63
+ content
64
+ );
65
+ }
66
+ function ToastList({
67
+ placement,
68
+ closeLabel
69
+ }) {
70
+ const { toasts } = useToast();
71
+ const ui = theme({ placement });
72
+ return toasts.map((toast) => /* @__PURE__ */ React.createElement(
73
+ UIToast.Root,
74
+ {
75
+ key: toast.id,
76
+ toast,
77
+ "data-slot": "toast",
78
+ className: ui.root(),
79
+ swipeDirection: placement === "top" ? "up" : "down"
80
+ },
81
+ /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-slot": "glass", className: ui.glass() }, /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-slot": "overlay", className: ui.overlay() })),
82
+ /* @__PURE__ */ React.createElement(UIToast.Content, { "data-slot": "content", className: ui.content() }, /* @__PURE__ */ React.createElement(ToastStatusIcon, { type: toast.type, className: ui.icon() }), /* @__PURE__ */ React.createElement("div", { "data-slot": "text", className: ui.text() }, /* @__PURE__ */ React.createElement(UIToast.Title, { "data-slot": "title", className: ui.title() }), /* @__PURE__ */ React.createElement(
83
+ UIToast.Description,
84
+ {
85
+ "data-slot": "description",
86
+ className: ui.description()
87
+ }
88
+ )), /* @__PURE__ */ React.createElement("div", { "data-slot": "actions", className: ui.actions() }, /* @__PURE__ */ React.createElement(UIToast.Action, { "data-slot": "action", className: ui.action() }), /* @__PURE__ */ React.createElement(
89
+ UIToast.Close,
90
+ {
91
+ "data-slot": "close",
92
+ className: ui.close(),
93
+ "aria-label": closeLabel
94
+ },
95
+ /* @__PURE__ */ React.createElement(CloseIcon, null)
96
+ )))
97
+ ));
98
+ }
99
+ function ToastProvider({
100
+ children,
101
+ position = "bottom-right",
102
+ closeLabel = "Dismiss",
103
+ viewportLabel = "Notifications",
104
+ className,
105
+ ...props
106
+ }) {
107
+ const [placement, align] = position.split("-");
108
+ const ui = theme({ placement, align });
109
+ return /* @__PURE__ */ React.createElement(UIToast.Provider, { ...props }, children, /* @__PURE__ */ React.createElement(UIToast.Portal, null, /* @__PURE__ */ React.createElement(
110
+ UIToast.Viewport,
111
+ {
112
+ "data-slot": "viewport",
113
+ "data-position": position,
114
+ "aria-label": viewportLabel,
115
+ className: cn(ui.viewport(), className)
116
+ },
117
+ /* @__PURE__ */ React.createElement(ToastList, { placement, closeLabel })
118
+ )));
119
+ }
120
+ export { ToastProvider };
@@ -2,7 +2,7 @@ import { Toggle as UIToggle } from "@base-ui/react/toggle";
2
2
  import { ToggleGroup as UIToggleGroup } from "@base-ui/react/toggle-group";
3
3
  import * as React from "react";
4
4
  import { type VariantProps } from "tailwind-variants";
5
- import theme from "../theme/toggle-group.js";
5
+ import theme from "../theme/toggle-group";
6
6
  /** One option managed by the toggle group. */
7
7
  type ToggleGroupItemProps = Omit<UIToggle.Props, "className" | "children" | "style" | "value" | "pressed" | "defaultPressed"> & {
8
8
  /** Value that identifies the option in the group value. */
@@ -3,7 +3,7 @@ import { Toggle as UIToggle } from "@base-ui/react/toggle";
3
3
  import { ToggleGroup as UIToggleGroup } from "@base-ui/react/toggle-group";
4
4
  import { cn } from "cn";
5
5
  import * as React from "react";
6
- import theme from "../theme/toggle-group.js";
6
+ import theme from "../theme/toggle-group.mjs";
7
7
  function ToggleGroup({
8
8
  className,
9
9
  size,
@@ -0,0 +1,17 @@
1
+ import { Toggle as UIToggle } from "@base-ui/react/toggle";
2
+ import * as React from "react";
3
+ import { type VariantProps } from "tailwind-variants";
4
+ import theme from "../theme/toggle";
5
+ type ToggleProps<Value extends string = string> = Omit<UIToggle.Props<Value>, "className" | "children" | "style" | "ref"> & Omit<VariantProps<typeof theme>, "iconOnly"> & {
6
+ /** Ref to the rendered root element. */
7
+ ref?: React.Ref<HTMLButtonElement>;
8
+ /** Tailwind classes merged into the toggle root. */
9
+ className?: string;
10
+ /** Visible label rendered inside the toggle. */
11
+ label?: React.ReactNode;
12
+ /** Icon rendered before the label. */
13
+ icon?: React.ReactNode;
14
+ };
15
+ declare function Toggle<Value extends string = string>({ className, icon, label, size, ...props }: ToggleProps<Value>): React.JSX.Element;
16
+ export { Toggle };
17
+ export type { ToggleProps };
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { Toggle as UIToggle } from "@base-ui/react/toggle";
3
+ import { cn } from "cn";
4
+ import * as React from "react";
5
+ import theme from "../theme/toggle.mjs";
6
+ function Toggle({
7
+ className,
8
+ icon,
9
+ label,
10
+ size,
11
+ ...props
12
+ }) {
13
+ const ui = theme({ size, iconOnly: !label });
14
+ return /* @__PURE__ */ React.createElement(
15
+ UIToggle,
16
+ {
17
+ ...props,
18
+ "data-slot": "root",
19
+ className: cn(ui.root(), className)
20
+ },
21
+ /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-slot": "glass", className: ui.glass() }, /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-slot": "overlay", className: ui.rim() })),
22
+ /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true", "data-slot": "thumb", className: ui.thumb() }),
23
+ /* @__PURE__ */ React.createElement("span", { "data-slot": "content", className: ui.content() }, icon ? /* @__PURE__ */ React.createElement("span", { "data-slot": "icon", "aria-hidden": "true", className: ui.icon() }, icon) : null, label ? /* @__PURE__ */ React.createElement("span", { "data-slot": "label", className: ui.label() }, label) : null)
24
+ );
25
+ }
26
+ export { Toggle };
@@ -0,0 +1,6 @@
1
+ import { Toast as UIToast } from "@base-ui/react/toast";
2
+ /**
3
+ * Creates a toast manager for adding notifications outside the React tree.
4
+ */
5
+ declare const createToastManager: typeof UIToast.createToastManager;
6
+ export { createToastManager };
@@ -0,0 +1,3 @@
1
+ import { Toast as UIToast } from "@base-ui/react/toast";
2
+ const createToastManager = UIToast.createToastManager;
3
+ export { createToastManager };
@@ -0,0 +1,7 @@
1
+ import { Toast as UIToast } from "@base-ui/react/toast";
2
+ /**
3
+ * Returns the toast manager connected to the nearest `ToastProvider`.
4
+ */
5
+ declare const useToast: typeof UIToast.useToastManager;
6
+ export { useToast };
7
+ export type { ToastManager, ToastManagerAddOptions, ToastManagerPromiseOptions, ToastManagerUpdateOptions, ToastObject, } from "@base-ui/react/toast";
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ import { Toast as UIToast } from "@base-ui/react/toast";
3
+ const useToast = UIToast.useToastManager;
4
+ export { useToast };
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- @import "./keyframes.css";@custom-variant ui-light (&:where(.light, .light *, [data-theme="light"], [data-theme="light"] *));@custom-variant ui-dark (&:where(.dark, .dark *, [data-theme="dark"], [data-theme="dark"] *));@layer theme{:host,:root{--ui-ink:#1f1f1f;--ui-ink-active:#000;--ui-checkbox-mark:#fff;--ui-checkbox-rim:hsla(0,0%,100%,.18);--ui-checkbox-shadow:inset 0 0 0 1px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.16);--ui-dialog-surface:#fff;--ui-glass-surface:rgba(0,0,0,.02);--ui-glass-border:rgba(51,51,51,.08);--ui-glass-focus:rgba(0,0,0,.6);--ui-glass-inner-border:rgba(0,0,0,.9);--ui-glass-rim:hsla(0,0%,100%,.2);--ui-glass-highlight:hsla(0,0%,100%,.8);--ui-glass-glare-stop:15%;--ui-glass-tone:brightness(0.9);--ui-glass-contrast:3;--ui-drop-shadow-label:drop-shadow(0 25px 3px hsla(0,0%,40%,.15));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.9),inset -2px 2px 1px -1px hsla(0,0%,100%,.9),inset 6px -6px 1px -6px hsla(0,0%,100%,.55),inset -6px 6px 1px -6px hsla(0,0%,100%,.55),inset 0 0 2px rgba(0,0,0,.8),0 4px 8px rgba(0,0,0,.2)}.dark,[data-theme=dark]{--ui-ink:#f5f5f5;--ui-ink-active:#fff;--ui-checkbox-mark:#141414;--ui-checkbox-rim:hsla(0,0%,100%,.14);--ui-checkbox-shadow:inset 0 0 0 1px hsla(0,0%,100%,.04),0 1px 2px rgba(0,0,0,.4);--ui-dialog-surface:#141414;--ui-glass-surface:hsla(0,0%,100%,.06);--ui-glass-border:hsla(0,0%,100%,.14);--ui-glass-focus:hsla(0,0%,100%,.7);--ui-glass-inner-border:hsla(0,0%,100%,.4);--ui-glass-rim:hsla(0,0%,100%,.25);--ui-glass-highlight:hsla(0,0%,100%,.45);--ui-glass-tone:brightness(0.9);--ui-glass-contrast:1;--ui-drop-shadow-label:drop-shadow(0 25px 3px rgba(0,0,0,.45));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.35),inset -2px 2px 1px -1px hsla(0,0%,100%,.35),inset 6px -6px 1px -6px hsla(0,0%,100%,.2),inset -6px 6px 1px -6px hsla(0,0%,100%,.2),inset 0 0 2px rgba(0,0,0,.9),0 4px 8px rgba(0,0,0,.35)}.light,[data-theme=light]{--ui-ink:#1f1f1f;--ui-ink-active:#000;--ui-checkbox-mark:#fff;--ui-checkbox-rim:hsla(0,0%,100%,.18);--ui-checkbox-shadow:inset 0 0 0 1px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.16);--ui-dialog-surface:#fff;--ui-glass-surface:rgba(0,0,0,.02);--ui-glass-border:rgba(51,51,51,.08);--ui-glass-focus:rgba(0,0,0,.6);--ui-glass-inner-border:rgba(0,0,0,.9);--ui-glass-rim:hsla(0,0%,100%,.2);--ui-glass-highlight:hsla(0,0%,100%,.8);--ui-glass-glare-stop:15%;--ui-glass-tone:brightness(0.9);--ui-glass-contrast:3;--ui-drop-shadow-label:drop-shadow(0 25px 3px hsla(0,0%,40%,.15));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.9),inset -2px 2px 1px -1px hsla(0,0%,100%,.9),inset 6px -6px 1px -6px hsla(0,0%,100%,.55),inset -6px 6px 1px -6px hsla(0,0%,100%,.55),inset 0 0 2px rgba(0,0,0,.8),0 4px 8px rgba(0,0,0,.2)}:host,:root{--ui-glass-blur:2px;--ui-glass-saturate:150%;--ui-glass-chip-blur:8px;--ui-glass-inner-inset:8px;--ui-glass-inner-offset:1px;--ui-glass-inner-blur:8px;--ui-glass-highlight-blur:7px;--ui-glass-rim-inset:9px;--ui-glass-rim-blur:1px;--ui-glass-edge-shadow:inset 1px -1px 2px hsla(0,0%,100%,.55),inset -1px 1px 2px rgba(0,0,0,.18),0 1px 3px rgba(0,0,0,.2);--ui-glass-thumb-shadow:0 1px 3px rgba(0,0,0,.2),inset 0 0 0 1px hsla(0,0%,100%,.55);--ui-glass-lens-blur:1.5px;--ui-glass-lens-saturate:160%;--ui-glass-lens-border:hsla(0,0%,100%,.55);--ui-glass-lens-surface:linear-gradient(180deg,hsla(0,0%,100%,.72),hsla(0,0%,100%,.3));--ui-glass-lens-surface-active:hsla(0,0%,100%,.12);--ui-glass-lens-shadow:0 4px 10px rgba(0,30,63,.14),0 0 2px rgba(0,9,20,.12),inset 1px 1px 0 hsla(0,0%,100%,.8),inset -1px -1px 0 rgba(69,168,243,.16);--ui-glass-lens-shadow-active:0 6px 18px rgba(0,30,63,.18),0 0 3px rgba(0,9,20,.14),inset 1px 1px 0 hsla(0,0%,100%,.72),inset -1px -1px 0 rgba(69,168,243,.2);--ui-glass-lens-specular:inset 1px 1px 0 hsla(0,0%,100%,.7),inset 1px 3px 0 rgba(28,63,90,.05),inset 0 0 18px hsla(0,0%,100%,.55),inset -1px -1px 0 rgba(69,168,243,.16);--ui-glass-lens-glare:linear-gradient(180deg,hsla(0,0%,100%,.75),hsla(0,0%,100%,0))}}@theme inline{--color-ui-ink:var(--ui-ink);--color-ui-ink-active:var(--ui-ink-active);--color-ui-dialog-surface:var(--ui-dialog-surface);--color-ui-glass-surface:var(--ui-glass-surface);--color-ui-glass-border:var(--ui-glass-border);--color-ui-glass-focus:var(--ui-glass-focus);--color-ui-glass-inner-border:var(--ui-glass-inner-border);--color-ui-glass-rim:var(--ui-glass-rim);--color-ui-glass-highlight:var(--ui-glass-highlight)}@layer components{.ui-glass{backdrop-filter:blur(var(--ui-glass-blur,2px)) saturate(var(--ui-glass-saturate,150%));background-color:var(--ui-glass-surface);border:1px double var(--ui-glass-border);box-shadow:var(--ui-shadow-glass);filter:var(--ui-glass-tone,brightness(.9)) contrast(var(--ui-glass-contrast,3));position:relative}.ui-glass-inner:before{border:1px solid var(--ui-glass-inner-border);bottom:calc(var(--ui-glass-inner-inset, 8px) - var(--ui-glass-inner-offset, 1px));filter:blur(var(--ui-glass-inner-blur,8px));left:var(--ui-glass-inner-inset,8px);right:var(--ui-glass-inner-inset,8px);top:calc(var(--ui-glass-inner-inset, 8px) + var(--ui-glass-inner-offset, 1px));z-index:1}.ui-glass-highlight:after,.ui-glass-inner:before{border-radius:inherit;content:"";pointer-events:none;position:absolute}.ui-glass-highlight:after{background:linear-gradient(45deg,var(--ui-glass-highlight) 0,transparent var(--ui-glass-glare-stop),transparent calc(100% - var(--ui-glass-glare-stop)),var(--ui-glass-highlight) 100%);filter:blur(var(--ui-glass-highlight-blur,7px));inset:0;z-index:3}.ui-glass-rim{border:1px solid var(--ui-glass-rim);border-radius:inherit;filter:blur(var(--ui-glass-rim-blur,1px));height:calc(100% - var(--ui-glass-rim-inset, 9px));left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% - var(--ui-glass-rim-inset, 9px));z-index:2}.ui-glass-chip{backdrop-filter:blur(var(--ui-glass-chip-blur,8px)) saturate(var(--ui-glass-saturate,150%));background-color:var(--ui-glass-surface);border:1px solid var(--ui-glass-border);box-shadow:inset 0 1px 0 var(--ui-glass-highlight)}}
1
+ @import "./keyframes.css";@source "./**/*.mjs";@source "./**/*.{ts,tsx}";@custom-variant ui-light (&:where(.light, .light *, [data-theme="light"], [data-theme="light"] *));@custom-variant ui-dark (&:where(.dark, .dark *, [data-theme="dark"], [data-theme="dark"] *));@layer theme{:host,:root{--ui-ink:#1f1f1f;--ui-ink-active:#000;--ui-checkbox-mark:#fff;--ui-checkbox-rim:hsla(0,0%,100%,.18);--ui-checkbox-shadow:inset 0 0 0 1px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.16);--ui-dialog-surface:#fff;--ui-glass-surface:rgba(0,0,0,.02);--ui-glass-border:rgba(51,51,51,.08);--ui-glass-focus:rgba(0,0,0,.6);--ui-glass-inner-border:rgba(0,0,0,.9);--ui-glass-rim:hsla(0,0%,100%,.2);--ui-glass-highlight:hsla(0,0%,100%,.8);--ui-glass-glare-stop:15%;--ui-glass-tone:brightness(0.9);--ui-glass-contrast:3;--ui-drop-shadow-label:drop-shadow(0 25px 3px hsla(0,0%,40%,.15));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.9),inset -2px 2px 1px -1px hsla(0,0%,100%,.9),inset 6px -6px 1px -6px hsla(0,0%,100%,.55),inset -6px 6px 1px -6px hsla(0,0%,100%,.55),inset 0 0 2px rgba(0,0,0,.8),0 4px 8px rgba(0,0,0,.2)}.dark,[data-theme=dark]{--ui-ink:#f5f5f5;--ui-ink-active:#fff;--ui-checkbox-mark:#141414;--ui-checkbox-rim:hsla(0,0%,100%,.14);--ui-checkbox-shadow:inset 0 0 0 1px hsla(0,0%,100%,.04),0 1px 2px rgba(0,0,0,.4);--ui-dialog-surface:#141414;--ui-glass-surface:hsla(0,0%,100%,.06);--ui-glass-border:hsla(0,0%,100%,.14);--ui-glass-focus:hsla(0,0%,100%,.7);--ui-glass-inner-border:hsla(0,0%,100%,.4);--ui-glass-rim:hsla(0,0%,100%,.25);--ui-glass-highlight:hsla(0,0%,100%,.45);--ui-glass-tone:brightness(0.9);--ui-glass-contrast:1;--ui-drop-shadow-label:drop-shadow(0 25px 3px rgba(0,0,0,.45));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.35),inset -2px 2px 1px -1px hsla(0,0%,100%,.35),inset 6px -6px 1px -6px hsla(0,0%,100%,.2),inset -6px 6px 1px -6px hsla(0,0%,100%,.2),inset 0 0 2px rgba(0,0,0,.9),0 4px 8px rgba(0,0,0,.35)}.light,[data-theme=light]{--ui-ink:#1f1f1f;--ui-ink-active:#000;--ui-checkbox-mark:#fff;--ui-checkbox-rim:hsla(0,0%,100%,.18);--ui-checkbox-shadow:inset 0 0 0 1px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.16);--ui-dialog-surface:#fff;--ui-glass-surface:rgba(0,0,0,.02);--ui-glass-border:rgba(51,51,51,.08);--ui-glass-focus:rgba(0,0,0,.6);--ui-glass-inner-border:rgba(0,0,0,.9);--ui-glass-rim:hsla(0,0%,100%,.2);--ui-glass-highlight:hsla(0,0%,100%,.8);--ui-glass-glare-stop:15%;--ui-glass-tone:brightness(0.9);--ui-glass-contrast:3;--ui-drop-shadow-label:drop-shadow(0 25px 3px hsla(0,0%,40%,.15));--ui-shadow-glass:inset 2px -2px 1px -1px hsla(0,0%,100%,.9),inset -2px 2px 1px -1px hsla(0,0%,100%,.9),inset 6px -6px 1px -6px hsla(0,0%,100%,.55),inset -6px 6px 1px -6px hsla(0,0%,100%,.55),inset 0 0 2px rgba(0,0,0,.8),0 4px 8px rgba(0,0,0,.2)}:host,:root{--ui-glass-blur:2px;--ui-glass-saturate:150%;--ui-glass-chip-blur:8px;--ui-glass-inner-inset:8px;--ui-glass-inner-offset:1px;--ui-glass-inner-blur:8px;--ui-glass-highlight-blur:7px;--ui-glass-rim-inset:9px;--ui-glass-rim-blur:1px;--ui-glass-edge-shadow:inset 1px -1px 2px hsla(0,0%,100%,.55),inset -1px 1px 2px rgba(0,0,0,.18),0 1px 3px rgba(0,0,0,.2);--ui-glass-thumb-shadow:0 1px 3px rgba(0,0,0,.2),inset 0 0 0 1px hsla(0,0%,100%,.55);--ui-glass-lens-blur:1.5px;--ui-glass-lens-saturate:160%;--ui-glass-lens-border:hsla(0,0%,100%,.55);--ui-glass-lens-surface:linear-gradient(180deg,hsla(0,0%,100%,.72),hsla(0,0%,100%,.3));--ui-glass-lens-surface-active:hsla(0,0%,100%,.12);--ui-glass-lens-shadow:0 4px 10px rgba(0,30,63,.14),0 0 2px rgba(0,9,20,.12),inset 1px 1px 0 hsla(0,0%,100%,.8),inset -1px -1px 0 rgba(69,168,243,.16);--ui-glass-lens-shadow-active:0 6px 18px rgba(0,30,63,.18),0 0 3px rgba(0,9,20,.14),inset 1px 1px 0 hsla(0,0%,100%,.72),inset -1px -1px 0 rgba(69,168,243,.2);--ui-glass-lens-specular:inset 1px 1px 0 hsla(0,0%,100%,.7),inset 1px 3px 0 rgba(28,63,90,.05),inset 0 0 18px hsla(0,0%,100%,.55),inset -1px -1px 0 rgba(69,168,243,.16);--ui-glass-lens-glare:linear-gradient(180deg,hsla(0,0%,100%,.75),hsla(0,0%,100%,0))}}@theme inline{--color-ui-ink:var(--ui-ink);--color-ui-ink-active:var(--ui-ink-active);--color-ui-dialog-surface:var(--ui-dialog-surface);--color-ui-glass-surface:var(--ui-glass-surface);--color-ui-glass-border:var(--ui-glass-border);--color-ui-glass-focus:var(--ui-glass-focus);--color-ui-glass-inner-border:var(--ui-glass-inner-border);--color-ui-glass-rim:var(--ui-glass-rim);--color-ui-glass-highlight:var(--ui-glass-highlight)}@layer components{.ui-glass{backdrop-filter:blur(var(--ui-glass-blur,2px)) saturate(var(--ui-glass-saturate,150%));background-color:var(--ui-glass-surface);border:1px double var(--ui-glass-border);box-shadow:var(--ui-shadow-glass);filter:var(--ui-glass-tone,brightness(.9)) contrast(var(--ui-glass-contrast,3));position:relative}.ui-glass-inner:before{border:1px solid var(--ui-glass-inner-border);bottom:calc(var(--ui-glass-inner-inset, 8px) - var(--ui-glass-inner-offset, 1px));filter:blur(var(--ui-glass-inner-blur,8px));left:var(--ui-glass-inner-inset,8px);right:var(--ui-glass-inner-inset,8px);top:calc(var(--ui-glass-inner-inset, 8px) + var(--ui-glass-inner-offset, 1px));z-index:1}.ui-glass-highlight:after,.ui-glass-inner:before{border-radius:inherit;content:"";pointer-events:none;position:absolute}.ui-glass-highlight:after{background:linear-gradient(45deg,var(--ui-glass-highlight) 0,transparent var(--ui-glass-glare-stop),transparent calc(100% - var(--ui-glass-glare-stop)),var(--ui-glass-highlight) 100%);filter:blur(var(--ui-glass-highlight-blur,7px));inset:0;z-index:3}.ui-glass-rim{border:1px solid var(--ui-glass-rim);border-radius:inherit;filter:blur(var(--ui-glass-rim-blur,1px));height:calc(100% - var(--ui-glass-rim-inset, 9px));left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% - var(--ui-glass-rim-inset, 9px));z-index:2}.ui-glass-chip{backdrop-filter:blur(var(--ui-glass-chip-blur,8px)) saturate(var(--ui-glass-saturate,150%));background-color:var(--ui-glass-surface);border:1px solid var(--ui-glass-border);box-shadow:inset 0 1px 0 var(--ui-glass-highlight)}}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,17 @@
1
- export { Accordion, type AccordionItemProps, type AccordionProps, } from "./components/accordion.js";
2
- export { AlertDialog, type AlertDialogProps } from "./components/alert-dialog.js";
3
- export { Button, type ButtonProps } from "./components/button.js";
4
- export { Card, type CardProps } from "./components/card.js";
5
- export { Checkbox, type CheckboxProps } from "./components/checkbox.js";
6
- export { Dialog, type DialogProps } from "./components/dialog.js";
7
- export { Input, type InputProps } from "./components/input.js";
8
- export { Slider, type SliderProps } from "./components/slider.js";
9
- export { Switch, type SwitchProps } from "./components/switch.js";
10
- export { ToggleGroup, type ToggleGroupItemProps, type ToggleGroupProps, } from "./components/toggle-group.js";
1
+ export { Accordion, type AccordionItemProps, type AccordionProps, } from "./components/accordion";
2
+ export { AlertDialog, type AlertDialogProps } from "./components/alert-dialog";
3
+ export { Button, type ButtonProps } from "./components/button";
4
+ export { Card, type CardProps } from "./components/card";
5
+ export { Checkbox, type CheckboxProps } from "./components/checkbox";
6
+ export { Dialog, type DialogProps } from "./components/dialog";
7
+ export { Drawer, type DrawerProps } from "./components/drawer";
8
+ export { Input, type InputProps } from "./components/input";
9
+ export { Popover, type PopoverProps } from "./components/popover";
10
+ export { ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, } from "./components/scroll-area";
11
+ export { Slider, type SliderProps } from "./components/slider";
12
+ export { Switch, type SwitchProps } from "./components/switch";
13
+ export { ToastProvider, type ToastPosition, type ToastProviderProps, } from "./components/toast";
14
+ export { createToastManager } from "./composables/create-toast-manager";
15
+ export { useToast, type ToastManager, type ToastManagerAddOptions, type ToastManagerPromiseOptions, type ToastManagerUpdateOptions, type ToastObject, } from "./composables/use-toast";
16
+ export { Toggle, type ToggleProps } from "./components/toggle";
17
+ export { ToggleGroup, type ToggleGroupItemProps, type ToggleGroupProps, } from "./components/toggle-group";
package/dist/index.mjs ADDED
@@ -0,0 +1,27 @@
1
+ export {
2
+ Accordion
3
+ } from "./components/accordion.mjs";
4
+ export { AlertDialog } from "./components/alert-dialog.mjs";
5
+ export { Button } from "./components/button.mjs";
6
+ export { Card } from "./components/card.mjs";
7
+ export { Checkbox } from "./components/checkbox.mjs";
8
+ export { Dialog } from "./components/dialog.mjs";
9
+ export { Drawer } from "./components/drawer.mjs";
10
+ export { Input } from "./components/input.mjs";
11
+ export { Popover } from "./components/popover.mjs";
12
+ export {
13
+ ScrollArea
14
+ } from "./components/scroll-area.mjs";
15
+ export { Slider } from "./components/slider.mjs";
16
+ export { Switch } from "./components/switch.mjs";
17
+ export {
18
+ ToastProvider
19
+ } from "./components/toast.mjs";
20
+ export { createToastManager } from "./composables/create-toast-manager.mjs";
21
+ export {
22
+ useToast
23
+ } from "./composables/use-toast.mjs";
24
+ export { Toggle } from "./components/toggle.mjs";
25
+ export {
26
+ ToggleGroup
27
+ } from "./components/toggle-group.mjs";
@@ -5,7 +5,7 @@ export default tv({
5
5
  "group relative inline-flex items-center min-w-0 max-w-full cursor-pointer select-none whitespace-nowrap",
6
6
  "appearance-none rounded-full border-0 bg-transparent p-0",
7
7
  "focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ui-glass-focus",
8
- "disabled:pointer-events-none disabled:opacity-50"
8
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
9
9
  ],
10
10
  base: [
11
11
  "relative isolate flex w-full min-w-0 max-w-full flex-row flex-nowrap items-center justify-center rounded-full",
@@ -0,0 +1,98 @@
1
+ declare const _default: import("tailwind-variants").TVReturnType<{
2
+ direction: {
3
+ down: {
4
+ viewport: string;
5
+ popup: string[];
6
+ content: string;
7
+ };
8
+ up: {
9
+ viewport: string;
10
+ popup: string[];
11
+ content: string;
12
+ };
13
+ left: {
14
+ viewport: string;
15
+ popup: string[];
16
+ };
17
+ right: {
18
+ viewport: string;
19
+ popup: string[];
20
+ };
21
+ };
22
+ }, {
23
+ backdrop: string[];
24
+ viewport: string;
25
+ popup: string[];
26
+ glass: string[];
27
+ overlay: string;
28
+ content: string[];
29
+ title: string[];
30
+ description: string;
31
+ body: string;
32
+ footer: string;
33
+ }, undefined, {
34
+ direction: {
35
+ down: {
36
+ viewport: string;
37
+ popup: string[];
38
+ content: string;
39
+ };
40
+ up: {
41
+ viewport: string;
42
+ popup: string[];
43
+ content: string;
44
+ };
45
+ left: {
46
+ viewport: string;
47
+ popup: string[];
48
+ };
49
+ right: {
50
+ viewport: string;
51
+ popup: string[];
52
+ };
53
+ };
54
+ }, {
55
+ backdrop: string[];
56
+ viewport: string;
57
+ popup: string[];
58
+ glass: string[];
59
+ overlay: string;
60
+ content: string[];
61
+ title: string[];
62
+ description: string;
63
+ body: string;
64
+ footer: string;
65
+ }, import("tailwind-variants").TVReturnTypeLike<{
66
+ direction: {
67
+ down: {
68
+ viewport: string;
69
+ popup: string[];
70
+ content: string;
71
+ };
72
+ up: {
73
+ viewport: string;
74
+ popup: string[];
75
+ content: string;
76
+ };
77
+ left: {
78
+ viewport: string;
79
+ popup: string[];
80
+ };
81
+ right: {
82
+ viewport: string;
83
+ popup: string[];
84
+ };
85
+ };
86
+ }, {
87
+ backdrop: string[];
88
+ viewport: string;
89
+ popup: string[];
90
+ glass: string[];
91
+ overlay: string;
92
+ content: string[];
93
+ title: string[];
94
+ description: string;
95
+ body: string;
96
+ footer: string;
97
+ }>>;
98
+ export default _default;
@@ -0,0 +1,87 @@
1
+ import { tv } from "tailwind-variants";
2
+ export default tv({
3
+ slots: {
4
+ backdrop: [
5
+ "fixed inset-0 z-40 bg-black/25 backdrop-blur-[2px]",
6
+ "[opacity:calc(1-var(--drawer-swipe-progress))]",
7
+ "transition-opacity duration-300 ease-[cubic-bezier(0.32,0.72,0,1)]",
8
+ "data-[swiping]:duration-0",
9
+ "data-[starting-style]:opacity-0 data-[ending-style]:opacity-0",
10
+ "data-[ending-style]:duration-[calc(var(--drawer-swipe-strength)*300ms)]",
11
+ "motion-reduce:transition-none"
12
+ ],
13
+ viewport: "fixed inset-0 z-50 flex overflow-hidden",
14
+ popup: [
15
+ "relative isolate flex min-h-0 flex-col overflow-hidden bg-ui-dialog-surface",
16
+ "text-ui-ink outline-none touch-auto overscroll-contain will-change-transform",
17
+ "transition-transform duration-300 ease-[cubic-bezier(0.32,0.72,0,1)]",
18
+ "data-[swiping]:select-none",
19
+ "motion-reduce:transition-none"
20
+ ],
21
+ glass: [
22
+ "ui-glass ui-glass-inner ui-glass-highlight",
23
+ "pointer-events-none absolute inset-0 z-0 overflow-hidden rounded-[inherit]"
24
+ ],
25
+ overlay: "ui-glass-rim",
26
+ content: [
27
+ "relative z-10 flex min-h-0 flex-1 flex-col overflow-y-auto",
28
+ "touch-auto overscroll-contain p-5 sm:p-6"
29
+ ],
30
+ title: [
31
+ "min-w-0 text-lg font-semibold tracking-tight text-ui-ink",
32
+ "[filter:var(--ui-drop-shadow-label)]"
33
+ ],
34
+ description: "mt-2 min-w-0 text-sm leading-relaxed text-ui-ink opacity-60",
35
+ body: "mt-4 min-w-0 text-sm leading-relaxed text-ui-ink opacity-75",
36
+ footer: "mt-6 flex flex-wrap items-center justify-end gap-2"
37
+ },
38
+ variants: {
39
+ direction: {
40
+ down: {
41
+ viewport: "items-end justify-center",
42
+ popup: [
43
+ "max-h-[85dvh] w-full rounded-t-[1.75rem]",
44
+ "pb-[env(safe-area-inset-bottom)]",
45
+ "[transform:translateY(calc(var(--drawer-snap-point-offset)_+_var(--drawer-swipe-movement-y)))]",
46
+ "data-[starting-style]:[transform:translateY(calc(100%_+_2px))]",
47
+ "data-[ending-style]:[transform:translateY(calc(100%_+_2px))]"
48
+ ],
49
+ content: "pt-4 sm:pt-5"
50
+ },
51
+ up: {
52
+ viewport: "items-start justify-center",
53
+ popup: [
54
+ "max-h-[85dvh] w-full rounded-b-[1.75rem]",
55
+ "pt-[env(safe-area-inset-top)]",
56
+ "[transform:translateY(calc(var(--drawer-snap-point-offset)_+_var(--drawer-swipe-movement-y)))]",
57
+ "data-[starting-style]:[transform:translateY(calc(-100%_-_2px))]",
58
+ "data-[ending-style]:[transform:translateY(calc(-100%_-_2px))]"
59
+ ],
60
+ content: "pb-4 sm:pb-5"
61
+ },
62
+ left: {
63
+ viewport: "items-stretch justify-start",
64
+ popup: [
65
+ "h-full w-[min(20rem,100vw)] rounded-r-[1.75rem]",
66
+ "pl-[env(safe-area-inset-left)]",
67
+ "[transform:translateX(var(--drawer-swipe-movement-x))]",
68
+ "data-[starting-style]:[transform:translateX(calc(-100%_-_2px))]",
69
+ "data-[ending-style]:[transform:translateX(calc(-100%_-_2px))]"
70
+ ]
71
+ },
72
+ right: {
73
+ viewport: "items-stretch justify-end",
74
+ popup: [
75
+ "h-full w-[min(20rem,100vw)] rounded-l-[1.75rem]",
76
+ "pr-[env(safe-area-inset-right)]",
77
+ "[transform:translateX(var(--drawer-swipe-movement-x))]",
78
+ "data-[starting-style]:[transform:translateX(calc(100%_+_2px))]",
79
+ "data-[ending-style]:[transform:translateX(calc(100%_+_2px))]"
80
+ ]
81
+ }
82
+ }
83
+ },
84
+ defaultVariants: {
85
+ direction: "down"
86
+ }
87
+ });