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