@dxos/react-ui 0.8.2-main.f081794 → 0.8.2-main.fbd8ed0

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