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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/lib/browser/index.mjs +1607 -1075
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +1942 -1408
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +1607 -1075
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/Buttons/Button.stories.d.ts +10 -44
  11. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Buttons/IconButton.d.ts +4 -5
  13. package/dist/types/src/components/Buttons/IconButton.d.ts.map +1 -1
  14. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/Clipboard/CopyButton.d.ts +2 -1
  16. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  17. package/dist/types/src/components/Clipboard/index.d.ts +2 -2
  18. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  19. package/dist/types/src/components/Dialogs/Dialog.d.ts +6 -2
  20. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +1 -1
  21. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  23. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +1 -1
  25. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +1 -1
  26. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  27. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  28. package/dist/types/src/components/Popover/Popover.d.ts +2 -1
  29. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  30. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  31. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  32. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  33. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -1
  34. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  35. package/dist/types/src/components/Tooltip/Tooltip.d.ts +94 -20
  36. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  37. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +40 -16
  38. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/index.d.ts +1 -1
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  42. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  43. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  44. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  46. package/dist/types/src/playground/Controls.stories.d.ts +1 -1
  47. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  48. package/dist/types/src/playground/Custom.stories.d.ts +8 -0
  49. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -0
  50. package/dist/types/src/testing/decorators/withVariants.d.ts.map +1 -1
  51. package/dist/types/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +14 -13
  53. package/src/components/Avatars/Avatar.tsx +1 -1
  54. package/src/components/Buttons/Button.stories.tsx +19 -14
  55. package/src/components/Buttons/IconButton.stories.tsx +2 -2
  56. package/src/components/Buttons/IconButton.tsx +8 -33
  57. package/src/components/Clipboard/CopyButton.tsx +22 -24
  58. package/src/components/Dialogs/Dialog.tsx +12 -7
  59. package/src/components/Popover/Popover.tsx +3 -0
  60. package/src/components/ScrollArea/ScrollArea.tsx +3 -0
  61. package/src/components/Tooltip/Tooltip.stories.tsx +41 -16
  62. package/src/components/Tooltip/Tooltip.tsx +748 -58
  63. package/src/components/index.ts +1 -1
  64. package/src/playground/Controls.stories.tsx +2 -2
  65. package/src/playground/Custom.stories.tsx +137 -0
@@ -74,6 +74,7 @@ __export(node_exports, {
74
74
  Treegrid: () => Treegrid,
75
75
  createDropdownMenuScope: () => createDropdownMenuScope,
76
76
  createPopoverScope: () => createPopoverScope,
77
+ createTooltipScope: () => createTooltipScope,
77
78
  hasIosKeyboard: () => hasIosKeyboard,
78
79
  initialSafeArea: () => initialSafeArea,
79
80
  isLabel: () => isLabel,
@@ -93,6 +94,7 @@ __export(node_exports, {
93
94
  useSafeArea: () => useSafeArea,
94
95
  useSidebars: () => useSidebars,
95
96
  useThemeContext: () => useThemeContext,
97
+ useTooltipContext: () => useTooltipContext,
96
98
  useTranslation: () => useTranslation,
97
99
  useTranslationsContext: () => useTranslationsContext,
98
100
  useVisualViewport: () => useVisualViewport
@@ -139,86 +141,98 @@ var import_react_slot5 = require("@radix-ui/react-slot");
139
141
  var import_react14 = __toESM(require("react"));
140
142
  var import_react15 = __toESM(require("react"));
141
143
  var import_react16 = __toESM(require("react"));
142
- var import_react_tooltip = require("@radix-ui/react-tooltip");
144
+ var import_primitive = require("@radix-ui/primitive");
145
+ var import_react_compose_refs = require("@radix-ui/react-compose-refs");
146
+ var import_react_context3 = require("@radix-ui/react-context");
147
+ var import_react_dismissable_layer = require("@radix-ui/react-dismissable-layer");
148
+ var import_react_id = require("@radix-ui/react-id");
149
+ var PopperPrimitive = __toESM(require("@radix-ui/react-popper"));
150
+ var import_react_popper = require("@radix-ui/react-popper");
151
+ var import_react_portal = require("@radix-ui/react-portal");
152
+ var import_react_presence = require("@radix-ui/react-presence");
153
+ var import_react_primitive6 = require("@radix-ui/react-primitive");
154
+ var import_react_slot6 = require("@radix-ui/react-slot");
155
+ var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
156
+ var VisuallyHiddenPrimitive = __toESM(require("@radix-ui/react-visually-hidden"));
143
157
  var import_react17 = __toESM(require("react"));
144
- var import_react18 = require("react");
145
158
  var import_react_toggle = require("@radix-ui/react-toggle");
146
- var import_react19 = __toESM(require("react"));
159
+ var import_react18 = __toESM(require("react"));
147
160
  var import_react_toggle_group = require("@radix-ui/react-toggle-group");
161
+ var import_react19 = __toESM(require("react"));
148
162
  var import_react20 = __toESM(require("react"));
149
163
  var import_react21 = __toESM(require("react"));
150
- var import_react22 = __toESM(require("react"));
151
164
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
152
165
  var import_keyborg = require("keyborg");
166
+ var import_react22 = __toESM(require("react"));
153
167
  var import_react23 = __toESM(require("react"));
154
168
  var import_react24 = __toESM(require("react"));
155
- var import_react25 = __toESM(require("react"));
156
- var import_react_context3 = require("@radix-ui/react-context");
169
+ var import_react_context4 = require("@radix-ui/react-context");
157
170
  var import_react_dialog = require("@radix-ui/react-dialog");
158
- var import_react26 = __toESM(require("react"));
171
+ var import_react25 = __toESM(require("react"));
159
172
  var import_react_alert_dialog = require("@radix-ui/react-alert-dialog");
160
- var import_react_context4 = require("@radix-ui/react-context");
161
- var import_react27 = __toESM(require("react"));
162
- var ContextMenuPrimitive = __toESM(require("@radix-ui/react-context-menu"));
163
- var import_react_primitive6 = require("@radix-ui/react-primitive");
164
- var import_react_slot6 = require("@radix-ui/react-slot");
165
- var import_react28 = __toESM(require("react"));
166
- var import_primitive = require("@radix-ui/primitive");
167
- var import_react_compose_refs = require("@radix-ui/react-compose-refs");
168
173
  var import_react_context5 = require("@radix-ui/react-context");
169
- var import_react_id = require("@radix-ui/react-id");
170
- var MenuPrimitive = __toESM(require("@radix-ui/react-menu"));
171
- var import_react_menu = require("@radix-ui/react-menu");
172
- var import_react_primitive7 = require("@radix-ui/react-primitive");
173
- var import_react_slot7 = require("@radix-ui/react-slot");
174
- var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
175
- var import_react29 = __toESM(require("react"));
174
+ var import_react26 = __toESM(require("react"));
176
175
  var import_react_checkbox = require("@radix-ui/react-checkbox");
177
176
  var import_react_use_controllable_state2 = require("@radix-ui/react-use-controllable-state");
178
- var import_react30 = __toESM(require("react"));
177
+ var import_react27 = __toESM(require("react"));
179
178
  var import_react_input = require("@dxos/react-input");
180
179
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
181
- var import_react31 = require("@phosphor-icons/react");
182
- var import_react_slot8 = require("@radix-ui/react-slot");
183
- var import_react32 = __toESM(require("react"));
180
+ var import_react28 = require("@phosphor-icons/react");
181
+ var import_react_slot7 = require("@radix-ui/react-slot");
182
+ var import_react29 = __toESM(require("react"));
184
183
  var import_react_list = require("@dxos/react-list");
185
- var import_react33 = __toESM(require("react"));
186
- var import_react34 = __toESM(require("react"));
187
- var import_react35 = __toESM(require("react"));
184
+ var import_react30 = __toESM(require("react"));
185
+ var import_react31 = __toESM(require("react"));
186
+ var import_react32 = __toESM(require("react"));
188
187
  var import_react_tabster = require("@fluentui/react-tabster");
189
188
  var import_react_context6 = require("@radix-ui/react-context");
190
- var import_react_primitive8 = require("@radix-ui/react-primitive");
191
- var import_react_slot9 = require("@radix-ui/react-slot");
189
+ var import_react_primitive7 = require("@radix-ui/react-primitive");
190
+ var import_react_slot8 = require("@radix-ui/react-slot");
192
191
  var import_react_use_controllable_state3 = require("@radix-ui/react-use-controllable-state");
193
- var import_react36 = __toESM(require("react"));
192
+ var import_react33 = __toESM(require("react"));
194
193
  var import_react_context7 = require("@radix-ui/react-context");
195
194
  var import_react_dialog2 = require("@radix-ui/react-dialog");
196
- var import_react_primitive9 = require("@radix-ui/react-primitive");
197
- var import_react_slot10 = require("@radix-ui/react-slot");
195
+ var import_react_primitive8 = require("@radix-ui/react-primitive");
196
+ var import_react_slot9 = require("@radix-ui/react-slot");
198
197
  var import_react_use_controllable_state4 = require("@radix-ui/react-use-controllable-state");
199
- var import_react37 = __toESM(require("react"));
198
+ var import_react34 = __toESM(require("react"));
200
199
  var import_log = require("@dxos/log");
201
200
  var import_react_hooks4 = require("@dxos/react-hooks");
202
- var import_react38 = require("react");
201
+ var import_react35 = require("react");
202
+ var ContextMenuPrimitive = __toESM(require("@radix-ui/react-context-menu"));
203
+ var import_react_primitive9 = require("@radix-ui/react-primitive");
204
+ var import_react_slot10 = require("@radix-ui/react-slot");
205
+ var import_react36 = __toESM(require("react"));
206
+ var import_react37 = require("react");
207
+ var import_primitive2 = require("@radix-ui/primitive");
208
+ var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
203
209
  var import_react_context8 = require("@radix-ui/react-context");
210
+ var import_react_id2 = require("@radix-ui/react-id");
211
+ var MenuPrimitive = __toESM(require("@radix-ui/react-menu"));
212
+ var import_react_menu = require("@radix-ui/react-menu");
204
213
  var import_react_primitive10 = require("@radix-ui/react-primitive");
205
214
  var import_react_slot11 = require("@radix-ui/react-slot");
215
+ var import_react_use_controllable_state5 = require("@radix-ui/react-use-controllable-state");
216
+ var import_react38 = __toESM(require("react"));
217
+ var import_react_context9 = require("@radix-ui/react-context");
218
+ var import_react_primitive11 = require("@radix-ui/react-primitive");
219
+ var import_react_slot12 = require("@radix-ui/react-slot");
206
220
  var import_react39 = __toESM(require("react"));
207
221
  var import_react_hooks5 = require("@dxos/react-hooks");
208
- var import_primitive2 = require("@radix-ui/primitive");
209
- var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
210
- var import_react_context9 = require("@radix-ui/react-context");
211
- var import_react_dismissable_layer = require("@radix-ui/react-dismissable-layer");
222
+ var import_primitive3 = require("@radix-ui/primitive");
223
+ var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
224
+ var import_react_context10 = require("@radix-ui/react-context");
225
+ var import_react_dismissable_layer2 = require("@radix-ui/react-dismissable-layer");
212
226
  var import_react_focus_guards = require("@radix-ui/react-focus-guards");
213
227
  var import_react_focus_scope = require("@radix-ui/react-focus-scope");
214
- var import_react_id2 = require("@radix-ui/react-id");
215
- var PopperPrimitive = __toESM(require("@radix-ui/react-popper"));
216
- var import_react_popper = require("@radix-ui/react-popper");
217
- var import_react_portal = require("@radix-ui/react-portal");
218
- var import_react_presence = require("@radix-ui/react-presence");
219
- var import_react_primitive11 = require("@radix-ui/react-primitive");
220
- var import_react_slot12 = require("@radix-ui/react-slot");
221
- var import_react_use_controllable_state5 = require("@radix-ui/react-use-controllable-state");
228
+ var import_react_id3 = require("@radix-ui/react-id");
229
+ var PopperPrimitive2 = __toESM(require("@radix-ui/react-popper"));
230
+ var import_react_popper2 = require("@radix-ui/react-popper");
231
+ var import_react_portal2 = require("@radix-ui/react-portal");
232
+ var import_react_presence2 = require("@radix-ui/react-presence");
233
+ var import_react_primitive12 = require("@radix-ui/react-primitive");
234
+ var import_react_slot13 = require("@radix-ui/react-slot");
235
+ var import_react_use_controllable_state6 = require("@radix-ui/react-use-controllable-state");
222
236
  var import_aria_hidden = require("aria-hidden");
223
237
  var import_react40 = __toESM(require("react"));
224
238
  var import_react_remove_scroll = require("react-remove-scroll");
@@ -230,11 +244,11 @@ var SelectPrimitive = __toESM(require("@radix-ui/react-select"));
230
244
  var import_react44 = __toESM(require("react"));
231
245
  var import_react_separator = require("@radix-ui/react-separator");
232
246
  var import_react45 = __toESM(require("react"));
233
- var import_react_primitive12 = require("@radix-ui/react-primitive");
234
- var import_react_slot13 = require("@radix-ui/react-slot");
235
- var import_react46 = __toESM(require("react"));
236
247
  var import_react_primitive13 = require("@radix-ui/react-primitive");
237
248
  var import_react_slot14 = require("@radix-ui/react-slot");
249
+ var import_react46 = __toESM(require("react"));
250
+ var import_react_primitive14 = require("@radix-ui/react-primitive");
251
+ var import_react_slot15 = require("@radix-ui/react-slot");
238
252
  var import_react_toast = require("@radix-ui/react-toast");
239
253
  var import_react47 = __toESM(require("react"));
240
254
  var ToolbarPrimitive = __toESM(require("@radix-ui/react-toolbar"));
@@ -349,8 +363,8 @@ var useVisualViewport = (deps) => {
349
363
  };
350
364
  var AnchoredOverflowRoot = /* @__PURE__ */ (0, import_react.forwardRef)(({ asChild, classNames, children, ...props }, forwardedRef) => {
351
365
  const { tx } = useThemeContext();
352
- const Root5 = asChild ? import_react_slot.Slot : import_react_primitive.Primitive.div;
353
- return /* @__PURE__ */ import_react.default.createElement(Root5, {
366
+ const Root7 = asChild ? import_react_slot.Slot : import_react_primitive.Primitive.div;
367
+ return /* @__PURE__ */ import_react.default.createElement(Root7, {
354
368
  role: "none",
355
369
  ...props,
356
370
  className: tx("anchoredOverflow.root", "overflow-anchored", {}, classNames),
@@ -359,8 +373,8 @@ var AnchoredOverflowRoot = /* @__PURE__ */ (0, import_react.forwardRef)(({ asChi
359
373
  });
360
374
  var AnchoredOverflowAnchor = /* @__PURE__ */ (0, import_react.forwardRef)(({ asChild, classNames, children, ...props }, forwardedRef) => {
361
375
  const { tx } = useThemeContext();
362
- const Root5 = asChild ? import_react_slot.Slot : import_react_primitive.Primitive.div;
363
- return /* @__PURE__ */ import_react.default.createElement(Root5, {
376
+ const Root7 = asChild ? import_react_slot.Slot : import_react_primitive.Primitive.div;
377
+ return /* @__PURE__ */ import_react.default.createElement(Root7, {
364
378
  role: "none",
365
379
  ...props,
366
380
  className: tx("anchoredOverflow.anchor", "overflow-anchor", {}, classNames),
@@ -392,17 +406,17 @@ var AvatarContent = /* @__PURE__ */ (0, import_react10.forwardRef)(({ icon, clas
392
406
  return /* @__PURE__ */ import_react10.default.createElement(DxAvatar, {
393
407
  ...props,
394
408
  icon: href,
395
- labelId,
409
+ "aria-labelledby": labelId,
396
410
  "aria-describedby": descriptionId,
397
411
  rootClassName: (0, import_react_ui_theme.mx)(classNames),
398
412
  ref: forwardedRef
399
413
  });
400
414
  });
401
415
  var AvatarLabel = /* @__PURE__ */ (0, import_react10.forwardRef)(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
402
- const Root5 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
416
+ const Root7 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
403
417
  const { tx } = useThemeContext();
404
418
  const { labelId } = useAvatarContext("AvatarLabel");
405
- return /* @__PURE__ */ import_react10.default.createElement(Root5, {
419
+ return /* @__PURE__ */ import_react10.default.createElement(Root7, {
406
420
  ...props,
407
421
  id: labelId,
408
422
  ref: forwardedRef,
@@ -412,10 +426,10 @@ var AvatarLabel = /* @__PURE__ */ (0, import_react10.forwardRef)(({ asChild, srO
412
426
  });
413
427
  });
414
428
  var AvatarDescription = /* @__PURE__ */ (0, import_react10.forwardRef)(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
415
- const Root5 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
429
+ const Root7 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
416
430
  const { tx } = useThemeContext();
417
431
  const { descriptionId } = useAvatarContext("AvatarDescription");
418
- return /* @__PURE__ */ import_react10.default.createElement(Root5, {
432
+ return /* @__PURE__ */ import_react10.default.createElement(Root7, {
419
433
  ...props,
420
434
  id: descriptionId,
421
435
  ref: forwardedRef,
@@ -432,8 +446,8 @@ var Avatar = {
432
446
  };
433
447
  var Link = /* @__PURE__ */ (0, import_react13.forwardRef)(({ asChild, variant, classNames, ...props }, forwardedRef) => {
434
448
  const { tx } = useThemeContext();
435
- const Root5 = asChild ? import_react_slot4.Slot : import_react_primitive4.Primitive.a;
436
- return /* @__PURE__ */ import_react13.default.createElement(Root5, {
449
+ const Root7 = asChild ? import_react_slot4.Slot : import_react_primitive4.Primitive.a;
450
+ return /* @__PURE__ */ import_react13.default.createElement(Root7, {
437
451
  ...props,
438
452
  className: tx("link.root", "link", {
439
453
  variant
@@ -443,8 +457,8 @@ var Link = /* @__PURE__ */ (0, import_react13.forwardRef)(({ asChild, variant, c
443
457
  });
444
458
  var BreadcrumbRoot = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
445
459
  const { tx } = useThemeContext();
446
- const Root5 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.div;
447
- return /* @__PURE__ */ import_react12.default.createElement(Root5, {
460
+ const Root7 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.div;
461
+ return /* @__PURE__ */ import_react12.default.createElement(Root7, {
448
462
  role: "navigation",
449
463
  ...props,
450
464
  className: tx("breadcrumb.root", "breadcrumb", {}, classNames),
@@ -453,8 +467,8 @@ var BreadcrumbRoot = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild,
453
467
  });
454
468
  var BreadcrumbList = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
455
469
  const { tx } = useThemeContext();
456
- const Root5 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.ol;
457
- return /* @__PURE__ */ import_react12.default.createElement(Root5, {
470
+ const Root7 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.ol;
471
+ return /* @__PURE__ */ import_react12.default.createElement(Root7, {
458
472
  role: "list",
459
473
  ...props,
460
474
  className: tx("breadcrumb.list", "breadcrumb__list", {}, classNames),
@@ -463,8 +477,8 @@ var BreadcrumbList = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild,
463
477
  });
464
478
  var BreadcrumbListItem = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
465
479
  const { tx } = useThemeContext();
466
- const Root5 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.li;
467
- return /* @__PURE__ */ import_react12.default.createElement(Root5, {
480
+ const Root7 = asChild ? import_react_slot3.Slot : import_react_primitive3.Primitive.li;
481
+ return /* @__PURE__ */ import_react12.default.createElement(Root7, {
468
482
  role: "listitem",
469
483
  ...props,
470
484
  className: tx("breadcrumb.listItem", "breadcrumb__list__item", {}, classNames),
@@ -472,16 +486,16 @@ var BreadcrumbListItem = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChi
472
486
  });
473
487
  });
474
488
  var BreadcrumbLink = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild, ...props }, forwardedRef) => {
475
- const Root5 = asChild ? import_react_slot3.Slot : Link;
476
- return /* @__PURE__ */ import_react12.default.createElement(Root5, {
489
+ const Root7 = asChild ? import_react_slot3.Slot : Link;
490
+ return /* @__PURE__ */ import_react12.default.createElement(Root7, {
477
491
  ...props,
478
492
  ref: forwardedRef
479
493
  });
480
494
  });
481
495
  var BreadcrumbCurrent = /* @__PURE__ */ (0, import_react12.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
482
496
  const { tx } = useThemeContext();
483
- const Root5 = asChild ? import_react_slot3.Slot : "h1";
484
- return /* @__PURE__ */ import_react12.default.createElement(Root5, {
497
+ const Root7 = asChild ? import_react_slot3.Slot : "h1";
498
+ return /* @__PURE__ */ import_react12.default.createElement(Root7, {
485
499
  ...props,
486
500
  "aria-current": "page",
487
501
  className: tx("breadcrumb.current", "breadcrumb__item__heading--current", {}, classNames),
@@ -517,8 +531,8 @@ var Button = /* @__PURE__ */ (0, import_react14.memo)(/* @__PURE__ */ (0, import
517
531
  const { tx } = useThemeContext();
518
532
  const elevation = useElevationContext(propsElevation);
519
533
  const density = useDensityContext(propsDensity);
520
- const Root5 = asChild ? import_react_slot5.Slot : import_react_primitive5.Primitive.button;
521
- return /* @__PURE__ */ import_react14.default.createElement(Root5, {
534
+ const Root7 = asChild ? import_react_slot5.Slot : import_react_primitive5.Primitive.button;
535
+ return /* @__PURE__ */ import_react14.default.createElement(Root7, {
522
536
  ref,
523
537
  ...props,
524
538
  "data-variant": variant,
@@ -540,8 +554,8 @@ Button.displayName = BUTTON_NAME;
540
554
  var ButtonGroup = /* @__PURE__ */ (0, import_react14.forwardRef)(({ children, elevation: propsElevation, classNames, asChild, ...props }, forwardedRef) => {
541
555
  const { tx } = useThemeContext();
542
556
  const elevation = useElevationContext(propsElevation);
543
- const Root5 = asChild ? import_react_slot5.Slot : import_react_primitive5.Primitive.div;
544
- return /* @__PURE__ */ import_react14.default.createElement(Root5, {
557
+ const Root7 = asChild ? import_react_slot5.Slot : import_react_primitive5.Primitive.div;
558
+ return /* @__PURE__ */ import_react14.default.createElement(Root7, {
545
559
  role: "none",
546
560
  ...props,
547
561
  className: tx("button.group", "button-group", {
@@ -566,161 +580,674 @@ var Icon = /* @__PURE__ */ (0, import_react16.memo)(/* @__PURE__ */ (0, import_r
566
580
  href
567
581
  }));
568
582
  }));
569
- var propIsNumber = (prop) => Number.isFinite(prop);
570
- var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
571
- var safePadding = (propsPadding, safePadding2, side) => {
572
- return (propIsNumber(safePadding2[side]) ? safePadding2[side] : 0) + (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0);
573
- };
574
- var useSafeCollisionPadding = (collisionPadding) => {
575
- const { safeAreaPadding } = useThemeContext();
576
- return (0, import_react18.useMemo)(() => ({
577
- top: safePadding(collisionPadding, safeAreaPadding, "top"),
578
- right: safePadding(collisionPadding, safeAreaPadding, "right"),
579
- bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
580
- left: safePadding(collisionPadding, safeAreaPadding, "left")
581
- }), [
582
- collisionPadding,
583
- safeAreaPadding
583
+ var [createTooltipContext, createTooltipScope] = (0, import_react_context3.createContextScope)("Tooltip", [
584
+ import_react_popper.createPopperScope
585
+ ]);
586
+ var usePopperScope = (0, import_react_popper.createPopperScope)();
587
+ var DEFAULT_DELAY_DURATION = 700;
588
+ var TOOLTIP_OPEN = "tooltip.open";
589
+ var TOOLTIP_NAME = "Tooltip";
590
+ var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);
591
+ var TooltipProvider = (props) => {
592
+ const { __scopeTooltip, children, open: openProp, defaultOpen = false, onOpenChange, disableHoverableContent = false, delayDuration = DEFAULT_DELAY_DURATION, skipDelayDuration = 300 } = props;
593
+ const isOpenDelayedRef = (0, import_react17.useRef)(true);
594
+ const isPointerInTransitRef = (0, import_react17.useRef)(false);
595
+ const skipDelayTimerRef = (0, import_react17.useRef)(0);
596
+ (0, import_react17.useEffect)(() => {
597
+ const skipDelayTimer = skipDelayTimerRef.current;
598
+ return () => window.clearTimeout(skipDelayTimer);
599
+ }, []);
600
+ const popperScope = usePopperScope(__scopeTooltip);
601
+ const [trigger, setTrigger] = (0, import_react17.useState)(null);
602
+ const [content, setContent] = (0, import_react17.useState)("");
603
+ const [side, setSide] = (0, import_react17.useState)(void 0);
604
+ const triggerRef = (0, import_react17.useRef)(trigger);
605
+ const handleTriggerChange = (0, import_react17.useCallback)((nextTrigger) => {
606
+ setTrigger(nextTrigger);
607
+ triggerRef.current = nextTrigger;
608
+ setContent(nextTrigger?.getAttribute("data-tooltip-content") ?? "");
609
+ setSide(nextTrigger?.getAttribute("data-tooltip-side") ?? void 0);
610
+ }, []);
611
+ const contentId = (0, import_react_id.useId)();
612
+ const openTimerRef = (0, import_react17.useRef)(0);
613
+ const wasOpenDelayedRef = (0, import_react17.useRef)(false);
614
+ const handleOpenChange = (0, import_react17.useCallback)((open2) => {
615
+ if (open2) {
616
+ window.clearTimeout(skipDelayTimerRef.current);
617
+ isOpenDelayedRef.current = false;
618
+ document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));
619
+ } else {
620
+ window.clearTimeout(skipDelayTimerRef.current);
621
+ skipDelayTimerRef.current = window.setTimeout(() => isOpenDelayedRef.current = true, skipDelayDuration);
622
+ }
623
+ onOpenChange?.(open2);
624
+ }, [
625
+ skipDelayDuration,
626
+ onOpenChange
584
627
  ]);
585
- };
586
- var TooltipProvider = import_react_tooltip.Provider;
587
- var TooltipRoot = import_react_tooltip.Root;
588
- var TooltipPortal = import_react_tooltip.TooltipPortal;
589
- var TooltipTrigger = import_react_tooltip.TooltipTrigger;
590
- var TooltipArrow = /* @__PURE__ */ (0, import_react17.forwardRef)(({ classNames, ...props }, forwardedRef) => {
591
- const { tx } = useThemeContext();
592
- return /* @__PURE__ */ import_react17.default.createElement(import_react_tooltip.TooltipArrow, {
593
- ...props,
594
- className: tx("tooltip.arrow", "tooltip__arrow", {}, classNames),
595
- ref: forwardedRef
628
+ const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
629
+ prop: openProp,
630
+ defaultProp: defaultOpen,
631
+ onChange: handleOpenChange
596
632
  });
597
- });
598
- var TooltipContent = /* @__PURE__ */ (0, import_react17.forwardRef)(({ classNames, collisionPadding = 8, ...props }, forwardedRef) => {
633
+ const stateAttribute = (0, import_react17.useMemo)(() => {
634
+ return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
635
+ }, [
636
+ open
637
+ ]);
638
+ const handleOpen = (0, import_react17.useCallback)(() => {
639
+ window.clearTimeout(openTimerRef.current);
640
+ openTimerRef.current = 0;
641
+ wasOpenDelayedRef.current = false;
642
+ setOpen(true);
643
+ }, [
644
+ setOpen
645
+ ]);
646
+ const handleClose = (0, import_react17.useCallback)(() => {
647
+ window.clearTimeout(openTimerRef.current);
648
+ openTimerRef.current = 0;
649
+ setOpen(false);
650
+ }, [
651
+ setOpen
652
+ ]);
653
+ const handleDelayedOpen = (0, import_react17.useCallback)(() => {
654
+ window.clearTimeout(openTimerRef.current);
655
+ openTimerRef.current = window.setTimeout(() => {
656
+ wasOpenDelayedRef.current = true;
657
+ setOpen(true);
658
+ openTimerRef.current = 0;
659
+ }, delayDuration);
660
+ }, [
661
+ delayDuration,
662
+ setOpen
663
+ ]);
664
+ (0, import_react17.useEffect)(() => {
665
+ return () => {
666
+ if (openTimerRef.current) {
667
+ window.clearTimeout(openTimerRef.current);
668
+ openTimerRef.current = 0;
669
+ }
670
+ };
671
+ }, []);
599
672
  const { tx } = useThemeContext();
600
673
  const elevation = useElevationContext();
601
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
602
- return /* @__PURE__ */ import_react17.default.createElement(import_react_tooltip.TooltipContent, {
603
- sideOffset: 4,
604
- ...props,
605
- collisionPadding: safeCollisionPadding,
674
+ return /* @__PURE__ */ import_react17.default.createElement(PopperPrimitive.Root, popperScope, /* @__PURE__ */ import_react17.default.createElement(TooltipContextProvider, {
675
+ scope: __scopeTooltip,
676
+ contentId,
677
+ open,
678
+ stateAttribute,
679
+ trigger,
680
+ onTriggerChange: handleTriggerChange,
681
+ onTriggerEnter: (0, import_react17.useCallback)(() => {
682
+ if (isOpenDelayedRef.current) {
683
+ handleDelayedOpen();
684
+ } else {
685
+ handleOpen();
686
+ }
687
+ }, [
688
+ isOpenDelayedRef,
689
+ handleDelayedOpen,
690
+ handleOpen
691
+ ]),
692
+ onTriggerLeave: (0, import_react17.useCallback)(() => {
693
+ if (disableHoverableContent) {
694
+ handleClose();
695
+ } else {
696
+ window.clearTimeout(openTimerRef.current);
697
+ openTimerRef.current = 0;
698
+ }
699
+ }, [
700
+ handleClose,
701
+ disableHoverableContent
702
+ ]),
703
+ onOpen: handleOpen,
704
+ onClose: handleClose,
705
+ disableHoverableContent,
706
+ isPointerInTransitRef,
707
+ onPointerInTransitChange: (0, import_react17.useCallback)((inTransit) => {
708
+ isPointerInTransitRef.current = inTransit;
709
+ }, [])
710
+ }, /* @__PURE__ */ import_react17.default.createElement(TooltipContent, {
711
+ side,
606
712
  className: tx("tooltip.content", "tooltip", {
607
713
  elevation
608
- }, classNames),
609
- ref: forwardedRef
714
+ })
715
+ }, content, /* @__PURE__ */ import_react17.default.createElement(TooltipArrow, {
716
+ className: tx("tooltip.arrow", "tooltip__arrow")
717
+ })), /* @__PURE__ */ import_react17.default.createElement(TooltipVirtualTrigger, {
718
+ virtualRef: triggerRef
719
+ }), children));
720
+ };
721
+ TooltipProvider.displayName = TOOLTIP_NAME;
722
+ var TooltipVirtualTrigger = ({ virtualRef, __scopeTooltip }) => {
723
+ const popperScope = usePopperScope(__scopeTooltip);
724
+ return /* @__PURE__ */ import_react17.default.createElement(PopperPrimitive.Anchor, {
725
+ asChild: true,
726
+ ...popperScope,
727
+ virtualRef
610
728
  });
611
- });
612
- var Tooltip = {
613
- Provider: TooltipProvider,
614
- Root: TooltipRoot,
615
- Portal: TooltipPortal,
616
- Trigger: TooltipTrigger,
617
- Arrow: TooltipArrow,
618
- Content: TooltipContent
619
- };
620
- var IconOnlyButton = /* @__PURE__ */ (0, import_react15.forwardRef)(({ noTooltip, tooltipPortal = true, tooltipZIndex: zIndex, tooltipSide, suppressNextTooltip, ...props }, forwardedRef) => {
621
- const [triggerTooltipOpen, setTriggerTooltipOpen] = (0, import_react15.useState)(false);
622
- if (noTooltip) {
623
- return /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
624
- ...props,
625
- ref: forwardedRef
626
- });
627
- }
628
- const content = /* @__PURE__ */ import_react15.default.createElement(Tooltip.Content, {
629
- ...zIndex && {
630
- style: {
631
- zIndex
729
+ };
730
+ var TRIGGER_NAME = "TooltipTrigger";
731
+ var TooltipTrigger = /* @__PURE__ */ (0, import_react17.forwardRef)((props, forwardedRef) => {
732
+ const {
733
+ __scopeTooltip,
734
+ onInteract,
735
+ // TODO(thure): Pass `delayDuration` into the context.
736
+ delayDuration: _delayDuration,
737
+ suppressNextTooltip,
738
+ side,
739
+ content,
740
+ ...triggerProps
741
+ } = props;
742
+ const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);
743
+ const ref = (0, import_react17.useRef)(null);
744
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, ref);
745
+ const isPointerDownRef = (0, import_react17.useRef)(false);
746
+ const hasPointerMoveOpenedRef = (0, import_react17.useRef)(false);
747
+ const handlePointerUp = (0, import_react17.useCallback)(() => isPointerDownRef.current = false, []);
748
+ (0, import_react17.useEffect)(() => {
749
+ return () => document.removeEventListener("pointerup", handlePointerUp);
750
+ }, [
751
+ handlePointerUp
752
+ ]);
753
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_primitive6.Primitive.button, {
754
+ // We purposefully avoid adding `type=button` here because tooltip triggers are also
755
+ // commonly anchors and the anchor `type` attribute signifies MIME type.
756
+ "aria-describedby": context.open ? context.contentId : void 0,
757
+ "data-state": context.stateAttribute,
758
+ "data-tooltip-content": content,
759
+ "data-tooltip-side": side,
760
+ ...triggerProps,
761
+ ref: composedRefs,
762
+ onPointerMove: (0, import_primitive.composeEventHandlers)(props.onPointerMove, (event) => {
763
+ if (event.pointerType === "touch") {
764
+ return;
632
765
  }
633
- },
634
- side: tooltipSide
635
- }, props.label, /* @__PURE__ */ import_react15.default.createElement(Tooltip.Arrow, null));
636
- return /* @__PURE__ */ import_react15.default.createElement(Tooltip.Root, {
637
- open: triggerTooltipOpen,
638
- onOpenChange: (nextOpen) => {
639
- if (suppressNextTooltip?.current) {
640
- setTriggerTooltipOpen(false);
641
- suppressNextTooltip.current = false;
642
- } else {
643
- setTriggerTooltipOpen(nextOpen);
766
+ if (!hasPointerMoveOpenedRef.current && !context.isPointerInTransitRef.current) {
767
+ onInteract?.(event);
768
+ if (event.defaultPrevented) {
769
+ return;
770
+ }
771
+ context.onTriggerChange(ref.current);
772
+ context.onTriggerEnter();
773
+ hasPointerMoveOpenedRef.current = true;
644
774
  }
645
- }
646
- }, /* @__PURE__ */ import_react15.default.createElement(Tooltip.Trigger, {
647
- asChild: true
648
- }, /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
649
- ...props,
650
- ref: forwardedRef
651
- })), tooltipPortal ? /* @__PURE__ */ import_react15.default.createElement(Tooltip.Portal, null, content) : content);
775
+ }),
776
+ onPointerLeave: (0, import_primitive.composeEventHandlers)(props.onPointerLeave, () => {
777
+ context.onTriggerLeave();
778
+ hasPointerMoveOpenedRef.current = false;
779
+ }),
780
+ onPointerDown: (0, import_primitive.composeEventHandlers)(props.onPointerDown, () => {
781
+ if (context.open) {
782
+ context.onClose();
783
+ }
784
+ isPointerDownRef.current = true;
785
+ document.addEventListener("pointerup", handlePointerUp, {
786
+ once: true
787
+ });
788
+ }),
789
+ onFocus: (0, import_primitive.composeEventHandlers)(props.onFocus, (event) => {
790
+ if (!isPointerDownRef.current) {
791
+ onInteract?.(event);
792
+ if (event.defaultPrevented) {
793
+ return;
794
+ }
795
+ if (suppressNextTooltip?.current) {
796
+ suppressNextTooltip.current = false;
797
+ } else {
798
+ context.onTriggerChange(ref.current);
799
+ context.onOpen();
800
+ }
801
+ }
802
+ }),
803
+ onBlur: (0, import_primitive.composeEventHandlers)(props.onBlur, context.onClose),
804
+ onClick: (0, import_primitive.composeEventHandlers)(props.onClick, context.onClose)
805
+ });
652
806
  });
653
- var LabelledIconButton = /* @__PURE__ */ (0, import_react15.forwardRef)(({ icon, size, iconOnly, label, classNames, iconClassNames, caretDown, suppressNextTooltip, ...props }, forwardedRef) => {
654
- const { tx } = useThemeContext();
655
- return /* @__PURE__ */ import_react15.default.createElement(Button, {
656
- ...props,
657
- classNames: tx("iconButton.root", "iconButton", {}, classNames),
658
- ref: forwardedRef
659
- }, /* @__PURE__ */ import_react15.default.createElement(Icon, {
660
- icon,
661
- size,
662
- classNames: iconClassNames
663
- }), /* @__PURE__ */ import_react15.default.createElement("span", {
664
- className: iconOnly ? "sr-only" : void 0
665
- }, label), caretDown && /* @__PURE__ */ import_react15.default.createElement(Icon, {
666
- size: 3,
667
- icon: "ph--caret-down--bold"
668
- }));
807
+ TooltipTrigger.displayName = TRIGGER_NAME;
808
+ var PORTAL_NAME = "TooltipPortal";
809
+ var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {
810
+ forceMount: void 0
669
811
  });
670
- var IconButton = /* @__PURE__ */ (0, import_react15.forwardRef)((props, forwardedRef) => props.iconOnly ? /* @__PURE__ */ import_react15.default.createElement(IconOnlyButton, {
671
- ...props,
672
- ref: forwardedRef
673
- }) : /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
674
- ...props,
675
- ref: forwardedRef
676
- }));
677
- var Toggle = /* @__PURE__ */ (0, import_react19.forwardRef)(({ defaultPressed, pressed, onPressedChange, ...props }, forwardedRef) => {
678
- return /* @__PURE__ */ import_react19.default.createElement(import_react_toggle.Toggle, {
679
- defaultPressed,
680
- pressed,
681
- onPressedChange,
682
- asChild: true
683
- }, /* @__PURE__ */ import_react19.default.createElement(Button, {
684
- ...props,
812
+ var TooltipPortal = (props) => {
813
+ const { __scopeTooltip, forceMount, children, container } = props;
814
+ const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);
815
+ return /* @__PURE__ */ import_react17.default.createElement(PortalProvider, {
816
+ scope: __scopeTooltip,
817
+ forceMount
818
+ }, /* @__PURE__ */ import_react17.default.createElement(import_react_presence.Presence, {
819
+ present: forceMount || context.open
820
+ }, /* @__PURE__ */ import_react17.default.createElement(import_react_portal.Portal, {
821
+ asChild: true,
822
+ container
823
+ }, children)));
824
+ };
825
+ TooltipPortal.displayName = PORTAL_NAME;
826
+ var CONTENT_NAME = "TooltipContent";
827
+ var TooltipContent = /* @__PURE__ */ (0, import_react17.forwardRef)((props, forwardedRef) => {
828
+ const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);
829
+ const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
830
+ const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
831
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_presence.Presence, {
832
+ present: forceMount || context.open
833
+ }, context.disableHoverableContent ? /* @__PURE__ */ import_react17.default.createElement(TooltipContentImpl, {
834
+ side,
835
+ ...contentProps,
685
836
  ref: forwardedRef
686
- }));
687
- });
688
- var ToggleGroup = /* @__PURE__ */ (0, import_react20.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
689
- return /* @__PURE__ */ import_react20.default.createElement(import_react_toggle_group.ToggleGroup, {
690
- ...props,
691
- asChild: true
692
- }, /* @__PURE__ */ import_react20.default.createElement(ButtonGroup, {
693
- classNames,
694
- children,
837
+ }) : /* @__PURE__ */ import_react17.default.createElement(TooltipContentHoverable, {
838
+ side,
839
+ ...contentProps,
695
840
  ref: forwardedRef
696
841
  }));
697
842
  });
698
- var ToggleGroupItem = /* @__PURE__ */ (0, import_react20.forwardRef)(({ variant, elevation, density, classNames, children, ...props }, forwardedRef) => {
699
- return /* @__PURE__ */ import_react20.default.createElement(import_react_toggle_group.ToggleGroupItem, {
843
+ var TooltipContentHoverable = /* @__PURE__ */ (0, import_react17.forwardRef)((props, forwardedRef) => {
844
+ const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
845
+ const ref = (0, import_react17.useRef)(null);
846
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, ref);
847
+ const [pointerGraceArea, setPointerGraceArea] = (0, import_react17.useState)(null);
848
+ const { trigger, onClose } = context;
849
+ const content = ref.current;
850
+ const { onPointerInTransitChange } = context;
851
+ const handleRemoveGraceArea = (0, import_react17.useCallback)(() => {
852
+ setPointerGraceArea(null);
853
+ onPointerInTransitChange(false);
854
+ }, [
855
+ onPointerInTransitChange
856
+ ]);
857
+ const handleCreateGraceArea = (0, import_react17.useCallback)((event, hoverTarget) => {
858
+ const currentTarget = event.currentTarget;
859
+ const exitPoint = {
860
+ x: event.clientX,
861
+ y: event.clientY
862
+ };
863
+ const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());
864
+ const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);
865
+ const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());
866
+ const graceArea = getHull([
867
+ ...paddedExitPoints,
868
+ ...hoverTargetPoints
869
+ ]);
870
+ setPointerGraceArea(graceArea);
871
+ onPointerInTransitChange(true);
872
+ }, [
873
+ onPointerInTransitChange
874
+ ]);
875
+ (0, import_react17.useEffect)(() => {
876
+ return () => handleRemoveGraceArea();
877
+ }, [
878
+ handleRemoveGraceArea
879
+ ]);
880
+ (0, import_react17.useEffect)(() => {
881
+ if (trigger && content) {
882
+ const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);
883
+ const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);
884
+ trigger.addEventListener("pointerleave", handleTriggerLeave);
885
+ content.addEventListener("pointerleave", handleContentLeave);
886
+ return () => {
887
+ trigger.removeEventListener("pointerleave", handleTriggerLeave);
888
+ content.removeEventListener("pointerleave", handleContentLeave);
889
+ };
890
+ }
891
+ }, [
892
+ trigger,
893
+ content,
894
+ handleCreateGraceArea,
895
+ handleRemoveGraceArea
896
+ ]);
897
+ (0, import_react17.useEffect)(() => {
898
+ if (pointerGraceArea) {
899
+ const handleTrackPointerGrace = (event) => {
900
+ const target = event.target;
901
+ const pointerPosition = {
902
+ x: event.clientX,
903
+ y: event.clientY
904
+ };
905
+ const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);
906
+ const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);
907
+ if (hasEnteredTarget) {
908
+ handleRemoveGraceArea();
909
+ } else if (isPointerOutsideGraceArea) {
910
+ handleRemoveGraceArea();
911
+ onClose();
912
+ }
913
+ };
914
+ document.addEventListener("pointermove", handleTrackPointerGrace);
915
+ return () => document.removeEventListener("pointermove", handleTrackPointerGrace);
916
+ }
917
+ }, [
918
+ trigger,
919
+ content,
920
+ pointerGraceArea,
921
+ onClose,
922
+ handleRemoveGraceArea
923
+ ]);
924
+ return /* @__PURE__ */ import_react17.default.createElement(TooltipContentImpl, {
700
925
  ...props,
701
- asChild: true
702
- }, /* @__PURE__ */ import_react20.default.createElement(Button, {
703
- variant,
704
- elevation,
705
- density,
706
- classNames,
707
- children,
708
- ref: forwardedRef
709
- }));
926
+ ref: composedRefs
927
+ });
710
928
  });
711
- var ClipboardContext = /* @__PURE__ */ (0, import_react21.createContext)({
712
- textValue: "",
713
- setTextValue: async (_) => {
714
- }
929
+ var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, {
930
+ isInside: false
715
931
  });
716
- var useClipboard = () => (0, import_react21.useContext)(ClipboardContext);
717
- var ClipboardProvider = ({ children }) => {
718
- const [textValue, setInternalTextValue] = (0, import_react21.useState)("");
719
- const setTextValue = (0, import_react21.useCallback)(async (nextValue) => {
720
- await navigator.clipboard.writeText(nextValue);
721
- return setInternalTextValue(nextValue);
932
+ var TooltipContentImpl = /* @__PURE__ */ (0, import_react17.forwardRef)((props, forwardedRef) => {
933
+ const { __scopeTooltip, children, "aria-label": ariaLabel, onEscapeKeyDown, onPointerDownOutside, ...contentProps } = props;
934
+ const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
935
+ const popperScope = usePopperScope(__scopeTooltip);
936
+ const { onClose } = context;
937
+ (0, import_react17.useEffect)(() => {
938
+ document.addEventListener(TOOLTIP_OPEN, onClose);
939
+ return () => document.removeEventListener(TOOLTIP_OPEN, onClose);
940
+ }, [
941
+ onClose
942
+ ]);
943
+ (0, import_react17.useEffect)(() => {
944
+ if (context.trigger) {
945
+ const handleScroll = (event) => {
946
+ const target = event.target;
947
+ if (target?.contains(context.trigger)) {
948
+ onClose();
949
+ }
950
+ };
951
+ window.addEventListener("scroll", handleScroll, {
952
+ capture: true
953
+ });
954
+ return () => window.removeEventListener("scroll", handleScroll, {
955
+ capture: true
956
+ });
957
+ }
958
+ }, [
959
+ context.trigger,
960
+ onClose
961
+ ]);
962
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_dismissable_layer.DismissableLayer, {
963
+ asChild: true,
964
+ disableOutsidePointerEvents: false,
965
+ onEscapeKeyDown,
966
+ onPointerDownOutside,
967
+ onFocusOutside: (event) => event.preventDefault(),
968
+ onDismiss: onClose
969
+ }, /* @__PURE__ */ import_react17.default.createElement(PopperPrimitive.Content, {
970
+ "data-state": context.stateAttribute,
971
+ ...popperScope,
972
+ ...contentProps,
973
+ ref: forwardedRef,
974
+ style: {
975
+ ...contentProps.style,
976
+ // re-namespace exposed content custom properties
977
+ ...{
978
+ "--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
979
+ "--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
980
+ "--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
981
+ "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
982
+ "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
983
+ }
984
+ }
985
+ }, /* @__PURE__ */ import_react17.default.createElement(import_react_slot6.Slottable, null, children), /* @__PURE__ */ import_react17.default.createElement(VisuallyHiddenContentContextProvider, {
986
+ scope: __scopeTooltip,
987
+ isInside: true
988
+ }, /* @__PURE__ */ import_react17.default.createElement(VisuallyHiddenPrimitive.Root, {
989
+ id: context.contentId,
990
+ role: "tooltip"
991
+ }, ariaLabel || children))));
992
+ });
993
+ TooltipContent.displayName = CONTENT_NAME;
994
+ var ARROW_NAME = "TooltipArrow";
995
+ var TooltipArrow = /* @__PURE__ */ (0, import_react17.forwardRef)((props, forwardedRef) => {
996
+ const { __scopeTooltip, ...arrowProps } = props;
997
+ const popperScope = usePopperScope(__scopeTooltip);
998
+ const visuallyHiddenContentContext = useVisuallyHiddenContentContext(ARROW_NAME, __scopeTooltip);
999
+ return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ import_react17.default.createElement(PopperPrimitive.Arrow, {
1000
+ ...popperScope,
1001
+ ...arrowProps,
1002
+ ref: forwardedRef
1003
+ });
1004
+ });
1005
+ TooltipArrow.displayName = ARROW_NAME;
1006
+ var getExitSideFromRect = (point, rect) => {
1007
+ const top = Math.abs(rect.top - point.y);
1008
+ const bottom = Math.abs(rect.bottom - point.y);
1009
+ const right = Math.abs(rect.right - point.x);
1010
+ const left = Math.abs(rect.left - point.x);
1011
+ switch (Math.min(top, bottom, right, left)) {
1012
+ case left:
1013
+ return "left";
1014
+ case right:
1015
+ return "right";
1016
+ case top:
1017
+ return "top";
1018
+ case bottom:
1019
+ return "bottom";
1020
+ default:
1021
+ throw new Error("unreachable");
1022
+ }
1023
+ };
1024
+ var getPaddedExitPoints = (exitPoint, exitSide, padding = 5) => {
1025
+ const paddedExitPoints = [];
1026
+ switch (exitSide) {
1027
+ case "top":
1028
+ paddedExitPoints.push({
1029
+ x: exitPoint.x - padding,
1030
+ y: exitPoint.y + padding
1031
+ }, {
1032
+ x: exitPoint.x + padding,
1033
+ y: exitPoint.y + padding
1034
+ });
1035
+ break;
1036
+ case "bottom":
1037
+ paddedExitPoints.push({
1038
+ x: exitPoint.x - padding,
1039
+ y: exitPoint.y - padding
1040
+ }, {
1041
+ x: exitPoint.x + padding,
1042
+ y: exitPoint.y - padding
1043
+ });
1044
+ break;
1045
+ case "left":
1046
+ paddedExitPoints.push({
1047
+ x: exitPoint.x + padding,
1048
+ y: exitPoint.y - padding
1049
+ }, {
1050
+ x: exitPoint.x + padding,
1051
+ y: exitPoint.y + padding
1052
+ });
1053
+ break;
1054
+ case "right":
1055
+ paddedExitPoints.push({
1056
+ x: exitPoint.x - padding,
1057
+ y: exitPoint.y - padding
1058
+ }, {
1059
+ x: exitPoint.x - padding,
1060
+ y: exitPoint.y + padding
1061
+ });
1062
+ break;
1063
+ }
1064
+ return paddedExitPoints;
1065
+ };
1066
+ var getPointsFromRect = (rect) => {
1067
+ const { top, right, bottom, left } = rect;
1068
+ return [
1069
+ {
1070
+ x: left,
1071
+ y: top
1072
+ },
1073
+ {
1074
+ x: right,
1075
+ y: top
1076
+ },
1077
+ {
1078
+ x: right,
1079
+ y: bottom
1080
+ },
1081
+ {
1082
+ x: left,
1083
+ y: bottom
1084
+ }
1085
+ ];
1086
+ };
1087
+ var isPointInPolygon = (point, polygon) => {
1088
+ const { x, y } = point;
1089
+ let inside = false;
1090
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
1091
+ const xi = polygon[i].x;
1092
+ const yi = polygon[i].y;
1093
+ const xj = polygon[j].x;
1094
+ const yj = polygon[j].y;
1095
+ const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
1096
+ if (intersect) {
1097
+ inside = !inside;
1098
+ }
1099
+ }
1100
+ return inside;
1101
+ };
1102
+ var getHull = (points) => {
1103
+ const newPoints = points.slice();
1104
+ newPoints.sort((a, b) => {
1105
+ if (a.x < b.x) {
1106
+ return -1;
1107
+ } else if (a.x > b.x) {
1108
+ return 1;
1109
+ } else if (a.y < b.y) {
1110
+ return -1;
1111
+ } else if (a.y > b.y) {
1112
+ return 1;
1113
+ } else {
1114
+ return 0;
1115
+ }
1116
+ });
1117
+ return getHullPresorted(newPoints);
1118
+ };
1119
+ var getHullPresorted = (points) => {
1120
+ if (points.length <= 1) {
1121
+ return points.slice();
1122
+ }
1123
+ const upperHull = [];
1124
+ for (let i = 0; i < points.length; i++) {
1125
+ const p = points[i];
1126
+ while (upperHull.length >= 2) {
1127
+ const q = upperHull[upperHull.length - 1];
1128
+ const r = upperHull[upperHull.length - 2];
1129
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {
1130
+ upperHull.pop();
1131
+ } else {
1132
+ break;
1133
+ }
1134
+ }
1135
+ upperHull.push(p);
1136
+ }
1137
+ upperHull.pop();
1138
+ const lowerHull = [];
1139
+ for (let i = points.length - 1; i >= 0; i--) {
1140
+ const p = points[i];
1141
+ while (lowerHull.length >= 2) {
1142
+ const q = lowerHull[lowerHull.length - 1];
1143
+ const r = lowerHull[lowerHull.length - 2];
1144
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {
1145
+ lowerHull.pop();
1146
+ } else {
1147
+ break;
1148
+ }
1149
+ }
1150
+ lowerHull.push(p);
1151
+ }
1152
+ lowerHull.pop();
1153
+ if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {
1154
+ return upperHull;
1155
+ } else {
1156
+ return upperHull.concat(lowerHull);
1157
+ }
1158
+ };
1159
+ var Tooltip = {
1160
+ Provider: TooltipProvider,
1161
+ Trigger: TooltipTrigger
1162
+ };
1163
+ var IconOnlyButton = /* @__PURE__ */ (0, import_react15.forwardRef)(({ noTooltip, tooltipPortal = true, tooltipSide, suppressNextTooltip, ...props }, forwardedRef) => {
1164
+ if (noTooltip) {
1165
+ return /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
1166
+ ...props,
1167
+ ref: forwardedRef
1168
+ });
1169
+ }
1170
+ return /* @__PURE__ */ import_react15.default.createElement(Tooltip.Trigger, {
1171
+ asChild: true,
1172
+ content: props.label,
1173
+ side: tooltipSide,
1174
+ suppressNextTooltip
1175
+ }, /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
1176
+ ...props,
1177
+ ref: forwardedRef
1178
+ }));
1179
+ });
1180
+ var LabelledIconButton = /* @__PURE__ */ (0, import_react15.forwardRef)(({ icon, size, iconOnly, label, classNames, iconClassNames, caretDown, suppressNextTooltip, ...props }, forwardedRef) => {
1181
+ const { tx } = useThemeContext();
1182
+ return /* @__PURE__ */ import_react15.default.createElement(Button, {
1183
+ ...props,
1184
+ classNames: tx("iconButton.root", "iconButton", {}, classNames),
1185
+ ref: forwardedRef
1186
+ }, /* @__PURE__ */ import_react15.default.createElement(Icon, {
1187
+ icon,
1188
+ size,
1189
+ classNames: iconClassNames
1190
+ }), /* @__PURE__ */ import_react15.default.createElement("span", {
1191
+ className: iconOnly ? "sr-only" : void 0
1192
+ }, label), caretDown && /* @__PURE__ */ import_react15.default.createElement(Icon, {
1193
+ size: 3,
1194
+ icon: "ph--caret-down--bold"
1195
+ }));
1196
+ });
1197
+ var IconButton = /* @__PURE__ */ (0, import_react15.forwardRef)((props, forwardedRef) => props.iconOnly ? /* @__PURE__ */ import_react15.default.createElement(IconOnlyButton, {
1198
+ ...props,
1199
+ ref: forwardedRef
1200
+ }) : /* @__PURE__ */ import_react15.default.createElement(LabelledIconButton, {
1201
+ ...props,
1202
+ ref: forwardedRef
1203
+ }));
1204
+ var Toggle = /* @__PURE__ */ (0, import_react18.forwardRef)(({ defaultPressed, pressed, onPressedChange, ...props }, forwardedRef) => {
1205
+ return /* @__PURE__ */ import_react18.default.createElement(import_react_toggle.Toggle, {
1206
+ defaultPressed,
1207
+ pressed,
1208
+ onPressedChange,
1209
+ asChild: true
1210
+ }, /* @__PURE__ */ import_react18.default.createElement(Button, {
1211
+ ...props,
1212
+ ref: forwardedRef
1213
+ }));
1214
+ });
1215
+ var ToggleGroup = /* @__PURE__ */ (0, import_react19.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1216
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_toggle_group.ToggleGroup, {
1217
+ ...props,
1218
+ asChild: true
1219
+ }, /* @__PURE__ */ import_react19.default.createElement(ButtonGroup, {
1220
+ classNames,
1221
+ children,
1222
+ ref: forwardedRef
1223
+ }));
1224
+ });
1225
+ var ToggleGroupItem = /* @__PURE__ */ (0, import_react19.forwardRef)(({ variant, elevation, density, classNames, children, ...props }, forwardedRef) => {
1226
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_toggle_group.ToggleGroupItem, {
1227
+ ...props,
1228
+ asChild: true
1229
+ }, /* @__PURE__ */ import_react19.default.createElement(Button, {
1230
+ variant,
1231
+ elevation,
1232
+ density,
1233
+ classNames,
1234
+ children,
1235
+ ref: forwardedRef
1236
+ }));
1237
+ });
1238
+ var ClipboardContext = /* @__PURE__ */ (0, import_react20.createContext)({
1239
+ textValue: "",
1240
+ setTextValue: async (_) => {
1241
+ }
1242
+ });
1243
+ var useClipboard = () => (0, import_react20.useContext)(ClipboardContext);
1244
+ var ClipboardProvider = ({ children }) => {
1245
+ const [textValue, setInternalTextValue] = (0, import_react20.useState)("");
1246
+ const setTextValue = (0, import_react20.useCallback)(async (nextValue) => {
1247
+ await navigator.clipboard.writeText(nextValue);
1248
+ return setInternalTextValue(nextValue);
722
1249
  }, []);
723
- return /* @__PURE__ */ import_react21.default.createElement(ClipboardContext.Provider, {
1250
+ return /* @__PURE__ */ import_react20.default.createElement(ClipboardContext.Provider, {
724
1251
  value: {
725
1252
  textValue,
726
1253
  setTextValue
@@ -730,25 +1257,25 @@ var ClipboardProvider = ({ children }) => {
730
1257
  var hasIosKeyboard = () => {
731
1258
  return !!navigator.userAgent.match(/iP(ad|od|hone).+Safari/);
732
1259
  };
733
- var DensityContext = /* @__PURE__ */ (0, import_react24.createContext)({
1260
+ var DensityContext = /* @__PURE__ */ (0, import_react23.createContext)({
734
1261
  density: "fine"
735
1262
  });
736
- var DensityProvider = ({ density, children }) => /* @__PURE__ */ import_react24.default.createElement(DensityContext.Provider, {
1263
+ var DensityProvider = ({ density, children }) => /* @__PURE__ */ import_react23.default.createElement(DensityContext.Provider, {
737
1264
  value: {
738
1265
  density
739
1266
  }
740
1267
  }, children);
741
- var ElevationContext = /* @__PURE__ */ (0, import_react25.createContext)({
1268
+ var ElevationContext = /* @__PURE__ */ (0, import_react24.createContext)({
742
1269
  elevation: "base"
743
1270
  });
744
- var ElevationProvider = ({ elevation, children }) => /* @__PURE__ */ import_react25.default.createElement(ElevationContext.Provider, {
1271
+ var ElevationProvider = ({ elevation, children }) => /* @__PURE__ */ import_react24.default.createElement(ElevationContext.Provider, {
745
1272
  value: {
746
1273
  elevation
747
1274
  }
748
1275
  }, children);
749
- var ThemeContext = /* @__PURE__ */ (0, import_react23.createContext)(void 0);
1276
+ var ThemeContext = /* @__PURE__ */ (0, import_react22.createContext)(void 0);
750
1277
  var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName, themeMode = "dark", rootDensity = "fine", ...rest }) => {
751
- (0, import_react23.useEffect)(() => {
1278
+ (0, import_react22.useEffect)(() => {
752
1279
  if (document.defaultView) {
753
1280
  const kb = (0, import_keyborg.createKeyborg)(document.defaultView);
754
1281
  kb.subscribe(handleInputModalityChange);
@@ -756,7 +1283,7 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
756
1283
  }
757
1284
  }, []);
758
1285
  const safeAreaPadding = useSafeArea();
759
- const contextValue = (0, import_react23.useMemo)(() => ({
1286
+ const contextValue = (0, import_react22.useMemo)(() => ({
760
1287
  tx,
761
1288
  themeMode,
762
1289
  hasIosKeyboard: hasIosKeyboard(),
@@ -768,15 +1295,15 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
768
1295
  safeAreaPadding,
769
1296
  rest
770
1297
  ]);
771
- return /* @__PURE__ */ import_react23.default.createElement(ThemeContext.Provider, {
1298
+ return /* @__PURE__ */ import_react22.default.createElement(ThemeContext.Provider, {
772
1299
  value: contextValue
773
- }, /* @__PURE__ */ import_react23.default.createElement(TranslationsProvider, {
1300
+ }, /* @__PURE__ */ import_react22.default.createElement(TranslationsProvider, {
774
1301
  fallback,
775
1302
  resourceExtensions,
776
1303
  appNs
777
- }, /* @__PURE__ */ import_react23.default.createElement(ElevationProvider, {
1304
+ }, /* @__PURE__ */ import_react22.default.createElement(ElevationProvider, {
778
1305
  elevation: "base"
779
- }, /* @__PURE__ */ import_react23.default.createElement(DensityProvider, {
1306
+ }, /* @__PURE__ */ import_react22.default.createElement(DensityProvider, {
780
1307
  density: rootDensity
781
1308
  }, children))));
782
1309
  };
@@ -792,7 +1319,7 @@ var CopyButton = ({ value, classNames, iconProps, ...props }) => {
792
1319
  const { t } = useTranslation("os");
793
1320
  const { textValue, setTextValue } = useClipboard();
794
1321
  const isCopied = textValue === value;
795
- return /* @__PURE__ */ import_react22.default.createElement(Button, {
1322
+ return /* @__PURE__ */ import_react21.default.createElement(Button, {
796
1323
  ...props,
797
1324
  classNames: [
798
1325
  "inline-flex flex-col justify-center",
@@ -800,70 +1327,59 @@ var CopyButton = ({ value, classNames, iconProps, ...props }) => {
800
1327
  ],
801
1328
  onClick: () => setTextValue(value),
802
1329
  "data-testid": "copy-invitation"
803
- }, /* @__PURE__ */ import_react22.default.createElement("div", {
1330
+ }, /* @__PURE__ */ import_react21.default.createElement("div", {
804
1331
  role: "none",
805
1332
  className: (0, import_react_ui_theme2.mx)("flex gap-1 items-center", isCopied && inactiveLabelStyles)
806
- }, /* @__PURE__ */ import_react22.default.createElement("span", {
1333
+ }, /* @__PURE__ */ import_react21.default.createElement("span", {
807
1334
  className: "pli-1"
808
- }, t("copy label")), /* @__PURE__ */ import_react22.default.createElement(Icon, {
1335
+ }, t("copy label")), /* @__PURE__ */ import_react21.default.createElement(Icon, {
809
1336
  icon: "ph--copy--regular",
810
1337
  size: 5,
811
1338
  ...iconProps
812
- })), /* @__PURE__ */ import_react22.default.createElement("div", {
1339
+ })), /* @__PURE__ */ import_react21.default.createElement("div", {
813
1340
  role: "none",
814
1341
  className: (0, import_react_ui_theme2.mx)("flex gap-1 items-center", !isCopied && inactiveLabelStyles)
815
- }, /* @__PURE__ */ import_react22.default.createElement("span", {
1342
+ }, /* @__PURE__ */ import_react21.default.createElement("span", {
816
1343
  className: "pli-1"
817
- }, t("copy success label")), /* @__PURE__ */ import_react22.default.createElement(Icon, {
1344
+ }, t("copy success label")), /* @__PURE__ */ import_react21.default.createElement(Icon, {
818
1345
  icon: "ph--check--regular",
819
1346
  size: 5,
820
1347
  ...iconProps
821
1348
  })));
822
1349
  };
823
- var CopyButtonIconOnly = ({ value, classNames, iconProps, variant, ...props }) => {
1350
+ var CopyButtonIconOnly = ({ __scopeTooltip, value, classNames, iconProps, variant, ...props }) => {
824
1351
  const { t } = useTranslation("os");
825
1352
  const { textValue, setTextValue } = useClipboard();
826
1353
  const isCopied = textValue === value;
827
1354
  const label = isCopied ? t("copy success label") : props.label ?? t("copy label");
828
- const [open, setOpen] = (0, import_react22.useState)(false);
829
- return /* @__PURE__ */ import_react22.default.createElement(Tooltip.Root, {
830
- delayDuration: 1500,
831
- open,
832
- onOpenChange: setOpen
833
- }, /* @__PURE__ */ import_react22.default.createElement(Tooltip.Portal, null, /* @__PURE__ */ import_react22.default.createElement(Tooltip.Content, {
834
- side: "bottom",
835
- sideOffset: 12
836
- }, /* @__PURE__ */ import_react22.default.createElement("span", null, label), /* @__PURE__ */ import_react22.default.createElement(Tooltip.Arrow, null))), /* @__PURE__ */ import_react22.default.createElement(Tooltip.Trigger, {
837
- "aria-label": label,
838
- ...props,
839
- onClick: () => setTextValue(value).then(() => setOpen(true)),
840
- "data-testid": "copy-invitation",
841
- asChild: true
842
- }, /* @__PURE__ */ import_react22.default.createElement(Button, {
1355
+ const { onOpen } = useTooltipContext("CopyButton", __scopeTooltip);
1356
+ return /* @__PURE__ */ import_react21.default.createElement(IconButton, {
1357
+ iconOnly: true,
1358
+ label,
1359
+ icon: "ph--copy--regular",
1360
+ size: 5,
843
1361
  variant,
844
1362
  classNames: [
845
1363
  "inline-flex flex-col justify-center",
846
1364
  classNames
847
- ]
848
- }, /* @__PURE__ */ import_react22.default.createElement(Icon, {
849
- icon: "ph--copy--regular",
850
- size: 5,
851
- ...iconProps
852
- }))));
1365
+ ],
1366
+ onClick: () => setTextValue(value).then(onOpen),
1367
+ "data-testid": "copy-invitation"
1368
+ });
853
1369
  };
854
1370
  var Clipboard = {
855
1371
  Button: CopyButton,
856
1372
  IconButton: CopyButtonIconOnly,
857
1373
  Provider: ClipboardProvider
858
1374
  };
859
- var DialogRoot = (props) => /* @__PURE__ */ import_react26.default.createElement(ElevationProvider, {
1375
+ var DialogRoot = (props) => /* @__PURE__ */ import_react25.default.createElement(ElevationProvider, {
860
1376
  elevation: "dialog"
861
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.Root, props));
1377
+ }, /* @__PURE__ */ import_react25.default.createElement(import_react_dialog.Root, props));
862
1378
  var DialogTrigger = import_react_dialog.DialogTrigger;
863
1379
  var DialogPortal = import_react_dialog.DialogPortal;
864
- var DialogTitle = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
1380
+ var DialogTitle = /* @__PURE__ */ (0, import_react25.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
865
1381
  const { tx } = useThemeContext();
866
- return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogTitle, {
1382
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_dialog.DialogTitle, {
867
1383
  ...props,
868
1384
  className: tx("dialog.title", "dialog__title", {
869
1385
  srOnly
@@ -871,9 +1387,9 @@ var DialogTitle = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames,
871
1387
  ref: forwardedRef
872
1388
  });
873
1389
  });
874
- var DialogDescription = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
1390
+ var DialogDescription = /* @__PURE__ */ (0, import_react25.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
875
1391
  const { tx } = useThemeContext();
876
- return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogDescription, {
1392
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_dialog.DialogDescription, {
877
1393
  ...props,
878
1394
  className: tx("dialog.description", "dialog__description", {
879
1395
  srOnly
@@ -884,26 +1400,25 @@ var DialogDescription = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classN
884
1400
  var DialogClose = import_react_dialog.DialogClose;
885
1401
  var DIALOG_OVERLAY_NAME = "DialogOverlay";
886
1402
  var DIALOG_CONTENT_NAME = "DialogContent";
887
- var [OverlayLayoutProvider, useOverlayLayoutContext] = (0, import_react_context3.createContext)(DIALOG_OVERLAY_NAME, {
888
- inOverlayLayout: false
889
- });
890
- var DialogOverlay = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
1403
+ var [OverlayLayoutProvider, useOverlayLayoutContext] = (0, import_react_context4.createContext)(DIALOG_OVERLAY_NAME, {});
1404
+ var DialogOverlay = /* @__PURE__ */ (0, import_react25.forwardRef)(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
891
1405
  const { tx } = useThemeContext();
892
- return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogOverlay, {
1406
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_dialog.DialogOverlay, {
893
1407
  ...props,
894
1408
  className: tx("dialog.overlay", "dialog__overlay", {}, classNames),
895
1409
  ref: forwardedRef,
896
1410
  "data-block-align": blockAlign
897
- }, /* @__PURE__ */ import_react26.default.createElement(OverlayLayoutProvider, {
1411
+ }, /* @__PURE__ */ import_react25.default.createElement(OverlayLayoutProvider, {
898
1412
  inOverlayLayout: true
899
1413
  }, children));
900
1414
  });
901
1415
  DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
902
- var DialogContent = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, children, inOverlayLayout: propsInOverlayLayout, ...props }, forwardedRef) => {
1416
+ var DialogContent = /* @__PURE__ */ (0, import_react25.forwardRef)(({ classNames, children, inOverlayLayout: propsInOverlayLayout, ...props }, forwardedRef) => {
903
1417
  const { tx } = useThemeContext();
904
- const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
905
- return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogContent, {
906
- "aria-describedby": void 0,
1418
+ const { inOverlayLayout, descriptionId } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
1419
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_dialog.DialogContent, {
1420
+ // NOTE: Radix warning unless set.
1421
+ "aria-describedby": descriptionId ?? "unknown",
907
1422
  ...props,
908
1423
  className: tx("dialog.content", "dialog", {
909
1424
  inOverlayLayout: propsInOverlayLayout || inOverlayLayout
@@ -922,16 +1437,16 @@ var Dialog = {
922
1437
  Description: DialogDescription,
923
1438
  Close: DialogClose
924
1439
  };
925
- var AlertDialogRoot = (props) => /* @__PURE__ */ import_react27.default.createElement(ElevationProvider, {
1440
+ var AlertDialogRoot = (props) => /* @__PURE__ */ import_react26.default.createElement(ElevationProvider, {
926
1441
  elevation: "dialog"
927
- }, /* @__PURE__ */ import_react27.default.createElement(import_react_alert_dialog.Root, props));
1442
+ }, /* @__PURE__ */ import_react26.default.createElement(import_react_alert_dialog.Root, props));
928
1443
  var AlertDialogTrigger = import_react_alert_dialog.AlertDialogTrigger;
929
1444
  var AlertDialogPortal = import_react_alert_dialog.AlertDialogPortal;
930
1445
  var AlertDialogCancel = import_react_alert_dialog.AlertDialogCancel;
931
1446
  var AlertDialogAction = import_react_alert_dialog.AlertDialogAction;
932
- var AlertDialogTitle = /* @__PURE__ */ (0, import_react27.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
1447
+ var AlertDialogTitle = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
933
1448
  const { tx } = useThemeContext();
934
- return /* @__PURE__ */ import_react27.default.createElement(import_react_alert_dialog.AlertDialogTitle, {
1449
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_alert_dialog.AlertDialogTitle, {
935
1450
  ...props,
936
1451
  className: tx("dialog.title", "dialog--alert__title", {
937
1452
  srOnly
@@ -939,9 +1454,9 @@ var AlertDialogTitle = /* @__PURE__ */ (0, import_react27.forwardRef)(({ classNa
939
1454
  ref: forwardedRef
940
1455
  });
941
1456
  });
942
- var AlertDialogDescription = /* @__PURE__ */ (0, import_react27.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
1457
+ var AlertDialogDescription = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, srOnly, ...props }, forwardedRef) => {
943
1458
  const { tx } = useThemeContext();
944
- return /* @__PURE__ */ import_react27.default.createElement(import_react_alert_dialog.AlertDialogDescription, {
1459
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_alert_dialog.AlertDialogDescription, {
945
1460
  ...props,
946
1461
  className: tx("dialog.description", "dialog--alert__description", {
947
1462
  srOnly
@@ -951,25 +1466,25 @@ var AlertDialogDescription = /* @__PURE__ */ (0, import_react27.forwardRef)(({ c
951
1466
  });
952
1467
  var ALERT_DIALOG_OVERLAY_NAME = "AlertDialogOverlay";
953
1468
  var ALERT_DIALOG_CONTENT_NAME = "AlertDialogContent";
954
- var [OverlayLayoutProvider2, useOverlayLayoutContext2] = (0, import_react_context4.createContext)(ALERT_DIALOG_OVERLAY_NAME, {
1469
+ var [OverlayLayoutProvider2, useOverlayLayoutContext2] = (0, import_react_context5.createContext)(ALERT_DIALOG_OVERLAY_NAME, {
955
1470
  inOverlayLayout: false
956
1471
  });
957
- var AlertDialogOverlay = /* @__PURE__ */ (0, import_react27.forwardRef)(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
1472
+ var AlertDialogOverlay = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
958
1473
  const { tx } = useThemeContext();
959
- return /* @__PURE__ */ import_react27.default.createElement(import_react_alert_dialog.AlertDialogOverlay, {
1474
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_alert_dialog.AlertDialogOverlay, {
960
1475
  ...props,
961
1476
  className: tx("dialog.overlay", "dialog--alert__overlay", {}, classNames, "data-[block-align=start]:justify-center", "data-[block-align=start]:items-start", "data-[block-align=center]:place-content-center"),
962
1477
  ref: forwardedRef,
963
1478
  "data-block-align": blockAlign
964
- }, /* @__PURE__ */ import_react27.default.createElement(OverlayLayoutProvider2, {
1479
+ }, /* @__PURE__ */ import_react26.default.createElement(OverlayLayoutProvider2, {
965
1480
  inOverlayLayout: true
966
1481
  }, children));
967
1482
  });
968
1483
  AlertDialogOverlay.displayName = ALERT_DIALOG_OVERLAY_NAME;
969
- var AlertDialogContent = /* @__PURE__ */ (0, import_react27.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1484
+ var AlertDialogContent = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
970
1485
  const { tx } = useThemeContext();
971
1486
  const { inOverlayLayout } = useOverlayLayoutContext2(ALERT_DIALOG_CONTENT_NAME);
972
- return /* @__PURE__ */ import_react27.default.createElement(import_react_alert_dialog.AlertDialogContent, {
1487
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_alert_dialog.AlertDialogContent, {
973
1488
  ...props,
974
1489
  className: tx("dialog.content", "dialog--alert", {
975
1490
  inOverlayLayout
@@ -989,1256 +1504,1273 @@ var AlertDialog = {
989
1504
  Cancel: AlertDialogCancel,
990
1505
  Action: AlertDialogAction
991
1506
  };
992
- var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
993
- var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
994
- var ContextMenuPortal = ContextMenuPrimitive.Portal;
995
- var ContextMenuContent = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
1507
+ var Label = /* @__PURE__ */ (0, import_react27.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
996
1508
  const { tx } = useThemeContext();
997
- const elevation = useElevationContext();
998
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
999
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Content, {
1509
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.Label, {
1000
1510
  ...props,
1001
- collisionPadding: safeCollisionPadding,
1002
- className: tx("menu.content", "menu", {
1003
- elevation
1511
+ className: tx("input.label", "input__label", {
1512
+ srOnly
1004
1513
  }, classNames),
1005
1514
  ref: forwardedRef
1006
1515
  }, children);
1007
1516
  });
1008
- var ContextMenuViewport = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1517
+ var Description = /* @__PURE__ */ (0, import_react27.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1009
1518
  const { tx } = useThemeContext();
1010
- const Root5 = asChild ? import_react_slot6.Slot : import_react_primitive6.Primitive.div;
1011
- return /* @__PURE__ */ import_react28.default.createElement(Root5, {
1519
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.Description, {
1012
1520
  ...props,
1013
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1521
+ className: tx("input.description", "input__description", {
1522
+ srOnly
1523
+ }, classNames),
1014
1524
  ref: forwardedRef
1015
1525
  }, children);
1016
1526
  });
1017
- var ContextMenuArrow = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1527
+ var Validation = /* @__PURE__ */ (0, import_react27.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1018
1528
  const { tx } = useThemeContext();
1019
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Arrow, {
1529
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1530
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.Validation, {
1020
1531
  ...props,
1021
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1532
+ className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1533
+ srOnly,
1534
+ validationValence
1535
+ }, classNames),
1022
1536
  ref: forwardedRef
1023
- });
1537
+ }, children);
1024
1538
  });
1025
- var ContextMenuGroup = ContextMenuPrimitive.Group;
1026
- var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1027
- var ContextMenuItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1539
+ var DescriptionAndValidation = /* @__PURE__ */ (0, import_react27.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1028
1540
  const { tx } = useThemeContext();
1029
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Item, {
1541
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.DescriptionAndValidation, {
1030
1542
  ...props,
1031
- className: tx("menu.item", "menu__item", {}, classNames),
1543
+ className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1544
+ srOnly
1545
+ }, classNames),
1032
1546
  ref: forwardedRef
1033
- });
1547
+ }, children);
1034
1548
  });
1035
- var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1549
+ var PinInput = /* @__PURE__ */ (0, import_react27.forwardRef)(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1550
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1036
1551
  const { tx } = useThemeContext();
1037
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.CheckboxItem, {
1552
+ const density = useDensityContext(propsDensity);
1553
+ const elevation = useElevationContext(propsElevation);
1554
+ const segmentClassName = (0, import_react27.useCallback)(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1555
+ variant: "static",
1556
+ focused,
1557
+ disabled: props.disabled,
1558
+ density,
1559
+ elevation,
1560
+ validationValence
1561
+ }, propsSegmentClassName), [
1562
+ tx,
1563
+ props.disabled,
1564
+ elevation,
1565
+ propsElevation,
1566
+ density
1567
+ ]);
1568
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.PinInput, {
1038
1569
  ...props,
1039
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1570
+ segmentClassName,
1571
+ ...props.autoFocus && !hasIosKeyboard2 && {
1572
+ autoFocus: true
1573
+ },
1574
+ inputClassName: tx("input.inputWithSegments", "input input--pin", {
1575
+ disabled: props.disabled
1576
+ }, inputClassName),
1040
1577
  ref: forwardedRef
1041
1578
  });
1042
1579
  });
1043
- var ContextMenuSeparator = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1044
- const { tx } = useThemeContext();
1045
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Separator, {
1580
+ var TextInput = /* @__PURE__ */ (0, import_react27.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1581
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1582
+ const themeContextValue = useThemeContext();
1583
+ const density = useDensityContext(propsDensity);
1584
+ const elevation = useElevationContext(propsElevation);
1585
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1586
+ const { tx } = themeContextValue;
1587
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.TextInput, {
1046
1588
  ...props,
1047
- className: tx("menu.separator", "menu__item", {}, classNames),
1589
+ className: tx("input.input", "input", {
1590
+ variant,
1591
+ disabled: props.disabled,
1592
+ density,
1593
+ elevation,
1594
+ validationValence
1595
+ }, classNames),
1596
+ ...props.autoFocus && !hasIosKeyboard2 && {
1597
+ autoFocus: true
1598
+ },
1048
1599
  ref: forwardedRef
1049
1600
  });
1050
1601
  });
1051
- var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1602
+ var TextArea = /* @__PURE__ */ (0, import_react27.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1603
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1052
1604
  const { tx } = useThemeContext();
1053
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Label, {
1605
+ const density = useDensityContext(propsDensity);
1606
+ const elevation = useElevationContext(propsElevation);
1607
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1608
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_input.TextArea, {
1054
1609
  ...props,
1055
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1610
+ className: tx("input.input", "input--text-area", {
1611
+ variant,
1612
+ disabled: props.disabled,
1613
+ density,
1614
+ elevation,
1615
+ validationValence
1616
+ }, classNames),
1617
+ ...props.autoFocus && !hasIosKeyboard2 && {
1618
+ autoFocus: true
1619
+ },
1056
1620
  ref: forwardedRef
1057
1621
  });
1058
1622
  });
1059
- var ContextMenu2 = {
1060
- Root: ContextMenuRoot,
1061
- Trigger: ContextMenuTrigger,
1062
- Portal: ContextMenuPortal,
1063
- Content: ContextMenuContent,
1064
- Viewport: ContextMenuViewport,
1065
- Arrow: ContextMenuArrow,
1066
- Group: ContextMenuGroup,
1067
- Item: ContextMenuItem,
1068
- CheckboxItem: ContextMenuCheckboxItem,
1069
- ItemIndicator: ContextMenuItemIndicator,
1070
- Separator: ContextMenuSeparator,
1071
- GroupLabel: ContextMenuGroupLabel
1072
- };
1073
- var DROPDOWN_MENU_NAME = "DropdownMenu";
1074
- var [createDropdownMenuContext, createDropdownMenuScope] = (0, import_react_context5.createContextScope)(DROPDOWN_MENU_NAME, [
1075
- import_react_menu.createMenuScope
1076
- ]);
1077
- var useMenuScope = (0, import_react_menu.createMenuScope)();
1078
- var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
1079
- var DropdownMenuRoot = (props) => {
1080
- const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
1081
- const menuScope = useMenuScope(__scopeDropdownMenu);
1082
- const triggerRef = (0, import_react29.useRef)(null);
1083
- const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
1084
- prop: openProp,
1085
- defaultProp: defaultOpen,
1086
- onChange: onOpenChange
1623
+ var Checkbox = /* @__PURE__ */ (0, import_react27.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1624
+ const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1625
+ prop: propsChecked,
1626
+ defaultProp: propsDefaultChecked,
1627
+ onChange: propsOnCheckedChange
1087
1628
  });
1088
- return /* @__PURE__ */ import_react29.default.createElement(DropdownMenuProvider, {
1089
- scope: __scopeDropdownMenu,
1090
- triggerId: (0, import_react_id.useId)(),
1091
- triggerRef,
1092
- contentId: (0, import_react_id.useId)(),
1093
- open,
1094
- onOpenChange: setOpen,
1095
- onOpenToggle: (0, import_react29.useCallback)(() => setOpen((prevOpen) => !prevOpen), [
1096
- setOpen
1097
- ]),
1098
- modal
1099
- }, /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Root, {
1100
- ...menuScope,
1101
- open,
1102
- onOpenChange: setOpen,
1103
- dir,
1104
- modal
1105
- }, children));
1106
- };
1107
- DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
1108
- var TRIGGER_NAME = "DropdownMenuTrigger";
1109
- var DropdownMenuTrigger = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1110
- const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1111
- const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
1112
- const menuScope = useMenuScope(__scopeDropdownMenu);
1113
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Anchor, {
1114
- asChild: true,
1115
- ...menuScope
1116
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_primitive7.Primitive.button, {
1117
- type: "button",
1118
- id: context.triggerId,
1119
- "aria-haspopup": "menu",
1120
- "aria-expanded": context.open,
1121
- "aria-controls": context.open ? context.contentId : void 0,
1122
- "data-state": context.open ? "open" : "closed",
1123
- "data-disabled": disabled ? "" : void 0,
1124
- disabled,
1125
- ...triggerProps,
1126
- ref: (0, import_react_compose_refs.composeRefs)(forwardedRef, context.triggerRef),
1127
- onPointerDown: (0, import_primitive.composeEventHandlers)(props.onPointerDown, (event) => {
1128
- if (!disabled && event.button === 0 && event.ctrlKey === false) {
1129
- context.onOpenToggle();
1130
- if (!context.open) {
1131
- event.preventDefault();
1132
- }
1133
- }
1134
- }),
1135
- onKeyDown: (0, import_primitive.composeEventHandlers)(props.onKeyDown, (event) => {
1136
- if (disabled) {
1137
- return;
1138
- }
1139
- if ([
1140
- "Enter",
1141
- " "
1142
- ].includes(event.key)) {
1143
- context.onOpenToggle();
1144
- }
1145
- if (event.key === "ArrowDown") {
1146
- context.onOpenChange(true);
1147
- }
1148
- if ([
1149
- "Enter",
1150
- " ",
1151
- "ArrowDown"
1152
- ].includes(event.key)) {
1153
- event.preventDefault();
1154
- }
1629
+ const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1630
+ const { tx } = useThemeContext();
1631
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_checkbox.Root, {
1632
+ ...props,
1633
+ checked,
1634
+ onCheckedChange,
1635
+ id,
1636
+ "aria-describedby": descriptionId,
1637
+ ...validationValence === "error" && {
1638
+ "aria-invalid": "true",
1639
+ "aria-errormessage": errorMessageId
1640
+ },
1641
+ className: tx("input.checkbox", "input--checkbox", {
1642
+ size
1643
+ }, "shrink-0", classNames),
1644
+ ref: forwardedRef
1645
+ }, /* @__PURE__ */ import_react27.default.createElement(Icon, {
1646
+ icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1647
+ classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1648
+ size,
1649
+ checked
1155
1650
  })
1156
1651
  }));
1157
1652
  });
1158
- DropdownMenuTrigger.displayName = TRIGGER_NAME;
1159
- var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
1160
- var DropdownMenuVirtualTrigger = (props) => {
1161
- const { __scopeDropdownMenu, virtualRef } = props;
1162
- const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
1163
- const menuScope = useMenuScope(__scopeDropdownMenu);
1164
- (0, import_react29.useEffect)(() => {
1165
- if (virtualRef.current) {
1166
- context.triggerRef.current = virtualRef.current;
1167
- }
1653
+ var Switch = /* @__PURE__ */ (0, import_react27.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1654
+ const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1655
+ prop: propsChecked,
1656
+ defaultProp: propsDefaultChecked ?? false,
1657
+ onChange: propsOnCheckedChange
1168
1658
  });
1169
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Anchor, {
1170
- ...menuScope,
1171
- virtualRef
1659
+ const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1660
+ return /* @__PURE__ */ import_react27.default.createElement("input", {
1661
+ type: "checkbox",
1662
+ className: (0, import_react_ui_theme3.mx)("dx-checkbox--switch dx-focus-ring", classNames),
1663
+ checked,
1664
+ onChange: (event) => {
1665
+ onCheckedChange(event.target.checked);
1666
+ },
1667
+ id,
1668
+ "aria-describedby": descriptionId,
1669
+ ...props,
1670
+ ...validationValence === "error" && {
1671
+ "aria-invalid": "true",
1672
+ "aria-errormessage": errorMessageId
1673
+ },
1674
+ ref: forwardedRef
1172
1675
  });
1676
+ });
1677
+ var Input = {
1678
+ Root: import_react_input.InputRoot,
1679
+ PinInput,
1680
+ TextInput,
1681
+ TextArea,
1682
+ Checkbox,
1683
+ Switch,
1684
+ Label,
1685
+ Description,
1686
+ Validation,
1687
+ DescriptionAndValidation
1173
1688
  };
1174
- DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
1175
- var PORTAL_NAME = "DropdownMenuPortal";
1176
- var DropdownMenuPortal = (props) => {
1177
- const { __scopeDropdownMenu, ...portalProps } = props;
1178
- const menuScope = useMenuScope(__scopeDropdownMenu);
1179
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Portal, {
1180
- ...menuScope,
1181
- ...portalProps
1689
+ var edgeToOrientationMap = {
1690
+ top: "horizontal",
1691
+ bottom: "horizontal",
1692
+ left: "vertical",
1693
+ right: "vertical"
1694
+ };
1695
+ var orientationStyles = {
1696
+ horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1697
+ vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1698
+ };
1699
+ var edgeStyles = {
1700
+ top: "top-[--line-offset] before:top-[--offset-terminal]",
1701
+ right: "right-[--line-offset] before:right-[--offset-terminal]",
1702
+ bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1703
+ left: "left-[--line-offset] before:left-[--offset-terminal]"
1704
+ };
1705
+ var strokeSize = 2;
1706
+ var terminalSize = 8;
1707
+ var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1708
+ var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1709
+ const orientation = edgeToOrientationMap[edge];
1710
+ return /* @__PURE__ */ import_react30.default.createElement("div", {
1711
+ role: "none",
1712
+ style: {
1713
+ "--line-thickness": `${strokeSize}px`,
1714
+ "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1715
+ "--line-inset": `${lineInset}px`,
1716
+ "--terminal-size": `${terminalSize}px`,
1717
+ "--terminal-radius": `${terminalSize / 2}px`,
1718
+ "--terminal-inset": `${terminalInset}px`,
1719
+ "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1720
+ },
1721
+ 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]}`
1182
1722
  });
1183
1723
  };
1184
- DropdownMenuPortal.displayName = PORTAL_NAME;
1185
- var DropdownMenuViewport = /* @__PURE__ */ (0, import_react29.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1724
+ var List = /* @__PURE__ */ (0, import_react29.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1186
1725
  const { tx } = useThemeContext();
1187
- const Root5 = asChild ? import_react_slot7.Slot : import_react_primitive7.Primitive.div;
1188
- return /* @__PURE__ */ import_react29.default.createElement(Root5, {
1726
+ const density = useDensityContext(props.density);
1727
+ return /* @__PURE__ */ import_react29.default.createElement(DensityProvider, {
1728
+ density
1729
+ }, /* @__PURE__ */ import_react29.default.createElement(import_react_list.List, {
1189
1730
  ...props,
1190
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1731
+ className: tx("list.root", "list", {}, classNames),
1191
1732
  ref: forwardedRef
1192
- }, children);
1733
+ }, children));
1193
1734
  });
1194
- var CONTENT_NAME = "DropdownMenuContent";
1195
- var DropdownMenuContent = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1196
- const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
1735
+ var ListItemEndcap = /* @__PURE__ */ (0, import_react29.forwardRef)(({ children, classNames, asChild, ...props }, forwardedRef) => {
1736
+ const Root7 = asChild ? import_react_slot7.Slot : "div";
1737
+ const density = useDensityContext();
1197
1738
  const { tx } = useThemeContext();
1198
- const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
1199
- const elevation = useElevationContext();
1200
- const menuScope = useMenuScope(__scopeDropdownMenu);
1201
- const hasInteractedOutsideRef = (0, import_react29.useRef)(false);
1202
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1203
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Content, {
1204
- id: context.contentId,
1205
- "aria-labelledby": context.triggerId,
1206
- ...menuScope,
1207
- ...contentProps,
1208
- collisionPadding: safeCollisionPadding,
1209
- ref: forwardedRef,
1210
- onCloseAutoFocus: (0, import_primitive.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
1211
- if (!hasInteractedOutsideRef.current) {
1212
- context.triggerRef.current?.focus();
1213
- }
1214
- hasInteractedOutsideRef.current = false;
1215
- event.preventDefault();
1216
- }),
1217
- onInteractOutside: (0, import_primitive.composeEventHandlers)(props.onInteractOutside, (event) => {
1218
- const originalEvent = event.detail.originalEvent;
1219
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
1220
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
1221
- if (!context.modal || isRightClick) {
1222
- hasInteractedOutsideRef.current = true;
1223
- }
1224
- }),
1225
- className: tx("menu.content", "menu", {
1226
- elevation
1739
+ return /* @__PURE__ */ import_react29.default.createElement(Root7, {
1740
+ ...!asChild && {
1741
+ role: "none"
1742
+ },
1743
+ ...props,
1744
+ className: tx("list.item.endcap", "list__listItem__endcap", {
1745
+ density
1227
1746
  }, classNames),
1228
- style: {
1229
- ...props.style,
1230
- // re-namespace exposed content custom properties
1231
- ...{
1232
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1233
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1234
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1235
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1236
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1237
- }
1238
- }
1239
- });
1240
- });
1241
- DropdownMenuContent.displayName = CONTENT_NAME;
1242
- var GROUP_NAME = "DropdownMenuGroup";
1243
- var DropdownMenuGroup = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1244
- const { __scopeDropdownMenu, ...groupProps } = props;
1245
- const menuScope = useMenuScope(__scopeDropdownMenu);
1246
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Group, {
1247
- ...menuScope,
1248
- ...groupProps,
1249
1747
  ref: forwardedRef
1250
- });
1748
+ }, children);
1251
1749
  });
1252
- DropdownMenuGroup.displayName = GROUP_NAME;
1253
- var LABEL_NAME = "DropdownMenuLabel";
1254
- var DropdownMenuGroupLabel = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1255
- const { __scopeDropdownMenu, classNames, ...labelProps } = props;
1256
- const menuScope = useMenuScope(__scopeDropdownMenu);
1750
+ var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1751
+ const density = useDensityContext();
1257
1752
  const { tx } = useThemeContext();
1258
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Label, {
1259
- ...menuScope,
1260
- ...labelProps,
1261
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1262
- ref: forwardedRef
1753
+ return /* @__PURE__ */ import_react29.default.createElement("div", {
1754
+ role: "none",
1755
+ ...props,
1756
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1757
+ density
1758
+ }, classNames)
1263
1759
  });
1264
- });
1265
- DropdownMenuGroupLabel.displayName = LABEL_NAME;
1266
- var ITEM_NAME = "DropdownMenuItem";
1267
- var DropdownMenuItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1268
- const { __scopeDropdownMenu, classNames, ...itemProps } = props;
1269
- const menuScope = useMenuScope(__scopeDropdownMenu);
1760
+ };
1761
+ var ListItemHeading = /* @__PURE__ */ (0, import_react29.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
1270
1762
  const { tx } = useThemeContext();
1271
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Item, {
1272
- ...menuScope,
1273
- ...itemProps,
1274
- className: tx("menu.item", "menu__item", {}, classNames),
1763
+ const density = useDensityContext();
1764
+ return /* @__PURE__ */ import_react29.default.createElement(import_react_list.ListItemHeading, {
1765
+ ...props,
1766
+ className: tx("list.item.heading", "list__listItem__heading", {
1767
+ density
1768
+ }, classNames),
1275
1769
  ref: forwardedRef
1276
- });
1770
+ }, children);
1277
1771
  });
1278
- DropdownMenuItem.displayName = ITEM_NAME;
1279
- var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
1280
- var DropdownMenuCheckboxItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1281
- const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
1282
- const menuScope = useMenuScope(__scopeDropdownMenu);
1772
+ var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react29.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1283
1773
  const { tx } = useThemeContext();
1284
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.CheckboxItem, {
1285
- ...menuScope,
1286
- ...checkboxItemProps,
1287
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1288
- ref: forwardedRef
1289
- });
1290
- });
1291
- DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
1292
- var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
1293
- var DropdownMenuRadioGroup = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1294
- const { __scopeDropdownMenu, ...radioGroupProps } = props;
1295
- const menuScope = useMenuScope(__scopeDropdownMenu);
1296
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.RadioGroup, {
1297
- ...menuScope,
1298
- ...radioGroupProps,
1774
+ const density = useDensityContext();
1775
+ const { open } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listItemScope);
1776
+ const Icon3 = open ? import_react28.CaretDown : import_react28.CaretRight;
1777
+ return /* @__PURE__ */ import_react29.default.createElement(import_react_list.ListItemOpenTrigger, {
1778
+ ...props,
1779
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1780
+ density
1781
+ }, classNames),
1299
1782
  ref: forwardedRef
1300
- });
1783
+ }, children || /* @__PURE__ */ import_react29.default.createElement(Icon3, {
1784
+ weight: "bold",
1785
+ className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1786
+ }));
1301
1787
  });
1302
- DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
1303
- var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
1304
- var DropdownMenuRadioItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1305
- const { __scopeDropdownMenu, ...radioItemProps } = props;
1306
- const menuScope = useMenuScope(__scopeDropdownMenu);
1307
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.RadioItem, {
1308
- ...menuScope,
1309
- ...radioItemProps,
1788
+ var ListItemRoot = /* @__PURE__ */ (0, import_react29.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1789
+ const { tx } = useThemeContext();
1790
+ const density = useDensityContext();
1791
+ return /* @__PURE__ */ import_react29.default.createElement(import_react_list.ListItem, {
1792
+ ...props,
1793
+ className: tx("list.item.root", "list__listItem", {
1794
+ density,
1795
+ collapsible: props.collapsible
1796
+ }, classNames),
1310
1797
  ref: forwardedRef
1311
- });
1798
+ }, children);
1312
1799
  });
1313
- DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
1314
- var INDICATOR_NAME = "DropdownMenuItemIndicator";
1315
- var DropdownMenuItemIndicator = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1316
- const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
1317
- const menuScope = useMenuScope(__scopeDropdownMenu);
1318
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.ItemIndicator, {
1319
- ...menuScope,
1320
- ...itemIndicatorProps,
1321
- ref: forwardedRef
1800
+ var ListItem = {
1801
+ Root: ListItemRoot,
1802
+ Endcap: ListItemEndcap,
1803
+ Heading: ListItemHeading,
1804
+ OpenTrigger: ListItemOpenTrigger,
1805
+ CollapsibleContent: import_react_list.ListItemCollapsibleContent,
1806
+ MockOpenTrigger: MockListItemOpenTrigger,
1807
+ DropIndicator: ListDropIndicator
1808
+ };
1809
+ var edgeToOrientationMap2 = {
1810
+ "reorder-above": "sibling",
1811
+ "reorder-below": "sibling",
1812
+ "make-child": "child",
1813
+ reparent: "child"
1814
+ };
1815
+ var orientationStyles2 = {
1816
+ // TODO(wittjosiah): Stop using left/right here.
1817
+ sibling: "bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]",
1818
+ child: "is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible"
1819
+ };
1820
+ var instructionStyles = {
1821
+ "reorder-above": "block-start-[--line-offset] before:block-start-[--offset-terminal]",
1822
+ "reorder-below": "block-end-[--line-offset] before:block-end-[--offset-terminal]",
1823
+ "make-child": "border-accentSurface",
1824
+ // TODO(wittjosiah): This is not occurring in the current implementation.
1825
+ reparent: ""
1826
+ };
1827
+ var strokeSize2 = 2;
1828
+ var terminalSize2 = 8;
1829
+ var offsetToAlignTerminalWithLine2 = (strokeSize2 - terminalSize2) / 2;
1830
+ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1831
+ const lineOffset = `calc(-0.5 * (${gap}px + ${strokeSize2}px))`;
1832
+ const isBlocked = instruction.type === "instruction-blocked";
1833
+ const desiredInstruction = isBlocked ? instruction.desired : instruction;
1834
+ const orientation = edgeToOrientationMap2[desiredInstruction.type];
1835
+ if (isBlocked) {
1836
+ return null;
1837
+ }
1838
+ return /* @__PURE__ */ import_react32.default.createElement("div", {
1839
+ style: {
1840
+ "--line-thickness": `${strokeSize2}px`,
1841
+ "--line-offset": `${lineOffset}`,
1842
+ "--terminal-size": `${terminalSize2}px`,
1843
+ "--terminal-radius": `${terminalSize2 / 2}px`,
1844
+ "--negative-terminal-size": `-${terminalSize2}px`,
1845
+ "--offset-terminal": `${offsetToAlignTerminalWithLine2}px`,
1846
+ "--horizontal-indent": `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`
1847
+ },
1848
+ className: `absolute z-10 pointer-events-none before:is-[--terminal-size] before:bs-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles2[orientation]} ${instructionStyles[desiredInstruction.type]}`
1322
1849
  });
1323
- });
1324
- DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
1325
- var SEPARATOR_NAME = "DropdownMenuSeparator";
1326
- var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1327
- const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
1328
- const menuScope = useMenuScope(__scopeDropdownMenu);
1329
- const { tx } = useThemeContext();
1330
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Separator, {
1331
- ...menuScope,
1332
- ...separatorProps,
1333
- className: tx("menu.separator", "menu__item", {}, classNames),
1850
+ };
1851
+ var TreeRoot = /* @__PURE__ */ (0, import_react31.forwardRef)((props, forwardedRef) => {
1852
+ return /* @__PURE__ */ import_react31.default.createElement(List, {
1853
+ ...props,
1334
1854
  ref: forwardedRef
1335
1855
  });
1336
1856
  });
1337
- DropdownMenuSeparator.displayName = SEPARATOR_NAME;
1338
- var ARROW_NAME = "DropdownMenuArrow";
1339
- var DropdownMenuArrow = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1340
- const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
1341
- const menuScope = useMenuScope(__scopeDropdownMenu);
1342
- const { tx } = useThemeContext();
1343
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Arrow, {
1344
- ...menuScope,
1345
- ...arrowProps,
1346
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1857
+ var TreeBranch = /* @__PURE__ */ (0, import_react31.forwardRef)(({ __listScope, ...props }, forwardedRef) => {
1858
+ const { headingId } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listScope);
1859
+ return /* @__PURE__ */ import_react31.default.createElement(List, {
1860
+ ...props,
1861
+ "aria-labelledby": headingId,
1347
1862
  ref: forwardedRef
1348
1863
  });
1349
1864
  });
1350
- DropdownMenuArrow.displayName = ARROW_NAME;
1351
- var DropdownMenuSub = (props) => {
1352
- const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
1353
- const menuScope = useMenuScope(__scopeDropdownMenu);
1354
- const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
1355
- prop: openProp,
1356
- defaultProp: defaultOpen,
1357
- onChange: onOpenChange
1358
- });
1359
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Sub, {
1360
- ...menuScope,
1361
- open,
1362
- onOpenChange: setOpen
1363
- }, children);
1364
- };
1365
- var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
1366
- var DropdownMenuSubTrigger = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1367
- const { __scopeDropdownMenu, ...subTriggerProps } = props;
1368
- const menuScope = useMenuScope(__scopeDropdownMenu);
1369
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.SubTrigger, {
1370
- ...menuScope,
1371
- ...subTriggerProps,
1865
+ var TreeItemRoot = /* @__PURE__ */ (0, import_react31.forwardRef)((props, forwardedRef) => {
1866
+ return /* @__PURE__ */ import_react31.default.createElement(ListItem.Root, {
1867
+ role: "treeitem",
1868
+ ...props,
1372
1869
  ref: forwardedRef
1373
1870
  });
1374
1871
  });
1375
- DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
1376
- var SUB_CONTENT_NAME = "DropdownMenuSubContent";
1377
- var DropdownMenuSubContent = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1378
- const { __scopeDropdownMenu, ...subContentProps } = props;
1379
- const menuScope = useMenuScope(__scopeDropdownMenu);
1380
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.SubContent, {
1381
- ...menuScope,
1382
- ...subContentProps,
1383
- ref: forwardedRef,
1384
- style: {
1385
- ...props.style,
1386
- // re-namespace exposed content custom properties
1387
- ...{
1388
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1389
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1390
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1391
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1392
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1393
- }
1394
- }
1395
- });
1396
- });
1397
- DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
1398
- var DropdownMenu = {
1399
- Root: DropdownMenuRoot,
1400
- Trigger: DropdownMenuTrigger,
1401
- VirtualTrigger: DropdownMenuVirtualTrigger,
1402
- Portal: DropdownMenuPortal,
1403
- Content: DropdownMenuContent,
1404
- Viewport: DropdownMenuViewport,
1405
- Group: DropdownMenuGroup,
1406
- GroupLabel: DropdownMenuGroupLabel,
1407
- Item: DropdownMenuItem,
1408
- CheckboxItem: DropdownMenuCheckboxItem,
1409
- RadioGroup: DropdownMenuRadioGroup,
1410
- RadioItem: DropdownMenuRadioItem,
1411
- ItemIndicator: DropdownMenuItemIndicator,
1412
- Separator: DropdownMenuSeparator,
1413
- Arrow: DropdownMenuArrow,
1414
- Sub: DropdownMenuSub,
1415
- SubTrigger: DropdownMenuSubTrigger,
1416
- SubContent: DropdownMenuSubContent
1872
+ var TreeItemHeading = ListItem.Heading;
1873
+ var TreeItemOpenTrigger = ListItem.OpenTrigger;
1874
+ var MockTreeItemOpenTrigger = ListItem.MockOpenTrigger;
1875
+ var TreeItemBody = ListItem.CollapsibleContent;
1876
+ var Tree = {
1877
+ Root: TreeRoot,
1878
+ Branch: TreeBranch
1417
1879
  };
1418
- var useDropdownMenuMenuScope = useMenuScope;
1419
- var Label3 = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1880
+ var TreeItem = {
1881
+ Root: TreeItemRoot,
1882
+ Heading: TreeItemHeading,
1883
+ Body: TreeItemBody,
1884
+ OpenTrigger: TreeItemOpenTrigger,
1885
+ MockOpenTrigger: MockTreeItemOpenTrigger,
1886
+ DropIndicator: TreeDropIndicator
1887
+ };
1888
+ var TREEGRID_ROW_NAME = "TreegridRow";
1889
+ var [createTreegridRowContext, createTreegridRowScope] = (0, import_react_context6.createContextScope)(TREEGRID_ROW_NAME, []);
1890
+ var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1891
+ var PATH_SEPARATOR = "~";
1892
+ var PARENT_OF_SEPARATOR = " ";
1893
+ var TreegridRoot = /* @__PURE__ */ (0, import_react33.forwardRef)(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1420
1894
  const { tx } = useThemeContext();
1421
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Label, {
1895
+ const Root7 = asChild ? import_react_slot8.Slot : import_react_primitive7.Primitive.div;
1896
+ const arrowNavigationAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1897
+ axis: "vertical",
1898
+ tabbable: false,
1899
+ circular: true
1900
+ });
1901
+ return /* @__PURE__ */ import_react33.default.createElement(Root7, {
1902
+ role: "treegrid",
1903
+ ...arrowNavigationAttrs,
1422
1904
  ...props,
1423
- className: tx("input.label", "input__label", {
1424
- srOnly
1425
- }, classNames),
1905
+ className: tx("treegrid.root", "treegrid", {}, classNames),
1906
+ style: {
1907
+ ...style,
1908
+ gridTemplateColumns
1909
+ },
1426
1910
  ref: forwardedRef
1427
1911
  }, children);
1428
1912
  });
1429
- var Description = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1913
+ var TreegridRow = /* @__PURE__ */ (0, import_react33.forwardRef)(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1430
1914
  const { tx } = useThemeContext();
1431
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Description, {
1432
- ...props,
1433
- className: tx("input.description", "input__description", {
1434
- srOnly
1915
+ const Root7 = asChild ? import_react_slot8.Slot : import_react_primitive7.Primitive.div;
1916
+ const pathParts = id.split(PATH_SEPARATOR);
1917
+ const level = pathParts.length - 1;
1918
+ const [open, onOpenChange] = (0, import_react_use_controllable_state3.useControllableState)({
1919
+ prop: propsOpen,
1920
+ onChange: propsOnOpenChange,
1921
+ defaultProp: defaultOpen
1922
+ });
1923
+ const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1924
+ tabBehavior: "limited"
1925
+ });
1926
+ const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1927
+ axis: "horizontal",
1928
+ tabbable: false,
1929
+ circular: false,
1930
+ memorizeCurrent: false
1931
+ });
1932
+ return /* @__PURE__ */ import_react33.default.createElement(TreegridRowProvider, {
1933
+ open,
1934
+ onOpenChange,
1935
+ scope: __treegridRowScope
1936
+ }, /* @__PURE__ */ import_react33.default.createElement(Root7, {
1937
+ role: "row",
1938
+ "aria-level": level,
1939
+ className: tx("treegrid.row", "treegrid__row", {
1940
+ level
1435
1941
  }, classNames),
1942
+ ...parentOf && {
1943
+ "aria-expanded": open,
1944
+ "aria-owns": parentOf
1945
+ },
1946
+ tabIndex: 0,
1947
+ ...focusableGroupAttrs,
1948
+ ...props,
1949
+ id,
1436
1950
  ref: forwardedRef
1437
- }, children);
1951
+ }, /* @__PURE__ */ import_react33.default.createElement("div", {
1952
+ role: "none",
1953
+ className: "contents",
1954
+ ...arrowGroupAttrs
1955
+ }, children)));
1438
1956
  });
1439
- var Validation = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1957
+ var TreegridCell = /* @__PURE__ */ (0, import_react33.forwardRef)(({ classNames, children, indent, ...props }, forwardedRef) => {
1440
1958
  const { tx } = useThemeContext();
1441
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1442
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Validation, {
1443
- ...props,
1444
- className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1445
- srOnly,
1446
- validationValence
1959
+ return /* @__PURE__ */ import_react33.default.createElement("div", {
1960
+ role: "gridcell",
1961
+ className: tx("treegrid.cell", "treegrid__cell", {
1962
+ indent
1447
1963
  }, classNames),
1964
+ ...props,
1448
1965
  ref: forwardedRef
1449
1966
  }, children);
1450
1967
  });
1451
- var DescriptionAndValidation = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1452
- const { tx } = useThemeContext();
1453
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.DescriptionAndValidation, {
1454
- ...props,
1455
- className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1456
- srOnly
1457
- }, classNames),
1458
- ref: forwardedRef
1459
- }, children);
1968
+ var Treegrid = {
1969
+ Root: TreegridRoot,
1970
+ Row: TreegridRow,
1971
+ Cell: TreegridCell,
1972
+ PARENT_OF_SEPARATOR,
1973
+ PATH_SEPARATOR,
1974
+ createTreegridRowScope,
1975
+ useTreegridRowContext
1976
+ };
1977
+ var MotionState;
1978
+ (function(MotionState2) {
1979
+ MotionState2[MotionState2["IDLE"] = 0] = "IDLE";
1980
+ MotionState2[MotionState2["DEBOUNCING"] = 1] = "DEBOUNCING";
1981
+ MotionState2[MotionState2["FOLLOWING"] = 2] = "FOLLOWING";
1982
+ })(MotionState || (MotionState = {}));
1983
+ var useSwipeToDismiss = (ref, {
1984
+ onDismiss,
1985
+ dismissThreshold = 64,
1986
+ debounceThreshold = 8,
1987
+ offset = 0
1988
+ /* side = 'inline-start' */
1989
+ }) => {
1990
+ const $root = ref.current;
1991
+ const [motionState, setMotionState] = (0, import_react35.useState)(0);
1992
+ const [gestureStartX, setGestureStartX] = (0, import_react35.useState)(0);
1993
+ const setIdle = (0, import_react35.useCallback)(() => {
1994
+ setMotionState(0);
1995
+ $root?.style.removeProperty("inset-inline-start");
1996
+ $root?.style.setProperty("transition-duration", "200ms");
1997
+ }, [
1998
+ $root
1999
+ ]);
2000
+ const setFollowing = (0, import_react35.useCallback)(() => {
2001
+ setMotionState(2);
2002
+ $root?.style.setProperty("transition-duration", "0ms");
2003
+ }, [
2004
+ $root
2005
+ ]);
2006
+ const handlePointerDown = (0, import_react35.useCallback)(({ screenX }) => {
2007
+ if (motionState === 0) {
2008
+ setMotionState(1);
2009
+ setGestureStartX(screenX);
2010
+ }
2011
+ }, [
2012
+ motionState
2013
+ ]);
2014
+ const handlePointerMove = (0, import_react35.useCallback)(({ screenX }) => {
2015
+ if ($root) {
2016
+ const delta = Math.min(screenX - gestureStartX, 0);
2017
+ switch (motionState) {
2018
+ case 2:
2019
+ if (Math.abs(delta) > dismissThreshold) {
2020
+ setIdle();
2021
+ onDismiss?.();
2022
+ } else {
2023
+ $root.style.setProperty("inset-inline-start", `${offset + delta}px`);
2024
+ }
2025
+ break;
2026
+ case 1:
2027
+ if (Math.abs(delta) > debounceThreshold) {
2028
+ setFollowing();
2029
+ }
2030
+ break;
2031
+ }
2032
+ }
2033
+ }, [
2034
+ $root,
2035
+ motionState,
2036
+ gestureStartX
2037
+ ]);
2038
+ const handlePointerUp = (0, import_react35.useCallback)(() => {
2039
+ setIdle();
2040
+ }, [
2041
+ setIdle
2042
+ ]);
2043
+ (0, import_react35.useEffect)(() => {
2044
+ $root?.addEventListener("pointerdown", handlePointerDown);
2045
+ return () => {
2046
+ $root?.removeEventListener("pointerdown", handlePointerDown);
2047
+ };
2048
+ }, [
2049
+ $root,
2050
+ handlePointerDown
2051
+ ]);
2052
+ (0, import_react35.useEffect)(() => {
2053
+ $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
2054
+ return () => {
2055
+ document.documentElement.removeEventListener("pointermove", handlePointerMove);
2056
+ };
2057
+ }, [
2058
+ $root,
2059
+ handlePointerMove
2060
+ ]);
2061
+ (0, import_react35.useEffect)(() => {
2062
+ $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
2063
+ return () => {
2064
+ document.documentElement.removeEventListener("pointerup", handlePointerUp);
2065
+ };
2066
+ }, [
2067
+ $root,
2068
+ handlePointerUp
2069
+ ]);
2070
+ };
2071
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
2072
+ var MAIN_ROOT_NAME = "MainRoot";
2073
+ var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
2074
+ var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
2075
+ var MAIN_NAME = "Main";
2076
+ var GENERIC_CONSUMER_NAME = "GenericConsumer";
2077
+ var landmarkAttr = "data-main-landmark";
2078
+ var useLandmarkMover = (propsOnKeyDown, landmark) => {
2079
+ const handleKeyDown = (0, import_react34.useCallback)((event) => {
2080
+ const target = event.target;
2081
+ if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2082
+ event.preventDefault();
2083
+ const landmarks = Array.from(document.querySelectorAll(`[${landmarkAttr}]:not([inert])`)).map((el) => el.hasAttribute(landmarkAttr) ? parseInt(el.getAttribute(landmarkAttr)) : NaN).sort();
2084
+ const l = landmarks.length;
2085
+ const cursor = landmarks.indexOf(parseInt(target.getAttribute(landmarkAttr)));
2086
+ const nextLandmark = landmarks[(cursor + l + (event.getModifierState("Shift") ? -1 : 1)) % l];
2087
+ document.querySelector(`[${landmarkAttr}="${nextLandmark}"]`)?.focus();
2088
+ }
2089
+ propsOnKeyDown?.(event);
2090
+ }, [
2091
+ propsOnKeyDown
2092
+ ]);
2093
+ const focusableGroupAttrs = window ? {} : {
2094
+ tabBehavior: "limited",
2095
+ ignoreDefaultKeydown: {
2096
+ Tab: true
2097
+ }
2098
+ };
2099
+ return {
2100
+ onKeyDown: handleKeyDown,
2101
+ [landmarkAttr]: landmark,
2102
+ tabIndex: 0,
2103
+ ...focusableGroupAttrs
2104
+ };
2105
+ };
2106
+ var [MainProvider, useMainContext] = (0, import_react_context7.createContext)(MAIN_NAME, {
2107
+ resizing: false,
2108
+ navigationSidebarState: "closed",
2109
+ setNavigationSidebarState: (nextState) => {
2110
+ import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2111
+ F: __dxlog_file,
2112
+ L: 82,
2113
+ S: void 0,
2114
+ C: (f, a) => f(...a)
2115
+ });
2116
+ },
2117
+ complementarySidebarState: "closed",
2118
+ setComplementarySidebarState: (nextState) => {
2119
+ import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2120
+ F: __dxlog_file,
2121
+ L: 87,
2122
+ S: void 0,
2123
+ C: (f, a) => f(...a)
2124
+ });
2125
+ }
1460
2126
  });
1461
- var PinInput = /* @__PURE__ */ (0, import_react30.forwardRef)(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1462
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
2127
+ var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2128
+ const { setNavigationSidebarState, navigationSidebarState, setComplementarySidebarState, complementarySidebarState } = useMainContext(consumerName);
2129
+ return {
2130
+ navigationSidebarState,
2131
+ setNavigationSidebarState,
2132
+ toggleNavigationSidebar: (0, import_react34.useCallback)(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2133
+ navigationSidebarState,
2134
+ setNavigationSidebarState
2135
+ ]),
2136
+ openNavigationSidebar: (0, import_react34.useCallback)(() => setNavigationSidebarState("expanded"), []),
2137
+ collapseNavigationSidebar: (0, import_react34.useCallback)(() => setNavigationSidebarState("collapsed"), []),
2138
+ closeNavigationSidebar: (0, import_react34.useCallback)(() => setNavigationSidebarState("closed"), []),
2139
+ complementarySidebarState,
2140
+ setComplementarySidebarState,
2141
+ toggleComplementarySidebar: (0, import_react34.useCallback)(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2142
+ complementarySidebarState,
2143
+ setComplementarySidebarState
2144
+ ]),
2145
+ openComplementarySidebar: (0, import_react34.useCallback)(() => setComplementarySidebarState("expanded"), []),
2146
+ collapseComplementarySidebar: (0, import_react34.useCallback)(() => setComplementarySidebarState("collapsed"), []),
2147
+ closeComplementarySidebar: (0, import_react34.useCallback)(() => setComplementarySidebarState("closed"), [])
2148
+ };
2149
+ };
2150
+ var resizeDebounce = 3e3;
2151
+ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2152
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2153
+ ssr: false
2154
+ });
2155
+ const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2156
+ prop: propsNavigationSidebarState,
2157
+ defaultProp: defaultNavigationSidebarState,
2158
+ onChange: onNavigationSidebarStateChange
2159
+ });
2160
+ const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2161
+ prop: propsComplementarySidebarState,
2162
+ defaultProp: defaultComplementarySidebarState,
2163
+ onChange: onComplementarySidebarStateChange
2164
+ });
2165
+ const [resizing, setResizing] = (0, import_react34.useState)(false);
2166
+ const resizeInterval = (0, import_react34.useRef)(null);
2167
+ const handleResize = (0, import_react34.useCallback)(() => {
2168
+ setResizing(true);
2169
+ if (resizeInterval.current) {
2170
+ clearTimeout(resizeInterval.current);
2171
+ }
2172
+ resizeInterval.current = setTimeout(() => {
2173
+ setResizing(false);
2174
+ resizeInterval.current = null;
2175
+ }, resizeDebounce);
2176
+ }, []);
2177
+ (0, import_react34.useEffect)(() => {
2178
+ window.addEventListener("resize", handleResize);
2179
+ return () => window.removeEventListener("resize", handleResize);
2180
+ }, [
2181
+ handleResize
2182
+ ]);
2183
+ return /* @__PURE__ */ import_react34.default.createElement(MainProvider, {
2184
+ ...props,
2185
+ navigationSidebarState,
2186
+ setNavigationSidebarState,
2187
+ complementarySidebarState,
2188
+ setComplementarySidebarState,
2189
+ resizing
2190
+ }, children);
2191
+ };
2192
+ MainRoot.displayName = MAIN_ROOT_NAME;
2193
+ var handleOpenAutoFocus = (event) => {
2194
+ !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
2195
+ };
2196
+ var MainSidebar = /* @__PURE__ */ (0, import_react34.forwardRef)(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2197
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2198
+ ssr: false
2199
+ });
1463
2200
  const { tx } = useThemeContext();
1464
- const density = useDensityContext(propsDensity);
1465
- const elevation = useElevationContext(propsElevation);
1466
- const segmentClassName = (0, import_react30.useCallback)(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1467
- variant: "static",
1468
- focused,
1469
- disabled: props.disabled,
1470
- density,
1471
- elevation,
1472
- validationValence
1473
- }, propsSegmentClassName), [
1474
- tx,
1475
- props.disabled,
1476
- elevation,
1477
- propsElevation,
1478
- density
2201
+ const { t } = useTranslation();
2202
+ const ref = (0, import_react_hooks4.useForwardedRef)(forwardedRef);
2203
+ const noopRef = (0, import_react34.useRef)(null);
2204
+ useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2205
+ onDismiss: () => onStateChange?.("closed")
2206
+ });
2207
+ const handleKeyDown = (0, import_react34.useCallback)((event) => {
2208
+ if (event.key === "Escape") {
2209
+ event.target.closest("[data-tabster]")?.focus();
2210
+ }
2211
+ props.onKeyDown?.(event);
2212
+ }, [
2213
+ props.onKeyDown
1479
2214
  ]);
1480
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.PinInput, {
2215
+ const Root7 = isLg ? import_react_primitive8.Primitive.div : import_react_dialog2.DialogContent;
2216
+ return /* @__PURE__ */ import_react34.default.createElement(import_react_dialog2.Root, {
2217
+ open: state !== "closed",
2218
+ "aria-label": toLocalizedString(label, t),
2219
+ modal: false
2220
+ }, !isLg && /* @__PURE__ */ import_react34.default.createElement(import_react_dialog2.DialogTitle, {
2221
+ className: "sr-only"
2222
+ }, toLocalizedString(label, t)), /* @__PURE__ */ import_react34.default.createElement(Root7, {
2223
+ ...!isLg && {
2224
+ forceMount: true,
2225
+ tabIndex: -1,
2226
+ onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
2227
+ },
1481
2228
  ...props,
1482
- segmentClassName,
1483
- ...props.autoFocus && !hasIosKeyboard2 && {
1484
- autoFocus: true
2229
+ "data-side": side === "inline-end" ? "ie" : "is",
2230
+ "data-state": state,
2231
+ "data-resizing": resizing ? "true" : "false",
2232
+ className: tx("main.sidebar", "main__sidebar", {}, classNames),
2233
+ onKeyDown: handleKeyDown,
2234
+ ...state === "closed" && {
2235
+ inert: "true"
1485
2236
  },
1486
- inputClassName: tx("input.inputWithSegments", "input input--pin", {
1487
- disabled: props.disabled
1488
- }, inputClassName),
1489
- ref: forwardedRef
1490
- });
2237
+ ref
2238
+ }, children));
1491
2239
  });
1492
- var TextInput = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1493
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1494
- const themeContextValue = useThemeContext();
1495
- const density = useDensityContext(propsDensity);
1496
- const elevation = useElevationContext(propsElevation);
1497
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1498
- const { tx } = themeContextValue;
1499
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.TextInput, {
2240
+ var MainNavigationSidebar = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
2241
+ const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
2242
+ const mover = useLandmarkMover(props.onKeyDown, "0");
2243
+ return /* @__PURE__ */ import_react34.default.createElement(MainSidebar, {
2244
+ ...mover,
1500
2245
  ...props,
1501
- className: tx("input.input", "input", {
1502
- variant,
1503
- disabled: props.disabled,
1504
- density,
1505
- elevation,
1506
- validationValence
1507
- }, classNames),
1508
- ...props.autoFocus && !hasIosKeyboard2 && {
1509
- autoFocus: true
1510
- },
2246
+ state: navigationSidebarState,
2247
+ onStateChange: setNavigationSidebarState,
2248
+ resizing,
2249
+ side: "inline-start",
1511
2250
  ref: forwardedRef
1512
2251
  });
1513
2252
  });
1514
- var TextArea = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1515
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1516
- const { tx } = useThemeContext();
1517
- const density = useDensityContext(propsDensity);
1518
- const elevation = useElevationContext(propsElevation);
1519
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1520
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.TextArea, {
2253
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2254
+ var MainComplementarySidebar = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
2255
+ const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
2256
+ const mover = useLandmarkMover(props.onKeyDown, "2");
2257
+ return /* @__PURE__ */ import_react34.default.createElement(MainSidebar, {
2258
+ ...mover,
1521
2259
  ...props,
1522
- className: tx("input.input", "input--text-area", {
1523
- variant,
1524
- disabled: props.disabled,
1525
- density,
1526
- elevation,
1527
- validationValence
1528
- }, classNames),
1529
- ...props.autoFocus && !hasIosKeyboard2 && {
1530
- autoFocus: true
1531
- },
2260
+ state: complementarySidebarState,
2261
+ onStateChange: setComplementarySidebarState,
2262
+ resizing,
2263
+ side: "inline-end",
1532
2264
  ref: forwardedRef
1533
2265
  });
1534
2266
  });
1535
- var Checkbox = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1536
- const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1537
- prop: propsChecked,
1538
- defaultProp: propsDefaultChecked,
1539
- onChange: propsOnCheckedChange
1540
- });
1541
- const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
2267
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2268
+ var MainContent = /* @__PURE__ */ (0, import_react34.forwardRef)(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
2269
+ const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
1542
2270
  const { tx } = useThemeContext();
1543
- return /* @__PURE__ */ import_react30.default.createElement(import_react_checkbox.Root, {
1544
- ...props,
1545
- checked,
1546
- onCheckedChange,
1547
- id,
1548
- "aria-describedby": descriptionId,
1549
- ...validationValence === "error" && {
1550
- "aria-invalid": "true",
1551
- "aria-errormessage": errorMessageId
2271
+ const Root7 = asChild ? import_react_slot9.Slot : role ? "div" : "main";
2272
+ const mover = useLandmarkMover(props.onKeyDown, "1");
2273
+ return /* @__PURE__ */ import_react34.default.createElement(Root7, {
2274
+ role,
2275
+ ...handlesFocus && {
2276
+ ...mover
1552
2277
  },
1553
- className: tx("input.checkbox", "input--checkbox", {
1554
- size
1555
- }, "shrink-0", classNames),
2278
+ ...props,
2279
+ "data-sidebar-inline-start-state": navigationSidebarState,
2280
+ "data-sidebar-inline-end-state": complementarySidebarState,
2281
+ className: tx("main.content", "main", {
2282
+ bounce,
2283
+ handlesFocus
2284
+ }, classNames),
1556
2285
  ref: forwardedRef
1557
- }, /* @__PURE__ */ import_react30.default.createElement(Icon, {
1558
- icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1559
- classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1560
- size,
1561
- checked
1562
- })
1563
- }));
2286
+ }, children);
1564
2287
  });
1565
- var Switch = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1566
- const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1567
- prop: propsChecked,
1568
- defaultProp: propsDefaultChecked ?? false,
1569
- onChange: propsOnCheckedChange
2288
+ MainContent.displayName = MAIN_NAME;
2289
+ var MainOverlay = /* @__PURE__ */ (0, import_react34.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2290
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2291
+ ssr: false
1570
2292
  });
1571
- const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1572
- return /* @__PURE__ */ import_react30.default.createElement("input", {
1573
- type: "checkbox",
1574
- className: (0, import_react_ui_theme3.mx)("dx-checkbox--switch dx-focus-ring", classNames),
1575
- checked,
1576
- onChange: (event) => {
1577
- onCheckedChange(event.target.checked);
2293
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2294
+ const { tx } = useThemeContext();
2295
+ return /* @__PURE__ */ import_react34.default.createElement("div", {
2296
+ onClick: () => {
2297
+ setNavigationSidebarState("collapsed");
2298
+ setComplementarySidebarState("collapsed");
1578
2299
  },
1579
- id,
1580
- "aria-describedby": descriptionId,
1581
2300
  ...props,
1582
- ...validationValence === "error" && {
1583
- "aria-invalid": "true",
1584
- "aria-errormessage": errorMessageId
1585
- },
2301
+ className: tx("main.overlay", "main__overlay", {
2302
+ isLg,
2303
+ inlineStartSidebarOpen: navigationSidebarState,
2304
+ inlineEndSidebarOpen: complementarySidebarState
2305
+ }, classNames),
2306
+ "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
2307
+ "aria-hidden": "true",
1586
2308
  ref: forwardedRef
1587
2309
  });
1588
2310
  });
1589
- var Input = {
1590
- Root: import_react_input.InputRoot,
1591
- PinInput,
1592
- TextInput,
1593
- TextArea,
1594
- Checkbox,
1595
- Switch,
1596
- Label: Label3,
1597
- Description,
1598
- Validation,
1599
- DescriptionAndValidation
1600
- };
1601
- var edgeToOrientationMap = {
1602
- top: "horizontal",
1603
- bottom: "horizontal",
1604
- left: "vertical",
1605
- right: "vertical"
1606
- };
1607
- var orientationStyles = {
1608
- horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1609
- vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1610
- };
1611
- var edgeStyles = {
1612
- top: "top-[--line-offset] before:top-[--offset-terminal]",
1613
- right: "right-[--line-offset] before:right-[--offset-terminal]",
1614
- bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1615
- left: "left-[--line-offset] before:left-[--offset-terminal]"
2311
+ var Main = {
2312
+ Root: MainRoot,
2313
+ Content: MainContent,
2314
+ Overlay: MainOverlay,
2315
+ NavigationSidebar: MainNavigationSidebar,
2316
+ ComplementarySidebar: MainComplementarySidebar
1616
2317
  };
1617
- var strokeSize = 2;
1618
- var terminalSize = 8;
1619
- var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1620
- var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1621
- const orientation = edgeToOrientationMap[edge];
1622
- return /* @__PURE__ */ import_react33.default.createElement("div", {
1623
- role: "none",
1624
- style: {
1625
- "--line-thickness": `${strokeSize}px`,
1626
- "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1627
- "--line-inset": `${lineInset}px`,
1628
- "--terminal-size": `${terminalSize}px`,
1629
- "--terminal-radius": `${terminalSize / 2}px`,
1630
- "--terminal-inset": `${terminalInset}px`,
1631
- "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1632
- },
1633
- 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]}`
1634
- });
2318
+ var propIsNumber = (prop) => Number.isFinite(prop);
2319
+ var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
2320
+ var safePadding = (propsPadding, safePadding2, side) => {
2321
+ return (propIsNumber(safePadding2[side]) ? safePadding2[side] : 0) + (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0);
1635
2322
  };
1636
- var List = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1637
- const { tx } = useThemeContext();
1638
- const density = useDensityContext(props.density);
1639
- return /* @__PURE__ */ import_react32.default.createElement(DensityProvider, {
1640
- density
1641
- }, /* @__PURE__ */ import_react32.default.createElement(import_react_list.List, {
1642
- ...props,
1643
- className: tx("list.root", "list", {}, classNames),
1644
- ref: forwardedRef
1645
- }, children));
1646
- });
1647
- var ListItemEndcap = /* @__PURE__ */ (0, import_react32.forwardRef)(({ children, classNames, asChild, ...props }, forwardedRef) => {
1648
- const Root5 = asChild ? import_react_slot8.Slot : "div";
1649
- const density = useDensityContext();
2323
+ var useSafeCollisionPadding = (collisionPadding) => {
2324
+ const { safeAreaPadding } = useThemeContext();
2325
+ return (0, import_react37.useMemo)(() => ({
2326
+ top: safePadding(collisionPadding, safeAreaPadding, "top"),
2327
+ right: safePadding(collisionPadding, safeAreaPadding, "right"),
2328
+ bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
2329
+ left: safePadding(collisionPadding, safeAreaPadding, "left")
2330
+ }), [
2331
+ collisionPadding,
2332
+ safeAreaPadding
2333
+ ]);
2334
+ };
2335
+ var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
2336
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
2337
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
2338
+ var ContextMenuContent = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
1650
2339
  const { tx } = useThemeContext();
1651
- return /* @__PURE__ */ import_react32.default.createElement(Root5, {
1652
- ...!asChild && {
1653
- role: "none"
1654
- },
2340
+ const elevation = useElevationContext();
2341
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2342
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.Content, {
1655
2343
  ...props,
1656
- className: tx("list.item.endcap", "list__listItem__endcap", {
1657
- density
2344
+ collisionPadding: safeCollisionPadding,
2345
+ className: tx("menu.content", "menu", {
2346
+ elevation
1658
2347
  }, classNames),
1659
2348
  ref: forwardedRef
1660
2349
  }, children);
1661
2350
  });
1662
- var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1663
- const density = useDensityContext();
1664
- const { tx } = useThemeContext();
1665
- return /* @__PURE__ */ import_react32.default.createElement("div", {
1666
- role: "none",
1667
- ...props,
1668
- className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1669
- density
1670
- }, classNames)
1671
- });
1672
- };
1673
- var ListItemHeading = /* @__PURE__ */ (0, import_react32.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
2351
+ var ContextMenuViewport = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1674
2352
  const { tx } = useThemeContext();
1675
- const density = useDensityContext();
1676
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItemHeading, {
2353
+ const Root7 = asChild ? import_react_slot10.Slot : import_react_primitive9.Primitive.div;
2354
+ return /* @__PURE__ */ import_react36.default.createElement(Root7, {
1677
2355
  ...props,
1678
- className: tx("list.item.heading", "list__listItem__heading", {
1679
- density
1680
- }, classNames),
2356
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1681
2357
  ref: forwardedRef
1682
2358
  }, children);
1683
2359
  });
1684
- var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react32.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
2360
+ var ContextMenuArrow = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1685
2361
  const { tx } = useThemeContext();
1686
- const density = useDensityContext();
1687
- const { open } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listItemScope);
1688
- const Icon3 = open ? import_react31.CaretDown : import_react31.CaretRight;
1689
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItemOpenTrigger, {
2362
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.Arrow, {
1690
2363
  ...props,
1691
- className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1692
- density
1693
- }, classNames),
2364
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
1694
2365
  ref: forwardedRef
1695
- }, children || /* @__PURE__ */ import_react32.default.createElement(Icon3, {
1696
- weight: "bold",
1697
- className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1698
- }));
2366
+ });
1699
2367
  });
1700
- var ListItemRoot = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
2368
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
2369
+ var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
2370
+ var ContextMenuItem = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1701
2371
  const { tx } = useThemeContext();
1702
- const density = useDensityContext();
1703
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItem, {
2372
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.Item, {
1704
2373
  ...props,
1705
- className: tx("list.item.root", "list__listItem", {
1706
- density,
1707
- collapsible: props.collapsible
1708
- }, classNames),
2374
+ className: tx("menu.item", "menu__item", {}, classNames),
1709
2375
  ref: forwardedRef
1710
- }, children);
1711
- });
1712
- var ListItem = {
1713
- Root: ListItemRoot,
1714
- Endcap: ListItemEndcap,
1715
- Heading: ListItemHeading,
1716
- OpenTrigger: ListItemOpenTrigger,
1717
- CollapsibleContent: import_react_list.ListItemCollapsibleContent,
1718
- MockOpenTrigger: MockListItemOpenTrigger,
1719
- DropIndicator: ListDropIndicator
1720
- };
1721
- var edgeToOrientationMap2 = {
1722
- "reorder-above": "sibling",
1723
- "reorder-below": "sibling",
1724
- "make-child": "child",
1725
- reparent: "child"
1726
- };
1727
- var orientationStyles2 = {
1728
- // TODO(wittjosiah): Stop using left/right here.
1729
- sibling: "bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]",
1730
- child: "is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible"
1731
- };
1732
- var instructionStyles = {
1733
- "reorder-above": "block-start-[--line-offset] before:block-start-[--offset-terminal]",
1734
- "reorder-below": "block-end-[--line-offset] before:block-end-[--offset-terminal]",
1735
- "make-child": "border-accentSurface",
1736
- // TODO(wittjosiah): This is not occurring in the current implementation.
1737
- reparent: ""
1738
- };
1739
- var strokeSize2 = 2;
1740
- var terminalSize2 = 8;
1741
- var offsetToAlignTerminalWithLine2 = (strokeSize2 - terminalSize2) / 2;
1742
- var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1743
- const lineOffset = `calc(-0.5 * (${gap}px + ${strokeSize2}px))`;
1744
- const isBlocked = instruction.type === "instruction-blocked";
1745
- const desiredInstruction = isBlocked ? instruction.desired : instruction;
1746
- const orientation = edgeToOrientationMap2[desiredInstruction.type];
1747
- if (isBlocked) {
1748
- return null;
1749
- }
1750
- return /* @__PURE__ */ import_react35.default.createElement("div", {
1751
- style: {
1752
- "--line-thickness": `${strokeSize2}px`,
1753
- "--line-offset": `${lineOffset}`,
1754
- "--terminal-size": `${terminalSize2}px`,
1755
- "--terminal-radius": `${terminalSize2 / 2}px`,
1756
- "--negative-terminal-size": `-${terminalSize2}px`,
1757
- "--offset-terminal": `${offsetToAlignTerminalWithLine2}px`,
1758
- "--horizontal-indent": `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`
1759
- },
1760
- className: `absolute z-10 pointer-events-none before:is-[--terminal-size] before:bs-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles2[orientation]} ${instructionStyles[desiredInstruction.type]}`
1761
2376
  });
1762
- };
1763
- var TreeRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1764
- return /* @__PURE__ */ import_react34.default.createElement(List, {
2377
+ });
2378
+ var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2379
+ const { tx } = useThemeContext();
2380
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.CheckboxItem, {
1765
2381
  ...props,
2382
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1766
2383
  ref: forwardedRef
1767
2384
  });
1768
2385
  });
1769
- var TreeBranch = /* @__PURE__ */ (0, import_react34.forwardRef)(({ __listScope, ...props }, forwardedRef) => {
1770
- const { headingId } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listScope);
1771
- return /* @__PURE__ */ import_react34.default.createElement(List, {
2386
+ var ContextMenuSeparator = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2387
+ const { tx } = useThemeContext();
2388
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.Separator, {
1772
2389
  ...props,
1773
- "aria-labelledby": headingId,
2390
+ className: tx("menu.separator", "menu__item", {}, classNames),
1774
2391
  ref: forwardedRef
1775
2392
  });
1776
2393
  });
1777
- var TreeItemRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1778
- return /* @__PURE__ */ import_react34.default.createElement(ListItem.Root, {
1779
- role: "treeitem",
2394
+ var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2395
+ const { tx } = useThemeContext();
2396
+ return /* @__PURE__ */ import_react36.default.createElement(ContextMenuPrimitive.Label, {
1780
2397
  ...props,
2398
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1781
2399
  ref: forwardedRef
1782
2400
  });
1783
2401
  });
1784
- var TreeItemHeading = ListItem.Heading;
1785
- var TreeItemOpenTrigger = ListItem.OpenTrigger;
1786
- var MockTreeItemOpenTrigger = ListItem.MockOpenTrigger;
1787
- var TreeItemBody = ListItem.CollapsibleContent;
1788
- var Tree = {
1789
- Root: TreeRoot,
1790
- Branch: TreeBranch
1791
- };
1792
- var TreeItem = {
1793
- Root: TreeItemRoot,
1794
- Heading: TreeItemHeading,
1795
- Body: TreeItemBody,
1796
- OpenTrigger: TreeItemOpenTrigger,
1797
- MockOpenTrigger: MockTreeItemOpenTrigger,
1798
- DropIndicator: TreeDropIndicator
2402
+ var ContextMenu2 = {
2403
+ Root: ContextMenuRoot,
2404
+ Trigger: ContextMenuTrigger,
2405
+ Portal: ContextMenuPortal,
2406
+ Content: ContextMenuContent,
2407
+ Viewport: ContextMenuViewport,
2408
+ Arrow: ContextMenuArrow,
2409
+ Group: ContextMenuGroup,
2410
+ Item: ContextMenuItem,
2411
+ CheckboxItem: ContextMenuCheckboxItem,
2412
+ ItemIndicator: ContextMenuItemIndicator,
2413
+ Separator: ContextMenuSeparator,
2414
+ GroupLabel: ContextMenuGroupLabel
1799
2415
  };
1800
- var TREEGRID_ROW_NAME = "TreegridRow";
1801
- var [createTreegridRowContext, createTreegridRowScope] = (0, import_react_context6.createContextScope)(TREEGRID_ROW_NAME, []);
1802
- var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1803
- var PATH_SEPARATOR = "~";
1804
- var PARENT_OF_SEPARATOR = " ";
1805
- var TreegridRoot = /* @__PURE__ */ (0, import_react36.forwardRef)(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1806
- const { tx } = useThemeContext();
1807
- const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1808
- const arrowNavigationAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1809
- axis: "vertical",
1810
- tabbable: false,
1811
- circular: true
2416
+ var DROPDOWN_MENU_NAME = "DropdownMenu";
2417
+ var [createDropdownMenuContext, createDropdownMenuScope] = (0, import_react_context8.createContextScope)(DROPDOWN_MENU_NAME, [
2418
+ import_react_menu.createMenuScope
2419
+ ]);
2420
+ var useMenuScope = (0, import_react_menu.createMenuScope)();
2421
+ var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
2422
+ var DropdownMenuRoot = (props) => {
2423
+ const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
2424
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2425
+ const triggerRef = (0, import_react38.useRef)(null);
2426
+ const [open = false, setOpen] = (0, import_react_use_controllable_state5.useControllableState)({
2427
+ prop: openProp,
2428
+ defaultProp: defaultOpen,
2429
+ onChange: onOpenChange
1812
2430
  });
1813
- return /* @__PURE__ */ import_react36.default.createElement(Root5, {
1814
- role: "treegrid",
1815
- ...arrowNavigationAttrs,
1816
- ...props,
1817
- className: tx("treegrid.root", "treegrid", {}, classNames),
1818
- style: {
1819
- ...style,
1820
- gridTemplateColumns
1821
- },
1822
- ref: forwardedRef
1823
- }, children);
2431
+ return /* @__PURE__ */ import_react38.default.createElement(DropdownMenuProvider, {
2432
+ scope: __scopeDropdownMenu,
2433
+ triggerId: (0, import_react_id2.useId)(),
2434
+ triggerRef,
2435
+ contentId: (0, import_react_id2.useId)(),
2436
+ open,
2437
+ onOpenChange: setOpen,
2438
+ onOpenToggle: (0, import_react38.useCallback)(() => setOpen((prevOpen) => !prevOpen), [
2439
+ setOpen
2440
+ ]),
2441
+ modal
2442
+ }, /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Root, {
2443
+ ...menuScope,
2444
+ open,
2445
+ onOpenChange: setOpen,
2446
+ dir,
2447
+ modal
2448
+ }, children));
2449
+ };
2450
+ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
2451
+ var TRIGGER_NAME2 = "DropdownMenuTrigger";
2452
+ var DropdownMenuTrigger = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2453
+ const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
2454
+ const context = useDropdownMenuContext(TRIGGER_NAME2, __scopeDropdownMenu);
2455
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2456
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Anchor, {
2457
+ asChild: true,
2458
+ ...menuScope
2459
+ }, /* @__PURE__ */ import_react38.default.createElement(import_react_primitive10.Primitive.button, {
2460
+ type: "button",
2461
+ id: context.triggerId,
2462
+ "aria-haspopup": "menu",
2463
+ "aria-expanded": context.open,
2464
+ "aria-controls": context.open ? context.contentId : void 0,
2465
+ "data-state": context.open ? "open" : "closed",
2466
+ "data-disabled": disabled ? "" : void 0,
2467
+ disabled,
2468
+ ...triggerProps,
2469
+ ref: (0, import_react_compose_refs2.composeRefs)(forwardedRef, context.triggerRef),
2470
+ onPointerDown: (0, import_primitive2.composeEventHandlers)(props.onPointerDown, (event) => {
2471
+ if (!disabled && event.button === 0 && event.ctrlKey === false) {
2472
+ context.onOpenToggle();
2473
+ if (!context.open) {
2474
+ event.preventDefault();
2475
+ }
2476
+ }
2477
+ }),
2478
+ onKeyDown: (0, import_primitive2.composeEventHandlers)(props.onKeyDown, (event) => {
2479
+ if (disabled) {
2480
+ return;
2481
+ }
2482
+ if ([
2483
+ "Enter",
2484
+ " "
2485
+ ].includes(event.key)) {
2486
+ context.onOpenToggle();
2487
+ }
2488
+ if (event.key === "ArrowDown") {
2489
+ context.onOpenChange(true);
2490
+ }
2491
+ if ([
2492
+ "Enter",
2493
+ " ",
2494
+ "ArrowDown"
2495
+ ].includes(event.key)) {
2496
+ event.preventDefault();
2497
+ }
2498
+ })
2499
+ }));
1824
2500
  });
1825
- var TreegridRow = /* @__PURE__ */ (0, import_react36.forwardRef)(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1826
- const { tx } = useThemeContext();
1827
- const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1828
- const pathParts = id.split(PATH_SEPARATOR);
1829
- const level = pathParts.length - 1;
1830
- const [open, onOpenChange] = (0, import_react_use_controllable_state3.useControllableState)({
1831
- prop: propsOpen,
1832
- onChange: propsOnOpenChange,
1833
- defaultProp: defaultOpen
2501
+ DropdownMenuTrigger.displayName = TRIGGER_NAME2;
2502
+ var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
2503
+ var DropdownMenuVirtualTrigger = (props) => {
2504
+ const { __scopeDropdownMenu, virtualRef } = props;
2505
+ const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
2506
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2507
+ (0, import_react38.useEffect)(() => {
2508
+ if (virtualRef.current) {
2509
+ context.triggerRef.current = virtualRef.current;
2510
+ }
1834
2511
  });
1835
- const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1836
- tabBehavior: "limited"
2512
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Anchor, {
2513
+ ...menuScope,
2514
+ virtualRef
1837
2515
  });
1838
- const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1839
- axis: "horizontal",
1840
- tabbable: false,
1841
- circular: false,
1842
- memorizeCurrent: false
2516
+ };
2517
+ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
2518
+ var PORTAL_NAME2 = "DropdownMenuPortal";
2519
+ var DropdownMenuPortal = (props) => {
2520
+ const { __scopeDropdownMenu, ...portalProps } = props;
2521
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2522
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Portal, {
2523
+ ...menuScope,
2524
+ ...portalProps
1843
2525
  });
1844
- return /* @__PURE__ */ import_react36.default.createElement(TreegridRowProvider, {
1845
- open,
1846
- onOpenChange,
1847
- scope: __treegridRowScope
1848
- }, /* @__PURE__ */ import_react36.default.createElement(Root5, {
1849
- role: "row",
1850
- "aria-level": level,
1851
- className: tx("treegrid.row", "treegrid__row", {
1852
- level
1853
- }, classNames),
1854
- ...parentOf && {
1855
- "aria-expanded": open,
1856
- "aria-owns": parentOf
1857
- },
1858
- tabIndex: 0,
1859
- ...focusableGroupAttrs,
1860
- ...props,
1861
- id,
1862
- ref: forwardedRef
1863
- }, /* @__PURE__ */ import_react36.default.createElement("div", {
1864
- role: "none",
1865
- className: "contents",
1866
- ...arrowGroupAttrs
1867
- }, children)));
1868
- });
1869
- var TreegridCell = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, children, indent, ...props }, forwardedRef) => {
2526
+ };
2527
+ DropdownMenuPortal.displayName = PORTAL_NAME2;
2528
+ var DropdownMenuViewport = /* @__PURE__ */ (0, import_react38.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1870
2529
  const { tx } = useThemeContext();
1871
- return /* @__PURE__ */ import_react36.default.createElement("div", {
1872
- role: "gridcell",
1873
- className: tx("treegrid.cell", "treegrid__cell", {
1874
- indent
1875
- }, classNames),
2530
+ const Root7 = asChild ? import_react_slot11.Slot : import_react_primitive10.Primitive.div;
2531
+ return /* @__PURE__ */ import_react38.default.createElement(Root7, {
1876
2532
  ...props,
2533
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1877
2534
  ref: forwardedRef
1878
2535
  }, children);
1879
2536
  });
1880
- var Treegrid = {
1881
- Root: TreegridRoot,
1882
- Row: TreegridRow,
1883
- Cell: TreegridCell,
1884
- PARENT_OF_SEPARATOR,
1885
- PATH_SEPARATOR,
1886
- createTreegridRowScope,
1887
- useTreegridRowContext
1888
- };
1889
- var MotionState;
1890
- (function(MotionState2) {
1891
- MotionState2[MotionState2["IDLE"] = 0] = "IDLE";
1892
- MotionState2[MotionState2["DEBOUNCING"] = 1] = "DEBOUNCING";
1893
- MotionState2[MotionState2["FOLLOWING"] = 2] = "FOLLOWING";
1894
- })(MotionState || (MotionState = {}));
1895
- var useSwipeToDismiss = (ref, {
1896
- onDismiss,
1897
- dismissThreshold = 64,
1898
- debounceThreshold = 8,
1899
- offset = 0
1900
- /* side = 'inline-start' */
1901
- }) => {
1902
- const $root = ref.current;
1903
- const [motionState, setMotionState] = (0, import_react38.useState)(0);
1904
- const [gestureStartX, setGestureStartX] = (0, import_react38.useState)(0);
1905
- const setIdle = (0, import_react38.useCallback)(() => {
1906
- setMotionState(0);
1907
- $root?.style.removeProperty("inset-inline-start");
1908
- $root?.style.setProperty("transition-duration", "200ms");
1909
- }, [
1910
- $root
1911
- ]);
1912
- const setFollowing = (0, import_react38.useCallback)(() => {
1913
- setMotionState(2);
1914
- $root?.style.setProperty("transition-duration", "0ms");
1915
- }, [
1916
- $root
1917
- ]);
1918
- const handlePointerDown = (0, import_react38.useCallback)(({ screenX }) => {
1919
- if (motionState === 0) {
1920
- setMotionState(1);
1921
- setGestureStartX(screenX);
1922
- }
1923
- }, [
1924
- motionState
1925
- ]);
1926
- const handlePointerMove = (0, import_react38.useCallback)(({ screenX }) => {
1927
- if ($root) {
1928
- const delta = Math.min(screenX - gestureStartX, 0);
1929
- switch (motionState) {
1930
- case 2:
1931
- if (Math.abs(delta) > dismissThreshold) {
1932
- setIdle();
1933
- onDismiss?.();
1934
- } else {
1935
- $root.style.setProperty("inset-inline-start", `${offset + delta}px`);
1936
- }
1937
- break;
1938
- case 1:
1939
- if (Math.abs(delta) > debounceThreshold) {
1940
- setFollowing();
1941
- }
1942
- break;
2537
+ var CONTENT_NAME2 = "DropdownMenuContent";
2538
+ var DropdownMenuContent = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2539
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
2540
+ const { tx } = useThemeContext();
2541
+ const context = useDropdownMenuContext(CONTENT_NAME2, __scopeDropdownMenu);
2542
+ const elevation = useElevationContext();
2543
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2544
+ const hasInteractedOutsideRef = (0, import_react38.useRef)(false);
2545
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2546
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Content, {
2547
+ id: context.contentId,
2548
+ "aria-labelledby": context.triggerId,
2549
+ ...menuScope,
2550
+ ...contentProps,
2551
+ collisionPadding: safeCollisionPadding,
2552
+ ref: forwardedRef,
2553
+ onCloseAutoFocus: (0, import_primitive2.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
2554
+ if (!hasInteractedOutsideRef.current) {
2555
+ context.triggerRef.current?.focus();
1943
2556
  }
1944
- }
1945
- }, [
1946
- $root,
1947
- motionState,
1948
- gestureStartX
1949
- ]);
1950
- const handlePointerUp = (0, import_react38.useCallback)(() => {
1951
- setIdle();
1952
- }, [
1953
- setIdle
1954
- ]);
1955
- (0, import_react38.useEffect)(() => {
1956
- $root?.addEventListener("pointerdown", handlePointerDown);
1957
- return () => {
1958
- $root?.removeEventListener("pointerdown", handlePointerDown);
1959
- };
1960
- }, [
1961
- $root,
1962
- handlePointerDown
1963
- ]);
1964
- (0, import_react38.useEffect)(() => {
1965
- $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
1966
- return () => {
1967
- document.documentElement.removeEventListener("pointermove", handlePointerMove);
1968
- };
1969
- }, [
1970
- $root,
1971
- handlePointerMove
1972
- ]);
1973
- (0, import_react38.useEffect)(() => {
1974
- $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
1975
- return () => {
1976
- document.documentElement.removeEventListener("pointerup", handlePointerUp);
1977
- };
1978
- }, [
1979
- $root,
1980
- handlePointerUp
1981
- ]);
1982
- };
1983
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
1984
- var MAIN_ROOT_NAME = "MainRoot";
1985
- var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
1986
- var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
1987
- var MAIN_NAME = "Main";
1988
- var GENERIC_CONSUMER_NAME = "GenericConsumer";
1989
- var landmarkAttr = "data-main-landmark";
1990
- var useLandmarkMover = (propsOnKeyDown, landmark) => {
1991
- const handleKeyDown = (0, import_react37.useCallback)((event) => {
1992
- const target = event.target;
1993
- if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2557
+ hasInteractedOutsideRef.current = false;
1994
2558
  event.preventDefault();
1995
- const landmarks = Array.from(document.querySelectorAll(`[${landmarkAttr}]:not([inert])`)).map((el) => el.hasAttribute(landmarkAttr) ? parseInt(el.getAttribute(landmarkAttr)) : NaN).sort();
1996
- const l = landmarks.length;
1997
- const cursor = landmarks.indexOf(parseInt(target.getAttribute(landmarkAttr)));
1998
- const nextLandmark = landmarks[(cursor + l + (event.getModifierState("Shift") ? -1 : 1)) % l];
1999
- document.querySelector(`[${landmarkAttr}="${nextLandmark}"]`)?.focus();
2000
- }
2001
- propsOnKeyDown?.(event);
2002
- }, [
2003
- propsOnKeyDown
2004
- ]);
2005
- const focusableGroupAttrs = window ? {} : {
2006
- tabBehavior: "limited",
2007
- ignoreDefaultKeydown: {
2008
- Tab: true
2559
+ }),
2560
+ onInteractOutside: (0, import_primitive2.composeEventHandlers)(props.onInteractOutside, (event) => {
2561
+ const originalEvent = event.detail.originalEvent;
2562
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2563
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
2564
+ if (!context.modal || isRightClick) {
2565
+ hasInteractedOutsideRef.current = true;
2566
+ }
2567
+ }),
2568
+ className: tx("menu.content", "menu", {
2569
+ elevation
2570
+ }, classNames),
2571
+ style: {
2572
+ ...props.style,
2573
+ // re-namespace exposed content custom properties
2574
+ ...{
2575
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2576
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2577
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2578
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2579
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2580
+ }
2009
2581
  }
2010
- };
2011
- return {
2012
- onKeyDown: handleKeyDown,
2013
- [landmarkAttr]: landmark,
2014
- tabIndex: 0,
2015
- ...focusableGroupAttrs
2016
- };
2017
- };
2018
- var [MainProvider, useMainContext] = (0, import_react_context7.createContext)(MAIN_NAME, {
2019
- resizing: false,
2020
- navigationSidebarState: "closed",
2021
- setNavigationSidebarState: (nextState) => {
2022
- import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2023
- F: __dxlog_file,
2024
- L: 82,
2025
- S: void 0,
2026
- C: (f, a) => f(...a)
2027
- });
2028
- },
2029
- complementarySidebarState: "closed",
2030
- setComplementarySidebarState: (nextState) => {
2031
- import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2032
- F: __dxlog_file,
2033
- L: 87,
2034
- S: void 0,
2035
- C: (f, a) => f(...a)
2036
- });
2037
- }
2038
- });
2039
- var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2040
- const { setNavigationSidebarState, navigationSidebarState, setComplementarySidebarState, complementarySidebarState } = useMainContext(consumerName);
2041
- return {
2042
- navigationSidebarState,
2043
- setNavigationSidebarState,
2044
- toggleNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2045
- navigationSidebarState,
2046
- setNavigationSidebarState
2047
- ]),
2048
- openNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("expanded"), []),
2049
- collapseNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("collapsed"), []),
2050
- closeNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("closed"), []),
2051
- complementarySidebarState,
2052
- setComplementarySidebarState,
2053
- toggleComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2054
- complementarySidebarState,
2055
- setComplementarySidebarState
2056
- ]),
2057
- openComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("expanded"), []),
2058
- collapseComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("collapsed"), []),
2059
- closeComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("closed"), [])
2060
- };
2061
- };
2062
- var resizeDebounce = 3e3;
2063
- var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2064
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2065
- ssr: false
2066
2582
  });
2067
- const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2068
- prop: propsNavigationSidebarState,
2069
- defaultProp: defaultNavigationSidebarState,
2070
- onChange: onNavigationSidebarStateChange
2583
+ });
2584
+ DropdownMenuContent.displayName = CONTENT_NAME2;
2585
+ var GROUP_NAME = "DropdownMenuGroup";
2586
+ var DropdownMenuGroup = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2587
+ const { __scopeDropdownMenu, ...groupProps } = props;
2588
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2589
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Group, {
2590
+ ...menuScope,
2591
+ ...groupProps,
2592
+ ref: forwardedRef
2071
2593
  });
2072
- const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2073
- prop: propsComplementarySidebarState,
2074
- defaultProp: defaultComplementarySidebarState,
2075
- onChange: onComplementarySidebarStateChange
2594
+ });
2595
+ DropdownMenuGroup.displayName = GROUP_NAME;
2596
+ var LABEL_NAME = "DropdownMenuLabel";
2597
+ var DropdownMenuGroupLabel = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2598
+ const { __scopeDropdownMenu, classNames, ...labelProps } = props;
2599
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2600
+ const { tx } = useThemeContext();
2601
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Label, {
2602
+ ...menuScope,
2603
+ ...labelProps,
2604
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
2605
+ ref: forwardedRef
2076
2606
  });
2077
- const [resizing, setResizing] = (0, import_react37.useState)(false);
2078
- const resizeInterval = (0, import_react37.useRef)(null);
2079
- const handleResize = (0, import_react37.useCallback)(() => {
2080
- setResizing(true);
2081
- if (resizeInterval.current) {
2082
- clearTimeout(resizeInterval.current);
2083
- }
2084
- resizeInterval.current = setTimeout(() => {
2085
- setResizing(false);
2086
- resizeInterval.current = null;
2087
- }, resizeDebounce);
2088
- }, []);
2089
- (0, import_react37.useEffect)(() => {
2090
- window.addEventListener("resize", handleResize);
2091
- return () => window.removeEventListener("resize", handleResize);
2092
- }, [
2093
- handleResize
2094
- ]);
2095
- return /* @__PURE__ */ import_react37.default.createElement(MainProvider, {
2096
- ...props,
2097
- navigationSidebarState,
2098
- setNavigationSidebarState,
2099
- complementarySidebarState,
2100
- setComplementarySidebarState,
2101
- resizing
2102
- }, children);
2103
- };
2104
- MainRoot.displayName = MAIN_ROOT_NAME;
2105
- var handleOpenAutoFocus = (event) => {
2106
- !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
2107
- };
2108
- var MainSidebar = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2109
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2110
- ssr: false
2607
+ });
2608
+ DropdownMenuGroupLabel.displayName = LABEL_NAME;
2609
+ var ITEM_NAME = "DropdownMenuItem";
2610
+ var DropdownMenuItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2611
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
2612
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2613
+ const { tx } = useThemeContext();
2614
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Item, {
2615
+ ...menuScope,
2616
+ ...itemProps,
2617
+ className: tx("menu.item", "menu__item", {}, classNames),
2618
+ ref: forwardedRef
2111
2619
  });
2620
+ });
2621
+ DropdownMenuItem.displayName = ITEM_NAME;
2622
+ var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
2623
+ var DropdownMenuCheckboxItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2624
+ const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
2625
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2112
2626
  const { tx } = useThemeContext();
2113
- const { t } = useTranslation();
2114
- const ref = (0, import_react_hooks4.useForwardedRef)(forwardedRef);
2115
- const noopRef = (0, import_react37.useRef)(null);
2116
- useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2117
- onDismiss: () => onStateChange?.("closed")
2627
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.CheckboxItem, {
2628
+ ...menuScope,
2629
+ ...checkboxItemProps,
2630
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
2631
+ ref: forwardedRef
2118
2632
  });
2119
- const handleKeyDown = (0, import_react37.useCallback)((event) => {
2120
- if (event.key === "Escape") {
2121
- event.target.closest("[data-tabster]")?.focus();
2122
- }
2123
- props.onKeyDown?.(event);
2124
- }, [
2125
- props.onKeyDown
2126
- ]);
2127
- const Root5 = isLg ? import_react_primitive9.Primitive.div : import_react_dialog2.DialogContent;
2128
- return /* @__PURE__ */ import_react37.default.createElement(import_react_dialog2.Root, {
2129
- open: state !== "closed",
2130
- "aria-label": toLocalizedString(label, t),
2131
- modal: false
2132
- }, !isLg && /* @__PURE__ */ import_react37.default.createElement(import_react_dialog2.DialogTitle, {
2133
- className: "sr-only"
2134
- }, toLocalizedString(label, t)), /* @__PURE__ */ import_react37.default.createElement(Root5, {
2135
- ...!isLg && {
2136
- forceMount: true,
2137
- tabIndex: -1,
2138
- onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
2139
- },
2140
- ...props,
2141
- "data-side": side === "inline-end" ? "ie" : "is",
2142
- "data-state": state,
2143
- "data-resizing": resizing ? "true" : "false",
2144
- className: tx("main.sidebar", "main__sidebar", {}, classNames),
2145
- onKeyDown: handleKeyDown,
2146
- ...state === "closed" && {
2147
- inert: "true"
2148
- },
2149
- ref
2150
- }, children));
2151
2633
  });
2152
- var MainNavigationSidebar = /* @__PURE__ */ (0, import_react37.forwardRef)((props, forwardedRef) => {
2153
- const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
2154
- const mover = useLandmarkMover(props.onKeyDown, "0");
2155
- return /* @__PURE__ */ import_react37.default.createElement(MainSidebar, {
2156
- ...mover,
2157
- ...props,
2158
- state: navigationSidebarState,
2159
- onStateChange: setNavigationSidebarState,
2160
- resizing,
2161
- side: "inline-start",
2634
+ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
2635
+ var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
2636
+ var DropdownMenuRadioGroup = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2637
+ const { __scopeDropdownMenu, ...radioGroupProps } = props;
2638
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2639
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.RadioGroup, {
2640
+ ...menuScope,
2641
+ ...radioGroupProps,
2162
2642
  ref: forwardedRef
2163
2643
  });
2164
2644
  });
2165
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2166
- var MainComplementarySidebar = /* @__PURE__ */ (0, import_react37.forwardRef)((props, forwardedRef) => {
2167
- const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
2168
- const mover = useLandmarkMover(props.onKeyDown, "2");
2169
- return /* @__PURE__ */ import_react37.default.createElement(MainSidebar, {
2170
- ...mover,
2171
- ...props,
2172
- state: complementarySidebarState,
2173
- onStateChange: setComplementarySidebarState,
2174
- resizing,
2175
- side: "inline-end",
2645
+ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
2646
+ var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
2647
+ var DropdownMenuRadioItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2648
+ const { __scopeDropdownMenu, ...radioItemProps } = props;
2649
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2650
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.RadioItem, {
2651
+ ...menuScope,
2652
+ ...radioItemProps,
2176
2653
  ref: forwardedRef
2177
2654
  });
2178
2655
  });
2179
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2180
- var MainContent = /* @__PURE__ */ (0, import_react37.forwardRef)(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
2181
- const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
2182
- const { tx } = useThemeContext();
2183
- const Root5 = asChild ? import_react_slot10.Slot : role ? "div" : "main";
2184
- const mover = useLandmarkMover(props.onKeyDown, "1");
2185
- return /* @__PURE__ */ import_react37.default.createElement(Root5, {
2186
- role,
2187
- ...handlesFocus && {
2188
- ...mover
2189
- },
2190
- ...props,
2191
- "data-sidebar-inline-start-state": navigationSidebarState,
2192
- "data-sidebar-inline-end-state": complementarySidebarState,
2193
- className: tx("main.content", "main", {
2194
- bounce,
2195
- handlesFocus
2196
- }, classNames),
2656
+ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
2657
+ var INDICATOR_NAME = "DropdownMenuItemIndicator";
2658
+ var DropdownMenuItemIndicator = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2659
+ const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
2660
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2661
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.ItemIndicator, {
2662
+ ...menuScope,
2663
+ ...itemIndicatorProps,
2197
2664
  ref: forwardedRef
2198
- }, children);
2665
+ });
2199
2666
  });
2200
- MainContent.displayName = MAIN_NAME;
2201
- var MainOverlay = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2202
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2203
- ssr: false
2667
+ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
2668
+ var SEPARATOR_NAME = "DropdownMenuSeparator";
2669
+ var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2670
+ const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
2671
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2672
+ const { tx } = useThemeContext();
2673
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Separator, {
2674
+ ...menuScope,
2675
+ ...separatorProps,
2676
+ className: tx("menu.separator", "menu__item", {}, classNames),
2677
+ ref: forwardedRef
2204
2678
  });
2205
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2679
+ });
2680
+ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
2681
+ var ARROW_NAME2 = "DropdownMenuArrow";
2682
+ var DropdownMenuArrow = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2683
+ const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
2684
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2206
2685
  const { tx } = useThemeContext();
2207
- return /* @__PURE__ */ import_react37.default.createElement("div", {
2208
- onClick: () => {
2209
- setNavigationSidebarState("collapsed");
2210
- setComplementarySidebarState("collapsed");
2211
- },
2212
- ...props,
2213
- className: tx("main.overlay", "main__overlay", {
2214
- isLg,
2215
- inlineStartSidebarOpen: navigationSidebarState,
2216
- inlineEndSidebarOpen: complementarySidebarState
2217
- }, classNames),
2218
- "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
2219
- "aria-hidden": "true",
2686
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Arrow, {
2687
+ ...menuScope,
2688
+ ...arrowProps,
2689
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
2220
2690
  ref: forwardedRef
2221
2691
  });
2222
2692
  });
2223
- var Main = {
2224
- Root: MainRoot,
2225
- Content: MainContent,
2226
- Overlay: MainOverlay,
2227
- NavigationSidebar: MainNavigationSidebar,
2228
- ComplementarySidebar: MainComplementarySidebar
2693
+ DropdownMenuArrow.displayName = ARROW_NAME2;
2694
+ var DropdownMenuSub = (props) => {
2695
+ const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
2696
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2697
+ const [open = false, setOpen] = (0, import_react_use_controllable_state5.useControllableState)({
2698
+ prop: openProp,
2699
+ defaultProp: defaultOpen,
2700
+ onChange: onOpenChange
2701
+ });
2702
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Sub, {
2703
+ ...menuScope,
2704
+ open,
2705
+ onOpenChange: setOpen
2706
+ }, children);
2707
+ };
2708
+ var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
2709
+ var DropdownMenuSubTrigger = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2710
+ const { __scopeDropdownMenu, ...subTriggerProps } = props;
2711
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2712
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.SubTrigger, {
2713
+ ...menuScope,
2714
+ ...subTriggerProps,
2715
+ ref: forwardedRef
2716
+ });
2717
+ });
2718
+ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
2719
+ var SUB_CONTENT_NAME = "DropdownMenuSubContent";
2720
+ var DropdownMenuSubContent = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2721
+ const { __scopeDropdownMenu, ...subContentProps } = props;
2722
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2723
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.SubContent, {
2724
+ ...menuScope,
2725
+ ...subContentProps,
2726
+ ref: forwardedRef,
2727
+ style: {
2728
+ ...props.style,
2729
+ // re-namespace exposed content custom properties
2730
+ ...{
2731
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2732
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2733
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2734
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2735
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2736
+ }
2737
+ }
2738
+ });
2739
+ });
2740
+ DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
2741
+ var DropdownMenu = {
2742
+ Root: DropdownMenuRoot,
2743
+ Trigger: DropdownMenuTrigger,
2744
+ VirtualTrigger: DropdownMenuVirtualTrigger,
2745
+ Portal: DropdownMenuPortal,
2746
+ Content: DropdownMenuContent,
2747
+ Viewport: DropdownMenuViewport,
2748
+ Group: DropdownMenuGroup,
2749
+ GroupLabel: DropdownMenuGroupLabel,
2750
+ Item: DropdownMenuItem,
2751
+ CheckboxItem: DropdownMenuCheckboxItem,
2752
+ RadioGroup: DropdownMenuRadioGroup,
2753
+ RadioItem: DropdownMenuRadioItem,
2754
+ ItemIndicator: DropdownMenuItemIndicator,
2755
+ Separator: DropdownMenuSeparator,
2756
+ Arrow: DropdownMenuArrow,
2757
+ Sub: DropdownMenuSub,
2758
+ SubTrigger: DropdownMenuSubTrigger,
2759
+ SubContent: DropdownMenuSubContent
2229
2760
  };
2761
+ var useDropdownMenuMenuScope = useMenuScope;
2230
2762
  var MESSAGE_NAME = "Message";
2231
- var [MessageProvider, useMessageContext] = (0, import_react_context8.createContext)(MESSAGE_NAME);
2763
+ var [MessageProvider, useMessageContext] = (0, import_react_context9.createContext)(MESSAGE_NAME);
2232
2764
  var MessageRoot = /* @__PURE__ */ (0, import_react39.forwardRef)(({ asChild, valence, elevation: propsElevation, className, titleId: propsTitleId, descriptionId: propsDescriptionId, children, ...props }, forwardedRef) => {
2233
2765
  const { tx } = useThemeContext();
2234
2766
  const titleId = (0, import_react_hooks5.useId)("message__title", propsTitleId);
2235
2767
  const descriptionId = (0, import_react_hooks5.useId)("message__description", propsDescriptionId);
2236
2768
  const elevation = useElevationContext(propsElevation);
2237
- const Root5 = asChild ? import_react_slot11.Slot : import_react_primitive10.Primitive.div;
2769
+ const Root7 = asChild ? import_react_slot12.Slot : import_react_primitive11.Primitive.div;
2238
2770
  return /* @__PURE__ */ import_react39.default.createElement(MessageProvider, {
2239
2771
  titleId,
2240
2772
  descriptionId
2241
- }, /* @__PURE__ */ import_react39.default.createElement(Root5, {
2773
+ }, /* @__PURE__ */ import_react39.default.createElement(Root7, {
2242
2774
  ...props,
2243
2775
  className: tx("message.root", "message", {
2244
2776
  valence,
@@ -2254,8 +2786,8 @@ var MESSAGE_TITLE_NAME = "MessageTitle";
2254
2786
  var MessageTitle = /* @__PURE__ */ (0, import_react39.forwardRef)(({ asChild, className, children, ...props }, forwardedRef) => {
2255
2787
  const { tx } = useThemeContext();
2256
2788
  const { titleId } = useMessageContext(MESSAGE_TITLE_NAME);
2257
- const Root5 = asChild ? import_react_slot11.Slot : import_react_primitive10.Primitive.h2;
2258
- return /* @__PURE__ */ import_react39.default.createElement(Root5, {
2789
+ const Root7 = asChild ? import_react_slot12.Slot : import_react_primitive11.Primitive.h2;
2790
+ return /* @__PURE__ */ import_react39.default.createElement(Root7, {
2259
2791
  ...props,
2260
2792
  className: tx("message.title", "message__title", {}, className),
2261
2793
  id: titleId,
@@ -2267,8 +2799,8 @@ var MESSAGE_BODY_NAME = "MessageBody";
2267
2799
  var MessageBody = /* @__PURE__ */ (0, import_react39.forwardRef)(({ asChild, className, children, ...props }, forwardedRef) => {
2268
2800
  const { tx } = useThemeContext();
2269
2801
  const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
2270
- const Root5 = asChild ? import_react_slot11.Slot : import_react_primitive10.Primitive.p;
2271
- return /* @__PURE__ */ import_react39.default.createElement(Root5, {
2802
+ const Root7 = asChild ? import_react_slot12.Slot : import_react_primitive11.Primitive.p;
2803
+ return /* @__PURE__ */ import_react39.default.createElement(Root7, {
2272
2804
  ...props,
2273
2805
  className: tx("message.body", "message__body", {}, className),
2274
2806
  id: descriptionId,
@@ -2282,24 +2814,24 @@ var Message = {
2282
2814
  Body: MessageBody
2283
2815
  };
2284
2816
  var POPOVER_NAME = "Popover";
2285
- var [createPopoverContext, createPopoverScope] = (0, import_react_context9.createContextScope)(POPOVER_NAME, [
2286
- import_react_popper.createPopperScope
2817
+ var [createPopoverContext, createPopoverScope] = (0, import_react_context10.createContextScope)(POPOVER_NAME, [
2818
+ import_react_popper2.createPopperScope
2287
2819
  ]);
2288
- var usePopperScope = (0, import_react_popper.createPopperScope)();
2820
+ var usePopperScope2 = (0, import_react_popper2.createPopperScope)();
2289
2821
  var [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);
2290
2822
  var PopoverRoot = (props) => {
2291
2823
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
2292
- const popperScope = usePopperScope(__scopePopover);
2824
+ const popperScope = usePopperScope2(__scopePopover);
2293
2825
  const triggerRef = (0, import_react40.useRef)(null);
2294
2826
  const [hasCustomAnchor, setHasCustomAnchor] = (0, import_react40.useState)(false);
2295
- const [open = false, setOpen] = (0, import_react_use_controllable_state5.useControllableState)({
2827
+ const [open = false, setOpen] = (0, import_react_use_controllable_state6.useControllableState)({
2296
2828
  prop: openProp,
2297
2829
  defaultProp: defaultOpen,
2298
2830
  onChange: onOpenChange
2299
2831
  });
2300
- return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Root, popperScope, /* @__PURE__ */ import_react40.default.createElement(PopoverProvider, {
2832
+ return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Root, popperScope, /* @__PURE__ */ import_react40.default.createElement(PopoverProvider, {
2301
2833
  scope: __scopePopover,
2302
- contentId: (0, import_react_id2.useId)(),
2834
+ contentId: (0, import_react_id3.useId)(),
2303
2835
  triggerRef,
2304
2836
  open,
2305
2837
  onOpenChange: setOpen,
@@ -2317,7 +2849,7 @@ var ANCHOR_NAME = "PopoverAnchor";
2317
2849
  var PopoverAnchor = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2318
2850
  const { __scopePopover, ...anchorProps } = props;
2319
2851
  const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
2320
- const popperScope = usePopperScope(__scopePopover);
2852
+ const popperScope = usePopperScope2(__scopePopover);
2321
2853
  const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
2322
2854
  (0, import_react40.useEffect)(() => {
2323
2855
  onCustomAnchorAdd();
@@ -2326,20 +2858,20 @@ var PopoverAnchor = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwa
2326
2858
  onCustomAnchorAdd,
2327
2859
  onCustomAnchorRemove
2328
2860
  ]);
2329
- return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Anchor, {
2861
+ return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Anchor, {
2330
2862
  ...popperScope,
2331
2863
  ...anchorProps,
2332
2864
  ref: forwardedRef
2333
2865
  });
2334
2866
  });
2335
2867
  PopoverAnchor.displayName = ANCHOR_NAME;
2336
- var TRIGGER_NAME2 = "PopoverTrigger";
2868
+ var TRIGGER_NAME3 = "PopoverTrigger";
2337
2869
  var PopoverTrigger = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2338
2870
  const { __scopePopover, ...triggerProps } = props;
2339
- const context = usePopoverContext(TRIGGER_NAME2, __scopePopover);
2340
- const popperScope = usePopperScope(__scopePopover);
2341
- const composedTriggerRef = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, context.triggerRef);
2342
- const trigger = /* @__PURE__ */ import_react40.default.createElement(import_react_primitive11.Primitive.button, {
2871
+ const context = usePopoverContext(TRIGGER_NAME3, __scopePopover);
2872
+ const popperScope = usePopperScope2(__scopePopover);
2873
+ const composedTriggerRef = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, context.triggerRef);
2874
+ const trigger = /* @__PURE__ */ import_react40.default.createElement(import_react_primitive12.Primitive.button, {
2343
2875
  type: "button",
2344
2876
  "aria-haspopup": "dialog",
2345
2877
  "aria-expanded": context.open,
@@ -2347,54 +2879,54 @@ var PopoverTrigger = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forw
2347
2879
  "data-state": getState(context.open),
2348
2880
  ...triggerProps,
2349
2881
  ref: composedTriggerRef,
2350
- onClick: (0, import_primitive2.composeEventHandlers)(props.onClick, context.onOpenToggle)
2882
+ onClick: (0, import_primitive3.composeEventHandlers)(props.onClick, context.onOpenToggle)
2351
2883
  });
2352
- return context.hasCustomAnchor ? trigger : /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Anchor, {
2884
+ return context.hasCustomAnchor ? trigger : /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Anchor, {
2353
2885
  asChild: true,
2354
2886
  ...popperScope
2355
2887
  }, trigger);
2356
2888
  });
2357
- PopoverTrigger.displayName = TRIGGER_NAME2;
2889
+ PopoverTrigger.displayName = TRIGGER_NAME3;
2358
2890
  var VIRTUAL_TRIGGER_NAME2 = "PopoverVirtualTrigger";
2359
2891
  var PopoverVirtualTrigger = (props) => {
2360
2892
  const { __scopePopover, virtualRef } = props;
2361
2893
  const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
2362
- const popperScope = usePopperScope(__scopePopover);
2894
+ const popperScope = usePopperScope2(__scopePopover);
2363
2895
  (0, import_react40.useEffect)(() => {
2364
2896
  if (virtualRef.current) {
2365
2897
  context.triggerRef.current = virtualRef.current;
2366
2898
  }
2367
2899
  });
2368
- return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Anchor, {
2900
+ return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Anchor, {
2369
2901
  ...popperScope,
2370
2902
  virtualRef
2371
2903
  });
2372
2904
  };
2373
2905
  PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME2;
2374
- var PORTAL_NAME2 = "PopoverPortal";
2375
- var [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME2, {
2906
+ var PORTAL_NAME3 = "PopoverPortal";
2907
+ var [PortalProvider2, usePortalContext2] = createPopoverContext(PORTAL_NAME3, {
2376
2908
  forceMount: void 0
2377
2909
  });
2378
2910
  var PopoverPortal = (props) => {
2379
2911
  const { __scopePopover, forceMount, children, container } = props;
2380
- const context = usePopoverContext(PORTAL_NAME2, __scopePopover);
2381
- return /* @__PURE__ */ import_react40.default.createElement(PortalProvider, {
2912
+ const context = usePopoverContext(PORTAL_NAME3, __scopePopover);
2913
+ return /* @__PURE__ */ import_react40.default.createElement(PortalProvider2, {
2382
2914
  scope: __scopePopover,
2383
2915
  forceMount
2384
- }, /* @__PURE__ */ import_react40.default.createElement(import_react_presence.Presence, {
2916
+ }, /* @__PURE__ */ import_react40.default.createElement(import_react_presence2.Presence, {
2385
2917
  present: forceMount || context.open
2386
- }, /* @__PURE__ */ import_react40.default.createElement(import_react_portal.Portal, {
2918
+ }, /* @__PURE__ */ import_react40.default.createElement(import_react_portal2.Portal, {
2387
2919
  asChild: true,
2388
2920
  container
2389
2921
  }, children)));
2390
2922
  };
2391
- PopoverPortal.displayName = PORTAL_NAME2;
2392
- var CONTENT_NAME2 = "PopoverContent";
2923
+ PopoverPortal.displayName = PORTAL_NAME3;
2924
+ var CONTENT_NAME3 = "PopoverContent";
2393
2925
  var PopoverContent = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2394
- const portalContext = usePortalContext(CONTENT_NAME2, props.__scopePopover);
2926
+ const portalContext = usePortalContext2(CONTENT_NAME3, props.__scopePopover);
2395
2927
  const { forceMount = portalContext.forceMount, ...contentProps } = props;
2396
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2397
- return /* @__PURE__ */ import_react40.default.createElement(import_react_presence.Presence, {
2928
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2929
+ return /* @__PURE__ */ import_react40.default.createElement(import_react_presence2.Presence, {
2398
2930
  present: forceMount || context.open
2399
2931
  }, context.modal ? /* @__PURE__ */ import_react40.default.createElement(PopoverContentModal, {
2400
2932
  ...contentProps,
@@ -2404,11 +2936,11 @@ var PopoverContent = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forw
2404
2936
  ref: forwardedRef
2405
2937
  }));
2406
2938
  });
2407
- PopoverContent.displayName = CONTENT_NAME2;
2939
+ PopoverContent.displayName = CONTENT_NAME3;
2408
2940
  var PopoverContentModal = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2409
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2941
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2410
2942
  const contentRef = (0, import_react40.useRef)(null);
2411
- const composedRefs = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, contentRef);
2943
+ const composedRefs = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, contentRef);
2412
2944
  const isRightClickOutsideRef = (0, import_react40.useRef)(false);
2413
2945
  (0, import_react40.useEffect)(() => {
2414
2946
  const content = contentRef.current;
@@ -2417,7 +2949,7 @@ var PopoverContentModal = /* @__PURE__ */ (0, import_react40.forwardRef)((props,
2417
2949
  }
2418
2950
  }, []);
2419
2951
  return /* @__PURE__ */ import_react40.default.createElement(import_react_remove_scroll.RemoveScroll, {
2420
- as: import_react_slot12.Slot,
2952
+ as: import_react_slot13.Slot,
2421
2953
  allowPinchZoom: true
2422
2954
  }, /* @__PURE__ */ import_react40.default.createElement(PopoverContentImpl, {
2423
2955
  ...props,
@@ -2426,13 +2958,13 @@ var PopoverContentModal = /* @__PURE__ */ (0, import_react40.forwardRef)((props,
2426
2958
  // (closed !== unmounted when animating out)
2427
2959
  trapFocus: context.open,
2428
2960
  disableOutsidePointerEvents: true,
2429
- onCloseAutoFocus: (0, import_primitive2.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
2961
+ onCloseAutoFocus: (0, import_primitive3.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
2430
2962
  event.preventDefault();
2431
2963
  if (!isRightClickOutsideRef.current) {
2432
2964
  context.triggerRef.current?.focus();
2433
2965
  }
2434
2966
  }),
2435
- onPointerDownOutside: (0, import_primitive2.composeEventHandlers)(props.onPointerDownOutside, (event) => {
2967
+ onPointerDownOutside: (0, import_primitive3.composeEventHandlers)(props.onPointerDownOutside, (event) => {
2436
2968
  const originalEvent = event.detail.originalEvent;
2437
2969
  const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2438
2970
  const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
@@ -2442,13 +2974,13 @@ var PopoverContentModal = /* @__PURE__ */ (0, import_react40.forwardRef)((props,
2442
2974
  }),
2443
2975
  // When focus is trapped, a `focusout` event may still happen.
2444
2976
  // We make sure we don't trigger our `onDismiss` in such case.
2445
- onFocusOutside: (0, import_primitive2.composeEventHandlers)(props.onFocusOutside, (event) => event.preventDefault(), {
2977
+ onFocusOutside: (0, import_primitive3.composeEventHandlers)(props.onFocusOutside, (event) => event.preventDefault(), {
2446
2978
  checkForDefaultPrevented: false
2447
2979
  })
2448
2980
  }));
2449
2981
  });
2450
2982
  var PopoverContentNonModal = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2451
- const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2983
+ const context = usePopoverContext(CONTENT_NAME3, props.__scopePopover);
2452
2984
  const hasInteractedOutsideRef = (0, import_react40.useRef)(false);
2453
2985
  const hasPointerDownOutsideRef = (0, import_react40.useRef)(false);
2454
2986
  return /* @__PURE__ */ import_react40.default.createElement(PopoverContentImpl, {
@@ -2488,8 +3020,8 @@ var PopoverContentNonModal = /* @__PURE__ */ (0, import_react40.forwardRef)((pro
2488
3020
  });
2489
3021
  var PopoverContentImpl = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2490
3022
  const { __scopePopover, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, collisionPadding = 8, classNames, ...contentProps } = props;
2491
- const context = usePopoverContext(CONTENT_NAME2, __scopePopover);
2492
- const popperScope = usePopperScope(__scopePopover);
3023
+ const context = usePopoverContext(CONTENT_NAME3, __scopePopover);
3024
+ const popperScope = usePopperScope2(__scopePopover);
2493
3025
  const { tx } = useThemeContext();
2494
3026
  const elevation = useElevationContext();
2495
3027
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
@@ -2500,7 +3032,7 @@ var PopoverContentImpl = /* @__PURE__ */ (0, import_react40.forwardRef)((props,
2500
3032
  trapped: trapFocus,
2501
3033
  onMountAutoFocus: onOpenAutoFocus,
2502
3034
  onUnmountAutoFocus: onCloseAutoFocus
2503
- }, /* @__PURE__ */ import_react40.default.createElement(import_react_dismissable_layer.DismissableLayer, {
3035
+ }, /* @__PURE__ */ import_react40.default.createElement(import_react_dismissable_layer2.DismissableLayer, {
2504
3036
  asChild: true,
2505
3037
  disableOutsidePointerEvents,
2506
3038
  onInteractOutside,
@@ -2508,7 +3040,7 @@ var PopoverContentImpl = /* @__PURE__ */ (0, import_react40.forwardRef)((props,
2508
3040
  onPointerDownOutside,
2509
3041
  onFocusOutside,
2510
3042
  onDismiss: () => context.onOpenChange(false)
2511
- }, /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Content, {
3043
+ }, /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Content, {
2512
3044
  "data-state": getState(context.open),
2513
3045
  role: "dialog",
2514
3046
  id: context.contentId,
@@ -2536,31 +3068,31 @@ var CLOSE_NAME = "PopoverClose";
2536
3068
  var PopoverClose = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2537
3069
  const { __scopePopover, ...closeProps } = props;
2538
3070
  const context = usePopoverContext(CLOSE_NAME, __scopePopover);
2539
- return /* @__PURE__ */ import_react40.default.createElement(import_react_primitive11.Primitive.button, {
3071
+ return /* @__PURE__ */ import_react40.default.createElement(import_react_primitive12.Primitive.button, {
2540
3072
  type: "button",
2541
3073
  ...closeProps,
2542
3074
  ref: forwardedRef,
2543
- onClick: (0, import_primitive2.composeEventHandlers)(props.onClick, () => context.onOpenChange(false))
3075
+ onClick: (0, import_primitive3.composeEventHandlers)(props.onClick, () => context.onOpenChange(false))
2544
3076
  });
2545
3077
  });
2546
3078
  PopoverClose.displayName = CLOSE_NAME;
2547
- var ARROW_NAME2 = "PopoverArrow";
3079
+ var ARROW_NAME3 = "PopoverArrow";
2548
3080
  var PopoverArrow = /* @__PURE__ */ (0, import_react40.forwardRef)((props, forwardedRef) => {
2549
3081
  const { __scopePopover, classNames, ...arrowProps } = props;
2550
- const popperScope = usePopperScope(__scopePopover);
3082
+ const popperScope = usePopperScope2(__scopePopover);
2551
3083
  const { tx } = useThemeContext();
2552
- return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive.Arrow, {
3084
+ return /* @__PURE__ */ import_react40.default.createElement(PopperPrimitive2.Arrow, {
2553
3085
  ...popperScope,
2554
3086
  ...arrowProps,
2555
3087
  className: tx("popover.arrow", "popover__arrow", {}, classNames),
2556
3088
  ref: forwardedRef
2557
3089
  });
2558
3090
  });
2559
- PopoverArrow.displayName = ARROW_NAME2;
3091
+ PopoverArrow.displayName = ARROW_NAME3;
2560
3092
  var PopoverViewport = /* @__PURE__ */ (0, import_react40.forwardRef)(({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
2561
3093
  const { tx } = useThemeContext();
2562
- const Root5 = asChild ? import_react_slot12.Slot : import_react_primitive11.Primitive.div;
2563
- return /* @__PURE__ */ import_react40.default.createElement(Root5, {
3094
+ const Root7 = asChild ? import_react_slot13.Slot : import_react_primitive12.Primitive.div;
3095
+ return /* @__PURE__ */ import_react40.default.createElement(Root7, {
2564
3096
  ...props,
2565
3097
  className: tx("popover.viewport", "popover__viewport", {
2566
3098
  constrainInline,
@@ -2795,8 +3327,8 @@ var Separator4 = /* @__PURE__ */ (0, import_react45.forwardRef)(({ classNames, o
2795
3327
  });
2796
3328
  var Tag = /* @__PURE__ */ (0, import_react46.forwardRef)(({ asChild, palette = "neutral", classNames, ...props }, forwardedRef) => {
2797
3329
  const { tx } = useThemeContext();
2798
- const Root5 = asChild ? import_react_slot13.Slot : import_react_primitive12.Primitive.span;
2799
- return /* @__PURE__ */ import_react46.default.createElement(Root5, {
3330
+ const Root7 = asChild ? import_react_slot14.Slot : import_react_primitive13.Primitive.span;
3331
+ return /* @__PURE__ */ import_react46.default.createElement(Root7, {
2800
3332
  ...props,
2801
3333
  className: tx("tag.root", "dx-tag", {
2802
3334
  palette
@@ -2825,8 +3357,8 @@ var ToastRoot = /* @__PURE__ */ (0, import_react47.forwardRef)(({ classNames, ch
2825
3357
  });
2826
3358
  var ToastBody = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
2827
3359
  const { tx } = useThemeContext();
2828
- const Root5 = asChild ? import_react_slot14.Slot : import_react_primitive13.Primitive.div;
2829
- return /* @__PURE__ */ import_react47.default.createElement(Root5, {
3360
+ const Root7 = asChild ? import_react_slot15.Slot : import_react_primitive14.Primitive.div;
3361
+ return /* @__PURE__ */ import_react47.default.createElement(Root7, {
2830
3362
  ...props,
2831
3363
  className: tx("toast.body", "toast__body", {}, classNames),
2832
3364
  ref: forwardedRef
@@ -2834,8 +3366,8 @@ var ToastBody = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, class
2834
3366
  });
2835
3367
  var ToastTitle = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
2836
3368
  const { tx } = useThemeContext();
2837
- const Root5 = asChild ? import_react_slot14.Slot : import_react_toast.ToastTitle;
2838
- return /* @__PURE__ */ import_react47.default.createElement(Root5, {
3369
+ const Root7 = asChild ? import_react_slot15.Slot : import_react_toast.ToastTitle;
3370
+ return /* @__PURE__ */ import_react47.default.createElement(Root7, {
2839
3371
  ...props,
2840
3372
  className: tx("toast.title", "toast__title", {}, classNames),
2841
3373
  ref: forwardedRef
@@ -2843,8 +3375,8 @@ var ToastTitle = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, clas
2843
3375
  });
2844
3376
  var ToastDescription = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
2845
3377
  const { tx } = useThemeContext();
2846
- const Root5 = asChild ? import_react_slot14.Slot : import_react_toast.ToastDescription;
2847
- return /* @__PURE__ */ import_react47.default.createElement(Root5, {
3378
+ const Root7 = asChild ? import_react_slot15.Slot : import_react_toast.ToastDescription;
3379
+ return /* @__PURE__ */ import_react47.default.createElement(Root7, {
2848
3380
  ...props,
2849
3381
  className: tx("toast.description", "toast__description", {}, classNames),
2850
3382
  ref: forwardedRef
@@ -2852,8 +3384,8 @@ var ToastDescription = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild
2852
3384
  });
2853
3385
  var ToastActions = /* @__PURE__ */ (0, import_react47.forwardRef)(({ asChild, classNames, ...props }, forwardedRef) => {
2854
3386
  const { tx } = useThemeContext();
2855
- const Root5 = asChild ? import_react_slot14.Slot : import_react_primitive13.Primitive.div;
2856
- return /* @__PURE__ */ import_react47.default.createElement(Root5, {
3387
+ const Root7 = asChild ? import_react_slot15.Slot : import_react_primitive14.Primitive.div;
3388
+ return /* @__PURE__ */ import_react47.default.createElement(Root7, {
2857
3389
  ...props,
2858
3390
  className: tx("toast.actions", "toast__actions", {}, classNames),
2859
3391
  ref: forwardedRef
@@ -3020,6 +3552,7 @@ var Toolbar = {
3020
3552
  Treegrid,
3021
3553
  createDropdownMenuScope,
3022
3554
  createPopoverScope,
3555
+ createTooltipScope,
3023
3556
  hasIosKeyboard,
3024
3557
  initialSafeArea,
3025
3558
  isLabel,
@@ -3039,6 +3572,7 @@ var Toolbar = {
3039
3572
  useSafeArea,
3040
3573
  useSidebars,
3041
3574
  useThemeContext,
3575
+ useTooltipContext,
3042
3576
  useTranslation,
3043
3577
  useTranslationsContext,
3044
3578
  useVisualViewport,