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