@dxos/react-ui 0.8.2-main.12df754 → 0.8.2-main.30e4dbb

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 (65) hide show
  1. package/dist/lib/browser/index.mjs +1607 -1075
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +1942 -1408
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +1607 -1075
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/Buttons/Button.stories.d.ts +10 -44
  11. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Buttons/IconButton.d.ts +4 -5
  13. package/dist/types/src/components/Buttons/IconButton.d.ts.map +1 -1
  14. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/Clipboard/CopyButton.d.ts +2 -1
  16. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  17. package/dist/types/src/components/Clipboard/index.d.ts +2 -2
  18. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  19. package/dist/types/src/components/Dialogs/Dialog.d.ts +6 -2
  20. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +1 -1
  21. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  23. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +1 -1
  25. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +1 -1
  26. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  27. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  28. package/dist/types/src/components/Popover/Popover.d.ts +2 -1
  29. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  30. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  31. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  32. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  33. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -1
  34. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  35. package/dist/types/src/components/Tooltip/Tooltip.d.ts +94 -20
  36. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  37. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +40 -16
  38. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/index.d.ts +1 -1
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  42. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  43. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  44. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  46. package/dist/types/src/playground/Controls.stories.d.ts +1 -1
  47. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  48. package/dist/types/src/playground/Custom.stories.d.ts +8 -0
  49. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -0
  50. package/dist/types/src/testing/decorators/withVariants.d.ts.map +1 -1
  51. package/dist/types/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +14 -13
  53. package/src/components/Avatars/Avatar.tsx +1 -1
  54. package/src/components/Buttons/Button.stories.tsx +19 -14
  55. package/src/components/Buttons/IconButton.stories.tsx +2 -2
  56. package/src/components/Buttons/IconButton.tsx +8 -33
  57. package/src/components/Clipboard/CopyButton.tsx +22 -24
  58. package/src/components/Dialogs/Dialog.tsx +12 -7
  59. package/src/components/Popover/Popover.tsx +3 -0
  60. package/src/components/ScrollArea/ScrollArea.tsx +3 -0
  61. package/src/components/Tooltip/Tooltip.stories.tsx +41 -16
  62. package/src/components/Tooltip/Tooltip.tsx +748 -58
  63. package/src/components/index.ts +1 -1
  64. package/src/playground/Controls.stories.tsx +2 -2
  65. package/src/playground/Custom.stories.tsx +137 -0
@@ -150,8 +150,8 @@ var useVisualViewport = (deps) => {
150
150
  // packages/ui/react-ui/src/components/AnchoredOverflow/AnchoredOverflow.tsx
151
151
  var AnchoredOverflowRoot = /* @__PURE__ */ forwardRef(({ asChild, classNames, children, ...props }, forwardedRef) => {
152
152
  const { tx } = useThemeContext();
153
- const Root5 = asChild ? Slot : Primitive.div;
154
- return /* @__PURE__ */ React2.createElement(Root5, {
153
+ const Root7 = asChild ? Slot : Primitive.div;
154
+ return /* @__PURE__ */ React2.createElement(Root7, {
155
155
  role: "none",
156
156
  ...props,
157
157
  className: tx("anchoredOverflow.root", "overflow-anchored", {}, classNames),
@@ -160,8 +160,8 @@ var AnchoredOverflowRoot = /* @__PURE__ */ forwardRef(({ asChild, classNames, ch
160
160
  });
161
161
  var AnchoredOverflowAnchor = /* @__PURE__ */ forwardRef(({ asChild, classNames, children, ...props }, forwardedRef) => {
162
162
  const { tx } = useThemeContext();
163
- const Root5 = asChild ? Slot : Primitive.div;
164
- return /* @__PURE__ */ React2.createElement(Root5, {
163
+ const Root7 = asChild ? Slot : Primitive.div;
164
+ return /* @__PURE__ */ React2.createElement(Root7, {
165
165
  role: "none",
166
166
  ...props,
167
167
  className: tx("anchoredOverflow.anchor", "overflow-anchor", {}, classNames),
@@ -204,17 +204,17 @@ var AvatarContent = /* @__PURE__ */ forwardRef2(({ icon, classNames, ...props },
204
204
  return /* @__PURE__ */ React3.createElement(DxAvatar, {
205
205
  ...props,
206
206
  icon: href,
207
- labelId,
207
+ "aria-labelledby": labelId,
208
208
  "aria-describedby": descriptionId,
209
209
  rootClassName: mx(classNames),
210
210
  ref: forwardedRef
211
211
  });
212
212
  });
213
213
  var AvatarLabel = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
214
- const Root5 = asChild ? Slot2 : Primitive2.span;
214
+ const Root7 = asChild ? Slot2 : Primitive2.span;
215
215
  const { tx } = useThemeContext();
216
216
  const { labelId } = useAvatarContext("AvatarLabel");
217
- return /* @__PURE__ */ React3.createElement(Root5, {
217
+ return /* @__PURE__ */ React3.createElement(Root7, {
218
218
  ...props,
219
219
  id: labelId,
220
220
  ref: forwardedRef,
@@ -224,10 +224,10 @@ var AvatarLabel = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ..
224
224
  });
225
225
  });
226
226
  var AvatarDescription = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
227
- const Root5 = asChild ? Slot2 : Primitive2.span;
227
+ const Root7 = asChild ? Slot2 : Primitive2.span;
228
228
  const { tx } = useThemeContext();
229
229
  const { descriptionId } = useAvatarContext("AvatarDescription");
230
- return /* @__PURE__ */ React3.createElement(Root5, {
230
+ return /* @__PURE__ */ React3.createElement(Root7, {
231
231
  ...props,
232
232
  id: descriptionId,
233
233
  ref: forwardedRef,
@@ -255,8 +255,8 @@ import { Slot as Slot3 } from "@radix-ui/react-slot";
255
255
  import React4, { forwardRef as forwardRef3 } from "react";
256
256
  var Link = /* @__PURE__ */ forwardRef3(({ asChild, variant, classNames, ...props }, forwardedRef) => {
257
257
  const { tx } = useThemeContext();
258
- const Root5 = asChild ? Slot3 : Primitive3.a;
259
- return /* @__PURE__ */ React4.createElement(Root5, {
258
+ const Root7 = asChild ? Slot3 : Primitive3.a;
259
+ return /* @__PURE__ */ React4.createElement(Root7, {
260
260
  ...props,
261
261
  className: tx("link.root", "link", {
262
262
  variant
@@ -268,8 +268,8 @@ var Link = /* @__PURE__ */ forwardRef3(({ asChild, variant, classNames, ...props
268
268
  // packages/ui/react-ui/src/components/Breadcrumb/Breadcrumb.tsx
269
269
  var BreadcrumbRoot = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...props }, forwardedRef) => {
270
270
  const { tx } = useThemeContext();
271
- const Root5 = asChild ? Slot4 : Primitive4.div;
272
- return /* @__PURE__ */ React5.createElement(Root5, {
271
+ const Root7 = asChild ? Slot4 : Primitive4.div;
272
+ return /* @__PURE__ */ React5.createElement(Root7, {
273
273
  role: "navigation",
274
274
  ...props,
275
275
  className: tx("breadcrumb.root", "breadcrumb", {}, classNames),
@@ -278,8 +278,8 @@ var BreadcrumbRoot = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...prop
278
278
  });
279
279
  var BreadcrumbList = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...props }, forwardedRef) => {
280
280
  const { tx } = useThemeContext();
281
- const Root5 = asChild ? Slot4 : Primitive4.ol;
282
- return /* @__PURE__ */ React5.createElement(Root5, {
281
+ const Root7 = asChild ? Slot4 : Primitive4.ol;
282
+ return /* @__PURE__ */ React5.createElement(Root7, {
283
283
  role: "list",
284
284
  ...props,
285
285
  className: tx("breadcrumb.list", "breadcrumb__list", {}, classNames),
@@ -288,8 +288,8 @@ var BreadcrumbList = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...prop
288
288
  });
289
289
  var BreadcrumbListItem = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...props }, forwardedRef) => {
290
290
  const { tx } = useThemeContext();
291
- const Root5 = asChild ? Slot4 : Primitive4.li;
292
- return /* @__PURE__ */ React5.createElement(Root5, {
291
+ const Root7 = asChild ? Slot4 : Primitive4.li;
292
+ return /* @__PURE__ */ React5.createElement(Root7, {
293
293
  role: "listitem",
294
294
  ...props,
295
295
  className: tx("breadcrumb.listItem", "breadcrumb__list__item", {}, classNames),
@@ -297,16 +297,16 @@ var BreadcrumbListItem = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...
297
297
  });
298
298
  });
299
299
  var BreadcrumbLink = /* @__PURE__ */ forwardRef4(({ asChild, ...props }, forwardedRef) => {
300
- const Root5 = asChild ? Slot4 : Link;
301
- return /* @__PURE__ */ React5.createElement(Root5, {
300
+ const Root7 = asChild ? Slot4 : Link;
301
+ return /* @__PURE__ */ React5.createElement(Root7, {
302
302
  ...props,
303
303
  ref: forwardedRef
304
304
  });
305
305
  });
306
306
  var BreadcrumbCurrent = /* @__PURE__ */ forwardRef4(({ asChild, classNames, ...props }, forwardedRef) => {
307
307
  const { tx } = useThemeContext();
308
- const Root5 = asChild ? Slot4 : "h1";
309
- return /* @__PURE__ */ React5.createElement(Root5, {
308
+ const Root7 = asChild ? Slot4 : "h1";
309
+ return /* @__PURE__ */ React5.createElement(Root7, {
310
310
  ...props,
311
311
  "aria-current": "page",
312
312
  className: tx("breadcrumb.current", "breadcrumb__item__heading--current", {}, classNames),
@@ -348,8 +348,8 @@ var Button = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef5(({ classNames, chi
348
348
  const { tx } = useThemeContext();
349
349
  const elevation = useElevationContext(propsElevation);
350
350
  const density = useDensityContext(propsDensity);
351
- const Root5 = asChild ? Slot5 : Primitive5.button;
352
- return /* @__PURE__ */ React6.createElement(Root5, {
351
+ const Root7 = asChild ? Slot5 : Primitive5.button;
352
+ return /* @__PURE__ */ React6.createElement(Root7, {
353
353
  ref,
354
354
  ...props,
355
355
  "data-variant": variant,
@@ -371,8 +371,8 @@ Button.displayName = BUTTON_NAME;
371
371
  var ButtonGroup = /* @__PURE__ */ forwardRef5(({ children, elevation: propsElevation, classNames, asChild, ...props }, forwardedRef) => {
372
372
  const { tx } = useThemeContext();
373
373
  const elevation = useElevationContext(propsElevation);
374
- const Root5 = asChild ? Slot5 : Primitive5.div;
375
- return /* @__PURE__ */ React6.createElement(Root5, {
374
+ const Root7 = asChild ? Slot5 : Primitive5.div;
375
+ return /* @__PURE__ */ React6.createElement(Root7, {
376
376
  role: "none",
377
377
  ...props,
378
378
  className: tx("button.group", "button-group", {
@@ -386,7 +386,7 @@ var ButtonGroup = /* @__PURE__ */ forwardRef5(({ children, elevation: propsEleva
386
386
  ButtonGroup.displayName = BUTTON_GROUP_NAME;
387
387
 
388
388
  // packages/ui/react-ui/src/components/Buttons/IconButton.tsx
389
- import React9, { forwardRef as forwardRef8, useState as useState4 } from "react";
389
+ import React9, { forwardRef as forwardRef8 } from "react";
390
390
 
391
391
  // packages/ui/react-ui/src/components/Icon/Icon.tsx
392
392
  import React7, { forwardRef as forwardRef6, memo as memo2 } from "react";
@@ -405,98 +405,618 @@ var Icon = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef6(({ icon, classNames
405
405
  }));
406
406
 
407
407
  // packages/ui/react-ui/src/components/Tooltip/Tooltip.tsx
408
- import { Provider as TooltipProviderPrimitive, Root as TooltipRootPrimitive, TooltipContent as TooltipContentPrimitive, TooltipTrigger as TooltipTriggerPrimitive, TooltipPortal as TooltipPortalPrimitive, TooltipArrow as TooltipArrowPrimitive } from "@radix-ui/react-tooltip";
409
- import React8, { forwardRef as forwardRef7 } from "react";
410
-
411
- // packages/ui/react-ui/src/hooks/useSafeCollisionPadding.ts
412
- import { useMemo } from "react";
413
- var propIsNumber = (prop) => Number.isFinite(prop);
414
- var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
415
- var safePadding = (propsPadding, safePadding2, side) => {
416
- return (propIsNumber(safePadding2[side]) ? safePadding2[side] : 0) + (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0);
417
- };
418
- var useSafeCollisionPadding = (collisionPadding) => {
419
- const { safeAreaPadding } = useThemeContext();
420
- return useMemo(() => ({
421
- top: safePadding(collisionPadding, safeAreaPadding, "top"),
422
- right: safePadding(collisionPadding, safeAreaPadding, "right"),
423
- bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
424
- left: safePadding(collisionPadding, safeAreaPadding, "left")
425
- }), [
426
- collisionPadding,
427
- safeAreaPadding
408
+ import { composeEventHandlers } from "@radix-ui/primitive";
409
+ import { useComposedRefs } from "@radix-ui/react-compose-refs";
410
+ import { createContextScope } from "@radix-ui/react-context";
411
+ import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
412
+ import { useId as useId2 } from "@radix-ui/react-id";
413
+ import * as PopperPrimitive from "@radix-ui/react-popper";
414
+ import { createPopperScope } from "@radix-ui/react-popper";
415
+ import { Portal as PortalPrimitive } from "@radix-ui/react-portal";
416
+ import { Presence } from "@radix-ui/react-presence";
417
+ import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
418
+ import { Slottable } from "@radix-ui/react-slot";
419
+ import { useControllableState } from "@radix-ui/react-use-controllable-state";
420
+ import * as VisuallyHiddenPrimitive from "@radix-ui/react-visually-hidden";
421
+ import React8, { forwardRef as forwardRef7, useCallback as useCallback3, useEffect as useEffect2, useMemo, useRef, useState as useState4 } from "react";
422
+ var [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [
423
+ createPopperScope
424
+ ]);
425
+ var usePopperScope = createPopperScope();
426
+ var DEFAULT_DELAY_DURATION = 700;
427
+ var TOOLTIP_OPEN = "tooltip.open";
428
+ var TOOLTIP_NAME = "Tooltip";
429
+ var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);
430
+ var TooltipProvider = (props) => {
431
+ const { __scopeTooltip, children, open: openProp, defaultOpen = false, onOpenChange, disableHoverableContent = false, delayDuration = DEFAULT_DELAY_DURATION, skipDelayDuration = 300 } = props;
432
+ const isOpenDelayedRef = useRef(true);
433
+ const isPointerInTransitRef = useRef(false);
434
+ const skipDelayTimerRef = useRef(0);
435
+ useEffect2(() => {
436
+ const skipDelayTimer = skipDelayTimerRef.current;
437
+ return () => window.clearTimeout(skipDelayTimer);
438
+ }, []);
439
+ const popperScope = usePopperScope(__scopeTooltip);
440
+ const [trigger, setTrigger] = useState4(null);
441
+ const [content, setContent] = useState4("");
442
+ const [side, setSide] = useState4(void 0);
443
+ const triggerRef = useRef(trigger);
444
+ const handleTriggerChange = useCallback3((nextTrigger) => {
445
+ setTrigger(nextTrigger);
446
+ triggerRef.current = nextTrigger;
447
+ setContent(nextTrigger?.getAttribute("data-tooltip-content") ?? "");
448
+ setSide(nextTrigger?.getAttribute("data-tooltip-side") ?? void 0);
449
+ }, []);
450
+ const contentId = useId2();
451
+ const openTimerRef = useRef(0);
452
+ const wasOpenDelayedRef = useRef(false);
453
+ const handleOpenChange = useCallback3((open2) => {
454
+ if (open2) {
455
+ window.clearTimeout(skipDelayTimerRef.current);
456
+ isOpenDelayedRef.current = false;
457
+ document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));
458
+ } else {
459
+ window.clearTimeout(skipDelayTimerRef.current);
460
+ skipDelayTimerRef.current = window.setTimeout(() => isOpenDelayedRef.current = true, skipDelayDuration);
461
+ }
462
+ onOpenChange?.(open2);
463
+ }, [
464
+ skipDelayDuration,
465
+ onOpenChange
428
466
  ]);
429
- };
430
-
431
- // packages/ui/react-ui/src/components/Tooltip/Tooltip.tsx
432
- var TooltipProvider = TooltipProviderPrimitive;
433
- var TooltipRoot = TooltipRootPrimitive;
434
- var TooltipPortal = TooltipPortalPrimitive;
435
- var TooltipTrigger = TooltipTriggerPrimitive;
436
- var TooltipArrow = /* @__PURE__ */ forwardRef7(({ classNames, ...props }, forwardedRef) => {
437
- const { tx } = useThemeContext();
438
- return /* @__PURE__ */ React8.createElement(TooltipArrowPrimitive, {
439
- ...props,
440
- className: tx("tooltip.arrow", "tooltip__arrow", {}, classNames),
441
- ref: forwardedRef
467
+ const [open = false, setOpen] = useControllableState({
468
+ prop: openProp,
469
+ defaultProp: defaultOpen,
470
+ onChange: handleOpenChange
442
471
  });
443
- });
444
- var TooltipContent = /* @__PURE__ */ forwardRef7(({ classNames, collisionPadding = 8, ...props }, forwardedRef) => {
472
+ const stateAttribute = useMemo(() => {
473
+ return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
474
+ }, [
475
+ open
476
+ ]);
477
+ const handleOpen = useCallback3(() => {
478
+ window.clearTimeout(openTimerRef.current);
479
+ openTimerRef.current = 0;
480
+ wasOpenDelayedRef.current = false;
481
+ setOpen(true);
482
+ }, [
483
+ setOpen
484
+ ]);
485
+ const handleClose = useCallback3(() => {
486
+ window.clearTimeout(openTimerRef.current);
487
+ openTimerRef.current = 0;
488
+ setOpen(false);
489
+ }, [
490
+ setOpen
491
+ ]);
492
+ const handleDelayedOpen = useCallback3(() => {
493
+ window.clearTimeout(openTimerRef.current);
494
+ openTimerRef.current = window.setTimeout(() => {
495
+ wasOpenDelayedRef.current = true;
496
+ setOpen(true);
497
+ openTimerRef.current = 0;
498
+ }, delayDuration);
499
+ }, [
500
+ delayDuration,
501
+ setOpen
502
+ ]);
503
+ useEffect2(() => {
504
+ return () => {
505
+ if (openTimerRef.current) {
506
+ window.clearTimeout(openTimerRef.current);
507
+ openTimerRef.current = 0;
508
+ }
509
+ };
510
+ }, []);
445
511
  const { tx } = useThemeContext();
446
512
  const elevation = useElevationContext();
447
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
448
- return /* @__PURE__ */ React8.createElement(TooltipContentPrimitive, {
449
- sideOffset: 4,
450
- ...props,
451
- collisionPadding: safeCollisionPadding,
513
+ return /* @__PURE__ */ React8.createElement(PopperPrimitive.Root, popperScope, /* @__PURE__ */ React8.createElement(TooltipContextProvider, {
514
+ scope: __scopeTooltip,
515
+ contentId,
516
+ open,
517
+ stateAttribute,
518
+ trigger,
519
+ onTriggerChange: handleTriggerChange,
520
+ onTriggerEnter: useCallback3(() => {
521
+ if (isOpenDelayedRef.current) {
522
+ handleDelayedOpen();
523
+ } else {
524
+ handleOpen();
525
+ }
526
+ }, [
527
+ isOpenDelayedRef,
528
+ handleDelayedOpen,
529
+ handleOpen
530
+ ]),
531
+ onTriggerLeave: useCallback3(() => {
532
+ if (disableHoverableContent) {
533
+ handleClose();
534
+ } else {
535
+ window.clearTimeout(openTimerRef.current);
536
+ openTimerRef.current = 0;
537
+ }
538
+ }, [
539
+ handleClose,
540
+ disableHoverableContent
541
+ ]),
542
+ onOpen: handleOpen,
543
+ onClose: handleClose,
544
+ disableHoverableContent,
545
+ isPointerInTransitRef,
546
+ onPointerInTransitChange: useCallback3((inTransit) => {
547
+ isPointerInTransitRef.current = inTransit;
548
+ }, [])
549
+ }, /* @__PURE__ */ React8.createElement(TooltipContent, {
550
+ side,
452
551
  className: tx("tooltip.content", "tooltip", {
453
552
  elevation
454
- }, classNames),
553
+ })
554
+ }, content, /* @__PURE__ */ React8.createElement(TooltipArrow, {
555
+ className: tx("tooltip.arrow", "tooltip__arrow")
556
+ })), /* @__PURE__ */ React8.createElement(TooltipVirtualTrigger, {
557
+ virtualRef: triggerRef
558
+ }), children));
559
+ };
560
+ TooltipProvider.displayName = TOOLTIP_NAME;
561
+ var TooltipVirtualTrigger = ({ virtualRef, __scopeTooltip }) => {
562
+ const popperScope = usePopperScope(__scopeTooltip);
563
+ return /* @__PURE__ */ React8.createElement(PopperPrimitive.Anchor, {
564
+ asChild: true,
565
+ ...popperScope,
566
+ virtualRef
567
+ });
568
+ };
569
+ var TRIGGER_NAME = "TooltipTrigger";
570
+ var TooltipTrigger = /* @__PURE__ */ forwardRef7((props, forwardedRef) => {
571
+ const {
572
+ __scopeTooltip,
573
+ onInteract,
574
+ // TODO(thure): Pass `delayDuration` into the context.
575
+ delayDuration: _delayDuration,
576
+ suppressNextTooltip,
577
+ side,
578
+ content,
579
+ ...triggerProps
580
+ } = props;
581
+ const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);
582
+ const ref = useRef(null);
583
+ const composedRefs = useComposedRefs(forwardedRef, ref);
584
+ const isPointerDownRef = useRef(false);
585
+ const hasPointerMoveOpenedRef = useRef(false);
586
+ const handlePointerUp = useCallback3(() => isPointerDownRef.current = false, []);
587
+ useEffect2(() => {
588
+ return () => document.removeEventListener("pointerup", handlePointerUp);
589
+ }, [
590
+ handlePointerUp
591
+ ]);
592
+ return /* @__PURE__ */ React8.createElement(Primitive6.button, {
593
+ // We purposefully avoid adding `type=button` here because tooltip triggers are also
594
+ // commonly anchors and the anchor `type` attribute signifies MIME type.
595
+ "aria-describedby": context.open ? context.contentId : void 0,
596
+ "data-state": context.stateAttribute,
597
+ "data-tooltip-content": content,
598
+ "data-tooltip-side": side,
599
+ ...triggerProps,
600
+ ref: composedRefs,
601
+ onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
602
+ if (event.pointerType === "touch") {
603
+ return;
604
+ }
605
+ if (!hasPointerMoveOpenedRef.current && !context.isPointerInTransitRef.current) {
606
+ onInteract?.(event);
607
+ if (event.defaultPrevented) {
608
+ return;
609
+ }
610
+ context.onTriggerChange(ref.current);
611
+ context.onTriggerEnter();
612
+ hasPointerMoveOpenedRef.current = true;
613
+ }
614
+ }),
615
+ onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {
616
+ context.onTriggerLeave();
617
+ hasPointerMoveOpenedRef.current = false;
618
+ }),
619
+ onPointerDown: composeEventHandlers(props.onPointerDown, () => {
620
+ if (context.open) {
621
+ context.onClose();
622
+ }
623
+ isPointerDownRef.current = true;
624
+ document.addEventListener("pointerup", handlePointerUp, {
625
+ once: true
626
+ });
627
+ }),
628
+ onFocus: composeEventHandlers(props.onFocus, (event) => {
629
+ if (!isPointerDownRef.current) {
630
+ onInteract?.(event);
631
+ if (event.defaultPrevented) {
632
+ return;
633
+ }
634
+ if (suppressNextTooltip?.current) {
635
+ suppressNextTooltip.current = false;
636
+ } else {
637
+ context.onTriggerChange(ref.current);
638
+ context.onOpen();
639
+ }
640
+ }
641
+ }),
642
+ onBlur: composeEventHandlers(props.onBlur, context.onClose),
643
+ onClick: composeEventHandlers(props.onClick, context.onClose)
644
+ });
645
+ });
646
+ TooltipTrigger.displayName = TRIGGER_NAME;
647
+ var PORTAL_NAME = "TooltipPortal";
648
+ var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {
649
+ forceMount: void 0
650
+ });
651
+ var TooltipPortal = (props) => {
652
+ const { __scopeTooltip, forceMount, children, container } = props;
653
+ const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);
654
+ return /* @__PURE__ */ React8.createElement(PortalProvider, {
655
+ scope: __scopeTooltip,
656
+ forceMount
657
+ }, /* @__PURE__ */ React8.createElement(Presence, {
658
+ present: forceMount || context.open
659
+ }, /* @__PURE__ */ React8.createElement(PortalPrimitive, {
660
+ asChild: true,
661
+ container
662
+ }, children)));
663
+ };
664
+ TooltipPortal.displayName = PORTAL_NAME;
665
+ var CONTENT_NAME = "TooltipContent";
666
+ var TooltipContent = /* @__PURE__ */ forwardRef7((props, forwardedRef) => {
667
+ const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);
668
+ const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
669
+ const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
670
+ return /* @__PURE__ */ React8.createElement(Presence, {
671
+ present: forceMount || context.open
672
+ }, context.disableHoverableContent ? /* @__PURE__ */ React8.createElement(TooltipContentImpl, {
673
+ side,
674
+ ...contentProps,
675
+ ref: forwardedRef
676
+ }) : /* @__PURE__ */ React8.createElement(TooltipContentHoverable, {
677
+ side,
678
+ ...contentProps,
679
+ ref: forwardedRef
680
+ }));
681
+ });
682
+ var TooltipContentHoverable = /* @__PURE__ */ forwardRef7((props, forwardedRef) => {
683
+ const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
684
+ const ref = useRef(null);
685
+ const composedRefs = useComposedRefs(forwardedRef, ref);
686
+ const [pointerGraceArea, setPointerGraceArea] = useState4(null);
687
+ const { trigger, onClose } = context;
688
+ const content = ref.current;
689
+ const { onPointerInTransitChange } = context;
690
+ const handleRemoveGraceArea = useCallback3(() => {
691
+ setPointerGraceArea(null);
692
+ onPointerInTransitChange(false);
693
+ }, [
694
+ onPointerInTransitChange
695
+ ]);
696
+ const handleCreateGraceArea = useCallback3((event, hoverTarget) => {
697
+ const currentTarget = event.currentTarget;
698
+ const exitPoint = {
699
+ x: event.clientX,
700
+ y: event.clientY
701
+ };
702
+ const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());
703
+ const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);
704
+ const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());
705
+ const graceArea = getHull([
706
+ ...paddedExitPoints,
707
+ ...hoverTargetPoints
708
+ ]);
709
+ setPointerGraceArea(graceArea);
710
+ onPointerInTransitChange(true);
711
+ }, [
712
+ onPointerInTransitChange
713
+ ]);
714
+ useEffect2(() => {
715
+ return () => handleRemoveGraceArea();
716
+ }, [
717
+ handleRemoveGraceArea
718
+ ]);
719
+ useEffect2(() => {
720
+ if (trigger && content) {
721
+ const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);
722
+ const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);
723
+ trigger.addEventListener("pointerleave", handleTriggerLeave);
724
+ content.addEventListener("pointerleave", handleContentLeave);
725
+ return () => {
726
+ trigger.removeEventListener("pointerleave", handleTriggerLeave);
727
+ content.removeEventListener("pointerleave", handleContentLeave);
728
+ };
729
+ }
730
+ }, [
731
+ trigger,
732
+ content,
733
+ handleCreateGraceArea,
734
+ handleRemoveGraceArea
735
+ ]);
736
+ useEffect2(() => {
737
+ if (pointerGraceArea) {
738
+ const handleTrackPointerGrace = (event) => {
739
+ const target = event.target;
740
+ const pointerPosition = {
741
+ x: event.clientX,
742
+ y: event.clientY
743
+ };
744
+ const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);
745
+ const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);
746
+ if (hasEnteredTarget) {
747
+ handleRemoveGraceArea();
748
+ } else if (isPointerOutsideGraceArea) {
749
+ handleRemoveGraceArea();
750
+ onClose();
751
+ }
752
+ };
753
+ document.addEventListener("pointermove", handleTrackPointerGrace);
754
+ return () => document.removeEventListener("pointermove", handleTrackPointerGrace);
755
+ }
756
+ }, [
757
+ trigger,
758
+ content,
759
+ pointerGraceArea,
760
+ onClose,
761
+ handleRemoveGraceArea
762
+ ]);
763
+ return /* @__PURE__ */ React8.createElement(TooltipContentImpl, {
764
+ ...props,
765
+ ref: composedRefs
766
+ });
767
+ });
768
+ var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, {
769
+ isInside: false
770
+ });
771
+ var TooltipContentImpl = /* @__PURE__ */ forwardRef7((props, forwardedRef) => {
772
+ const { __scopeTooltip, children, "aria-label": ariaLabel, onEscapeKeyDown, onPointerDownOutside, ...contentProps } = props;
773
+ const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
774
+ const popperScope = usePopperScope(__scopeTooltip);
775
+ const { onClose } = context;
776
+ useEffect2(() => {
777
+ document.addEventListener(TOOLTIP_OPEN, onClose);
778
+ return () => document.removeEventListener(TOOLTIP_OPEN, onClose);
779
+ }, [
780
+ onClose
781
+ ]);
782
+ useEffect2(() => {
783
+ if (context.trigger) {
784
+ const handleScroll = (event) => {
785
+ const target = event.target;
786
+ if (target?.contains(context.trigger)) {
787
+ onClose();
788
+ }
789
+ };
790
+ window.addEventListener("scroll", handleScroll, {
791
+ capture: true
792
+ });
793
+ return () => window.removeEventListener("scroll", handleScroll, {
794
+ capture: true
795
+ });
796
+ }
797
+ }, [
798
+ context.trigger,
799
+ onClose
800
+ ]);
801
+ return /* @__PURE__ */ React8.createElement(DismissableLayer, {
802
+ asChild: true,
803
+ disableOutsidePointerEvents: false,
804
+ onEscapeKeyDown,
805
+ onPointerDownOutside,
806
+ onFocusOutside: (event) => event.preventDefault(),
807
+ onDismiss: onClose
808
+ }, /* @__PURE__ */ React8.createElement(PopperPrimitive.Content, {
809
+ "data-state": context.stateAttribute,
810
+ ...popperScope,
811
+ ...contentProps,
812
+ ref: forwardedRef,
813
+ style: {
814
+ ...contentProps.style,
815
+ // re-namespace exposed content custom properties
816
+ ...{
817
+ "--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
818
+ "--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
819
+ "--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
820
+ "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
821
+ "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
822
+ }
823
+ }
824
+ }, /* @__PURE__ */ React8.createElement(Slottable, null, children), /* @__PURE__ */ React8.createElement(VisuallyHiddenContentContextProvider, {
825
+ scope: __scopeTooltip,
826
+ isInside: true
827
+ }, /* @__PURE__ */ React8.createElement(VisuallyHiddenPrimitive.Root, {
828
+ id: context.contentId,
829
+ role: "tooltip"
830
+ }, ariaLabel || children))));
831
+ });
832
+ TooltipContent.displayName = CONTENT_NAME;
833
+ var ARROW_NAME = "TooltipArrow";
834
+ var TooltipArrow = /* @__PURE__ */ forwardRef7((props, forwardedRef) => {
835
+ const { __scopeTooltip, ...arrowProps } = props;
836
+ const popperScope = usePopperScope(__scopeTooltip);
837
+ const visuallyHiddenContentContext = useVisuallyHiddenContentContext(ARROW_NAME, __scopeTooltip);
838
+ return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ React8.createElement(PopperPrimitive.Arrow, {
839
+ ...popperScope,
840
+ ...arrowProps,
455
841
  ref: forwardedRef
456
842
  });
457
843
  });
844
+ TooltipArrow.displayName = ARROW_NAME;
845
+ var getExitSideFromRect = (point, rect) => {
846
+ const top = Math.abs(rect.top - point.y);
847
+ const bottom = Math.abs(rect.bottom - point.y);
848
+ const right = Math.abs(rect.right - point.x);
849
+ const left = Math.abs(rect.left - point.x);
850
+ switch (Math.min(top, bottom, right, left)) {
851
+ case left:
852
+ return "left";
853
+ case right:
854
+ return "right";
855
+ case top:
856
+ return "top";
857
+ case bottom:
858
+ return "bottom";
859
+ default:
860
+ throw new Error("unreachable");
861
+ }
862
+ };
863
+ var getPaddedExitPoints = (exitPoint, exitSide, padding = 5) => {
864
+ const paddedExitPoints = [];
865
+ switch (exitSide) {
866
+ case "top":
867
+ paddedExitPoints.push({
868
+ x: exitPoint.x - padding,
869
+ y: exitPoint.y + padding
870
+ }, {
871
+ x: exitPoint.x + padding,
872
+ y: exitPoint.y + padding
873
+ });
874
+ break;
875
+ case "bottom":
876
+ paddedExitPoints.push({
877
+ x: exitPoint.x - padding,
878
+ y: exitPoint.y - padding
879
+ }, {
880
+ x: exitPoint.x + padding,
881
+ y: exitPoint.y - padding
882
+ });
883
+ break;
884
+ case "left":
885
+ paddedExitPoints.push({
886
+ x: exitPoint.x + padding,
887
+ y: exitPoint.y - padding
888
+ }, {
889
+ x: exitPoint.x + padding,
890
+ y: exitPoint.y + padding
891
+ });
892
+ break;
893
+ case "right":
894
+ paddedExitPoints.push({
895
+ x: exitPoint.x - padding,
896
+ y: exitPoint.y - padding
897
+ }, {
898
+ x: exitPoint.x - padding,
899
+ y: exitPoint.y + padding
900
+ });
901
+ break;
902
+ }
903
+ return paddedExitPoints;
904
+ };
905
+ var getPointsFromRect = (rect) => {
906
+ const { top, right, bottom, left } = rect;
907
+ return [
908
+ {
909
+ x: left,
910
+ y: top
911
+ },
912
+ {
913
+ x: right,
914
+ y: top
915
+ },
916
+ {
917
+ x: right,
918
+ y: bottom
919
+ },
920
+ {
921
+ x: left,
922
+ y: bottom
923
+ }
924
+ ];
925
+ };
926
+ var isPointInPolygon = (point, polygon) => {
927
+ const { x, y } = point;
928
+ let inside = false;
929
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
930
+ const xi = polygon[i].x;
931
+ const yi = polygon[i].y;
932
+ const xj = polygon[j].x;
933
+ const yj = polygon[j].y;
934
+ const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
935
+ if (intersect) {
936
+ inside = !inside;
937
+ }
938
+ }
939
+ return inside;
940
+ };
941
+ var getHull = (points) => {
942
+ const newPoints = points.slice();
943
+ newPoints.sort((a, b) => {
944
+ if (a.x < b.x) {
945
+ return -1;
946
+ } else if (a.x > b.x) {
947
+ return 1;
948
+ } else if (a.y < b.y) {
949
+ return -1;
950
+ } else if (a.y > b.y) {
951
+ return 1;
952
+ } else {
953
+ return 0;
954
+ }
955
+ });
956
+ return getHullPresorted(newPoints);
957
+ };
958
+ var getHullPresorted = (points) => {
959
+ if (points.length <= 1) {
960
+ return points.slice();
961
+ }
962
+ const upperHull = [];
963
+ for (let i = 0; i < points.length; i++) {
964
+ const p = points[i];
965
+ while (upperHull.length >= 2) {
966
+ const q = upperHull[upperHull.length - 1];
967
+ const r = upperHull[upperHull.length - 2];
968
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {
969
+ upperHull.pop();
970
+ } else {
971
+ break;
972
+ }
973
+ }
974
+ upperHull.push(p);
975
+ }
976
+ upperHull.pop();
977
+ const lowerHull = [];
978
+ for (let i = points.length - 1; i >= 0; i--) {
979
+ const p = points[i];
980
+ while (lowerHull.length >= 2) {
981
+ const q = lowerHull[lowerHull.length - 1];
982
+ const r = lowerHull[lowerHull.length - 2];
983
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {
984
+ lowerHull.pop();
985
+ } else {
986
+ break;
987
+ }
988
+ }
989
+ lowerHull.push(p);
990
+ }
991
+ lowerHull.pop();
992
+ if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {
993
+ return upperHull;
994
+ } else {
995
+ return upperHull.concat(lowerHull);
996
+ }
997
+ };
458
998
  var Tooltip = {
459
999
  Provider: TooltipProvider,
460
- Root: TooltipRoot,
461
- Portal: TooltipPortal,
462
- Trigger: TooltipTrigger,
463
- Arrow: TooltipArrow,
464
- Content: TooltipContent
1000
+ Trigger: TooltipTrigger
465
1001
  };
466
1002
 
467
1003
  // packages/ui/react-ui/src/components/Buttons/IconButton.tsx
468
- var IconOnlyButton = /* @__PURE__ */ forwardRef8(({ noTooltip, tooltipPortal = true, tooltipZIndex: zIndex, tooltipSide, suppressNextTooltip, ...props }, forwardedRef) => {
469
- const [triggerTooltipOpen, setTriggerTooltipOpen] = useState4(false);
1004
+ var IconOnlyButton = /* @__PURE__ */ forwardRef8(({ noTooltip, tooltipPortal = true, tooltipSide, suppressNextTooltip, ...props }, forwardedRef) => {
470
1005
  if (noTooltip) {
471
1006
  return /* @__PURE__ */ React9.createElement(LabelledIconButton, {
472
1007
  ...props,
473
1008
  ref: forwardedRef
474
1009
  });
475
1010
  }
476
- const content = /* @__PURE__ */ React9.createElement(Tooltip.Content, {
477
- ...zIndex && {
478
- style: {
479
- zIndex
480
- }
481
- },
482
- side: tooltipSide
483
- }, props.label, /* @__PURE__ */ React9.createElement(Tooltip.Arrow, null));
484
- return /* @__PURE__ */ React9.createElement(Tooltip.Root, {
485
- open: triggerTooltipOpen,
486
- onOpenChange: (nextOpen) => {
487
- if (suppressNextTooltip?.current) {
488
- setTriggerTooltipOpen(false);
489
- suppressNextTooltip.current = false;
490
- } else {
491
- setTriggerTooltipOpen(nextOpen);
492
- }
493
- }
494
- }, /* @__PURE__ */ React9.createElement(Tooltip.Trigger, {
495
- asChild: true
1011
+ return /* @__PURE__ */ React9.createElement(Tooltip.Trigger, {
1012
+ asChild: true,
1013
+ content: props.label,
1014
+ side: tooltipSide,
1015
+ suppressNextTooltip
496
1016
  }, /* @__PURE__ */ React9.createElement(LabelledIconButton, {
497
1017
  ...props,
498
1018
  ref: forwardedRef
499
- })), tooltipPortal ? /* @__PURE__ */ React9.createElement(Tooltip.Portal, null, content) : content);
1019
+ }));
500
1020
  });
501
1021
  var LabelledIconButton = /* @__PURE__ */ forwardRef8(({ icon, size, iconOnly, label, classNames, iconClassNames, caretDown, suppressNextTooltip, ...props }, forwardedRef) => {
502
1022
  const { tx } = useThemeContext();
@@ -566,7 +1086,7 @@ var ToggleGroupItem = /* @__PURE__ */ forwardRef10(({ variant, elevation, densit
566
1086
  });
567
1087
 
568
1088
  // packages/ui/react-ui/src/components/Clipboard/ClipboardProvider.tsx
569
- import React12, { createContext as createContext4, useCallback as useCallback3, useContext as useContext6, useState as useState5 } from "react";
1089
+ import React12, { createContext as createContext4, useCallback as useCallback4, useContext as useContext6, useState as useState5 } from "react";
570
1090
  var ClipboardContext = /* @__PURE__ */ createContext4({
571
1091
  textValue: "",
572
1092
  setTextValue: async (_) => {
@@ -575,7 +1095,7 @@ var ClipboardContext = /* @__PURE__ */ createContext4({
575
1095
  var useClipboard = () => useContext6(ClipboardContext);
576
1096
  var ClipboardProvider = ({ children }) => {
577
1097
  const [textValue, setInternalTextValue] = useState5("");
578
- const setTextValue = useCallback3(async (nextValue) => {
1098
+ const setTextValue = useCallback4(async (nextValue) => {
579
1099
  await navigator.clipboard.writeText(nextValue);
580
1100
  return setInternalTextValue(nextValue);
581
1101
  }, []);
@@ -588,12 +1108,12 @@ var ClipboardProvider = ({ children }) => {
588
1108
  };
589
1109
 
590
1110
  // packages/ui/react-ui/src/components/Clipboard/CopyButton.tsx
591
- import React16, { useState as useState6 } from "react";
1111
+ import React16 from "react";
592
1112
  import { mx as mx2 } from "@dxos/react-ui-theme";
593
1113
 
594
1114
  // packages/ui/react-ui/src/components/ThemeProvider/ThemeProvider.tsx
595
1115
  import { createKeyborg } from "keyborg";
596
- import React15, { createContext as createContext7, useEffect as useEffect2, useMemo as useMemo2 } from "react";
1116
+ import React15, { createContext as createContext7, useEffect as useEffect3, useMemo as useMemo2 } from "react";
597
1117
 
598
1118
  // packages/ui/react-ui/src/util/hasIosKeyboard.ts
599
1119
  var hasIosKeyboard = () => {
@@ -625,7 +1145,7 @@ var ElevationProvider = ({ elevation, children }) => /* @__PURE__ */ React14.cre
625
1145
  // packages/ui/react-ui/src/components/ThemeProvider/ThemeProvider.tsx
626
1146
  var ThemeContext = /* @__PURE__ */ createContext7(void 0);
627
1147
  var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName, themeMode = "dark", rootDensity = "fine", ...rest }) => {
628
- useEffect2(() => {
1148
+ useEffect3(() => {
629
1149
  if (document.defaultView) {
630
1150
  const kb = createKeyborg(document.defaultView);
631
1151
  kb.subscribe(handleInputModalityChange);
@@ -699,36 +1219,25 @@ var CopyButton = ({ value, classNames, iconProps, ...props }) => {
699
1219
  ...iconProps
700
1220
  })));
701
1221
  };
702
- var CopyButtonIconOnly = ({ value, classNames, iconProps, variant, ...props }) => {
1222
+ var CopyButtonIconOnly = ({ __scopeTooltip, value, classNames, iconProps, variant, ...props }) => {
703
1223
  const { t } = useTranslation("os");
704
1224
  const { textValue, setTextValue } = useClipboard();
705
1225
  const isCopied = textValue === value;
706
1226
  const label = isCopied ? t("copy success label") : props.label ?? t("copy label");
707
- const [open, setOpen] = useState6(false);
708
- return /* @__PURE__ */ React16.createElement(Tooltip.Root, {
709
- delayDuration: 1500,
710
- open,
711
- onOpenChange: setOpen
712
- }, /* @__PURE__ */ React16.createElement(Tooltip.Portal, null, /* @__PURE__ */ React16.createElement(Tooltip.Content, {
713
- side: "bottom",
714
- sideOffset: 12
715
- }, /* @__PURE__ */ React16.createElement("span", null, label), /* @__PURE__ */ React16.createElement(Tooltip.Arrow, null))), /* @__PURE__ */ React16.createElement(Tooltip.Trigger, {
716
- "aria-label": label,
717
- ...props,
718
- onClick: () => setTextValue(value).then(() => setOpen(true)),
719
- "data-testid": "copy-invitation",
720
- asChild: true
721
- }, /* @__PURE__ */ React16.createElement(Button, {
1227
+ const { onOpen } = useTooltipContext("CopyButton", __scopeTooltip);
1228
+ return /* @__PURE__ */ React16.createElement(IconButton, {
1229
+ iconOnly: true,
1230
+ label,
1231
+ icon: "ph--copy--regular",
1232
+ size: 5,
722
1233
  variant,
723
1234
  classNames: [
724
1235
  "inline-flex flex-col justify-center",
725
1236
  classNames
726
- ]
727
- }, /* @__PURE__ */ React16.createElement(Icon, {
728
- icon: "ph--copy--regular",
729
- size: 5,
730
- ...iconProps
731
- }))));
1237
+ ],
1238
+ onClick: () => setTextValue(value).then(onOpen),
1239
+ "data-testid": "copy-invitation"
1240
+ });
732
1241
  };
733
1242
 
734
1243
  // packages/ui/react-ui/src/components/Clipboard/index.ts
@@ -770,9 +1279,7 @@ var DialogDescription = /* @__PURE__ */ forwardRef11(({ classNames, srOnly, ...p
770
1279
  var DialogClose = DialogClosePrimitive;
771
1280
  var DIALOG_OVERLAY_NAME = "DialogOverlay";
772
1281
  var DIALOG_CONTENT_NAME = "DialogContent";
773
- var [OverlayLayoutProvider, useOverlayLayoutContext] = createContext8(DIALOG_OVERLAY_NAME, {
774
- inOverlayLayout: false
775
- });
1282
+ var [OverlayLayoutProvider, useOverlayLayoutContext] = createContext8(DIALOG_OVERLAY_NAME, {});
776
1283
  var DialogOverlay = /* @__PURE__ */ forwardRef11(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
777
1284
  const { tx } = useThemeContext();
778
1285
  return /* @__PURE__ */ React17.createElement(DialogOverlayPrimitive, {
@@ -787,9 +1294,10 @@ var DialogOverlay = /* @__PURE__ */ forwardRef11(({ classNames, children, blockA
787
1294
  DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
788
1295
  var DialogContent = /* @__PURE__ */ forwardRef11(({ classNames, children, inOverlayLayout: propsInOverlayLayout, ...props }, forwardedRef) => {
789
1296
  const { tx } = useThemeContext();
790
- const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
1297
+ const { inOverlayLayout, descriptionId } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
791
1298
  return /* @__PURE__ */ React17.createElement(DialogContentPrimitive, {
792
- "aria-describedby": void 0,
1299
+ // NOTE: Radix warning unless set.
1300
+ "aria-describedby": descriptionId ?? "unknown",
793
1301
  ...props,
794
1302
  className: tx("dialog.content", "dialog", {
795
1303
  inOverlayLayout: propsInOverlayLayout || inOverlayLayout
@@ -881,757 +1389,312 @@ var AlertDialog = {
881
1389
  Action: AlertDialogAction
882
1390
  };
883
1391
 
884
- // packages/ui/react-ui/src/components/Menus/ContextMenu.tsx
885
- import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
886
- import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
887
- import { Slot as Slot6 } from "@radix-ui/react-slot";
888
- import React19, { forwardRef as forwardRef13 } from "react";
889
- var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
890
- var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
891
- var ContextMenuPortal = ContextMenuPrimitive.Portal;
892
- var ContextMenuContent = /* @__PURE__ */ forwardRef13(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
1392
+ // packages/ui/react-ui/src/components/Input/Input.tsx
1393
+ import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
1394
+ import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1395
+ import React19, { forwardRef as forwardRef13, useCallback as useCallback5 } from "react";
1396
+ import { InputRoot, PinInput as PinInputPrimitive, TextInput as TextInputPrimitive, TextArea as TextAreaPrimitive, useInputContext, INPUT_NAME, Description as DescriptionPrimitive, DescriptionAndValidation as DescriptionAndValidationPrimitive, Label as LabelPrimitive, Validation as ValidationPrimitive } from "@dxos/react-input";
1397
+ import { mx as mx3 } from "@dxos/react-ui-theme";
1398
+ var Label = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
893
1399
  const { tx } = useThemeContext();
894
- const elevation = useElevationContext();
895
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
896
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.Content, {
1400
+ return /* @__PURE__ */ React19.createElement(LabelPrimitive, {
897
1401
  ...props,
898
- collisionPadding: safeCollisionPadding,
899
- className: tx("menu.content", "menu", {
900
- elevation
1402
+ className: tx("input.label", "input__label", {
1403
+ srOnly
901
1404
  }, classNames),
902
1405
  ref: forwardedRef
903
1406
  }, children);
904
1407
  });
905
- var ContextMenuViewport = /* @__PURE__ */ forwardRef13(({ classNames, asChild, children, ...props }, forwardedRef) => {
1408
+ var Description = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
906
1409
  const { tx } = useThemeContext();
907
- const Root5 = asChild ? Slot6 : Primitive6.div;
908
- return /* @__PURE__ */ React19.createElement(Root5, {
1410
+ return /* @__PURE__ */ React19.createElement(DescriptionPrimitive, {
909
1411
  ...props,
910
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1412
+ className: tx("input.description", "input__description", {
1413
+ srOnly
1414
+ }, classNames),
911
1415
  ref: forwardedRef
912
1416
  }, children);
913
1417
  });
914
- var ContextMenuArrow = /* @__PURE__ */ forwardRef13(({ classNames, ...props }, forwardedRef) => {
1418
+ var Validation = /* @__PURE__ */ forwardRef13(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
915
1419
  const { tx } = useThemeContext();
916
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.Arrow, {
1420
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1421
+ return /* @__PURE__ */ React19.createElement(ValidationPrimitive, {
917
1422
  ...props,
918
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1423
+ className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1424
+ srOnly,
1425
+ validationValence
1426
+ }, classNames),
919
1427
  ref: forwardedRef
920
- });
1428
+ }, children);
921
1429
  });
922
- var ContextMenuGroup = ContextMenuPrimitive.Group;
923
- var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
924
- var ContextMenuItem = /* @__PURE__ */ forwardRef13(({ classNames, ...props }, forwardedRef) => {
1430
+ var DescriptionAndValidation = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
925
1431
  const { tx } = useThemeContext();
926
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.Item, {
1432
+ return /* @__PURE__ */ React19.createElement(DescriptionAndValidationPrimitive, {
927
1433
  ...props,
928
- className: tx("menu.item", "menu__item", {}, classNames),
1434
+ className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1435
+ srOnly
1436
+ }, classNames),
929
1437
  ref: forwardedRef
930
- });
1438
+ }, children);
931
1439
  });
932
- var ContextMenuCheckboxItem = /* @__PURE__ */ forwardRef13(({ classNames, ...props }, forwardedRef) => {
1440
+ var PinInput = /* @__PURE__ */ forwardRef13(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1441
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
933
1442
  const { tx } = useThemeContext();
934
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.CheckboxItem, {
1443
+ const density = useDensityContext(propsDensity);
1444
+ const elevation = useElevationContext(propsElevation);
1445
+ const segmentClassName = useCallback5(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1446
+ variant: "static",
1447
+ focused,
1448
+ disabled: props.disabled,
1449
+ density,
1450
+ elevation,
1451
+ validationValence
1452
+ }, propsSegmentClassName), [
1453
+ tx,
1454
+ props.disabled,
1455
+ elevation,
1456
+ propsElevation,
1457
+ density
1458
+ ]);
1459
+ return /* @__PURE__ */ React19.createElement(PinInputPrimitive, {
935
1460
  ...props,
936
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1461
+ segmentClassName,
1462
+ ...props.autoFocus && !hasIosKeyboard2 && {
1463
+ autoFocus: true
1464
+ },
1465
+ inputClassName: tx("input.inputWithSegments", "input input--pin", {
1466
+ disabled: props.disabled
1467
+ }, inputClassName),
937
1468
  ref: forwardedRef
938
1469
  });
939
1470
  });
940
- var ContextMenuSeparator = /* @__PURE__ */ forwardRef13(({ classNames, ...props }, forwardedRef) => {
941
- const { tx } = useThemeContext();
942
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.Separator, {
1471
+ var TextInput = /* @__PURE__ */ forwardRef13(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1472
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1473
+ const themeContextValue = useThemeContext();
1474
+ const density = useDensityContext(propsDensity);
1475
+ const elevation = useElevationContext(propsElevation);
1476
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1477
+ const { tx } = themeContextValue;
1478
+ return /* @__PURE__ */ React19.createElement(TextInputPrimitive, {
943
1479
  ...props,
944
- className: tx("menu.separator", "menu__item", {}, classNames),
1480
+ className: tx("input.input", "input", {
1481
+ variant,
1482
+ disabled: props.disabled,
1483
+ density,
1484
+ elevation,
1485
+ validationValence
1486
+ }, classNames),
1487
+ ...props.autoFocus && !hasIosKeyboard2 && {
1488
+ autoFocus: true
1489
+ },
945
1490
  ref: forwardedRef
946
1491
  });
947
1492
  });
948
- var ContextMenuGroupLabel = /* @__PURE__ */ forwardRef13(({ classNames, ...props }, forwardedRef) => {
1493
+ var TextArea = /* @__PURE__ */ forwardRef13(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1494
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
949
1495
  const { tx } = useThemeContext();
950
- return /* @__PURE__ */ React19.createElement(ContextMenuPrimitive.Label, {
1496
+ const density = useDensityContext(propsDensity);
1497
+ const elevation = useElevationContext(propsElevation);
1498
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1499
+ return /* @__PURE__ */ React19.createElement(TextAreaPrimitive, {
951
1500
  ...props,
952
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1501
+ className: tx("input.input", "input--text-area", {
1502
+ variant,
1503
+ disabled: props.disabled,
1504
+ density,
1505
+ elevation,
1506
+ validationValence
1507
+ }, classNames),
1508
+ ...props.autoFocus && !hasIosKeyboard2 && {
1509
+ autoFocus: true
1510
+ },
953
1511
  ref: forwardedRef
954
1512
  });
955
1513
  });
956
- var ContextMenu2 = {
957
- Root: ContextMenuRoot,
958
- Trigger: ContextMenuTrigger,
959
- Portal: ContextMenuPortal,
960
- Content: ContextMenuContent,
961
- Viewport: ContextMenuViewport,
962
- Arrow: ContextMenuArrow,
963
- Group: ContextMenuGroup,
964
- Item: ContextMenuItem,
965
- CheckboxItem: ContextMenuCheckboxItem,
966
- ItemIndicator: ContextMenuItemIndicator,
967
- Separator: ContextMenuSeparator,
968
- GroupLabel: ContextMenuGroupLabel
969
- };
970
-
971
- // packages/ui/react-ui/src/components/Menus/DropdownMenu.tsx
972
- import { composeEventHandlers } from "@radix-ui/primitive";
973
- import { composeRefs } from "@radix-ui/react-compose-refs";
974
- import { createContextScope } from "@radix-ui/react-context";
975
- import { useId as useId2 } from "@radix-ui/react-id";
976
- import * as MenuPrimitive from "@radix-ui/react-menu";
977
- import { createMenuScope } from "@radix-ui/react-menu";
978
- import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
979
- import { Slot as Slot7 } from "@radix-ui/react-slot";
980
- import { useControllableState } from "@radix-ui/react-use-controllable-state";
981
- import React20, { useRef, useCallback as useCallback4, forwardRef as forwardRef14, useEffect as useEffect3 } from "react";
982
- var DROPDOWN_MENU_NAME = "DropdownMenu";
983
- var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(DROPDOWN_MENU_NAME, [
984
- createMenuScope
985
- ]);
986
- var useMenuScope = createMenuScope();
987
- var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
988
- var DropdownMenuRoot = (props) => {
989
- const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
990
- const menuScope = useMenuScope(__scopeDropdownMenu);
991
- const triggerRef = useRef(null);
992
- const [open = false, setOpen] = useControllableState({
993
- prop: openProp,
994
- defaultProp: defaultOpen,
995
- onChange: onOpenChange
1514
+ var Checkbox = /* @__PURE__ */ forwardRef13(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1515
+ const [checked, onCheckedChange] = useControllableState2({
1516
+ prop: propsChecked,
1517
+ defaultProp: propsDefaultChecked,
1518
+ onChange: propsOnCheckedChange
996
1519
  });
997
- return /* @__PURE__ */ React20.createElement(DropdownMenuProvider, {
998
- scope: __scopeDropdownMenu,
999
- triggerId: useId2(),
1000
- triggerRef,
1001
- contentId: useId2(),
1002
- open,
1003
- onOpenChange: setOpen,
1004
- onOpenToggle: useCallback4(() => setOpen((prevOpen) => !prevOpen), [
1005
- setOpen
1006
- ]),
1007
- modal
1008
- }, /* @__PURE__ */ React20.createElement(MenuPrimitive.Root, {
1009
- ...menuScope,
1010
- open,
1011
- onOpenChange: setOpen,
1012
- dir,
1013
- modal
1014
- }, children));
1015
- };
1016
- DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
1017
- var TRIGGER_NAME = "DropdownMenuTrigger";
1018
- var DropdownMenuTrigger = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1019
- const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1020
- const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
1021
- const menuScope = useMenuScope(__scopeDropdownMenu);
1022
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Anchor, {
1023
- asChild: true,
1024
- ...menuScope
1025
- }, /* @__PURE__ */ React20.createElement(Primitive7.button, {
1026
- type: "button",
1027
- id: context.triggerId,
1028
- "aria-haspopup": "menu",
1029
- "aria-expanded": context.open,
1030
- "aria-controls": context.open ? context.contentId : void 0,
1031
- "data-state": context.open ? "open" : "closed",
1032
- "data-disabled": disabled ? "" : void 0,
1033
- disabled,
1034
- ...triggerProps,
1035
- ref: composeRefs(forwardedRef, context.triggerRef),
1036
- onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
1037
- if (!disabled && event.button === 0 && event.ctrlKey === false) {
1038
- context.onOpenToggle();
1039
- if (!context.open) {
1040
- event.preventDefault();
1041
- }
1042
- }
1043
- }),
1044
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1045
- if (disabled) {
1046
- return;
1047
- }
1048
- if ([
1049
- "Enter",
1050
- " "
1051
- ].includes(event.key)) {
1052
- context.onOpenToggle();
1053
- }
1054
- if (event.key === "ArrowDown") {
1055
- context.onOpenChange(true);
1056
- }
1057
- if ([
1058
- "Enter",
1059
- " ",
1060
- "ArrowDown"
1061
- ].includes(event.key)) {
1062
- event.preventDefault();
1063
- }
1520
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
1521
+ const { tx } = useThemeContext();
1522
+ return /* @__PURE__ */ React19.createElement(CheckboxPrimitive, {
1523
+ ...props,
1524
+ checked,
1525
+ onCheckedChange,
1526
+ id,
1527
+ "aria-describedby": descriptionId,
1528
+ ...validationValence === "error" && {
1529
+ "aria-invalid": "true",
1530
+ "aria-errormessage": errorMessageId
1531
+ },
1532
+ className: tx("input.checkbox", "input--checkbox", {
1533
+ size
1534
+ }, "shrink-0", classNames),
1535
+ ref: forwardedRef
1536
+ }, /* @__PURE__ */ React19.createElement(Icon, {
1537
+ icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1538
+ classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1539
+ size,
1540
+ checked
1064
1541
  })
1065
1542
  }));
1066
1543
  });
1067
- DropdownMenuTrigger.displayName = TRIGGER_NAME;
1068
- var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
1069
- var DropdownMenuVirtualTrigger = (props) => {
1070
- const { __scopeDropdownMenu, virtualRef } = props;
1071
- const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
1072
- const menuScope = useMenuScope(__scopeDropdownMenu);
1073
- useEffect3(() => {
1074
- if (virtualRef.current) {
1075
- context.triggerRef.current = virtualRef.current;
1076
- }
1077
- });
1078
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Anchor, {
1079
- ...menuScope,
1080
- virtualRef
1081
- });
1082
- };
1083
- DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
1084
- var PORTAL_NAME = "DropdownMenuPortal";
1085
- var DropdownMenuPortal = (props) => {
1086
- const { __scopeDropdownMenu, ...portalProps } = props;
1087
- const menuScope = useMenuScope(__scopeDropdownMenu);
1088
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Portal, {
1089
- ...menuScope,
1090
- ...portalProps
1544
+ var Switch = /* @__PURE__ */ forwardRef13(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1545
+ const [checked, onCheckedChange] = useControllableState2({
1546
+ prop: propsChecked,
1547
+ defaultProp: propsDefaultChecked ?? false,
1548
+ onChange: propsOnCheckedChange
1091
1549
  });
1092
- };
1093
- DropdownMenuPortal.displayName = PORTAL_NAME;
1094
- var DropdownMenuViewport = /* @__PURE__ */ forwardRef14(({ classNames, asChild, children, ...props }, forwardedRef) => {
1095
- const { tx } = useThemeContext();
1096
- const Root5 = asChild ? Slot7 : Primitive7.div;
1097
- return /* @__PURE__ */ React20.createElement(Root5, {
1550
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
1551
+ return /* @__PURE__ */ React19.createElement("input", {
1552
+ type: "checkbox",
1553
+ className: mx3("dx-checkbox--switch dx-focus-ring", classNames),
1554
+ checked,
1555
+ onChange: (event) => {
1556
+ onCheckedChange(event.target.checked);
1557
+ },
1558
+ id,
1559
+ "aria-describedby": descriptionId,
1098
1560
  ...props,
1099
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1561
+ ...validationValence === "error" && {
1562
+ "aria-invalid": "true",
1563
+ "aria-errormessage": errorMessageId
1564
+ },
1100
1565
  ref: forwardedRef
1101
- }, children);
1102
- });
1103
- var CONTENT_NAME = "DropdownMenuContent";
1104
- var DropdownMenuContent = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1105
- const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
1106
- const { tx } = useThemeContext();
1107
- const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
1108
- const elevation = useElevationContext();
1109
- const menuScope = useMenuScope(__scopeDropdownMenu);
1110
- const hasInteractedOutsideRef = useRef(false);
1111
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1112
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Content, {
1113
- id: context.contentId,
1114
- "aria-labelledby": context.triggerId,
1115
- ...menuScope,
1116
- ...contentProps,
1117
- collisionPadding: safeCollisionPadding,
1118
- ref: forwardedRef,
1119
- onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
1120
- if (!hasInteractedOutsideRef.current) {
1121
- context.triggerRef.current?.focus();
1122
- }
1123
- hasInteractedOutsideRef.current = false;
1124
- event.preventDefault();
1125
- }),
1126
- onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
1127
- const originalEvent = event.detail.originalEvent;
1128
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
1129
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
1130
- if (!context.modal || isRightClick) {
1131
- hasInteractedOutsideRef.current = true;
1132
- }
1133
- }),
1134
- className: tx("menu.content", "menu", {
1135
- elevation
1136
- }, classNames),
1137
- style: {
1138
- ...props.style,
1139
- // re-namespace exposed content custom properties
1140
- ...{
1141
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1142
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1143
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1144
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1145
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1146
- }
1147
- }
1148
1566
  });
1149
1567
  });
1150
- DropdownMenuContent.displayName = CONTENT_NAME;
1151
- var GROUP_NAME = "DropdownMenuGroup";
1152
- var DropdownMenuGroup = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1153
- const { __scopeDropdownMenu, ...groupProps } = props;
1154
- const menuScope = useMenuScope(__scopeDropdownMenu);
1155
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Group, {
1156
- ...menuScope,
1157
- ...groupProps,
1158
- ref: forwardedRef
1159
- });
1160
- });
1161
- DropdownMenuGroup.displayName = GROUP_NAME;
1162
- var LABEL_NAME = "DropdownMenuLabel";
1163
- var DropdownMenuGroupLabel = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1164
- const { __scopeDropdownMenu, classNames, ...labelProps } = props;
1165
- const menuScope = useMenuScope(__scopeDropdownMenu);
1166
- const { tx } = useThemeContext();
1167
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Label, {
1168
- ...menuScope,
1169
- ...labelProps,
1170
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1171
- ref: forwardedRef
1172
- });
1173
- });
1174
- DropdownMenuGroupLabel.displayName = LABEL_NAME;
1175
- var ITEM_NAME = "DropdownMenuItem";
1176
- var DropdownMenuItem = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1177
- const { __scopeDropdownMenu, classNames, ...itemProps } = props;
1178
- const menuScope = useMenuScope(__scopeDropdownMenu);
1179
- const { tx } = useThemeContext();
1180
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Item, {
1181
- ...menuScope,
1182
- ...itemProps,
1183
- className: tx("menu.item", "menu__item", {}, classNames),
1184
- ref: forwardedRef
1185
- });
1186
- });
1187
- DropdownMenuItem.displayName = ITEM_NAME;
1188
- var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
1189
- var DropdownMenuCheckboxItem = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1190
- const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
1191
- const menuScope = useMenuScope(__scopeDropdownMenu);
1192
- const { tx } = useThemeContext();
1193
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.CheckboxItem, {
1194
- ...menuScope,
1195
- ...checkboxItemProps,
1196
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1197
- ref: forwardedRef
1198
- });
1199
- });
1200
- DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
1201
- var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
1202
- var DropdownMenuRadioGroup = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1203
- const { __scopeDropdownMenu, ...radioGroupProps } = props;
1204
- const menuScope = useMenuScope(__scopeDropdownMenu);
1205
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.RadioGroup, {
1206
- ...menuScope,
1207
- ...radioGroupProps,
1208
- ref: forwardedRef
1209
- });
1210
- });
1211
- DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
1212
- var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
1213
- var DropdownMenuRadioItem = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1214
- const { __scopeDropdownMenu, ...radioItemProps } = props;
1215
- const menuScope = useMenuScope(__scopeDropdownMenu);
1216
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.RadioItem, {
1217
- ...menuScope,
1218
- ...radioItemProps,
1219
- ref: forwardedRef
1220
- });
1221
- });
1222
- DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
1223
- var INDICATOR_NAME = "DropdownMenuItemIndicator";
1224
- var DropdownMenuItemIndicator = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1225
- const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
1226
- const menuScope = useMenuScope(__scopeDropdownMenu);
1227
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.ItemIndicator, {
1228
- ...menuScope,
1229
- ...itemIndicatorProps,
1230
- ref: forwardedRef
1231
- });
1232
- });
1233
- DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
1234
- var SEPARATOR_NAME = "DropdownMenuSeparator";
1235
- var DropdownMenuSeparator = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1236
- const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
1237
- const menuScope = useMenuScope(__scopeDropdownMenu);
1238
- const { tx } = useThemeContext();
1239
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Separator, {
1240
- ...menuScope,
1241
- ...separatorProps,
1242
- className: tx("menu.separator", "menu__item", {}, classNames),
1243
- ref: forwardedRef
1244
- });
1245
- });
1246
- DropdownMenuSeparator.displayName = SEPARATOR_NAME;
1247
- var ARROW_NAME = "DropdownMenuArrow";
1248
- var DropdownMenuArrow = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1249
- const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
1250
- const menuScope = useMenuScope(__scopeDropdownMenu);
1251
- const { tx } = useThemeContext();
1252
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Arrow, {
1253
- ...menuScope,
1254
- ...arrowProps,
1255
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1256
- ref: forwardedRef
1257
- });
1258
- });
1259
- DropdownMenuArrow.displayName = ARROW_NAME;
1260
- var DropdownMenuSub = (props) => {
1261
- const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
1262
- const menuScope = useMenuScope(__scopeDropdownMenu);
1263
- const [open = false, setOpen] = useControllableState({
1264
- prop: openProp,
1265
- defaultProp: defaultOpen,
1266
- onChange: onOpenChange
1267
- });
1268
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.Sub, {
1269
- ...menuScope,
1270
- open,
1271
- onOpenChange: setOpen
1272
- }, children);
1568
+ var Input = {
1569
+ Root: InputRoot,
1570
+ PinInput,
1571
+ TextInput,
1572
+ TextArea,
1573
+ Checkbox,
1574
+ Switch,
1575
+ Label,
1576
+ Description,
1577
+ Validation,
1578
+ DescriptionAndValidation
1273
1579
  };
1274
- var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
1275
- var DropdownMenuSubTrigger = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1276
- const { __scopeDropdownMenu, ...subTriggerProps } = props;
1277
- const menuScope = useMenuScope(__scopeDropdownMenu);
1278
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.SubTrigger, {
1279
- ...menuScope,
1280
- ...subTriggerProps,
1281
- ref: forwardedRef
1282
- });
1283
- });
1284
- DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
1285
- var SUB_CONTENT_NAME = "DropdownMenuSubContent";
1286
- var DropdownMenuSubContent = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1287
- const { __scopeDropdownMenu, ...subContentProps } = props;
1288
- const menuScope = useMenuScope(__scopeDropdownMenu);
1289
- return /* @__PURE__ */ React20.createElement(MenuPrimitive.SubContent, {
1290
- ...menuScope,
1291
- ...subContentProps,
1292
- ref: forwardedRef,
1580
+
1581
+ // packages/ui/react-ui/src/components/Lists/List.tsx
1582
+ import { CaretDown, CaretRight } from "@phosphor-icons/react";
1583
+ import { Slot as Slot6 } from "@radix-ui/react-slot";
1584
+ import React21, { forwardRef as forwardRef14 } from "react";
1585
+ import { List as ListPrimitive, ListItemHeading as ListPrimitiveItemHeading, ListItemOpenTrigger as ListPrimitiveItemOpenTrigger, ListItemCollapsibleContent, ListItem as ListPrimitiveItem, LIST_NAME, LIST_ITEM_NAME, useListContext, useListItemContext } from "@dxos/react-list";
1586
+
1587
+ // packages/ui/react-ui/src/components/Lists/ListDropIndicator.tsx
1588
+ import React20 from "react";
1589
+ var edgeToOrientationMap = {
1590
+ top: "horizontal",
1591
+ bottom: "horizontal",
1592
+ left: "vertical",
1593
+ right: "vertical"
1594
+ };
1595
+ var orientationStyles = {
1596
+ horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1597
+ vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1598
+ };
1599
+ var edgeStyles = {
1600
+ top: "top-[--line-offset] before:top-[--offset-terminal]",
1601
+ right: "right-[--line-offset] before:right-[--offset-terminal]",
1602
+ bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1603
+ left: "left-[--line-offset] before:left-[--offset-terminal]"
1604
+ };
1605
+ var strokeSize = 2;
1606
+ var terminalSize = 8;
1607
+ var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1608
+ var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1609
+ const orientation = edgeToOrientationMap[edge];
1610
+ return /* @__PURE__ */ React20.createElement("div", {
1611
+ role: "none",
1293
1612
  style: {
1294
- ...props.style,
1295
- // re-namespace exposed content custom properties
1296
- ...{
1297
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1298
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1299
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1300
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1301
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1302
- }
1303
- }
1613
+ "--line-thickness": `${strokeSize}px`,
1614
+ "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1615
+ "--line-inset": `${lineInset}px`,
1616
+ "--terminal-size": `${terminalSize}px`,
1617
+ "--terminal-radius": `${terminalSize / 2}px`,
1618
+ "--terminal-inset": `${terminalInset}px`,
1619
+ "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1620
+ },
1621
+ className: `absolute z-10 pointer-events-none bg-accentSurface before:content-[''] before:w-[--terminal-size] before:h-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`
1304
1622
  });
1305
- });
1306
- DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
1307
- var DropdownMenu = {
1308
- Root: DropdownMenuRoot,
1309
- Trigger: DropdownMenuTrigger,
1310
- VirtualTrigger: DropdownMenuVirtualTrigger,
1311
- Portal: DropdownMenuPortal,
1312
- Content: DropdownMenuContent,
1313
- Viewport: DropdownMenuViewport,
1314
- Group: DropdownMenuGroup,
1315
- GroupLabel: DropdownMenuGroupLabel,
1316
- Item: DropdownMenuItem,
1317
- CheckboxItem: DropdownMenuCheckboxItem,
1318
- RadioGroup: DropdownMenuRadioGroup,
1319
- RadioItem: DropdownMenuRadioItem,
1320
- ItemIndicator: DropdownMenuItemIndicator,
1321
- Separator: DropdownMenuSeparator,
1322
- Arrow: DropdownMenuArrow,
1323
- Sub: DropdownMenuSub,
1324
- SubTrigger: DropdownMenuSubTrigger,
1325
- SubContent: DropdownMenuSubContent
1326
1623
  };
1327
- var useDropdownMenuMenuScope = useMenuScope;
1328
1624
 
1329
- // packages/ui/react-ui/src/components/Input/Input.tsx
1330
- import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
1331
- import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1332
- import React21, { forwardRef as forwardRef15, useCallback as useCallback5 } from "react";
1333
- import { InputRoot, PinInput as PinInputPrimitive, TextInput as TextInputPrimitive, TextArea as TextAreaPrimitive, useInputContext, INPUT_NAME, Description as DescriptionPrimitive, DescriptionAndValidation as DescriptionAndValidationPrimitive, Label as LabelPrimitive, Validation as ValidationPrimitive } from "@dxos/react-input";
1334
- import { mx as mx3 } from "@dxos/react-ui-theme";
1335
- var Label3 = /* @__PURE__ */ forwardRef15(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1625
+ // packages/ui/react-ui/src/components/Lists/List.tsx
1626
+ var List = /* @__PURE__ */ forwardRef14(({ classNames, children, ...props }, forwardedRef) => {
1336
1627
  const { tx } = useThemeContext();
1337
- return /* @__PURE__ */ React21.createElement(LabelPrimitive, {
1628
+ const density = useDensityContext(props.density);
1629
+ return /* @__PURE__ */ React21.createElement(DensityProvider, {
1630
+ density
1631
+ }, /* @__PURE__ */ React21.createElement(ListPrimitive, {
1338
1632
  ...props,
1339
- className: tx("input.label", "input__label", {
1340
- srOnly
1633
+ className: tx("list.root", "list", {}, classNames),
1634
+ ref: forwardedRef
1635
+ }, children));
1636
+ });
1637
+ var ListItemEndcap = /* @__PURE__ */ forwardRef14(({ children, classNames, asChild, ...props }, forwardedRef) => {
1638
+ const Root7 = asChild ? Slot6 : "div";
1639
+ const density = useDensityContext();
1640
+ const { tx } = useThemeContext();
1641
+ return /* @__PURE__ */ React21.createElement(Root7, {
1642
+ ...!asChild && {
1643
+ role: "none"
1644
+ },
1645
+ ...props,
1646
+ className: tx("list.item.endcap", "list__listItem__endcap", {
1647
+ density
1341
1648
  }, classNames),
1342
1649
  ref: forwardedRef
1343
1650
  }, children);
1344
1651
  });
1345
- var Description = /* @__PURE__ */ forwardRef15(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1652
+ var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1653
+ const density = useDensityContext();
1346
1654
  const { tx } = useThemeContext();
1347
- return /* @__PURE__ */ React21.createElement(DescriptionPrimitive, {
1655
+ return /* @__PURE__ */ React21.createElement("div", {
1656
+ role: "none",
1348
1657
  ...props,
1349
- className: tx("input.description", "input__description", {
1350
- srOnly
1658
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1659
+ density
1660
+ }, classNames)
1661
+ });
1662
+ };
1663
+ var ListItemHeading = /* @__PURE__ */ forwardRef14(({ children, classNames, ...props }, forwardedRef) => {
1664
+ const { tx } = useThemeContext();
1665
+ const density = useDensityContext();
1666
+ return /* @__PURE__ */ React21.createElement(ListPrimitiveItemHeading, {
1667
+ ...props,
1668
+ className: tx("list.item.heading", "list__listItem__heading", {
1669
+ density
1351
1670
  }, classNames),
1352
1671
  ref: forwardedRef
1353
1672
  }, children);
1354
1673
  });
1355
- var Validation = /* @__PURE__ */ forwardRef15(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1674
+ var ListItemOpenTrigger = /* @__PURE__ */ forwardRef14(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1356
1675
  const { tx } = useThemeContext();
1357
- const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1358
- return /* @__PURE__ */ React21.createElement(ValidationPrimitive, {
1676
+ const density = useDensityContext();
1677
+ const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
1678
+ const Icon3 = open ? CaretDown : CaretRight;
1679
+ return /* @__PURE__ */ React21.createElement(ListPrimitiveItemOpenTrigger, {
1359
1680
  ...props,
1360
- className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1361
- srOnly,
1362
- validationValence
1681
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1682
+ density
1363
1683
  }, classNames),
1364
1684
  ref: forwardedRef
1365
- }, children);
1685
+ }, children || /* @__PURE__ */ React21.createElement(Icon3, {
1686
+ weight: "bold",
1687
+ className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1688
+ }));
1366
1689
  });
1367
- var DescriptionAndValidation = /* @__PURE__ */ forwardRef15(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1690
+ var ListItemRoot = /* @__PURE__ */ forwardRef14(({ classNames, children, ...props }, forwardedRef) => {
1368
1691
  const { tx } = useThemeContext();
1369
- return /* @__PURE__ */ React21.createElement(DescriptionAndValidationPrimitive, {
1692
+ const density = useDensityContext();
1693
+ return /* @__PURE__ */ React21.createElement(ListPrimitiveItem, {
1370
1694
  ...props,
1371
- className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1372
- srOnly
1373
- }, classNames),
1374
- ref: forwardedRef
1375
- }, children);
1376
- });
1377
- var PinInput = /* @__PURE__ */ forwardRef15(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1378
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1379
- const { tx } = useThemeContext();
1380
- const density = useDensityContext(propsDensity);
1381
- const elevation = useElevationContext(propsElevation);
1382
- const segmentClassName = useCallback5(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1383
- variant: "static",
1384
- focused,
1385
- disabled: props.disabled,
1386
- density,
1387
- elevation,
1388
- validationValence
1389
- }, propsSegmentClassName), [
1390
- tx,
1391
- props.disabled,
1392
- elevation,
1393
- propsElevation,
1394
- density
1395
- ]);
1396
- return /* @__PURE__ */ React21.createElement(PinInputPrimitive, {
1397
- ...props,
1398
- segmentClassName,
1399
- ...props.autoFocus && !hasIosKeyboard2 && {
1400
- autoFocus: true
1401
- },
1402
- inputClassName: tx("input.inputWithSegments", "input input--pin", {
1403
- disabled: props.disabled
1404
- }, inputClassName),
1405
- ref: forwardedRef
1406
- });
1407
- });
1408
- var TextInput = /* @__PURE__ */ forwardRef15(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1409
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1410
- const themeContextValue = useThemeContext();
1411
- const density = useDensityContext(propsDensity);
1412
- const elevation = useElevationContext(propsElevation);
1413
- const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1414
- const { tx } = themeContextValue;
1415
- return /* @__PURE__ */ React21.createElement(TextInputPrimitive, {
1416
- ...props,
1417
- className: tx("input.input", "input", {
1418
- variant,
1419
- disabled: props.disabled,
1420
- density,
1421
- elevation,
1422
- validationValence
1423
- }, classNames),
1424
- ...props.autoFocus && !hasIosKeyboard2 && {
1425
- autoFocus: true
1426
- },
1427
- ref: forwardedRef
1428
- });
1429
- });
1430
- var TextArea = /* @__PURE__ */ forwardRef15(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1431
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1432
- const { tx } = useThemeContext();
1433
- const density = useDensityContext(propsDensity);
1434
- const elevation = useElevationContext(propsElevation);
1435
- const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
1436
- return /* @__PURE__ */ React21.createElement(TextAreaPrimitive, {
1437
- ...props,
1438
- className: tx("input.input", "input--text-area", {
1439
- variant,
1440
- disabled: props.disabled,
1441
- density,
1442
- elevation,
1443
- validationValence
1444
- }, classNames),
1445
- ...props.autoFocus && !hasIosKeyboard2 && {
1446
- autoFocus: true
1447
- },
1448
- ref: forwardedRef
1449
- });
1450
- });
1451
- var Checkbox = /* @__PURE__ */ forwardRef15(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1452
- const [checked, onCheckedChange] = useControllableState2({
1453
- prop: propsChecked,
1454
- defaultProp: propsDefaultChecked,
1455
- onChange: propsOnCheckedChange
1456
- });
1457
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
1458
- const { tx } = useThemeContext();
1459
- return /* @__PURE__ */ React21.createElement(CheckboxPrimitive, {
1460
- ...props,
1461
- checked,
1462
- onCheckedChange,
1463
- id,
1464
- "aria-describedby": descriptionId,
1465
- ...validationValence === "error" && {
1466
- "aria-invalid": "true",
1467
- "aria-errormessage": errorMessageId
1468
- },
1469
- className: tx("input.checkbox", "input--checkbox", {
1470
- size
1471
- }, "shrink-0", classNames),
1472
- ref: forwardedRef
1473
- }, /* @__PURE__ */ React21.createElement(Icon, {
1474
- icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1475
- classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1476
- size,
1477
- checked
1478
- })
1479
- }));
1480
- });
1481
- var Switch = /* @__PURE__ */ forwardRef15(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1482
- const [checked, onCheckedChange] = useControllableState2({
1483
- prop: propsChecked,
1484
- defaultProp: propsDefaultChecked ?? false,
1485
- onChange: propsOnCheckedChange
1486
- });
1487
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
1488
- return /* @__PURE__ */ React21.createElement("input", {
1489
- type: "checkbox",
1490
- className: mx3("dx-checkbox--switch dx-focus-ring", classNames),
1491
- checked,
1492
- onChange: (event) => {
1493
- onCheckedChange(event.target.checked);
1494
- },
1495
- id,
1496
- "aria-describedby": descriptionId,
1497
- ...props,
1498
- ...validationValence === "error" && {
1499
- "aria-invalid": "true",
1500
- "aria-errormessage": errorMessageId
1501
- },
1502
- ref: forwardedRef
1503
- });
1504
- });
1505
- var Input = {
1506
- Root: InputRoot,
1507
- PinInput,
1508
- TextInput,
1509
- TextArea,
1510
- Checkbox,
1511
- Switch,
1512
- Label: Label3,
1513
- Description,
1514
- Validation,
1515
- DescriptionAndValidation
1516
- };
1517
-
1518
- // packages/ui/react-ui/src/components/Lists/List.tsx
1519
- import { CaretDown, CaretRight } from "@phosphor-icons/react";
1520
- import { Slot as Slot8 } from "@radix-ui/react-slot";
1521
- import React23, { forwardRef as forwardRef16 } from "react";
1522
- import { List as ListPrimitive, ListItemHeading as ListPrimitiveItemHeading, ListItemOpenTrigger as ListPrimitiveItemOpenTrigger, ListItemCollapsibleContent, ListItem as ListPrimitiveItem, LIST_NAME, LIST_ITEM_NAME, useListContext, useListItemContext } from "@dxos/react-list";
1523
-
1524
- // packages/ui/react-ui/src/components/Lists/ListDropIndicator.tsx
1525
- import React22 from "react";
1526
- var edgeToOrientationMap = {
1527
- top: "horizontal",
1528
- bottom: "horizontal",
1529
- left: "vertical",
1530
- right: "vertical"
1531
- };
1532
- var orientationStyles = {
1533
- horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1534
- vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1535
- };
1536
- var edgeStyles = {
1537
- top: "top-[--line-offset] before:top-[--offset-terminal]",
1538
- right: "right-[--line-offset] before:right-[--offset-terminal]",
1539
- bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1540
- left: "left-[--line-offset] before:left-[--offset-terminal]"
1541
- };
1542
- var strokeSize = 2;
1543
- var terminalSize = 8;
1544
- var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1545
- var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1546
- const orientation = edgeToOrientationMap[edge];
1547
- return /* @__PURE__ */ React22.createElement("div", {
1548
- role: "none",
1549
- style: {
1550
- "--line-thickness": `${strokeSize}px`,
1551
- "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1552
- "--line-inset": `${lineInset}px`,
1553
- "--terminal-size": `${terminalSize}px`,
1554
- "--terminal-radius": `${terminalSize / 2}px`,
1555
- "--terminal-inset": `${terminalInset}px`,
1556
- "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1557
- },
1558
- className: `absolute z-10 pointer-events-none bg-accentSurface before:content-[''] before:w-[--terminal-size] before:h-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`
1559
- });
1560
- };
1561
-
1562
- // packages/ui/react-ui/src/components/Lists/List.tsx
1563
- var List = /* @__PURE__ */ forwardRef16(({ classNames, children, ...props }, forwardedRef) => {
1564
- const { tx } = useThemeContext();
1565
- const density = useDensityContext(props.density);
1566
- return /* @__PURE__ */ React23.createElement(DensityProvider, {
1567
- density
1568
- }, /* @__PURE__ */ React23.createElement(ListPrimitive, {
1569
- ...props,
1570
- className: tx("list.root", "list", {}, classNames),
1571
- ref: forwardedRef
1572
- }, children));
1573
- });
1574
- var ListItemEndcap = /* @__PURE__ */ forwardRef16(({ children, classNames, asChild, ...props }, forwardedRef) => {
1575
- const Root5 = asChild ? Slot8 : "div";
1576
- const density = useDensityContext();
1577
- const { tx } = useThemeContext();
1578
- return /* @__PURE__ */ React23.createElement(Root5, {
1579
- ...!asChild && {
1580
- role: "none"
1581
- },
1582
- ...props,
1583
- className: tx("list.item.endcap", "list__listItem__endcap", {
1584
- density
1585
- }, classNames),
1586
- ref: forwardedRef
1587
- }, children);
1588
- });
1589
- var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1590
- const density = useDensityContext();
1591
- const { tx } = useThemeContext();
1592
- return /* @__PURE__ */ React23.createElement("div", {
1593
- role: "none",
1594
- ...props,
1595
- className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1596
- density
1597
- }, classNames)
1598
- });
1599
- };
1600
- var ListItemHeading = /* @__PURE__ */ forwardRef16(({ children, classNames, ...props }, forwardedRef) => {
1601
- const { tx } = useThemeContext();
1602
- const density = useDensityContext();
1603
- return /* @__PURE__ */ React23.createElement(ListPrimitiveItemHeading, {
1604
- ...props,
1605
- className: tx("list.item.heading", "list__listItem__heading", {
1606
- density
1607
- }, classNames),
1608
- ref: forwardedRef
1609
- }, children);
1610
- });
1611
- var ListItemOpenTrigger = /* @__PURE__ */ forwardRef16(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1612
- const { tx } = useThemeContext();
1613
- const density = useDensityContext();
1614
- const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
1615
- const Icon3 = open ? CaretDown : CaretRight;
1616
- return /* @__PURE__ */ React23.createElement(ListPrimitiveItemOpenTrigger, {
1617
- ...props,
1618
- className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1619
- density
1620
- }, classNames),
1621
- ref: forwardedRef
1622
- }, children || /* @__PURE__ */ React23.createElement(Icon3, {
1623
- weight: "bold",
1624
- className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1625
- }));
1626
- });
1627
- var ListItemRoot = /* @__PURE__ */ forwardRef16(({ classNames, children, ...props }, forwardedRef) => {
1628
- const { tx } = useThemeContext();
1629
- const density = useDensityContext();
1630
- return /* @__PURE__ */ React23.createElement(ListPrimitiveItem, {
1631
- ...props,
1632
- className: tx("list.item.root", "list__listItem", {
1633
- density,
1634
- collapsible: props.collapsible
1695
+ className: tx("list.item.root", "list__listItem", {
1696
+ density,
1697
+ collapsible: props.collapsible
1635
1698
  }, classNames),
1636
1699
  ref: forwardedRef
1637
1700
  }, children);
@@ -1647,10 +1710,10 @@ var ListItem = {
1647
1710
  };
1648
1711
 
1649
1712
  // packages/ui/react-ui/src/components/Lists/Tree.tsx
1650
- import React25, { forwardRef as forwardRef17 } from "react";
1713
+ import React23, { forwardRef as forwardRef15 } from "react";
1651
1714
 
1652
1715
  // packages/ui/react-ui/src/components/Lists/TreeDropIndicator.tsx
1653
- import React24 from "react";
1716
+ import React22 from "react";
1654
1717
  var edgeToOrientationMap2 = {
1655
1718
  "reorder-above": "sibling",
1656
1719
  "reorder-below": "sibling",
@@ -1680,7 +1743,7 @@ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1680
1743
  if (isBlocked) {
1681
1744
  return null;
1682
1745
  }
1683
- return /* @__PURE__ */ React24.createElement("div", {
1746
+ return /* @__PURE__ */ React22.createElement("div", {
1684
1747
  style: {
1685
1748
  "--line-thickness": `${strokeSize2}px`,
1686
1749
  "--line-offset": `${lineOffset}`,
@@ -1695,22 +1758,22 @@ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1695
1758
  };
1696
1759
 
1697
1760
  // packages/ui/react-ui/src/components/Lists/Tree.tsx
1698
- var TreeRoot = /* @__PURE__ */ forwardRef17((props, forwardedRef) => {
1699
- return /* @__PURE__ */ React25.createElement(List, {
1761
+ var TreeRoot = /* @__PURE__ */ forwardRef15((props, forwardedRef) => {
1762
+ return /* @__PURE__ */ React23.createElement(List, {
1700
1763
  ...props,
1701
1764
  ref: forwardedRef
1702
1765
  });
1703
1766
  });
1704
- var TreeBranch = /* @__PURE__ */ forwardRef17(({ __listScope, ...props }, forwardedRef) => {
1767
+ var TreeBranch = /* @__PURE__ */ forwardRef15(({ __listScope, ...props }, forwardedRef) => {
1705
1768
  const { headingId } = useListItemContext(LIST_ITEM_NAME, __listScope);
1706
- return /* @__PURE__ */ React25.createElement(List, {
1769
+ return /* @__PURE__ */ React23.createElement(List, {
1707
1770
  ...props,
1708
1771
  "aria-labelledby": headingId,
1709
1772
  ref: forwardedRef
1710
1773
  });
1711
1774
  });
1712
- var TreeItemRoot = /* @__PURE__ */ forwardRef17((props, forwardedRef) => {
1713
- return /* @__PURE__ */ React25.createElement(ListItem.Root, {
1775
+ var TreeItemRoot = /* @__PURE__ */ forwardRef15((props, forwardedRef) => {
1776
+ return /* @__PURE__ */ React23.createElement(ListItem.Root, {
1714
1777
  role: "treeitem",
1715
1778
  ...props,
1716
1779
  ref: forwardedRef
@@ -1736,24 +1799,24 @@ var TreeItem = {
1736
1799
  // packages/ui/react-ui/src/components/Lists/Treegrid.tsx
1737
1800
  import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
1738
1801
  import { createContextScope as createContextScope2 } from "@radix-ui/react-context";
1739
- import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
1740
- import { Slot as Slot9 } from "@radix-ui/react-slot";
1802
+ import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
1803
+ import { Slot as Slot7 } from "@radix-ui/react-slot";
1741
1804
  import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
1742
- import React26, { forwardRef as forwardRef18 } from "react";
1805
+ import React24, { forwardRef as forwardRef16 } from "react";
1743
1806
  var TREEGRID_ROW_NAME = "TreegridRow";
1744
1807
  var [createTreegridRowContext, createTreegridRowScope] = createContextScope2(TREEGRID_ROW_NAME, []);
1745
1808
  var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1746
1809
  var PATH_SEPARATOR = "~";
1747
1810
  var PARENT_OF_SEPARATOR = " ";
1748
- var TreegridRoot = /* @__PURE__ */ forwardRef18(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1811
+ var TreegridRoot = /* @__PURE__ */ forwardRef16(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1749
1812
  const { tx } = useThemeContext();
1750
- const Root5 = asChild ? Slot9 : Primitive8.div;
1813
+ const Root7 = asChild ? Slot7 : Primitive7.div;
1751
1814
  const arrowNavigationAttrs = useArrowNavigationGroup({
1752
1815
  axis: "vertical",
1753
1816
  tabbable: false,
1754
1817
  circular: true
1755
1818
  });
1756
- return /* @__PURE__ */ React26.createElement(Root5, {
1819
+ return /* @__PURE__ */ React24.createElement(Root7, {
1757
1820
  role: "treegrid",
1758
1821
  ...arrowNavigationAttrs,
1759
1822
  ...props,
@@ -1765,9 +1828,9 @@ var TreegridRoot = /* @__PURE__ */ forwardRef18(({ asChild, classNames, children
1765
1828
  ref: forwardedRef
1766
1829
  }, children);
1767
1830
  });
1768
- var TreegridRow = /* @__PURE__ */ forwardRef18(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1831
+ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1769
1832
  const { tx } = useThemeContext();
1770
- const Root5 = asChild ? Slot9 : Primitive8.div;
1833
+ const Root7 = asChild ? Slot7 : Primitive7.div;
1771
1834
  const pathParts = id.split(PATH_SEPARATOR);
1772
1835
  const level = pathParts.length - 1;
1773
1836
  const [open, onOpenChange] = useControllableState3({
@@ -1784,11 +1847,11 @@ var TreegridRow = /* @__PURE__ */ forwardRef18(({ __treegridRowScope, asChild, c
1784
1847
  circular: false,
1785
1848
  memorizeCurrent: false
1786
1849
  });
1787
- return /* @__PURE__ */ React26.createElement(TreegridRowProvider, {
1850
+ return /* @__PURE__ */ React24.createElement(TreegridRowProvider, {
1788
1851
  open,
1789
1852
  onOpenChange,
1790
1853
  scope: __treegridRowScope
1791
- }, /* @__PURE__ */ React26.createElement(Root5, {
1854
+ }, /* @__PURE__ */ React24.createElement(Root7, {
1792
1855
  role: "row",
1793
1856
  "aria-level": level,
1794
1857
  className: tx("treegrid.row", "treegrid__row", {
@@ -1803,15 +1866,15 @@ var TreegridRow = /* @__PURE__ */ forwardRef18(({ __treegridRowScope, asChild, c
1803
1866
  ...props,
1804
1867
  id,
1805
1868
  ref: forwardedRef
1806
- }, /* @__PURE__ */ React26.createElement("div", {
1869
+ }, /* @__PURE__ */ React24.createElement("div", {
1807
1870
  role: "none",
1808
1871
  className: "contents",
1809
1872
  ...arrowGroupAttrs
1810
1873
  }, children)));
1811
1874
  });
1812
- var TreegridCell = /* @__PURE__ */ forwardRef18(({ classNames, children, indent, ...props }, forwardedRef) => {
1875
+ var TreegridCell = /* @__PURE__ */ forwardRef16(({ classNames, children, indent, ...props }, forwardedRef) => {
1813
1876
  const { tx } = useThemeContext();
1814
- return /* @__PURE__ */ React26.createElement("div", {
1877
+ return /* @__PURE__ */ React24.createElement("div", {
1815
1878
  role: "gridcell",
1816
1879
  className: tx("treegrid.cell", "treegrid__cell", {
1817
1880
  indent
@@ -1833,15 +1896,15 @@ var Treegrid = {
1833
1896
  // packages/ui/react-ui/src/components/Main/Main.tsx
1834
1897
  import { createContext as createContext10 } from "@radix-ui/react-context";
1835
1898
  import { Root as DialogRoot2, DialogContent as DialogContent2, DialogTitle as DialogTitle2 } from "@radix-ui/react-dialog";
1836
- import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
1837
- import { Slot as Slot10 } from "@radix-ui/react-slot";
1899
+ import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
1900
+ import { Slot as Slot8 } from "@radix-ui/react-slot";
1838
1901
  import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
1839
- import React27, { forwardRef as forwardRef19, useCallback as useCallback7, useEffect as useEffect5, useRef as useRef2, useState as useState8 } from "react";
1902
+ import React25, { forwardRef as forwardRef17, useCallback as useCallback7, useEffect as useEffect5, useRef as useRef2, useState as useState7 } from "react";
1840
1903
  import { log } from "@dxos/log";
1841
1904
  import { useMediaQuery, useForwardedRef } from "@dxos/react-hooks";
1842
1905
 
1843
1906
  // packages/ui/react-ui/src/components/Main/useSwipeToDismiss.ts
1844
- import { useCallback as useCallback6, useEffect as useEffect4, useState as useState7 } from "react";
1907
+ import { useCallback as useCallback6, useEffect as useEffect4, useState as useState6 } from "react";
1845
1908
  var MotionState;
1846
1909
  (function(MotionState2) {
1847
1910
  MotionState2[MotionState2["IDLE"] = 0] = "IDLE";
@@ -1856,8 +1919,8 @@ var useSwipeToDismiss = (ref, {
1856
1919
  /* side = 'inline-start' */
1857
1920
  }) => {
1858
1921
  const $root = ref.current;
1859
- const [motionState, setMotionState] = useState7(0);
1860
- const [gestureStartX, setGestureStartX] = useState7(0);
1922
+ const [motionState, setMotionState] = useState6(0);
1923
+ const [gestureStartX, setGestureStartX] = useState6(0);
1861
1924
  const setIdle = useCallback6(() => {
1862
1925
  setMotionState(0);
1863
1926
  $root?.style.removeProperty("inset-inline-start");
@@ -2027,183 +2090,650 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2027
2090
  defaultProp: defaultNavigationSidebarState,
2028
2091
  onChange: onNavigationSidebarStateChange
2029
2092
  });
2030
- const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = useControllableState4({
2031
- prop: propsComplementarySidebarState,
2032
- defaultProp: defaultComplementarySidebarState,
2033
- onChange: onComplementarySidebarStateChange
2093
+ const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = useControllableState4({
2094
+ prop: propsComplementarySidebarState,
2095
+ defaultProp: defaultComplementarySidebarState,
2096
+ onChange: onComplementarySidebarStateChange
2097
+ });
2098
+ const [resizing, setResizing] = useState7(false);
2099
+ const resizeInterval = useRef2(null);
2100
+ const handleResize = useCallback7(() => {
2101
+ setResizing(true);
2102
+ if (resizeInterval.current) {
2103
+ clearTimeout(resizeInterval.current);
2104
+ }
2105
+ resizeInterval.current = setTimeout(() => {
2106
+ setResizing(false);
2107
+ resizeInterval.current = null;
2108
+ }, resizeDebounce);
2109
+ }, []);
2110
+ useEffect5(() => {
2111
+ window.addEventListener("resize", handleResize);
2112
+ return () => window.removeEventListener("resize", handleResize);
2113
+ }, [
2114
+ handleResize
2115
+ ]);
2116
+ return /* @__PURE__ */ React25.createElement(MainProvider, {
2117
+ ...props,
2118
+ navigationSidebarState,
2119
+ setNavigationSidebarState,
2120
+ complementarySidebarState,
2121
+ setComplementarySidebarState,
2122
+ resizing
2123
+ }, children);
2124
+ };
2125
+ MainRoot.displayName = MAIN_ROOT_NAME;
2126
+ var handleOpenAutoFocus = (event) => {
2127
+ !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
2128
+ };
2129
+ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2130
+ const [isLg] = useMediaQuery("lg", {
2131
+ ssr: false
2132
+ });
2133
+ const { tx } = useThemeContext();
2134
+ const { t } = useTranslation();
2135
+ const ref = useForwardedRef(forwardedRef);
2136
+ const noopRef = useRef2(null);
2137
+ useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2138
+ onDismiss: () => onStateChange?.("closed")
2139
+ });
2140
+ const handleKeyDown = useCallback7((event) => {
2141
+ if (event.key === "Escape") {
2142
+ event.target.closest("[data-tabster]")?.focus();
2143
+ }
2144
+ props.onKeyDown?.(event);
2145
+ }, [
2146
+ props.onKeyDown
2147
+ ]);
2148
+ const Root7 = isLg ? Primitive8.div : DialogContent2;
2149
+ return /* @__PURE__ */ React25.createElement(DialogRoot2, {
2150
+ open: state !== "closed",
2151
+ "aria-label": toLocalizedString(label, t),
2152
+ modal: false
2153
+ }, !isLg && /* @__PURE__ */ React25.createElement(DialogTitle2, {
2154
+ className: "sr-only"
2155
+ }, toLocalizedString(label, t)), /* @__PURE__ */ React25.createElement(Root7, {
2156
+ ...!isLg && {
2157
+ forceMount: true,
2158
+ tabIndex: -1,
2159
+ onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
2160
+ },
2161
+ ...props,
2162
+ "data-side": side === "inline-end" ? "ie" : "is",
2163
+ "data-state": state,
2164
+ "data-resizing": resizing ? "true" : "false",
2165
+ className: tx("main.sidebar", "main__sidebar", {}, classNames),
2166
+ onKeyDown: handleKeyDown,
2167
+ ...state === "closed" && {
2168
+ inert: "true"
2169
+ },
2170
+ ref
2171
+ }, children));
2172
+ });
2173
+ var MainNavigationSidebar = /* @__PURE__ */ forwardRef17((props, forwardedRef) => {
2174
+ const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
2175
+ const mover = useLandmarkMover(props.onKeyDown, "0");
2176
+ return /* @__PURE__ */ React25.createElement(MainSidebar, {
2177
+ ...mover,
2178
+ ...props,
2179
+ state: navigationSidebarState,
2180
+ onStateChange: setNavigationSidebarState,
2181
+ resizing,
2182
+ side: "inline-start",
2183
+ ref: forwardedRef
2184
+ });
2185
+ });
2186
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2187
+ var MainComplementarySidebar = /* @__PURE__ */ forwardRef17((props, forwardedRef) => {
2188
+ const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
2189
+ const mover = useLandmarkMover(props.onKeyDown, "2");
2190
+ return /* @__PURE__ */ React25.createElement(MainSidebar, {
2191
+ ...mover,
2192
+ ...props,
2193
+ state: complementarySidebarState,
2194
+ onStateChange: setComplementarySidebarState,
2195
+ resizing,
2196
+ side: "inline-end",
2197
+ ref: forwardedRef
2198
+ });
2199
+ });
2200
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2201
+ var MainContent = /* @__PURE__ */ forwardRef17(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
2202
+ const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
2203
+ const { tx } = useThemeContext();
2204
+ const Root7 = asChild ? Slot8 : role ? "div" : "main";
2205
+ const mover = useLandmarkMover(props.onKeyDown, "1");
2206
+ return /* @__PURE__ */ React25.createElement(Root7, {
2207
+ role,
2208
+ ...handlesFocus && {
2209
+ ...mover
2210
+ },
2211
+ ...props,
2212
+ "data-sidebar-inline-start-state": navigationSidebarState,
2213
+ "data-sidebar-inline-end-state": complementarySidebarState,
2214
+ className: tx("main.content", "main", {
2215
+ bounce,
2216
+ handlesFocus
2217
+ }, classNames),
2218
+ ref: forwardedRef
2219
+ }, children);
2220
+ });
2221
+ MainContent.displayName = MAIN_NAME;
2222
+ var MainOverlay = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
2223
+ const [isLg] = useMediaQuery("lg", {
2224
+ ssr: false
2225
+ });
2226
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2227
+ const { tx } = useThemeContext();
2228
+ return /* @__PURE__ */ React25.createElement("div", {
2229
+ onClick: () => {
2230
+ setNavigationSidebarState("collapsed");
2231
+ setComplementarySidebarState("collapsed");
2232
+ },
2233
+ ...props,
2234
+ className: tx("main.overlay", "main__overlay", {
2235
+ isLg,
2236
+ inlineStartSidebarOpen: navigationSidebarState,
2237
+ inlineEndSidebarOpen: complementarySidebarState
2238
+ }, classNames),
2239
+ "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
2240
+ "aria-hidden": "true",
2241
+ ref: forwardedRef
2242
+ });
2243
+ });
2244
+ var Main = {
2245
+ Root: MainRoot,
2246
+ Content: MainContent,
2247
+ Overlay: MainOverlay,
2248
+ NavigationSidebar: MainNavigationSidebar,
2249
+ ComplementarySidebar: MainComplementarySidebar
2250
+ };
2251
+
2252
+ // packages/ui/react-ui/src/components/Menus/ContextMenu.tsx
2253
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
2254
+ import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
2255
+ import { Slot as Slot9 } from "@radix-ui/react-slot";
2256
+ import React26, { forwardRef as forwardRef18 } from "react";
2257
+
2258
+ // packages/ui/react-ui/src/hooks/useSafeCollisionPadding.ts
2259
+ import { useMemo as useMemo3 } from "react";
2260
+ var propIsNumber = (prop) => Number.isFinite(prop);
2261
+ var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
2262
+ var safePadding = (propsPadding, safePadding2, side) => {
2263
+ return (propIsNumber(safePadding2[side]) ? safePadding2[side] : 0) + (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0);
2264
+ };
2265
+ var useSafeCollisionPadding = (collisionPadding) => {
2266
+ const { safeAreaPadding } = useThemeContext();
2267
+ return useMemo3(() => ({
2268
+ top: safePadding(collisionPadding, safeAreaPadding, "top"),
2269
+ right: safePadding(collisionPadding, safeAreaPadding, "right"),
2270
+ bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
2271
+ left: safePadding(collisionPadding, safeAreaPadding, "left")
2272
+ }), [
2273
+ collisionPadding,
2274
+ safeAreaPadding
2275
+ ]);
2276
+ };
2277
+
2278
+ // packages/ui/react-ui/src/components/Menus/ContextMenu.tsx
2279
+ var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
2280
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
2281
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
2282
+ var ContextMenuContent = /* @__PURE__ */ forwardRef18(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
2283
+ const { tx } = useThemeContext();
2284
+ const elevation = useElevationContext();
2285
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2286
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Content, {
2287
+ ...props,
2288
+ collisionPadding: safeCollisionPadding,
2289
+ className: tx("menu.content", "menu", {
2290
+ elevation
2291
+ }, classNames),
2292
+ ref: forwardedRef
2293
+ }, children);
2294
+ });
2295
+ var ContextMenuViewport = /* @__PURE__ */ forwardRef18(({ classNames, asChild, children, ...props }, forwardedRef) => {
2296
+ const { tx } = useThemeContext();
2297
+ const Root7 = asChild ? Slot9 : Primitive9.div;
2298
+ return /* @__PURE__ */ React26.createElement(Root7, {
2299
+ ...props,
2300
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
2301
+ ref: forwardedRef
2302
+ }, children);
2303
+ });
2304
+ var ContextMenuArrow = /* @__PURE__ */ forwardRef18(({ classNames, ...props }, forwardedRef) => {
2305
+ const { tx } = useThemeContext();
2306
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Arrow, {
2307
+ ...props,
2308
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
2309
+ ref: forwardedRef
2310
+ });
2311
+ });
2312
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
2313
+ var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
2314
+ var ContextMenuItem = /* @__PURE__ */ forwardRef18(({ classNames, ...props }, forwardedRef) => {
2315
+ const { tx } = useThemeContext();
2316
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Item, {
2317
+ ...props,
2318
+ className: tx("menu.item", "menu__item", {}, classNames),
2319
+ ref: forwardedRef
2320
+ });
2321
+ });
2322
+ var ContextMenuCheckboxItem = /* @__PURE__ */ forwardRef18(({ classNames, ...props }, forwardedRef) => {
2323
+ const { tx } = useThemeContext();
2324
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.CheckboxItem, {
2325
+ ...props,
2326
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
2327
+ ref: forwardedRef
2328
+ });
2329
+ });
2330
+ var ContextMenuSeparator = /* @__PURE__ */ forwardRef18(({ classNames, ...props }, forwardedRef) => {
2331
+ const { tx } = useThemeContext();
2332
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Separator, {
2333
+ ...props,
2334
+ className: tx("menu.separator", "menu__item", {}, classNames),
2335
+ ref: forwardedRef
2336
+ });
2337
+ });
2338
+ var ContextMenuGroupLabel = /* @__PURE__ */ forwardRef18(({ classNames, ...props }, forwardedRef) => {
2339
+ const { tx } = useThemeContext();
2340
+ return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Label, {
2341
+ ...props,
2342
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
2343
+ ref: forwardedRef
2344
+ });
2345
+ });
2346
+ var ContextMenu2 = {
2347
+ Root: ContextMenuRoot,
2348
+ Trigger: ContextMenuTrigger,
2349
+ Portal: ContextMenuPortal,
2350
+ Content: ContextMenuContent,
2351
+ Viewport: ContextMenuViewport,
2352
+ Arrow: ContextMenuArrow,
2353
+ Group: ContextMenuGroup,
2354
+ Item: ContextMenuItem,
2355
+ CheckboxItem: ContextMenuCheckboxItem,
2356
+ ItemIndicator: ContextMenuItemIndicator,
2357
+ Separator: ContextMenuSeparator,
2358
+ GroupLabel: ContextMenuGroupLabel
2359
+ };
2360
+
2361
+ // packages/ui/react-ui/src/components/Menus/DropdownMenu.tsx
2362
+ import { composeEventHandlers as composeEventHandlers2 } from "@radix-ui/primitive";
2363
+ import { composeRefs } from "@radix-ui/react-compose-refs";
2364
+ import { createContextScope as createContextScope3 } from "@radix-ui/react-context";
2365
+ import { useId as useId3 } from "@radix-ui/react-id";
2366
+ import * as MenuPrimitive from "@radix-ui/react-menu";
2367
+ import { createMenuScope } from "@radix-ui/react-menu";
2368
+ import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2369
+ import { Slot as Slot10 } from "@radix-ui/react-slot";
2370
+ import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2371
+ import React27, { useRef as useRef3, useCallback as useCallback8, forwardRef as forwardRef19, useEffect as useEffect6 } from "react";
2372
+ var DROPDOWN_MENU_NAME = "DropdownMenu";
2373
+ var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope3(DROPDOWN_MENU_NAME, [
2374
+ createMenuScope
2375
+ ]);
2376
+ var useMenuScope = createMenuScope();
2377
+ var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
2378
+ var DropdownMenuRoot = (props) => {
2379
+ const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
2380
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2381
+ const triggerRef = useRef3(null);
2382
+ const [open = false, setOpen] = useControllableState5({
2383
+ prop: openProp,
2384
+ defaultProp: defaultOpen,
2385
+ onChange: onOpenChange
2386
+ });
2387
+ return /* @__PURE__ */ React27.createElement(DropdownMenuProvider, {
2388
+ scope: __scopeDropdownMenu,
2389
+ triggerId: useId3(),
2390
+ triggerRef,
2391
+ contentId: useId3(),
2392
+ open,
2393
+ onOpenChange: setOpen,
2394
+ onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
2395
+ setOpen
2396
+ ]),
2397
+ modal
2398
+ }, /* @__PURE__ */ React27.createElement(MenuPrimitive.Root, {
2399
+ ...menuScope,
2400
+ open,
2401
+ onOpenChange: setOpen,
2402
+ dir,
2403
+ modal
2404
+ }, children));
2405
+ };
2406
+ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
2407
+ var TRIGGER_NAME2 = "DropdownMenuTrigger";
2408
+ var DropdownMenuTrigger = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2409
+ const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
2410
+ const context = useDropdownMenuContext(TRIGGER_NAME2, __scopeDropdownMenu);
2411
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2412
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Anchor, {
2413
+ asChild: true,
2414
+ ...menuScope
2415
+ }, /* @__PURE__ */ React27.createElement(Primitive10.button, {
2416
+ type: "button",
2417
+ id: context.triggerId,
2418
+ "aria-haspopup": "menu",
2419
+ "aria-expanded": context.open,
2420
+ "aria-controls": context.open ? context.contentId : void 0,
2421
+ "data-state": context.open ? "open" : "closed",
2422
+ "data-disabled": disabled ? "" : void 0,
2423
+ disabled,
2424
+ ...triggerProps,
2425
+ ref: composeRefs(forwardedRef, context.triggerRef),
2426
+ onPointerDown: composeEventHandlers2(props.onPointerDown, (event) => {
2427
+ if (!disabled && event.button === 0 && event.ctrlKey === false) {
2428
+ context.onOpenToggle();
2429
+ if (!context.open) {
2430
+ event.preventDefault();
2431
+ }
2432
+ }
2433
+ }),
2434
+ onKeyDown: composeEventHandlers2(props.onKeyDown, (event) => {
2435
+ if (disabled) {
2436
+ return;
2437
+ }
2438
+ if ([
2439
+ "Enter",
2440
+ " "
2441
+ ].includes(event.key)) {
2442
+ context.onOpenToggle();
2443
+ }
2444
+ if (event.key === "ArrowDown") {
2445
+ context.onOpenChange(true);
2446
+ }
2447
+ if ([
2448
+ "Enter",
2449
+ " ",
2450
+ "ArrowDown"
2451
+ ].includes(event.key)) {
2452
+ event.preventDefault();
2453
+ }
2454
+ })
2455
+ }));
2456
+ });
2457
+ DropdownMenuTrigger.displayName = TRIGGER_NAME2;
2458
+ var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
2459
+ var DropdownMenuVirtualTrigger = (props) => {
2460
+ const { __scopeDropdownMenu, virtualRef } = props;
2461
+ const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
2462
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2463
+ useEffect6(() => {
2464
+ if (virtualRef.current) {
2465
+ context.triggerRef.current = virtualRef.current;
2466
+ }
2467
+ });
2468
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Anchor, {
2469
+ ...menuScope,
2470
+ virtualRef
2471
+ });
2472
+ };
2473
+ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
2474
+ var PORTAL_NAME2 = "DropdownMenuPortal";
2475
+ var DropdownMenuPortal = (props) => {
2476
+ const { __scopeDropdownMenu, ...portalProps } = props;
2477
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2478
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Portal, {
2479
+ ...menuScope,
2480
+ ...portalProps
2481
+ });
2482
+ };
2483
+ DropdownMenuPortal.displayName = PORTAL_NAME2;
2484
+ var DropdownMenuViewport = /* @__PURE__ */ forwardRef19(({ classNames, asChild, children, ...props }, forwardedRef) => {
2485
+ const { tx } = useThemeContext();
2486
+ const Root7 = asChild ? Slot10 : Primitive10.div;
2487
+ return /* @__PURE__ */ React27.createElement(Root7, {
2488
+ ...props,
2489
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
2490
+ ref: forwardedRef
2491
+ }, children);
2492
+ });
2493
+ var CONTENT_NAME2 = "DropdownMenuContent";
2494
+ var DropdownMenuContent = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2495
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
2496
+ const { tx } = useThemeContext();
2497
+ const context = useDropdownMenuContext(CONTENT_NAME2, __scopeDropdownMenu);
2498
+ const elevation = useElevationContext();
2499
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2500
+ const hasInteractedOutsideRef = useRef3(false);
2501
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2502
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Content, {
2503
+ id: context.contentId,
2504
+ "aria-labelledby": context.triggerId,
2505
+ ...menuScope,
2506
+ ...contentProps,
2507
+ collisionPadding: safeCollisionPadding,
2508
+ ref: forwardedRef,
2509
+ onCloseAutoFocus: composeEventHandlers2(props.onCloseAutoFocus, (event) => {
2510
+ if (!hasInteractedOutsideRef.current) {
2511
+ context.triggerRef.current?.focus();
2512
+ }
2513
+ hasInteractedOutsideRef.current = false;
2514
+ event.preventDefault();
2515
+ }),
2516
+ onInteractOutside: composeEventHandlers2(props.onInteractOutside, (event) => {
2517
+ const originalEvent = event.detail.originalEvent;
2518
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2519
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
2520
+ if (!context.modal || isRightClick) {
2521
+ hasInteractedOutsideRef.current = true;
2522
+ }
2523
+ }),
2524
+ className: tx("menu.content", "menu", {
2525
+ elevation
2526
+ }, classNames),
2527
+ style: {
2528
+ ...props.style,
2529
+ // re-namespace exposed content custom properties
2530
+ ...{
2531
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2532
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2533
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2534
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2535
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2536
+ }
2537
+ }
2538
+ });
2539
+ });
2540
+ DropdownMenuContent.displayName = CONTENT_NAME2;
2541
+ var GROUP_NAME = "DropdownMenuGroup";
2542
+ var DropdownMenuGroup = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2543
+ const { __scopeDropdownMenu, ...groupProps } = props;
2544
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2545
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Group, {
2546
+ ...menuScope,
2547
+ ...groupProps,
2548
+ ref: forwardedRef
2549
+ });
2550
+ });
2551
+ DropdownMenuGroup.displayName = GROUP_NAME;
2552
+ var LABEL_NAME = "DropdownMenuLabel";
2553
+ var DropdownMenuGroupLabel = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2554
+ const { __scopeDropdownMenu, classNames, ...labelProps } = props;
2555
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2556
+ const { tx } = useThemeContext();
2557
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Label, {
2558
+ ...menuScope,
2559
+ ...labelProps,
2560
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
2561
+ ref: forwardedRef
2562
+ });
2563
+ });
2564
+ DropdownMenuGroupLabel.displayName = LABEL_NAME;
2565
+ var ITEM_NAME = "DropdownMenuItem";
2566
+ var DropdownMenuItem = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2567
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
2568
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2569
+ const { tx } = useThemeContext();
2570
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Item, {
2571
+ ...menuScope,
2572
+ ...itemProps,
2573
+ className: tx("menu.item", "menu__item", {}, classNames),
2574
+ ref: forwardedRef
2575
+ });
2576
+ });
2577
+ DropdownMenuItem.displayName = ITEM_NAME;
2578
+ var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
2579
+ var DropdownMenuCheckboxItem = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2580
+ const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
2581
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2582
+ const { tx } = useThemeContext();
2583
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.CheckboxItem, {
2584
+ ...menuScope,
2585
+ ...checkboxItemProps,
2586
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
2587
+ ref: forwardedRef
2034
2588
  });
2035
- const [resizing, setResizing] = useState8(false);
2036
- const resizeInterval = useRef2(null);
2037
- const handleResize = useCallback7(() => {
2038
- setResizing(true);
2039
- if (resizeInterval.current) {
2040
- clearTimeout(resizeInterval.current);
2041
- }
2042
- resizeInterval.current = setTimeout(() => {
2043
- setResizing(false);
2044
- resizeInterval.current = null;
2045
- }, resizeDebounce);
2046
- }, []);
2047
- useEffect5(() => {
2048
- window.addEventListener("resize", handleResize);
2049
- return () => window.removeEventListener("resize", handleResize);
2050
- }, [
2051
- handleResize
2052
- ]);
2053
- return /* @__PURE__ */ React27.createElement(MainProvider, {
2054
- ...props,
2055
- navigationSidebarState,
2056
- setNavigationSidebarState,
2057
- complementarySidebarState,
2058
- setComplementarySidebarState,
2059
- resizing
2060
- }, children);
2061
- };
2062
- MainRoot.displayName = MAIN_ROOT_NAME;
2063
- var handleOpenAutoFocus = (event) => {
2064
- !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
2065
- };
2066
- var MainSidebar = /* @__PURE__ */ forwardRef19(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2067
- const [isLg] = useMediaQuery("lg", {
2068
- ssr: false
2589
+ });
2590
+ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
2591
+ var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
2592
+ var DropdownMenuRadioGroup = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2593
+ const { __scopeDropdownMenu, ...radioGroupProps } = props;
2594
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2595
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.RadioGroup, {
2596
+ ...menuScope,
2597
+ ...radioGroupProps,
2598
+ ref: forwardedRef
2069
2599
  });
2070
- const { tx } = useThemeContext();
2071
- const { t } = useTranslation();
2072
- const ref = useForwardedRef(forwardedRef);
2073
- const noopRef = useRef2(null);
2074
- useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2075
- onDismiss: () => onStateChange?.("closed")
2600
+ });
2601
+ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
2602
+ var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
2603
+ var DropdownMenuRadioItem = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2604
+ const { __scopeDropdownMenu, ...radioItemProps } = props;
2605
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2606
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.RadioItem, {
2607
+ ...menuScope,
2608
+ ...radioItemProps,
2609
+ ref: forwardedRef
2076
2610
  });
2077
- const handleKeyDown = useCallback7((event) => {
2078
- if (event.key === "Escape") {
2079
- event.target.closest("[data-tabster]")?.focus();
2080
- }
2081
- props.onKeyDown?.(event);
2082
- }, [
2083
- props.onKeyDown
2084
- ]);
2085
- const Root5 = isLg ? Primitive9.div : DialogContent2;
2086
- return /* @__PURE__ */ React27.createElement(DialogRoot2, {
2087
- open: state !== "closed",
2088
- "aria-label": toLocalizedString(label, t),
2089
- modal: false
2090
- }, !isLg && /* @__PURE__ */ React27.createElement(DialogTitle2, {
2091
- className: "sr-only"
2092
- }, toLocalizedString(label, t)), /* @__PURE__ */ React27.createElement(Root5, {
2093
- ...!isLg && {
2094
- forceMount: true,
2095
- tabIndex: -1,
2096
- onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
2097
- },
2098
- ...props,
2099
- "data-side": side === "inline-end" ? "ie" : "is",
2100
- "data-state": state,
2101
- "data-resizing": resizing ? "true" : "false",
2102
- className: tx("main.sidebar", "main__sidebar", {}, classNames),
2103
- onKeyDown: handleKeyDown,
2104
- ...state === "closed" && {
2105
- inert: "true"
2106
- },
2107
- ref
2108
- }, children));
2109
2611
  });
2110
- var MainNavigationSidebar = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2111
- const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
2112
- const mover = useLandmarkMover(props.onKeyDown, "0");
2113
- return /* @__PURE__ */ React27.createElement(MainSidebar, {
2114
- ...mover,
2115
- ...props,
2116
- state: navigationSidebarState,
2117
- onStateChange: setNavigationSidebarState,
2118
- resizing,
2119
- side: "inline-start",
2612
+ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
2613
+ var INDICATOR_NAME = "DropdownMenuItemIndicator";
2614
+ var DropdownMenuItemIndicator = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2615
+ const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
2616
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2617
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.ItemIndicator, {
2618
+ ...menuScope,
2619
+ ...itemIndicatorProps,
2120
2620
  ref: forwardedRef
2121
2621
  });
2122
2622
  });
2123
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2124
- var MainComplementarySidebar = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2125
- const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
2126
- const mover = useLandmarkMover(props.onKeyDown, "2");
2127
- return /* @__PURE__ */ React27.createElement(MainSidebar, {
2128
- ...mover,
2129
- ...props,
2130
- state: complementarySidebarState,
2131
- onStateChange: setComplementarySidebarState,
2132
- resizing,
2133
- side: "inline-end",
2623
+ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
2624
+ var SEPARATOR_NAME = "DropdownMenuSeparator";
2625
+ var DropdownMenuSeparator = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2626
+ const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
2627
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2628
+ const { tx } = useThemeContext();
2629
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Separator, {
2630
+ ...menuScope,
2631
+ ...separatorProps,
2632
+ className: tx("menu.separator", "menu__item", {}, classNames),
2134
2633
  ref: forwardedRef
2135
2634
  });
2136
2635
  });
2137
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2138
- var MainContent = /* @__PURE__ */ forwardRef19(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
2139
- const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
2636
+ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
2637
+ var ARROW_NAME2 = "DropdownMenuArrow";
2638
+ var DropdownMenuArrow = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2639
+ const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
2640
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2140
2641
  const { tx } = useThemeContext();
2141
- const Root5 = asChild ? Slot10 : role ? "div" : "main";
2142
- const mover = useLandmarkMover(props.onKeyDown, "1");
2143
- return /* @__PURE__ */ React27.createElement(Root5, {
2144
- role,
2145
- ...handlesFocus && {
2146
- ...mover
2147
- },
2148
- ...props,
2149
- "data-sidebar-inline-start-state": navigationSidebarState,
2150
- "data-sidebar-inline-end-state": complementarySidebarState,
2151
- className: tx("main.content", "main", {
2152
- bounce,
2153
- handlesFocus
2154
- }, classNames),
2642
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Arrow, {
2643
+ ...menuScope,
2644
+ ...arrowProps,
2645
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
2155
2646
  ref: forwardedRef
2156
- }, children);
2647
+ });
2157
2648
  });
2158
- MainContent.displayName = MAIN_NAME;
2159
- var MainOverlay = /* @__PURE__ */ forwardRef19(({ classNames, ...props }, forwardedRef) => {
2160
- const [isLg] = useMediaQuery("lg", {
2161
- ssr: false
2649
+ DropdownMenuArrow.displayName = ARROW_NAME2;
2650
+ var DropdownMenuSub = (props) => {
2651
+ const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
2652
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2653
+ const [open = false, setOpen] = useControllableState5({
2654
+ prop: openProp,
2655
+ defaultProp: defaultOpen,
2656
+ onChange: onOpenChange
2162
2657
  });
2163
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2164
- const { tx } = useThemeContext();
2165
- return /* @__PURE__ */ React27.createElement("div", {
2166
- onClick: () => {
2167
- setNavigationSidebarState("collapsed");
2168
- setComplementarySidebarState("collapsed");
2169
- },
2170
- ...props,
2171
- className: tx("main.overlay", "main__overlay", {
2172
- isLg,
2173
- inlineStartSidebarOpen: navigationSidebarState,
2174
- inlineEndSidebarOpen: complementarySidebarState
2175
- }, classNames),
2176
- "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
2177
- "aria-hidden": "true",
2658
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Sub, {
2659
+ ...menuScope,
2660
+ open,
2661
+ onOpenChange: setOpen
2662
+ }, children);
2663
+ };
2664
+ var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
2665
+ var DropdownMenuSubTrigger = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2666
+ const { __scopeDropdownMenu, ...subTriggerProps } = props;
2667
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2668
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.SubTrigger, {
2669
+ ...menuScope,
2670
+ ...subTriggerProps,
2178
2671
  ref: forwardedRef
2179
2672
  });
2180
2673
  });
2181
- var Main = {
2182
- Root: MainRoot,
2183
- Content: MainContent,
2184
- Overlay: MainOverlay,
2185
- NavigationSidebar: MainNavigationSidebar,
2186
- ComplementarySidebar: MainComplementarySidebar
2674
+ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
2675
+ var SUB_CONTENT_NAME = "DropdownMenuSubContent";
2676
+ var DropdownMenuSubContent = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2677
+ const { __scopeDropdownMenu, ...subContentProps } = props;
2678
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2679
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.SubContent, {
2680
+ ...menuScope,
2681
+ ...subContentProps,
2682
+ ref: forwardedRef,
2683
+ style: {
2684
+ ...props.style,
2685
+ // re-namespace exposed content custom properties
2686
+ ...{
2687
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2688
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2689
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2690
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2691
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2692
+ }
2693
+ }
2694
+ });
2695
+ });
2696
+ DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
2697
+ var DropdownMenu = {
2698
+ Root: DropdownMenuRoot,
2699
+ Trigger: DropdownMenuTrigger,
2700
+ VirtualTrigger: DropdownMenuVirtualTrigger,
2701
+ Portal: DropdownMenuPortal,
2702
+ Content: DropdownMenuContent,
2703
+ Viewport: DropdownMenuViewport,
2704
+ Group: DropdownMenuGroup,
2705
+ GroupLabel: DropdownMenuGroupLabel,
2706
+ Item: DropdownMenuItem,
2707
+ CheckboxItem: DropdownMenuCheckboxItem,
2708
+ RadioGroup: DropdownMenuRadioGroup,
2709
+ RadioItem: DropdownMenuRadioItem,
2710
+ ItemIndicator: DropdownMenuItemIndicator,
2711
+ Separator: DropdownMenuSeparator,
2712
+ Arrow: DropdownMenuArrow,
2713
+ Sub: DropdownMenuSub,
2714
+ SubTrigger: DropdownMenuSubTrigger,
2715
+ SubContent: DropdownMenuSubContent
2187
2716
  };
2717
+ var useDropdownMenuMenuScope = useMenuScope;
2188
2718
 
2189
2719
  // packages/ui/react-ui/src/components/Message/Message.tsx
2190
2720
  import { createContext as createContext11 } from "@radix-ui/react-context";
2191
- import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2721
+ import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
2192
2722
  import { Slot as Slot11 } from "@radix-ui/react-slot";
2193
2723
  import React28, { forwardRef as forwardRef20 } from "react";
2194
- import { useId as useId3 } from "@dxos/react-hooks";
2724
+ import { useId as useId4 } from "@dxos/react-hooks";
2195
2725
  var MESSAGE_NAME = "Message";
2196
2726
  var [MessageProvider, useMessageContext] = createContext11(MESSAGE_NAME);
2197
2727
  var MessageRoot = /* @__PURE__ */ forwardRef20(({ asChild, valence, elevation: propsElevation, className, titleId: propsTitleId, descriptionId: propsDescriptionId, children, ...props }, forwardedRef) => {
2198
2728
  const { tx } = useThemeContext();
2199
- const titleId = useId3("message__title", propsTitleId);
2200
- const descriptionId = useId3("message__description", propsDescriptionId);
2729
+ const titleId = useId4("message__title", propsTitleId);
2730
+ const descriptionId = useId4("message__description", propsDescriptionId);
2201
2731
  const elevation = useElevationContext(propsElevation);
2202
- const Root5 = asChild ? Slot11 : Primitive10.div;
2732
+ const Root7 = asChild ? Slot11 : Primitive11.div;
2203
2733
  return /* @__PURE__ */ React28.createElement(MessageProvider, {
2204
2734
  titleId,
2205
2735
  descriptionId
2206
- }, /* @__PURE__ */ React28.createElement(Root5, {
2736
+ }, /* @__PURE__ */ React28.createElement(Root7, {
2207
2737
  ...props,
2208
2738
  className: tx("message.root", "message", {
2209
2739
  valence,
@@ -2219,8 +2749,8 @@ var MESSAGE_TITLE_NAME = "MessageTitle";
2219
2749
  var MessageTitle = /* @__PURE__ */ forwardRef20(({ asChild, className, children, ...props }, forwardedRef) => {
2220
2750
  const { tx } = useThemeContext();
2221
2751
  const { titleId } = useMessageContext(MESSAGE_TITLE_NAME);
2222
- const Root5 = asChild ? Slot11 : Primitive10.h2;
2223
- return /* @__PURE__ */ React28.createElement(Root5, {
2752
+ const Root7 = asChild ? Slot11 : Primitive11.h2;
2753
+ return /* @__PURE__ */ React28.createElement(Root7, {
2224
2754
  ...props,
2225
2755
  className: tx("message.title", "message__title", {}, className),
2226
2756
  id: titleId,
@@ -2232,8 +2762,8 @@ var MESSAGE_BODY_NAME = "MessageBody";
2232
2762
  var MessageBody = /* @__PURE__ */ forwardRef20(({ asChild, className, children, ...props }, forwardedRef) => {
2233
2763
  const { tx } = useThemeContext();
2234
2764
  const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
2235
- const Root5 = asChild ? Slot11 : Primitive10.p;
2236
- return /* @__PURE__ */ React28.createElement(Root5, {
2765
+ const Root7 = asChild ? Slot11 : Primitive11.p;
2766
+ return /* @__PURE__ */ React28.createElement(Root7, {
2237
2767
  ...props,
2238
2768
  className: tx("message.body", "message__body", {}, className),
2239
2769
  id: descriptionId,
@@ -2248,51 +2778,51 @@ var Message = {
2248
2778
  };
2249
2779
 
2250
2780
  // packages/ui/react-ui/src/components/Popover/Popover.tsx
2251
- import { composeEventHandlers as composeEventHandlers2 } from "@radix-ui/primitive";
2252
- import { useComposedRefs } from "@radix-ui/react-compose-refs";
2253
- import { createContextScope as createContextScope3 } from "@radix-ui/react-context";
2254
- import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
2781
+ import { composeEventHandlers as composeEventHandlers3 } from "@radix-ui/primitive";
2782
+ import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-refs";
2783
+ import { createContextScope as createContextScope4 } from "@radix-ui/react-context";
2784
+ import { DismissableLayer as DismissableLayer2 } from "@radix-ui/react-dismissable-layer";
2255
2785
  import { useFocusGuards } from "@radix-ui/react-focus-guards";
2256
2786
  import { FocusScope } from "@radix-ui/react-focus-scope";
2257
- import { useId as useId4 } from "@radix-ui/react-id";
2258
- import * as PopperPrimitive from "@radix-ui/react-popper";
2259
- import { createPopperScope } from "@radix-ui/react-popper";
2260
- import { Portal as PortalPrimitive } from "@radix-ui/react-portal";
2261
- import { Presence } from "@radix-ui/react-presence";
2262
- import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
2787
+ import { useId as useId5 } from "@radix-ui/react-id";
2788
+ import * as PopperPrimitive2 from "@radix-ui/react-popper";
2789
+ import { createPopperScope as createPopperScope2 } from "@radix-ui/react-popper";
2790
+ import { Portal as PortalPrimitive2 } from "@radix-ui/react-portal";
2791
+ import { Presence as Presence2 } from "@radix-ui/react-presence";
2792
+ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
2263
2793
  import { Slot as Slot12 } from "@radix-ui/react-slot";
2264
- import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2794
+ import { useControllableState as useControllableState6 } from "@radix-ui/react-use-controllable-state";
2265
2795
  import { hideOthers } from "aria-hidden";
2266
- import React29, { forwardRef as forwardRef21, useRef as useRef3, useCallback as useCallback8, useState as useState9, useEffect as useEffect6 } from "react";
2796
+ import React29, { forwardRef as forwardRef21, useRef as useRef4, useCallback as useCallback9, useState as useState8, useEffect as useEffect7 } from "react";
2267
2797
  import { RemoveScroll } from "react-remove-scroll";
2268
2798
  var POPOVER_NAME = "Popover";
2269
- var [createPopoverContext, createPopoverScope] = createContextScope3(POPOVER_NAME, [
2270
- createPopperScope
2799
+ var [createPopoverContext, createPopoverScope] = createContextScope4(POPOVER_NAME, [
2800
+ createPopperScope2
2271
2801
  ]);
2272
- var usePopperScope = createPopperScope();
2802
+ var usePopperScope2 = createPopperScope2();
2273
2803
  var [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);
2274
2804
  var PopoverRoot = (props) => {
2275
2805
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
2276
- const popperScope = usePopperScope(__scopePopover);
2277
- const triggerRef = useRef3(null);
2278
- const [hasCustomAnchor, setHasCustomAnchor] = useState9(false);
2279
- const [open = false, setOpen] = useControllableState5({
2806
+ const popperScope = usePopperScope2(__scopePopover);
2807
+ const triggerRef = useRef4(null);
2808
+ const [hasCustomAnchor, setHasCustomAnchor] = useState8(false);
2809
+ const [open = false, setOpen] = useControllableState6({
2280
2810
  prop: openProp,
2281
2811
  defaultProp: defaultOpen,
2282
2812
  onChange: onOpenChange
2283
2813
  });
2284
- return /* @__PURE__ */ React29.createElement(PopperPrimitive.Root, popperScope, /* @__PURE__ */ React29.createElement(PopoverProvider, {
2814
+ return /* @__PURE__ */ React29.createElement(PopperPrimitive2.Root, popperScope, /* @__PURE__ */ React29.createElement(PopoverProvider, {
2285
2815
  scope: __scopePopover,
2286
- contentId: useId4(),
2816
+ contentId: useId5(),
2287
2817
  triggerRef,
2288
2818
  open,
2289
2819
  onOpenChange: setOpen,
2290
- onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
2820
+ onOpenToggle: useCallback9(() => setOpen((prevOpen) => !prevOpen), [
2291
2821
  setOpen
2292
2822
  ]),
2293
2823
  hasCustomAnchor,
2294
- onCustomAnchorAdd: useCallback8(() => setHasCustomAnchor(true), []),
2295
- onCustomAnchorRemove: useCallback8(() => setHasCustomAnchor(false), []),
2824
+ onCustomAnchorAdd: useCallback9(() => setHasCustomAnchor(true), []),
2825
+ onCustomAnchorRemove: useCallback9(() => setHasCustomAnchor(false), []),
2296
2826
  modal
2297
2827
  }, children));
2298
2828
  };
@@ -2301,29 +2831,29 @@ var ANCHOR_NAME = "PopoverAnchor";
2301
2831
  var PopoverAnchor = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2302
2832
  const { __scopePopover, ...anchorProps } = props;
2303
2833
  const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
2304
- const popperScope = usePopperScope(__scopePopover);
2834
+ const popperScope = usePopperScope2(__scopePopover);
2305
2835
  const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
2306
- useEffect6(() => {
2836
+ useEffect7(() => {
2307
2837
  onCustomAnchorAdd();
2308
2838
  return () => onCustomAnchorRemove();
2309
2839
  }, [
2310
2840
  onCustomAnchorAdd,
2311
2841
  onCustomAnchorRemove
2312
2842
  ]);
2313
- return /* @__PURE__ */ React29.createElement(PopperPrimitive.Anchor, {
2843
+ return /* @__PURE__ */ React29.createElement(PopperPrimitive2.Anchor, {
2314
2844
  ...popperScope,
2315
2845
  ...anchorProps,
2316
2846
  ref: forwardedRef
2317
2847
  });
2318
2848
  });
2319
2849
  PopoverAnchor.displayName = ANCHOR_NAME;
2320
- var TRIGGER_NAME2 = "PopoverTrigger";
2850
+ var TRIGGER_NAME3 = "PopoverTrigger";
2321
2851
  var PopoverTrigger = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2322
2852
  const { __scopePopover, ...triggerProps } = props;
2323
- const context = usePopoverContext(TRIGGER_NAME2, __scopePopover);
2324
- const popperScope = usePopperScope(__scopePopover);
2325
- const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
2326
- const trigger = /* @__PURE__ */ React29.createElement(Primitive11.button, {
2853
+ const context = usePopoverContext(TRIGGER_NAME3, __scopePopover);
2854
+ const popperScope = usePopperScope2(__scopePopover);
2855
+ const composedTriggerRef = useComposedRefs2(forwardedRef, context.triggerRef);
2856
+ const trigger = /* @__PURE__ */ React29.createElement(Primitive12.button, {
2327
2857
  type: "button",
2328
2858
  "aria-haspopup": "dialog",
2329
2859
  "aria-expanded": context.open,
@@ -2331,54 +2861,54 @@ var PopoverTrigger = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2331
2861
  "data-state": getState(context.open),
2332
2862
  ...triggerProps,
2333
2863
  ref: composedTriggerRef,
2334
- onClick: composeEventHandlers2(props.onClick, context.onOpenToggle)
2864
+ onClick: composeEventHandlers3(props.onClick, context.onOpenToggle)
2335
2865
  });
2336
- return context.hasCustomAnchor ? trigger : /* @__PURE__ */ React29.createElement(PopperPrimitive.Anchor, {
2866
+ return context.hasCustomAnchor ? trigger : /* @__PURE__ */ React29.createElement(PopperPrimitive2.Anchor, {
2337
2867
  asChild: true,
2338
2868
  ...popperScope
2339
2869
  }, trigger);
2340
2870
  });
2341
- PopoverTrigger.displayName = TRIGGER_NAME2;
2871
+ PopoverTrigger.displayName = TRIGGER_NAME3;
2342
2872
  var VIRTUAL_TRIGGER_NAME2 = "PopoverVirtualTrigger";
2343
2873
  var PopoverVirtualTrigger = (props) => {
2344
2874
  const { __scopePopover, virtualRef } = props;
2345
2875
  const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
2346
- const popperScope = usePopperScope(__scopePopover);
2347
- useEffect6(() => {
2876
+ const popperScope = usePopperScope2(__scopePopover);
2877
+ useEffect7(() => {
2348
2878
  if (virtualRef.current) {
2349
2879
  context.triggerRef.current = virtualRef.current;
2350
2880
  }
2351
2881
  });
2352
- return /* @__PURE__ */ React29.createElement(PopperPrimitive.Anchor, {
2882
+ return /* @__PURE__ */ React29.createElement(PopperPrimitive2.Anchor, {
2353
2883
  ...popperScope,
2354
2884
  virtualRef
2355
2885
  });
2356
2886
  };
2357
2887
  PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME2;
2358
- var PORTAL_NAME2 = "PopoverPortal";
2359
- var [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME2, {
2888
+ var PORTAL_NAME3 = "PopoverPortal";
2889
+ var [PortalProvider2, usePortalContext2] = createPopoverContext(PORTAL_NAME3, {
2360
2890
  forceMount: void 0
2361
2891
  });
2362
2892
  var PopoverPortal = (props) => {
2363
2893
  const { __scopePopover, forceMount, children, container } = props;
2364
- const context = usePopoverContext(PORTAL_NAME2, __scopePopover);
2365
- return /* @__PURE__ */ React29.createElement(PortalProvider, {
2894
+ const context = usePopoverContext(PORTAL_NAME3, __scopePopover);
2895
+ return /* @__PURE__ */ React29.createElement(PortalProvider2, {
2366
2896
  scope: __scopePopover,
2367
2897
  forceMount
2368
- }, /* @__PURE__ */ React29.createElement(Presence, {
2898
+ }, /* @__PURE__ */ React29.createElement(Presence2, {
2369
2899
  present: forceMount || context.open
2370
- }, /* @__PURE__ */ React29.createElement(PortalPrimitive, {
2900
+ }, /* @__PURE__ */ React29.createElement(PortalPrimitive2, {
2371
2901
  asChild: true,
2372
2902
  container
2373
2903
  }, children)));
2374
2904
  };
2375
- PopoverPortal.displayName = PORTAL_NAME2;
2376
- var CONTENT_NAME2 = "PopoverContent";
2905
+ PopoverPortal.displayName = PORTAL_NAME3;
2906
+ var CONTENT_NAME3 = "PopoverContent";
2377
2907
  var PopoverContent = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2378
- const portalContext = usePortalContext(CONTENT_NAME2, props.__scopePopover);
2908
+ const portalContext = usePortalContext2(CONTENT_NAME3, props.__scopePopover);
2379
2909
  const { forceMount = portalContext.forceMount, ...contentProps } = props;
2380
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2381
- return /* @__PURE__ */ React29.createElement(Presence, {
2910
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2911
+ return /* @__PURE__ */ React29.createElement(Presence2, {
2382
2912
  present: forceMount || context.open
2383
2913
  }, context.modal ? /* @__PURE__ */ React29.createElement(PopoverContentModal, {
2384
2914
  ...contentProps,
@@ -2388,13 +2918,13 @@ var PopoverContent = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2388
2918
  ref: forwardedRef
2389
2919
  }));
2390
2920
  });
2391
- PopoverContent.displayName = CONTENT_NAME2;
2921
+ PopoverContent.displayName = CONTENT_NAME3;
2392
2922
  var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2393
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2394
- const contentRef = useRef3(null);
2395
- const composedRefs = useComposedRefs(forwardedRef, contentRef);
2396
- const isRightClickOutsideRef = useRef3(false);
2397
- useEffect6(() => {
2923
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2924
+ const contentRef = useRef4(null);
2925
+ const composedRefs = useComposedRefs2(forwardedRef, contentRef);
2926
+ const isRightClickOutsideRef = useRef4(false);
2927
+ useEffect7(() => {
2398
2928
  const content = contentRef.current;
2399
2929
  if (content) {
2400
2930
  return hideOthers(content);
@@ -2410,13 +2940,13 @@ var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) =>
2410
2940
  // (closed !== unmounted when animating out)
2411
2941
  trapFocus: context.open,
2412
2942
  disableOutsidePointerEvents: true,
2413
- onCloseAutoFocus: composeEventHandlers2(props.onCloseAutoFocus, (event) => {
2943
+ onCloseAutoFocus: composeEventHandlers3(props.onCloseAutoFocus, (event) => {
2414
2944
  event.preventDefault();
2415
2945
  if (!isRightClickOutsideRef.current) {
2416
2946
  context.triggerRef.current?.focus();
2417
2947
  }
2418
2948
  }),
2419
- onPointerDownOutside: composeEventHandlers2(props.onPointerDownOutside, (event) => {
2949
+ onPointerDownOutside: composeEventHandlers3(props.onPointerDownOutside, (event) => {
2420
2950
  const originalEvent = event.detail.originalEvent;
2421
2951
  const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2422
2952
  const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
@@ -2426,15 +2956,15 @@ var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) =>
2426
2956
  }),
2427
2957
  // When focus is trapped, a `focusout` event may still happen.
2428
2958
  // We make sure we don't trigger our `onDismiss` in such case.
2429
- onFocusOutside: composeEventHandlers2(props.onFocusOutside, (event) => event.preventDefault(), {
2959
+ onFocusOutside: composeEventHandlers3(props.onFocusOutside, (event) => event.preventDefault(), {
2430
2960
  checkForDefaultPrevented: false
2431
2961
  })
2432
2962
  }));
2433
2963
  });
2434
2964
  var PopoverContentNonModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2435
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2436
- const hasInteractedOutsideRef = useRef3(false);
2437
- const hasPointerDownOutsideRef = useRef3(false);
2965
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2966
+ const hasInteractedOutsideRef = useRef4(false);
2967
+ const hasPointerDownOutsideRef = useRef4(false);
2438
2968
  return /* @__PURE__ */ React29.createElement(PopoverContentImpl, {
2439
2969
  ...props,
2440
2970
  ref: forwardedRef,
@@ -2472,8 +3002,8 @@ var PopoverContentNonModal = /* @__PURE__ */ forwardRef21((props, forwardedRef)
2472
3002
  });
2473
3003
  var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2474
3004
  const { __scopePopover, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, collisionPadding = 8, classNames, ...contentProps } = props;
2475
- const context = usePopoverContext(CONTENT_NAME2, __scopePopover);
2476
- const popperScope = usePopperScope(__scopePopover);
3005
+ const context = usePopoverContext(CONTENT_NAME3, __scopePopover);
3006
+ const popperScope = usePopperScope2(__scopePopover);
2477
3007
  const { tx } = useThemeContext();
2478
3008
  const elevation = useElevationContext();
2479
3009
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
@@ -2484,7 +3014,7 @@ var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2484
3014
  trapped: trapFocus,
2485
3015
  onMountAutoFocus: onOpenAutoFocus,
2486
3016
  onUnmountAutoFocus: onCloseAutoFocus
2487
- }, /* @__PURE__ */ React29.createElement(DismissableLayer, {
3017
+ }, /* @__PURE__ */ React29.createElement(DismissableLayer2, {
2488
3018
  asChild: true,
2489
3019
  disableOutsidePointerEvents,
2490
3020
  onInteractOutside,
@@ -2492,7 +3022,7 @@ var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2492
3022
  onPointerDownOutside,
2493
3023
  onFocusOutside,
2494
3024
  onDismiss: () => context.onOpenChange(false)
2495
- }, /* @__PURE__ */ React29.createElement(PopperPrimitive.Content, {
3025
+ }, /* @__PURE__ */ React29.createElement(PopperPrimitive2.Content, {
2496
3026
  "data-state": getState(context.open),
2497
3027
  role: "dialog",
2498
3028
  id: context.contentId,
@@ -2520,31 +3050,31 @@ var CLOSE_NAME = "PopoverClose";
2520
3050
  var PopoverClose = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2521
3051
  const { __scopePopover, ...closeProps } = props;
2522
3052
  const context = usePopoverContext(CLOSE_NAME, __scopePopover);
2523
- return /* @__PURE__ */ React29.createElement(Primitive11.button, {
3053
+ return /* @__PURE__ */ React29.createElement(Primitive12.button, {
2524
3054
  type: "button",
2525
3055
  ...closeProps,
2526
3056
  ref: forwardedRef,
2527
- onClick: composeEventHandlers2(props.onClick, () => context.onOpenChange(false))
3057
+ onClick: composeEventHandlers3(props.onClick, () => context.onOpenChange(false))
2528
3058
  });
2529
3059
  });
2530
3060
  PopoverClose.displayName = CLOSE_NAME;
2531
- var ARROW_NAME2 = "PopoverArrow";
3061
+ var ARROW_NAME3 = "PopoverArrow";
2532
3062
  var PopoverArrow = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
2533
3063
  const { __scopePopover, classNames, ...arrowProps } = props;
2534
- const popperScope = usePopperScope(__scopePopover);
3064
+ const popperScope = usePopperScope2(__scopePopover);
2535
3065
  const { tx } = useThemeContext();
2536
- return /* @__PURE__ */ React29.createElement(PopperPrimitive.Arrow, {
3066
+ return /* @__PURE__ */ React29.createElement(PopperPrimitive2.Arrow, {
2537
3067
  ...popperScope,
2538
3068
  ...arrowProps,
2539
3069
  className: tx("popover.arrow", "popover__arrow", {}, classNames),
2540
3070
  ref: forwardedRef
2541
3071
  });
2542
3072
  });
2543
- PopoverArrow.displayName = ARROW_NAME2;
3073
+ PopoverArrow.displayName = ARROW_NAME3;
2544
3074
  var PopoverViewport = /* @__PURE__ */ forwardRef21(({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
2545
3075
  const { tx } = useThemeContext();
2546
- const Root5 = asChild ? Slot12 : Primitive11.div;
2547
- return /* @__PURE__ */ React29.createElement(Root5, {
3076
+ const Root7 = asChild ? Slot12 : Primitive12.div;
3077
+ return /* @__PURE__ */ React29.createElement(Root7, {
2548
3078
  ...props,
2549
3079
  className: tx("popover.viewport", "popover__viewport", {
2550
3080
  constrainInline,
@@ -2795,13 +3325,13 @@ var Separator4 = /* @__PURE__ */ forwardRef25(({ classNames, orientation = "hori
2795
3325
  });
2796
3326
 
2797
3327
  // packages/ui/react-ui/src/components/Tag/Tag.tsx
2798
- import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
3328
+ import { Primitive as Primitive13 } from "@radix-ui/react-primitive";
2799
3329
  import { Slot as Slot13 } from "@radix-ui/react-slot";
2800
3330
  import React34, { forwardRef as forwardRef26 } from "react";
2801
3331
  var Tag = /* @__PURE__ */ forwardRef26(({ asChild, palette = "neutral", classNames, ...props }, forwardedRef) => {
2802
3332
  const { tx } = useThemeContext();
2803
- const Root5 = asChild ? Slot13 : Primitive12.span;
2804
- return /* @__PURE__ */ React34.createElement(Root5, {
3333
+ const Root7 = asChild ? Slot13 : Primitive13.span;
3334
+ return /* @__PURE__ */ React34.createElement(Root7, {
2805
3335
  ...props,
2806
3336
  className: tx("tag.root", "dx-tag", {
2807
3337
  palette
@@ -2812,7 +3342,7 @@ var Tag = /* @__PURE__ */ forwardRef26(({ asChild, palette = "neutral", classNam
2812
3342
  });
2813
3343
 
2814
3344
  // packages/ui/react-ui/src/components/Toast/Toast.tsx
2815
- import { Primitive as Primitive13 } from "@radix-ui/react-primitive";
3345
+ import { Primitive as Primitive14 } from "@radix-ui/react-primitive";
2816
3346
  import { Slot as Slot14 } from "@radix-ui/react-slot";
2817
3347
  import { ToastProvider as ToastProviderPrimitive, ToastViewport as ToastViewportPrimitive, Root as ToastRootPrimitive, ToastTitle as ToastTitlePrimitive, ToastDescription as ToastDescriptionPrimitive, ToastAction as ToastActionPrimitive, ToastClose as ToastClosePrimitive } from "@radix-ui/react-toast";
2818
3348
  import React35, { forwardRef as forwardRef27 } from "react";
@@ -2836,8 +3366,8 @@ var ToastRoot = /* @__PURE__ */ forwardRef27(({ classNames, children, ...props }
2836
3366
  });
2837
3367
  var ToastBody = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
2838
3368
  const { tx } = useThemeContext();
2839
- const Root5 = asChild ? Slot14 : Primitive13.div;
2840
- return /* @__PURE__ */ React35.createElement(Root5, {
3369
+ const Root7 = asChild ? Slot14 : Primitive14.div;
3370
+ return /* @__PURE__ */ React35.createElement(Root7, {
2841
3371
  ...props,
2842
3372
  className: tx("toast.body", "toast__body", {}, classNames),
2843
3373
  ref: forwardedRef
@@ -2845,8 +3375,8 @@ var ToastBody = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props },
2845
3375
  });
2846
3376
  var ToastTitle = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
2847
3377
  const { tx } = useThemeContext();
2848
- const Root5 = asChild ? Slot14 : ToastTitlePrimitive;
2849
- return /* @__PURE__ */ React35.createElement(Root5, {
3378
+ const Root7 = asChild ? Slot14 : ToastTitlePrimitive;
3379
+ return /* @__PURE__ */ React35.createElement(Root7, {
2850
3380
  ...props,
2851
3381
  className: tx("toast.title", "toast__title", {}, classNames),
2852
3382
  ref: forwardedRef
@@ -2854,8 +3384,8 @@ var ToastTitle = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }
2854
3384
  });
2855
3385
  var ToastDescription = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
2856
3386
  const { tx } = useThemeContext();
2857
- const Root5 = asChild ? Slot14 : ToastDescriptionPrimitive;
2858
- return /* @__PURE__ */ React35.createElement(Root5, {
3387
+ const Root7 = asChild ? Slot14 : ToastDescriptionPrimitive;
3388
+ return /* @__PURE__ */ React35.createElement(Root7, {
2859
3389
  ...props,
2860
3390
  className: tx("toast.description", "toast__description", {}, classNames),
2861
3391
  ref: forwardedRef
@@ -2863,8 +3393,8 @@ var ToastDescription = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...p
2863
3393
  });
2864
3394
  var ToastActions = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
2865
3395
  const { tx } = useThemeContext();
2866
- const Root5 = asChild ? Slot14 : Primitive13.div;
2867
- return /* @__PURE__ */ React35.createElement(Root5, {
3396
+ const Root7 = asChild ? Slot14 : Primitive14.div;
3397
+ return /* @__PURE__ */ React35.createElement(Root7, {
2868
3398
  ...props,
2869
3399
  className: tx("toast.actions", "toast__actions", {}, classNames),
2870
3400
  ref: forwardedRef
@@ -3034,6 +3564,7 @@ export {
3034
3564
  Treegrid,
3035
3565
  createDropdownMenuScope,
3036
3566
  createPopoverScope,
3567
+ createTooltipScope,
3037
3568
  hasIosKeyboard,
3038
3569
  initialSafeArea,
3039
3570
  isLabel,
@@ -3053,6 +3584,7 @@ export {
3053
3584
  useSafeArea,
3054
3585
  useSidebars,
3055
3586
  useThemeContext,
3587
+ useTooltipContext,
3056
3588
  useTranslation,
3057
3589
  useTranslationsContext,
3058
3590
  useVisualViewport