@dxos/react-ui 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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