@wow-two-beta/ui 0.0.62 → 0.0.64

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 (48) hide show
  1. package/dist/actions/index.js +2 -1
  2. package/dist/actions/toggleButton/ToggleButton.d.ts +1 -0
  3. package/dist/{chunk-INSI3NPU.js → chunk-5YT7XRTW.js} +41 -13
  4. package/dist/chunk-5YT7XRTW.js.map +1 -0
  5. package/dist/{chunk-BLU5JZAB.js → chunk-GTBNVI77.js} +51 -22
  6. package/dist/chunk-GTBNVI77.js.map +1 -0
  7. package/dist/{chunk-MYLSXVIS.js → chunk-H3WC7KRX.js} +115 -49
  8. package/dist/chunk-H3WC7KRX.js.map +1 -0
  9. package/dist/{chunk-H4P5MAGS.js → chunk-MZZKA3ZS.js} +33 -11
  10. package/dist/chunk-MZZKA3ZS.js.map +1 -0
  11. package/dist/{chunk-WIXKLDTN.js → chunk-NEH4ITXL.js} +205 -87
  12. package/dist/chunk-NEH4ITXL.js.map +1 -0
  13. package/dist/{chunk-3IVQNIHV.js → chunk-NIFL35PJ.js} +3 -3
  14. package/dist/{chunk-3IVQNIHV.js.map → chunk-NIFL35PJ.js.map} +1 -1
  15. package/dist/{chunk-EQNTG53H.js → chunk-NW7ULTYL.js} +8 -7
  16. package/dist/chunk-NW7ULTYL.js.map +1 -0
  17. package/dist/{chunk-DPB2K3BH.js → chunk-O4Y52ERR.js} +80 -37
  18. package/dist/chunk-O4Y52ERR.js.map +1 -0
  19. package/dist/{chunk-VQGGK4VP.js → chunk-RDRFXVNX.js} +67 -108
  20. package/dist/chunk-RDRFXVNX.js.map +1 -0
  21. package/dist/chunk-YQGEF43L.js +118 -0
  22. package/dist/chunk-YQGEF43L.js.map +1 -0
  23. package/dist/{chunk-5JYRZ5PA.js → chunk-ZC4H4PIN.js} +88 -56
  24. package/dist/chunk-ZC4H4PIN.js.map +1 -0
  25. package/dist/display/index.js +2 -1
  26. package/dist/feedback/index.js +2 -2
  27. package/dist/feedback/undoBar/UndoBar.d.ts +1 -1
  28. package/dist/forms/InputStyles.d.ts +100 -2
  29. package/dist/forms/combobox/Combobox.d.ts +1 -1
  30. package/dist/forms/index.js +5 -5
  31. package/dist/forms/select/Select.variants.d.ts +128 -2
  32. package/dist/index.css +38 -0
  33. package/dist/index.js +11 -10
  34. package/dist/layout/index.js +3 -3
  35. package/dist/nav/dropdownMenu/DropdownMenu.d.ts +1 -1
  36. package/dist/nav/index.js +3 -3
  37. package/dist/nav/menu/Menu.d.ts +1 -1
  38. package/dist/overlays/index.js +4 -4
  39. package/package.json +1 -1
  40. package/dist/chunk-5JYRZ5PA.js.map +0 -1
  41. package/dist/chunk-BLU5JZAB.js.map +0 -1
  42. package/dist/chunk-DPB2K3BH.js.map +0 -1
  43. package/dist/chunk-EQNTG53H.js.map +0 -1
  44. package/dist/chunk-H4P5MAGS.js.map +0 -1
  45. package/dist/chunk-INSI3NPU.js.map +0 -1
  46. package/dist/chunk-MYLSXVIS.js.map +0 -1
  47. package/dist/chunk-VQGGK4VP.js.map +0 -1
  48. package/dist/chunk-WIXKLDTN.js.map +0 -1
@@ -0,0 +1,118 @@
1
+ import { useControlled, useEscape, useReducedMotion } from './chunk-V267IMBH.js';
2
+ import { Portal, AnchoredPositioner, Presence } from './chunk-XLYJF3HC.js';
3
+ import { useId } from './chunk-LGTGZ3RW.js';
4
+ import { cn, composeRefs } from './chunk-X2MYOHOB.js';
5
+ import { forwardRef, useState, useRef, useEffect, isValidElement, cloneElement } from 'react';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ var TooltipContent = forwardRef(
9
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ ref,
13
+ className: cn(
14
+ "z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md",
15
+ "motion-safe:data-[state=open]:animate-(--animate-pop-in)",
16
+ "motion-safe:data-[state=closed]:animate-(--animate-pop-out)",
17
+ className
18
+ ),
19
+ ...props,
20
+ children
21
+ }
22
+ )
23
+ );
24
+ TooltipContent.displayName = "TooltipContent";
25
+ function Tooltip({
26
+ content,
27
+ children,
28
+ placement = "top",
29
+ openDelay = 700,
30
+ closeDelay = 0,
31
+ open: openProp,
32
+ defaultOpen = false,
33
+ onOpenChange,
34
+ isDisabled
35
+ }) {
36
+ const [open, setOpen] = useControlled({
37
+ controlled: openProp,
38
+ default: defaultOpen,
39
+ onChange: onOpenChange
40
+ });
41
+ const [anchor, setAnchor] = useState(null);
42
+ const tooltipId = useId("tooltip");
43
+ const openTimer = useRef(null);
44
+ const closeTimer = useRef(null);
45
+ const clear = () => {
46
+ if (openTimer.current) clearTimeout(openTimer.current);
47
+ if (closeTimer.current) clearTimeout(closeTimer.current);
48
+ openTimer.current = null;
49
+ closeTimer.current = null;
50
+ };
51
+ const show = () => {
52
+ clear();
53
+ openTimer.current = setTimeout(() => setOpen(true), openDelay);
54
+ };
55
+ const hide = () => {
56
+ clear();
57
+ closeTimer.current = setTimeout(() => setOpen(false), closeDelay);
58
+ };
59
+ useEffect(
60
+ () => () => {
61
+ if (openTimer.current) clearTimeout(openTimer.current);
62
+ if (closeTimer.current) clearTimeout(closeTimer.current);
63
+ },
64
+ []
65
+ );
66
+ useEscape(() => {
67
+ clear();
68
+ setOpen(false);
69
+ }, open);
70
+ const reducedMotion = useReducedMotion();
71
+ const visible = !isDisabled && open && !!content;
72
+ const [mounted, setMounted] = useState(visible);
73
+ useEffect(() => {
74
+ if (visible) setMounted(true);
75
+ else if (reducedMotion) setMounted(false);
76
+ }, [visible, reducedMotion]);
77
+ if (!isValidElement(children)) return children;
78
+ const trigger = children;
79
+ const cloned = cloneElement(trigger, {
80
+ ref: composeRefs(setAnchor, trigger.ref),
81
+ "aria-describedby": visible ? [trigger.props["aria-describedby"], tooltipId].filter(Boolean).join(" ") : trigger.props["aria-describedby"],
82
+ onPointerEnter: (e) => {
83
+ trigger.props.onPointerEnter?.(e);
84
+ show();
85
+ },
86
+ onPointerLeave: (e) => {
87
+ trigger.props.onPointerLeave?.(e);
88
+ hide();
89
+ },
90
+ onFocus: (e) => {
91
+ trigger.props.onFocus?.(e);
92
+ show();
93
+ },
94
+ onBlur: (e) => {
95
+ trigger.props.onBlur?.(e);
96
+ hide();
97
+ }
98
+ });
99
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
100
+ cloned,
101
+ mounted && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
102
+ AnchoredPositioner,
103
+ {
104
+ anchor,
105
+ placement,
106
+ offset: 6,
107
+ onAnimationEnd: () => {
108
+ if (!visible) setMounted(false);
109
+ },
110
+ children: /* @__PURE__ */ jsx(Presence, { isPresent: visible, children: /* @__PURE__ */ jsx(TooltipContent, { id: tooltipId, role: "tooltip", children: content }) })
111
+ }
112
+ ) })
113
+ ] });
114
+ }
115
+
116
+ export { Tooltip };
117
+ //# sourceMappingURL=chunk-YQGEF43L.js.map
118
+ //# sourceMappingURL=chunk-YQGEF43L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/display/tooltip/Tooltip.tsx"],"names":[],"mappings":"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","file":"chunk-YQGEF43L.js","sourcesContent":["import {\n cloneElement,\n forwardRef,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape, useId, useReducedMotion } from '../../hooks';\nimport {\n AnchoredPositioner,\n Portal,\n Presence,\n type AnchoredPositionerProps,\n} from '../../primitives';\n\n/**\n * Animated tooltip body. `forwardRef` + `{...props}` spread so `Presence` can\n * inject its `ref` (for transition/animation-end detection) and the\n * `data-state=\"open\" | \"closed\"` that drives the enter/exit keyframes.\n * Motion is gated on `data-state` and behind `motion-safe:` so reduced-motion\n * users get an instant show/hide.\n */\nconst TooltipContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md',\n 'motion-safe:data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-pop-out)',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nTooltipContent.displayName = 'TooltipContent';\n\nexport interface TooltipProps {\n /** Tooltip body. */\n content: ReactNode;\n /** Single child element — the trigger. Receives event handlers + ref. */\n children: ReactElement;\n /** Floating UI placement. Default `top`. */\n placement?: AnchoredPositionerProps['placement'];\n /** Delay before opening on hover, in ms. Default 700. */\n openDelay?: number;\n /** Delay before closing on leave, in ms. Default 0. */\n closeDelay?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. Default `false`. */\n defaultOpen?: boolean;\n /** Fires on every open-state change (hover, focus, Escape). */\n onOpenChange?: (open: boolean) => void;\n /** Disable rendering even on hover (e.g. when content is empty). */\n isDisabled?: boolean;\n}\n\n/**\n * Hover-/focus-triggered tooltip. Wraps a single child as the trigger; the\n * tooltip body renders into a Portal positioned by Floating UI. Default\n * delays mirror the OS pattern (700ms in, 0 out). Escape dismisses without\n * moving focus (WCAG 1.4.13); the trigger is described by the tooltip via\n * `aria-describedby` while open.\n */\nexport function Tooltip({\n content,\n children,\n placement = 'top',\n openDelay = 700,\n closeDelay = 0,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n isDisabled,\n}: TooltipProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const tooltipId = useId('tooltip');\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n };\n\n /* Clear pending timers on unmount. */\n useEffect(\n () => () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n /* WCAG 1.4.13 — Escape dismisses immediately, without moving focus. */\n useEscape(() => {\n clear();\n setOpen(false);\n }, open);\n\n const reducedMotion = useReducedMotion();\n const visible = !isDisabled && open && !!content;\n\n /* Keep the Portal + positioner mounted while the exit animation plays.\n Becomes true with `visible`; cleared on the body's pop-out `animationend`\n (see `onAnimationEnd` below). With reduced motion no exit animation runs,\n so tear the shell down immediately on close. */\n const [mounted, setMounted] = useState(visible);\n useEffect(() => {\n if (visible) setMounted(true);\n else if (reducedMotion) setMounted(false);\n }, [visible, reducedMotion]);\n\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n 'aria-describedby'?: string;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n const cloned = cloneElement(trigger, {\n ref: composeRefs(setAnchor, trigger.ref),\n 'aria-describedby': visible\n ? [trigger.props['aria-describedby'], tooltipId].filter(Boolean).join(' ')\n : trigger.props['aria-describedby'],\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n hide();\n },\n });\n\n return (\n <>\n {cloned}\n {mounted && (\n <Portal>\n <AnchoredPositioner\n anchor={anchor}\n placement={placement}\n offset={6}\n /* Exit animation bubbles up from TooltipContent; once the\n closed-state pop-out ends, tear down the Portal shell. Also\n covers the reduced-motion path, where no animation runs and\n Presence has already unmounted the body. */\n onAnimationEnd={() => {\n if (!visible) setMounted(false);\n }}\n >\n <Presence isPresent={visible}>\n <TooltipContent id={tooltipId} role=\"tooltip\">\n {content}\n </TooltipContent>\n </Presence>\n </AnchoredPositioner>\n </Portal>\n )}\n </>\n );\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { OverlayChromeProvider, OverlayBody, OverlayCloseButton, OverlayDescription, OverlayFooter, OverlayHeader, OverlayTitle } from './chunk-NOOKDXIZ.js';
2
- import { Backdrop } from './chunk-EQNTG53H.js';
2
+ import { Backdrop } from './chunk-NW7ULTYL.js';
3
3
  import { useControlled } from './chunk-V267IMBH.js';
4
4
  import { surfaceVariants } from './chunk-DX7FYAKY.js';
5
- import { Slot, Portal, ScrollLockProvider, DismissableLayer } from './chunk-XLYJF3HC.js';
5
+ import { Slot, Portal, ScrollLockProvider, DismissableLayer, Presence } from './chunk-XLYJF3HC.js';
6
6
  import { composeRefs, cn } from './chunk-X2MYOHOB.js';
7
7
  import { createContext, forwardRef, useCallback, useMemo, useContext, useRef, useId } from 'react';
8
8
  import { FocusScope } from '@radix-ui/react-focus-scope';
@@ -70,10 +70,10 @@ var DrawerTrigger = forwardRef(
70
70
  }
71
71
  );
72
72
  var SIDE_BASE = {
73
- right: "inset-y-0 right-0 h-full w-full border-l animate-in slide-in-from-right",
74
- left: "inset-y-0 left-0 h-full w-full border-r animate-in slide-in-from-left",
75
- top: "inset-x-0 top-0 w-full border-b animate-in slide-in-from-top",
76
- bottom: "inset-x-0 bottom-0 w-full border-t animate-in slide-in-from-bottom"
73
+ right: "inset-y-0 right-0 h-full w-full border-l motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) data-[state=closed]:translate-x-full",
74
+ left: "inset-y-0 left-0 h-full w-full border-r motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) data-[state=closed]:-translate-x-full",
75
+ top: "inset-x-0 top-0 w-full border-b motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) data-[state=closed]:-translate-y-full",
76
+ bottom: "inset-x-0 bottom-0 w-full border-t motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) data-[state=closed]:translate-y-full"
77
77
  };
78
78
  var HORIZONTAL_SIZE = {
79
79
  sm: "sm:max-w-sm",
@@ -89,6 +89,60 @@ var VERTICAL_SIZE = {
89
89
  xl: "max-h-[85vh]",
90
90
  full: "max-h-screen"
91
91
  };
92
+ var DrawerSurface = forwardRef(function DrawerSurface2({
93
+ ctx,
94
+ hideBackdrop,
95
+ isBlurred,
96
+ chromeCtx,
97
+ surfaceClassName,
98
+ children,
99
+ // `data-state` is injected by Presence; default to "open" when rendered standalone.
100
+ "data-state": dataState = "open",
101
+ ...rest
102
+ }, forwardedRef) {
103
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(ScrollLockProvider, { children: [
104
+ !hideBackdrop && /* @__PURE__ */ jsx(
105
+ Backdrop,
106
+ {
107
+ isInline: true,
108
+ isBlurred,
109
+ "data-state": dataState,
110
+ className: cn(
111
+ // Backdrop fade driven by the same data-state Presence flips (motion-safe).
112
+ "motion-safe:transition-opacity motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out)",
113
+ "data-[state=closed]:opacity-0"
114
+ ),
115
+ onClick: () => {
116
+ if (ctx.dismissOnOutsideClick) ctx.setOpen(false);
117
+ }
118
+ }
119
+ ),
120
+ /* @__PURE__ */ jsx(FocusScope, { asChild: true, trapped: true, loop: true, children: /* @__PURE__ */ jsx(
121
+ DismissableLayer,
122
+ {
123
+ isEscapeDisabled: !ctx.dismissOnEscape,
124
+ onEscape: () => ctx.setOpen(false),
125
+ isOutsideClickDisabled: true,
126
+ children: /* @__PURE__ */ jsx(
127
+ "div",
128
+ {
129
+ ref: forwardedRef,
130
+ role: "dialog",
131
+ "aria-modal": "true",
132
+ "aria-labelledby": ctx.titleId,
133
+ "aria-describedby": ctx.descriptionId,
134
+ "data-state": dataState,
135
+ "data-side": ctx.side,
136
+ className: surfaceClassName,
137
+ ...rest,
138
+ children: /* @__PURE__ */ jsx(OverlayChromeProvider, { value: chromeCtx, children })
139
+ }
140
+ )
141
+ }
142
+ ) })
143
+ ] }) });
144
+ });
145
+ DrawerSurface.displayName = "DrawerSurface";
92
146
  var DrawerContent = forwardRef(
93
147
  function DrawerContent2({
94
148
  hideBackdrop,
@@ -114,54 +168,32 @@ var DrawerContent = forwardRef(
114
168
  () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),
115
169
  [ctx.titleId, ctx.descriptionId, close]
116
170
  );
117
- if (!ctx.open) return null;
118
- return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(ScrollLockProvider, { children: [
119
- !hideBackdrop && /* @__PURE__ */ jsx(
120
- Backdrop,
121
- {
122
- isInline: true,
123
- isBlurred,
124
- onClick: () => {
125
- if (ctx.dismissOnOutsideClick) ctx.setOpen(false);
126
- }
127
- }
128
- ),
129
- /* @__PURE__ */ jsx(FocusScope, { asChild: true, trapped: true, loop: true, children: /* @__PURE__ */ jsx(
130
- DismissableLayer,
131
- {
132
- isEscapeDisabled: !ctx.dismissOnEscape,
133
- onEscape: () => ctx.setOpen(false),
134
- isOutsideClickDisabled: true,
135
- children: /* @__PURE__ */ jsx(
136
- "div",
137
- {
138
- ref: forwardedRef,
139
- role: "dialog",
140
- "aria-modal": "true",
141
- "aria-labelledby": ctx.titleId,
142
- "aria-describedby": ctx.descriptionId,
143
- "data-state": "open",
144
- "data-side": ctx.side,
145
- className: cn(
146
- "fixed z-modal flex flex-col gap-4 outline-none",
147
- surfaceVariants({
148
- variant: variant ?? "elevated",
149
- tone,
150
- radius: radius ?? "none",
151
- padding: padding ?? "xl",
152
- elevation: elevation ?? 3
153
- }),
154
- SIDE_BASE[ctx.side],
155
- sizeClass,
156
- className
157
- ),
158
- ...rest,
159
- children: /* @__PURE__ */ jsx(OverlayChromeProvider, { value: chromeCtx, children })
160
- }
161
- )
162
- }
163
- ) })
164
- ] }) });
171
+ const surfaceClassName = cn(
172
+ "fixed z-modal flex flex-col gap-4 outline-none",
173
+ surfaceVariants({
174
+ variant: variant ?? "elevated",
175
+ tone,
176
+ radius: radius ?? "none",
177
+ padding: padding ?? "xl",
178
+ elevation: elevation ?? 3
179
+ }),
180
+ SIDE_BASE[ctx.side],
181
+ sizeClass,
182
+ className
183
+ );
184
+ return /* @__PURE__ */ jsx(Presence, { isPresent: ctx.open, children: /* @__PURE__ */ jsx(
185
+ DrawerSurface,
186
+ {
187
+ ref: forwardedRef,
188
+ ctx,
189
+ hideBackdrop,
190
+ isBlurred,
191
+ chromeCtx,
192
+ surfaceClassName,
193
+ ...rest,
194
+ children
195
+ }
196
+ ) });
165
197
  }
166
198
  );
167
199
  var DrawerHeader = OverlayHeader;
@@ -180,5 +212,5 @@ Drawer.Footer = DrawerFooter;
180
212
  Drawer.Close = DrawerClose;
181
213
 
182
214
  export { Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger };
183
- //# sourceMappingURL=chunk-5JYRZ5PA.js.map
184
- //# sourceMappingURL=chunk-5JYRZ5PA.js.map
215
+ //# sourceMappingURL=chunk-ZC4H4PIN.js.map
216
+ //# sourceMappingURL=chunk-ZC4H4PIN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/overlays/drawer/Drawer.tsx"],"names":["DrawerTrigger","DrawerSurface","DrawerContent"],"mappings":"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","file":"chunk-ZC4H4PIN.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, Presence, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\nexport type DrawerSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n side: DrawerSide;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null);\n\nfunction useDrawerContext() {\n const ctx = useContext(DrawerContext);\n if (!ctx) throw new Error('Drawer.* must be used inside <Drawer>');\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: DrawerSide;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: DrawerProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DrawerContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n side,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, side, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>;\n}\n\nexport interface DrawerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function DrawerTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n// Full-edge slide: the panel rests at translate-0 when open and is pushed\n// fully off its own edge when closed. `transition-transform` (gated on\n// `motion-safe:`) animates both enter and exit via Presence's data-state flip.\nconst SIDE_BASE: Record<DrawerSide, string> = {\n right:\n 'inset-y-0 right-0 h-full w-full border-l ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:translate-x-full',\n left:\n 'inset-y-0 left-0 h-full w-full border-r ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:-translate-x-full',\n top:\n 'inset-x-0 top-0 w-full border-b ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:-translate-y-full',\n bottom:\n 'inset-x-0 bottom-0 w-full border-t ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:translate-y-full',\n};\n\nconst HORIZONTAL_SIZE: Record<DrawerSize, string> = {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-2xl',\n full: '',\n};\n\nconst VERTICAL_SIZE: Record<DrawerSize, string> = {\n sm: 'max-h-[40vh]',\n md: 'max-h-[60vh]',\n lg: 'max-h-[75vh]',\n xl: 'max-h-[85vh]',\n full: 'max-h-screen',\n};\n\n/** Represents the prop surface of `Drawer.Content`. */\nexport interface DrawerContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n /** Per-side max-size token. Default `md` (preserves prior behavior for right/left at `sm`-ish width via `sm:max-w-md`). */\n size?: DrawerSize;\n children: ReactNode;\n}\n\n/**\n * The full portal subtree (scroll-lock + backdrop + focus-trap + dialog panel),\n * rendered as the single child of `<Presence>`. Presence injects `data-state`\n * (\"open\" | \"closed\") + a `ref` here; both are forwarded to the dialog panel —\n * the element whose `transition-transform` end defers unmount — and `data-state`\n * is mirrored onto the backdrop so its fade runs in lock-step with the slide.\n * Keeping the whole subtree inside Presence holds the focus-trap + scroll-lock\n * active through the exit animation and releases them on unmount.\n */\ninterface DrawerSurfaceProps extends HTMLAttributes<HTMLDivElement> {\n ctx: DrawerContextValue;\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n chromeCtx: OverlayChromeContextValue;\n surfaceClassName?: string;\n children: ReactNode;\n}\n\nconst DrawerSurface = forwardRef<HTMLDivElement, DrawerSurfaceProps>(function DrawerSurface(\n {\n ctx,\n hideBackdrop,\n isBlurred,\n chromeCtx,\n surfaceClassName,\n children,\n // `data-state` is injected by Presence; default to \"open\" when rendered standalone.\n 'data-state': dataState = 'open',\n ...rest\n }: DrawerSurfaceProps & { 'data-state'?: 'open' | 'closed' },\n forwardedRef,\n) {\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n isInline\n isBlurred={isBlurred}\n data-state={dataState}\n className={cn(\n // Backdrop fade driven by the same data-state Presence flips (motion-safe).\n 'motion-safe:transition-opacity motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out)',\n 'data-[state=closed]:opacity-0',\n )}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state={dataState}\n data-side={ctx.side}\n className={surfaceClassName}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n );\n});\nDrawerSurface.displayName = 'DrawerSurface';\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n size = 'md',\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDrawerContext();\n const isHorizontal = ctx.side === 'right' || ctx.side === 'left';\n const sizeClass = isHorizontal ? HORIZONTAL_SIZE[size] : VERTICAL_SIZE[size];\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n const surfaceClassName = cn(\n 'fixed z-modal flex flex-col gap-4 outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'xl',\n elevation: elevation ?? 3,\n }),\n SIDE_BASE[ctx.side],\n sizeClass,\n className,\n );\n\n // Presence keeps the subtree mounted through the exit slide, flipping\n // data-state open→closed and deferring unmount until the panel's\n // transition ends.\n return (\n <Presence isPresent={ctx.open}>\n <DrawerSurface\n ref={forwardedRef}\n ctx={ctx}\n hideBackdrop={hideBackdrop}\n isBlurred={isBlurred}\n chromeCtx={chromeCtx}\n surfaceClassName={surfaceClassName}\n {...rest}\n >\n {children}\n </DrawerSurface>\n </Presence>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Drawer namespace.\nexport const DrawerHeader = OverlayHeader;\nexport const DrawerTitle = OverlayTitle;\nexport const DrawerDescription = OverlayDescription;\nexport const DrawerBody = OverlayBody;\nexport const DrawerFooter = OverlayFooter;\nexport const DrawerClose = OverlayCloseButton;\n\ntype DrawerComponent = typeof Drawer & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Title: typeof DrawerTitle;\n Description: typeof DrawerDescription;\n Body: typeof DrawerBody;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n(Drawer as DrawerComponent).Trigger = DrawerTrigger;\n(Drawer as DrawerComponent).Content = DrawerContent;\n(Drawer as DrawerComponent).Header = DrawerHeader;\n(Drawer as DrawerComponent).Title = DrawerTitle;\n(Drawer as DrawerComponent).Description = DrawerDescription;\n(Drawer as DrawerComponent).Body = DrawerBody;\n(Drawer as DrawerComponent).Footer = DrawerFooter;\n(Drawer as DrawerComponent).Close = DrawerClose;\n\nexport default Drawer as DrawerComponent;\n"]}
@@ -1,6 +1,7 @@
1
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, ActivityItem, AnimatedNumber, AnnotationMarker, AudioPlayer, AudioWaveform, Avatar, AvatarGroup, Badge, BadgeOverlay, Card, Carousel, CarouselDot, CarouselDots, CarouselNext, CarouselPrev, CarouselSlide, CarouselSlides, CarouselViewport, ChatBubble, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, Comment, CommentThread, Confetti, CountBadge, CountUp, DataGrid, DataTable, DaySeparator, DescriptionList, DiffViewer, EmptyState, EventCalendar, Eyebrow, FeatureCard, Gantt, GradientText, Heading, HeatmapCalendar, Highlight, Image, InfoRow, KeyboardShortcut, List, ListItem, Mark, Marquee, MessageList, MetaInline, MetricChip, NodeEditor, NotificationDot, PDFViewer, PricingCard, Quote, ReactionBar, ScheduleView, ScrollReveal, SectionHeader, Separator, Snippet, Sortable, Sparkline, Stat, Status, StepCard, SwipeActions, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeaderCell, TableRow, Tabs, TabsList, TabsPanel, TabsTab, Text, ThreadView, Tilt, Timeline, TimelineDescription, TimelineItem, TimelineTitle, Tooltip, Tree, TreeGroup, TreeItem, Typewriter, VideoPlayer, avatarVariants, badgeVariants, codeVariants, headingVariants, textVariants } from '../chunk-VQGGK4VP.js';
1
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, ActivityItem, AnimatedNumber, AnnotationMarker, AudioPlayer, AudioWaveform, Avatar, AvatarGroup, Badge, BadgeOverlay, Card, Carousel, CarouselDot, CarouselDots, CarouselNext, CarouselPrev, CarouselSlide, CarouselSlides, CarouselViewport, ChatBubble, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, Comment, CommentThread, Confetti, CountBadge, CountUp, DataGrid, DataTable, DaySeparator, DescriptionList, DiffViewer, EmptyState, EventCalendar, Eyebrow, FeatureCard, Gantt, GradientText, Heading, HeatmapCalendar, Highlight, Image, InfoRow, KeyboardShortcut, List, ListItem, Mark, Marquee, MessageList, MetaInline, MetricChip, NodeEditor, NotificationDot, PDFViewer, PricingCard, Quote, ReactionBar, ScheduleView, ScrollReveal, SectionHeader, Separator, Snippet, Sortable, Sparkline, Stat, Status, StepCard, SwipeActions, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeaderCell, TableRow, Tabs, TabsList, TabsPanel, TabsTab, Text, ThreadView, Tilt, Timeline, TimelineDescription, TimelineItem, TimelineTitle, Tree, TreeGroup, TreeItem, Typewriter, VideoPlayer, avatarVariants, badgeVariants, codeVariants, headingVariants, textVariants } from '../chunk-RDRFXVNX.js';
2
2
  export { Kbd, Tag, tagVariants } from '../chunk-3SWPYYRQ.js';
3
3
  import '../chunk-4XWLEKH2.js';
4
+ export { Tooltip } from '../chunk-YQGEF43L.js';
4
5
  import '../chunk-V267IMBH.js';
5
6
  import '../chunk-MVMDDGW7.js';
6
7
  import '../chunk-DX7FYAKY.js';
@@ -1,6 +1,6 @@
1
- export { Alert, AlertSimple, Banner, BannerSimple, Callout, InlineSpinner, LiveCursor, LoadingOverlay, LoadingState, MeterBar, NotificationCenter, NotificationItem, OnboardingChecklist, OnboardingChecklistTask, PresenceIndicator, ProgressBar, ProgressCircle, ProgressSteps, Skeleton, StatusIndicator, Toast, ToastSimple, Toaster, Tour, TrendIndicator, TypingIndicator, UndoBar, alertSimpleVariants, bannerSimpleVariants, progressFillVariants, progressTrackVariants, skeletonVariants, toastSimpleVariants, toaster, useOnboardingChecklist, useToaster } from '../chunk-WIXKLDTN.js';
1
+ export { Alert, AlertSimple, Banner, BannerSimple, Callout, InlineSpinner, LiveCursor, LoadingOverlay, LoadingState, MeterBar, NotificationCenter, NotificationItem, OnboardingChecklist, OnboardingChecklistTask, PresenceIndicator, ProgressBar, ProgressCircle, ProgressSteps, Skeleton, StatusIndicator, Toast, ToastSimple, Toaster, Tour, TrendIndicator, TypingIndicator, UndoBar, alertSimpleVariants, bannerSimpleVariants, progressFillVariants, progressTrackVariants, skeletonVariants, toastSimpleVariants, toaster, useOnboardingChecklist, useToaster } from '../chunk-NEH4ITXL.js';
2
2
  export { Spinner, spinnerVariants } from '../chunk-7ZDLUNAY.js';
3
- import '../chunk-EQNTG53H.js';
3
+ import '../chunk-NW7ULTYL.js';
4
4
  import '../chunk-V267IMBH.js';
5
5
  import '../chunk-MVMDDGW7.js';
6
6
  import '../chunk-DX7FYAKY.js';
@@ -18,4 +18,4 @@ export interface UndoBarProps {
18
18
  * pause-on-hover preserves remaining time. For multi-toast queues use the L5
19
19
  * `Toaster` instead.
20
20
  */
21
- export declare function UndoBar({ isOpen, onOpenChange, message, onUndo, undoLabel, duration, canPauseOnHover, position, hasCountdown, className, }: UndoBarProps): import("react/jsx-runtime").JSX.Element | null;
21
+ export declare function UndoBar({ isOpen, onOpenChange, message, onUndo, undoLabel, duration, canPauseOnHover, position, hasCountdown, className, }: UndoBarProps): import("react/jsx-runtime").JSX.Element;
@@ -10,7 +10,21 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
10
10
  default: string;
11
11
  invalid: string;
12
12
  };
13
- }, undefined, "flex w-full rounded-md border bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted", import("tailwind-variants/dist/config.js").TVConfig<{
13
+ border: {
14
+ none: string;
15
+ xs: string;
16
+ sm: string;
17
+ md: string;
18
+ lg: string;
19
+ xl: string;
20
+ };
21
+ ring: {
22
+ none: string;
23
+ sm: string;
24
+ md: string;
25
+ lg: string;
26
+ };
27
+ }, undefined, "flex w-full rounded-md bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-none focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted", import("tailwind-variants/dist/config.js").TVConfig<{
14
28
  size: {
15
29
  xs: string;
16
30
  sm: string;
@@ -21,6 +35,20 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
21
35
  default: string;
22
36
  invalid: string;
23
37
  };
38
+ border: {
39
+ none: string;
40
+ xs: string;
41
+ sm: string;
42
+ md: string;
43
+ lg: string;
44
+ xl: string;
45
+ };
46
+ ring: {
47
+ none: string;
48
+ sm: string;
49
+ md: string;
50
+ lg: string;
51
+ };
24
52
  }, {
25
53
  size: {
26
54
  xs: string;
@@ -32,6 +60,20 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
32
60
  default: string;
33
61
  invalid: string;
34
62
  };
63
+ border: {
64
+ none: string;
65
+ xs: string;
66
+ sm: string;
67
+ md: string;
68
+ lg: string;
69
+ xl: string;
70
+ };
71
+ ring: {
72
+ none: string;
73
+ sm: string;
74
+ md: string;
75
+ lg: string;
76
+ };
35
77
  }>, {
36
78
  size: {
37
79
  xs: string;
@@ -43,6 +85,20 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
43
85
  default: string;
44
86
  invalid: string;
45
87
  };
88
+ border: {
89
+ none: string;
90
+ xs: string;
91
+ sm: string;
92
+ md: string;
93
+ lg: string;
94
+ xl: string;
95
+ };
96
+ ring: {
97
+ none: string;
98
+ sm: string;
99
+ md: string;
100
+ lg: string;
101
+ };
46
102
  }, undefined, import("tailwind-variants").TVReturnType<{
47
103
  size: {
48
104
  xs: string;
@@ -54,7 +110,21 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
54
110
  default: string;
55
111
  invalid: string;
56
112
  };
57
- }, undefined, "flex w-full rounded-md border bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted", import("tailwind-variants/dist/config.js").TVConfig<{
113
+ border: {
114
+ none: string;
115
+ xs: string;
116
+ sm: string;
117
+ md: string;
118
+ lg: string;
119
+ xl: string;
120
+ };
121
+ ring: {
122
+ none: string;
123
+ sm: string;
124
+ md: string;
125
+ lg: string;
126
+ };
127
+ }, undefined, "flex w-full rounded-md bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-none focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted", import("tailwind-variants/dist/config.js").TVConfig<{
58
128
  size: {
59
129
  xs: string;
60
130
  sm: string;
@@ -65,6 +135,20 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
65
135
  default: string;
66
136
  invalid: string;
67
137
  };
138
+ border: {
139
+ none: string;
140
+ xs: string;
141
+ sm: string;
142
+ md: string;
143
+ lg: string;
144
+ xl: string;
145
+ };
146
+ ring: {
147
+ none: string;
148
+ sm: string;
149
+ md: string;
150
+ lg: string;
151
+ };
68
152
  }, {
69
153
  size: {
70
154
  xs: string;
@@ -76,5 +160,19 @@ export declare const inputBaseVariants: import("tailwind-variants").TVReturnType
76
160
  default: string;
77
161
  invalid: string;
78
162
  };
163
+ border: {
164
+ none: string;
165
+ xs: string;
166
+ sm: string;
167
+ md: string;
168
+ lg: string;
169
+ xl: string;
170
+ };
171
+ ring: {
172
+ none: string;
173
+ sm: string;
174
+ md: string;
175
+ lg: string;
176
+ };
79
177
  }>, unknown, unknown, undefined>>;
80
178
  export type InputBaseVariants = VariantProps<typeof inputBaseVariants>;
@@ -29,7 +29,7 @@ export interface ComboboxContentProps extends SurfaceVariants {
29
29
  offset?: number;
30
30
  children: ReactNode;
31
31
  }
32
- export declare function ComboboxContent({ className, placement, offset, variant, tone, radius, padding, elevation, children, }: ComboboxContentProps): import("react/jsx-runtime").JSX.Element | null;
32
+ export declare function ComboboxContent({ className, placement, offset, variant, tone, radius, padding, elevation, children, }: ComboboxContentProps): import("react/jsx-runtime").JSX.Element;
33
33
  export interface ComboboxItemProps extends HTMLAttributes<HTMLDivElement> {
34
34
  value: string;
35
35
  isDisabled?: boolean;
@@ -1,11 +1,11 @@
1
- export { ADDRESS_COUNTRIES, AddressForm, BUILT_IN_EMOJI, BUILT_IN_FONTS, Calendar, CharacterCount, ChatComposer, Checkbox, CheckboxField, CheckboxGroup, ChoiceCard, CodeEditor, ColorArea, ColorField, ColorPicker, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxSeparator, CronInput, CurrencyInput, DateField, DatePicker, DateRangePicker, Editable, EditableCancel, EditableInput, EditablePreview, EditableSubmit, EmailInput, EmojiPicker, Fieldset, FilePicker, FileUpload, FontPicker, FormErrorMessage, FormField, FormHelperText, GradientPicker, IconPicker, InputAddon, InputGroup, JSONEditor, KeyboardShortcutPicker, Knob, Label, LabeledInput, Legend, Listbox, ListboxEmpty, ListboxGroup, ListboxItem, ListboxSeparator, MarkdownEditor, MaskedInput, MultiSelect, MultiSelectContent, MultiSelectItem, MultiSelectTags, MultiSelectTrigger, NumberInput, PHONE_COUNTRIES, PasswordInput, PasswordStrength, PercentInput, PhoneInput, PinInput, Radio, RadioField, RadioGroup, RangeCalendar, ReactionPicker, RecurrenceEditor, SearchInput, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Slider, Stepper, StepperList, StepperPanel, StepperStep, Switch, SwitchField, TagsInput, TelInput, TextInput, Textarea, TimeField, TimePicker, UrlInput, Wizard, WizardFooter, WizardStep, WizardSteps, colorSwatchVariants, gradientToCss, useWizard } from '../chunk-INSI3NPU.js';
1
+ export { ADDRESS_COUNTRIES, AddressForm, BUILT_IN_EMOJI, BUILT_IN_FONTS, Calendar, CharacterCount, ChatComposer, Checkbox, CheckboxField, CheckboxGroup, ChoiceCard, CodeEditor, ColorArea, ColorField, ColorPicker, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxSeparator, CronInput, CurrencyInput, DateField, DatePicker, DateRangePicker, Editable, EditableCancel, EditableInput, EditablePreview, EditableSubmit, EmailInput, EmojiPicker, Fieldset, FilePicker, FileUpload, FontPicker, FormErrorMessage, FormField, FormHelperText, GradientPicker, IconPicker, InputAddon, InputGroup, JSONEditor, KeyboardShortcutPicker, Knob, Label, LabeledInput, Legend, Listbox, ListboxEmpty, ListboxGroup, ListboxItem, ListboxSeparator, MarkdownEditor, MaskedInput, MultiSelect, MultiSelectContent, MultiSelectItem, MultiSelectTags, MultiSelectTrigger, NumberInput, PHONE_COUNTRIES, PasswordInput, PasswordStrength, PercentInput, PhoneInput, PinInput, Radio, RadioField, RadioGroup, RangeCalendar, ReactionPicker, RecurrenceEditor, SearchInput, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Slider, Stepper, StepperList, StepperPanel, StepperStep, Switch, SwitchField, TagsInput, TelInput, TextInput, Textarea, TimeField, TimePicker, UrlInput, Wizard, WizardFooter, WizardStep, WizardSteps, colorSwatchVariants, gradientToCss, useWizard } from '../chunk-5YT7XRTW.js';
2
2
  import '../chunk-FMTBJJP6.js';
3
- import '../chunk-BLU5JZAB.js';
4
- import '../chunk-5JYRZ5PA.js';
5
- import '../chunk-H4P5MAGS.js';
3
+ import '../chunk-GTBNVI77.js';
4
+ import '../chunk-ZC4H4PIN.js';
5
+ import '../chunk-MZZKA3ZS.js';
6
6
  import '../chunk-NOOKDXIZ.js';
7
7
  import '../chunk-3SWPYYRQ.js';
8
- import '../chunk-EQNTG53H.js';
8
+ import '../chunk-NW7ULTYL.js';
9
9
  import '../chunk-V267IMBH.js';
10
10
  import '../chunk-MVMDDGW7.js';
11
11
  import '../chunk-DX7FYAKY.js';