@dxos/react-ui 0.8.1 → 0.8.2-main.2f9c567

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.
@@ -159,47 +159,47 @@ var import_react26 = __toESM(require("react"));
159
159
  var import_react_alert_dialog = require("@radix-ui/react-alert-dialog");
160
160
  var import_react_context4 = require("@radix-ui/react-context");
161
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
- 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"));
176
162
  var import_react_checkbox = require("@radix-ui/react-checkbox");
177
- var import_react_use_controllable_state2 = require("@radix-ui/react-use-controllable-state");
178
- var import_react30 = __toESM(require("react"));
163
+ var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
164
+ var import_react28 = __toESM(require("react"));
179
165
  var import_react_input = require("@dxos/react-input");
180
166
  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"));
167
+ var import_react29 = require("@phosphor-icons/react");
168
+ var import_react_slot6 = require("@radix-ui/react-slot");
169
+ var import_react30 = __toESM(require("react"));
184
170
  var import_react_list = require("@dxos/react-list");
171
+ var import_react31 = __toESM(require("react"));
172
+ var import_react32 = __toESM(require("react"));
185
173
  var import_react33 = __toESM(require("react"));
186
- var import_react34 = __toESM(require("react"));
187
- var import_react35 = __toESM(require("react"));
188
174
  var import_react_tabster = require("@fluentui/react-tabster");
175
+ var import_react_context5 = require("@radix-ui/react-context");
176
+ var import_react_primitive6 = require("@radix-ui/react-primitive");
177
+ var import_react_slot7 = require("@radix-ui/react-slot");
178
+ var import_react_use_controllable_state2 = require("@radix-ui/react-use-controllable-state");
179
+ var import_react34 = __toESM(require("react"));
189
180
  var import_react_context6 = require("@radix-ui/react-context");
181
+ var import_react_dialog2 = require("@radix-ui/react-dialog");
182
+ var import_react_primitive7 = require("@radix-ui/react-primitive");
183
+ var import_react_slot8 = require("@radix-ui/react-slot");
184
+ var import_react_use_controllable_state3 = require("@radix-ui/react-use-controllable-state");
185
+ var import_react35 = __toESM(require("react"));
186
+ var import_log = require("@dxos/log");
187
+ var import_react_hooks4 = require("@dxos/react-hooks");
188
+ var import_react36 = require("react");
189
+ var ContextMenuPrimitive = __toESM(require("@radix-ui/react-context-menu"));
190
190
  var import_react_primitive8 = require("@radix-ui/react-primitive");
191
191
  var import_react_slot9 = require("@radix-ui/react-slot");
192
- var import_react_use_controllable_state3 = require("@radix-ui/react-use-controllable-state");
193
- var import_react36 = __toESM(require("react"));
192
+ var import_react37 = __toESM(require("react"));
193
+ var import_primitive = require("@radix-ui/primitive");
194
+ var import_react_compose_refs = require("@radix-ui/react-compose-refs");
194
195
  var import_react_context7 = require("@radix-ui/react-context");
195
- var import_react_dialog2 = require("@radix-ui/react-dialog");
196
+ var import_react_id = require("@radix-ui/react-id");
197
+ var MenuPrimitive = __toESM(require("@radix-ui/react-menu"));
198
+ var import_react_menu = require("@radix-ui/react-menu");
196
199
  var import_react_primitive9 = require("@radix-ui/react-primitive");
197
200
  var import_react_slot10 = require("@radix-ui/react-slot");
198
201
  var import_react_use_controllable_state4 = require("@radix-ui/react-use-controllable-state");
199
- var import_react37 = __toESM(require("react"));
200
- var import_log = require("@dxos/log");
201
- var import_react_hooks4 = require("@dxos/react-hooks");
202
- var import_react38 = require("react");
202
+ var import_react38 = __toESM(require("react"));
203
203
  var import_react_context8 = require("@radix-ui/react-context");
204
204
  var import_react_primitive10 = require("@radix-ui/react-primitive");
205
205
  var import_react_slot11 = require("@radix-ui/react-slot");
@@ -386,17 +386,18 @@ var DxAvatar = (0, import_react9.createComponent)({
386
386
  elementClass: import_lit_ui.DxAvatar,
387
387
  react: import_react10.default
388
388
  });
389
- var AvatarContent = ({ icon, classNames, ...props }) => {
389
+ var AvatarContent = /* @__PURE__ */ (0, import_react10.forwardRef)(({ icon, classNames, ...props }, forwardedRef) => {
390
390
  const href = useIconHref(icon);
391
391
  const { labelId, descriptionId } = useAvatarContext("AvatarContent");
392
392
  return /* @__PURE__ */ import_react10.default.createElement(DxAvatar, {
393
393
  ...props,
394
394
  icon: href,
395
- labelId,
395
+ "aria-labelledby": labelId,
396
396
  "aria-describedby": descriptionId,
397
- rootClassName: (0, import_react_ui_theme.mx)(classNames)
397
+ rootClassName: (0, import_react_ui_theme.mx)(classNames),
398
+ ref: forwardedRef
398
399
  });
399
- };
400
+ });
400
401
  var AvatarLabel = /* @__PURE__ */ (0, import_react10.forwardRef)(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
401
402
  const Root5 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
402
403
  const { tx } = useThemeContext();
@@ -902,6 +903,7 @@ var DialogContent = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames
902
903
  const { tx } = useThemeContext();
903
904
  const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
904
905
  return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogContent, {
906
+ "aria-describedby": void 0,
905
907
  ...props,
906
908
  className: tx("dialog.content", "dialog", {
907
909
  inOverlayLayout: propsInOverlayLayout || inOverlayLayout
@@ -987,1244 +989,1244 @@ var AlertDialog = {
987
989
  Cancel: AlertDialogCancel,
988
990
  Action: AlertDialogAction
989
991
  };
990
- var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
991
- var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
992
- var ContextMenuPortal = ContextMenuPrimitive.Portal;
993
- var ContextMenuContent = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
992
+ var Label = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
994
993
  const { tx } = useThemeContext();
995
- const elevation = useElevationContext();
996
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
997
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Content, {
994
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.Label, {
998
995
  ...props,
999
- collisionPadding: safeCollisionPadding,
1000
- className: tx("menu.content", "menu", {
1001
- elevation
996
+ className: tx("input.label", "input__label", {
997
+ srOnly
1002
998
  }, classNames),
1003
999
  ref: forwardedRef
1004
1000
  }, children);
1005
1001
  });
1006
- var ContextMenuViewport = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1002
+ var Description = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1007
1003
  const { tx } = useThemeContext();
1008
- const Root5 = asChild ? import_react_slot6.Slot : import_react_primitive6.Primitive.div;
1009
- return /* @__PURE__ */ import_react28.default.createElement(Root5, {
1004
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.Description, {
1010
1005
  ...props,
1011
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1006
+ className: tx("input.description", "input__description", {
1007
+ srOnly
1008
+ }, classNames),
1012
1009
  ref: forwardedRef
1013
1010
  }, children);
1014
1011
  });
1015
- var ContextMenuArrow = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1012
+ var Validation = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1016
1013
  const { tx } = useThemeContext();
1017
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Arrow, {
1014
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1015
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.Validation, {
1018
1016
  ...props,
1019
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1017
+ className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1018
+ srOnly,
1019
+ validationValence
1020
+ }, classNames),
1020
1021
  ref: forwardedRef
1021
- });
1022
+ }, children);
1022
1023
  });
1023
- var ContextMenuGroup = ContextMenuPrimitive.Group;
1024
- var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1025
- var ContextMenuItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1024
+ var DescriptionAndValidation = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1026
1025
  const { tx } = useThemeContext();
1027
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Item, {
1026
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.DescriptionAndValidation, {
1028
1027
  ...props,
1029
- className: tx("menu.item", "menu__item", {}, classNames),
1028
+ className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1029
+ srOnly
1030
+ }, classNames),
1030
1031
  ref: forwardedRef
1031
- });
1032
+ }, children);
1032
1033
  });
1033
- var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1034
+ var PinInput = /* @__PURE__ */ (0, import_react28.forwardRef)(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1035
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1034
1036
  const { tx } = useThemeContext();
1035
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.CheckboxItem, {
1037
+ const density = useDensityContext(propsDensity);
1038
+ const elevation = useElevationContext(propsElevation);
1039
+ const segmentClassName = (0, import_react28.useCallback)(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1040
+ variant: "static",
1041
+ focused,
1042
+ disabled: props.disabled,
1043
+ density,
1044
+ elevation,
1045
+ validationValence
1046
+ }, propsSegmentClassName), [
1047
+ tx,
1048
+ props.disabled,
1049
+ elevation,
1050
+ propsElevation,
1051
+ density
1052
+ ]);
1053
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.PinInput, {
1036
1054
  ...props,
1037
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1055
+ segmentClassName,
1056
+ ...props.autoFocus && !hasIosKeyboard2 && {
1057
+ autoFocus: true
1058
+ },
1059
+ inputClassName: tx("input.inputWithSegments", "input input--pin", {
1060
+ disabled: props.disabled
1061
+ }, inputClassName),
1038
1062
  ref: forwardedRef
1039
1063
  });
1040
1064
  });
1041
- var ContextMenuSeparator = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1042
- const { tx } = useThemeContext();
1043
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Separator, {
1065
+ var TextInput = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1066
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1067
+ const themeContextValue = useThemeContext();
1068
+ const density = useDensityContext(propsDensity);
1069
+ const elevation = useElevationContext(propsElevation);
1070
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1071
+ const { tx } = themeContextValue;
1072
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.TextInput, {
1044
1073
  ...props,
1045
- className: tx("menu.separator", "menu__item", {}, classNames),
1074
+ className: tx("input.input", "input", {
1075
+ variant,
1076
+ disabled: props.disabled,
1077
+ density,
1078
+ elevation,
1079
+ validationValence
1080
+ }, classNames),
1081
+ ...props.autoFocus && !hasIosKeyboard2 && {
1082
+ autoFocus: true
1083
+ },
1046
1084
  ref: forwardedRef
1047
1085
  });
1048
1086
  });
1049
- var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1087
+ var TextArea = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1088
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1050
1089
  const { tx } = useThemeContext();
1051
- return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Label, {
1090
+ const density = useDensityContext(propsDensity);
1091
+ const elevation = useElevationContext(propsElevation);
1092
+ const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1093
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_input.TextArea, {
1052
1094
  ...props,
1053
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1095
+ className: tx("input.input", "input--text-area", {
1096
+ variant,
1097
+ disabled: props.disabled,
1098
+ density,
1099
+ elevation,
1100
+ validationValence
1101
+ }, classNames),
1102
+ ...props.autoFocus && !hasIosKeyboard2 && {
1103
+ autoFocus: true
1104
+ },
1054
1105
  ref: forwardedRef
1055
1106
  });
1056
1107
  });
1057
- var ContextMenu2 = {
1058
- Root: ContextMenuRoot,
1059
- Trigger: ContextMenuTrigger,
1060
- Portal: ContextMenuPortal,
1061
- Content: ContextMenuContent,
1062
- Viewport: ContextMenuViewport,
1063
- Arrow: ContextMenuArrow,
1064
- Group: ContextMenuGroup,
1065
- Item: ContextMenuItem,
1066
- CheckboxItem: ContextMenuCheckboxItem,
1067
- ItemIndicator: ContextMenuItemIndicator,
1068
- Separator: ContextMenuSeparator,
1069
- GroupLabel: ContextMenuGroupLabel
1070
- };
1071
- var DROPDOWN_MENU_NAME = "DropdownMenu";
1072
- var [createDropdownMenuContext, createDropdownMenuScope] = (0, import_react_context5.createContextScope)(DROPDOWN_MENU_NAME, [
1073
- import_react_menu.createMenuScope
1074
- ]);
1075
- var useMenuScope = (0, import_react_menu.createMenuScope)();
1076
- var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
1077
- var DropdownMenuRoot = (props) => {
1078
- const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
1079
- const menuScope = useMenuScope(__scopeDropdownMenu);
1080
- const triggerRef = (0, import_react29.useRef)(null);
1081
- const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
1082
- prop: openProp,
1083
- defaultProp: defaultOpen,
1084
- onChange: onOpenChange
1108
+ var Checkbox = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1109
+ const [checked, onCheckedChange] = (0, import_react_use_controllable_state.useControllableState)({
1110
+ prop: propsChecked,
1111
+ defaultProp: propsDefaultChecked,
1112
+ onChange: propsOnCheckedChange
1085
1113
  });
1086
- return /* @__PURE__ */ import_react29.default.createElement(DropdownMenuProvider, {
1087
- scope: __scopeDropdownMenu,
1088
- triggerId: (0, import_react_id.useId)(),
1089
- triggerRef,
1090
- contentId: (0, import_react_id.useId)(),
1091
- open,
1092
- onOpenChange: setOpen,
1093
- onOpenToggle: (0, import_react29.useCallback)(() => setOpen((prevOpen) => !prevOpen), [
1094
- setOpen
1095
- ]),
1096
- modal
1097
- }, /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Root, {
1098
- ...menuScope,
1099
- open,
1100
- onOpenChange: setOpen,
1101
- dir,
1102
- modal
1103
- }, children));
1104
- };
1105
- DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
1106
- var TRIGGER_NAME = "DropdownMenuTrigger";
1107
- var DropdownMenuTrigger = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1108
- const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1109
- const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
1110
- const menuScope = useMenuScope(__scopeDropdownMenu);
1111
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Anchor, {
1112
- asChild: true,
1113
- ...menuScope
1114
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_primitive7.Primitive.button, {
1115
- type: "button",
1116
- id: context.triggerId,
1117
- "aria-haspopup": "menu",
1118
- "aria-expanded": context.open,
1119
- "aria-controls": context.open ? context.contentId : void 0,
1120
- "data-state": context.open ? "open" : "closed",
1121
- "data-disabled": disabled ? "" : void 0,
1122
- disabled,
1123
- ...triggerProps,
1124
- ref: (0, import_react_compose_refs.composeRefs)(forwardedRef, context.triggerRef),
1125
- onPointerDown: (0, import_primitive.composeEventHandlers)(props.onPointerDown, (event) => {
1126
- if (!disabled && event.button === 0 && event.ctrlKey === false) {
1127
- context.onOpenToggle();
1128
- if (!context.open) {
1129
- event.preventDefault();
1130
- }
1131
- }
1132
- }),
1133
- onKeyDown: (0, import_primitive.composeEventHandlers)(props.onKeyDown, (event) => {
1134
- if (disabled) {
1135
- return;
1136
- }
1137
- if ([
1138
- "Enter",
1139
- " "
1140
- ].includes(event.key)) {
1141
- context.onOpenToggle();
1142
- }
1143
- if (event.key === "ArrowDown") {
1144
- context.onOpenChange(true);
1145
- }
1146
- if ([
1147
- "Enter",
1148
- " ",
1149
- "ArrowDown"
1150
- ].includes(event.key)) {
1151
- event.preventDefault();
1152
- }
1114
+ const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1115
+ const { tx } = useThemeContext();
1116
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_checkbox.Root, {
1117
+ ...props,
1118
+ checked,
1119
+ onCheckedChange,
1120
+ id,
1121
+ "aria-describedby": descriptionId,
1122
+ ...validationValence === "error" && {
1123
+ "aria-invalid": "true",
1124
+ "aria-errormessage": errorMessageId
1125
+ },
1126
+ className: tx("input.checkbox", "input--checkbox", {
1127
+ size
1128
+ }, "shrink-0", classNames),
1129
+ ref: forwardedRef
1130
+ }, /* @__PURE__ */ import_react28.default.createElement(Icon, {
1131
+ icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1132
+ classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1133
+ size,
1134
+ checked
1153
1135
  })
1154
1136
  }));
1155
1137
  });
1156
- DropdownMenuTrigger.displayName = TRIGGER_NAME;
1157
- var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
1158
- var DropdownMenuVirtualTrigger = (props) => {
1159
- const { __scopeDropdownMenu, virtualRef } = props;
1160
- const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
1161
- const menuScope = useMenuScope(__scopeDropdownMenu);
1162
- (0, import_react29.useEffect)(() => {
1163
- if (virtualRef.current) {
1164
- context.triggerRef.current = virtualRef.current;
1165
- }
1138
+ var Switch = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1139
+ const [checked, onCheckedChange] = (0, import_react_use_controllable_state.useControllableState)({
1140
+ prop: propsChecked,
1141
+ defaultProp: propsDefaultChecked ?? false,
1142
+ onChange: propsOnCheckedChange
1166
1143
  });
1167
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Anchor, {
1168
- ...menuScope,
1169
- virtualRef
1144
+ const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1145
+ return /* @__PURE__ */ import_react28.default.createElement("input", {
1146
+ type: "checkbox",
1147
+ className: (0, import_react_ui_theme3.mx)("dx-checkbox--switch dx-focus-ring", classNames),
1148
+ checked,
1149
+ onChange: (event) => {
1150
+ onCheckedChange(event.target.checked);
1151
+ },
1152
+ id,
1153
+ "aria-describedby": descriptionId,
1154
+ ...props,
1155
+ ...validationValence === "error" && {
1156
+ "aria-invalid": "true",
1157
+ "aria-errormessage": errorMessageId
1158
+ },
1159
+ ref: forwardedRef
1170
1160
  });
1161
+ });
1162
+ var Input = {
1163
+ Root: import_react_input.InputRoot,
1164
+ PinInput,
1165
+ TextInput,
1166
+ TextArea,
1167
+ Checkbox,
1168
+ Switch,
1169
+ Label,
1170
+ Description,
1171
+ Validation,
1172
+ DescriptionAndValidation
1171
1173
  };
1172
- DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
1173
- var PORTAL_NAME = "DropdownMenuPortal";
1174
- var DropdownMenuPortal = (props) => {
1175
- const { __scopeDropdownMenu, ...portalProps } = props;
1176
- const menuScope = useMenuScope(__scopeDropdownMenu);
1177
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Portal, {
1178
- ...menuScope,
1179
- ...portalProps
1174
+ var edgeToOrientationMap = {
1175
+ top: "horizontal",
1176
+ bottom: "horizontal",
1177
+ left: "vertical",
1178
+ right: "vertical"
1179
+ };
1180
+ var orientationStyles = {
1181
+ horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1182
+ vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1183
+ };
1184
+ var edgeStyles = {
1185
+ top: "top-[--line-offset] before:top-[--offset-terminal]",
1186
+ right: "right-[--line-offset] before:right-[--offset-terminal]",
1187
+ bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1188
+ left: "left-[--line-offset] before:left-[--offset-terminal]"
1189
+ };
1190
+ var strokeSize = 2;
1191
+ var terminalSize = 8;
1192
+ var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1193
+ var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1194
+ const orientation = edgeToOrientationMap[edge];
1195
+ return /* @__PURE__ */ import_react31.default.createElement("div", {
1196
+ role: "none",
1197
+ style: {
1198
+ "--line-thickness": `${strokeSize}px`,
1199
+ "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1200
+ "--line-inset": `${lineInset}px`,
1201
+ "--terminal-size": `${terminalSize}px`,
1202
+ "--terminal-radius": `${terminalSize / 2}px`,
1203
+ "--terminal-inset": `${terminalInset}px`,
1204
+ "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1205
+ },
1206
+ 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]}`
1180
1207
  });
1181
1208
  };
1182
- DropdownMenuPortal.displayName = PORTAL_NAME;
1183
- var DropdownMenuViewport = /* @__PURE__ */ (0, import_react29.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1209
+ var List = /* @__PURE__ */ (0, import_react30.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1184
1210
  const { tx } = useThemeContext();
1185
- const Root5 = asChild ? import_react_slot7.Slot : import_react_primitive7.Primitive.div;
1186
- return /* @__PURE__ */ import_react29.default.createElement(Root5, {
1211
+ const density = useDensityContext(props.density);
1212
+ return /* @__PURE__ */ import_react30.default.createElement(DensityProvider, {
1213
+ density
1214
+ }, /* @__PURE__ */ import_react30.default.createElement(import_react_list.List, {
1187
1215
  ...props,
1188
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1216
+ className: tx("list.root", "list", {}, classNames),
1189
1217
  ref: forwardedRef
1190
- }, children);
1218
+ }, children));
1191
1219
  });
1192
- var CONTENT_NAME = "DropdownMenuContent";
1193
- var DropdownMenuContent = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1194
- const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
1220
+ var ListItemEndcap = /* @__PURE__ */ (0, import_react30.forwardRef)(({ children, classNames, asChild, ...props }, forwardedRef) => {
1221
+ const Root5 = asChild ? import_react_slot6.Slot : "div";
1222
+ const density = useDensityContext();
1195
1223
  const { tx } = useThemeContext();
1196
- const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
1197
- const elevation = useElevationContext();
1198
- const menuScope = useMenuScope(__scopeDropdownMenu);
1199
- const hasInteractedOutsideRef = (0, import_react29.useRef)(false);
1200
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1201
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Content, {
1202
- id: context.contentId,
1203
- "aria-labelledby": context.triggerId,
1204
- ...menuScope,
1205
- ...contentProps,
1206
- collisionPadding: safeCollisionPadding,
1207
- ref: forwardedRef,
1208
- onCloseAutoFocus: (0, import_primitive.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
1209
- if (!hasInteractedOutsideRef.current) {
1210
- context.triggerRef.current?.focus();
1211
- }
1212
- hasInteractedOutsideRef.current = false;
1213
- event.preventDefault();
1214
- }),
1215
- onInteractOutside: (0, import_primitive.composeEventHandlers)(props.onInteractOutside, (event) => {
1216
- const originalEvent = event.detail.originalEvent;
1217
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
1218
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
1219
- if (!context.modal || isRightClick) {
1220
- hasInteractedOutsideRef.current = true;
1221
- }
1222
- }),
1223
- className: tx("menu.content", "menu", {
1224
- elevation
1224
+ return /* @__PURE__ */ import_react30.default.createElement(Root5, {
1225
+ ...!asChild && {
1226
+ role: "none"
1227
+ },
1228
+ ...props,
1229
+ className: tx("list.item.endcap", "list__listItem__endcap", {
1230
+ density
1225
1231
  }, classNames),
1226
- style: {
1227
- ...props.style,
1228
- // re-namespace exposed content custom properties
1229
- ...{
1230
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1231
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1232
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1233
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1234
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1235
- }
1236
- }
1237
- });
1238
- });
1239
- DropdownMenuContent.displayName = CONTENT_NAME;
1240
- var GROUP_NAME = "DropdownMenuGroup";
1241
- var DropdownMenuGroup = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1242
- const { __scopeDropdownMenu, ...groupProps } = props;
1243
- const menuScope = useMenuScope(__scopeDropdownMenu);
1244
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Group, {
1245
- ...menuScope,
1246
- ...groupProps,
1247
1232
  ref: forwardedRef
1233
+ }, children);
1234
+ });
1235
+ var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1236
+ const density = useDensityContext();
1237
+ const { tx } = useThemeContext();
1238
+ return /* @__PURE__ */ import_react30.default.createElement("div", {
1239
+ role: "none",
1240
+ ...props,
1241
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1242
+ density
1243
+ }, classNames)
1248
1244
  });
1245
+ };
1246
+ var ListItemHeading = /* @__PURE__ */ (0, import_react30.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
1247
+ const { tx } = useThemeContext();
1248
+ const density = useDensityContext();
1249
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_list.ListItemHeading, {
1250
+ ...props,
1251
+ className: tx("list.item.heading", "list__listItem__heading", {
1252
+ density
1253
+ }, classNames),
1254
+ ref: forwardedRef
1255
+ }, children);
1249
1256
  });
1250
- DropdownMenuGroup.displayName = GROUP_NAME;
1251
- var LABEL_NAME = "DropdownMenuLabel";
1252
- var DropdownMenuGroupLabel = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1253
- const { __scopeDropdownMenu, classNames, ...labelProps } = props;
1254
- const menuScope = useMenuScope(__scopeDropdownMenu);
1257
+ var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1255
1258
  const { tx } = useThemeContext();
1256
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Label, {
1257
- ...menuScope,
1258
- ...labelProps,
1259
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1259
+ const density = useDensityContext();
1260
+ const { open } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listItemScope);
1261
+ const Icon3 = open ? import_react29.CaretDown : import_react29.CaretRight;
1262
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_list.ListItemOpenTrigger, {
1263
+ ...props,
1264
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1265
+ density
1266
+ }, classNames),
1260
1267
  ref: forwardedRef
1261
- });
1268
+ }, children || /* @__PURE__ */ import_react30.default.createElement(Icon3, {
1269
+ weight: "bold",
1270
+ className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1271
+ }));
1262
1272
  });
1263
- DropdownMenuGroupLabel.displayName = LABEL_NAME;
1264
- var ITEM_NAME = "DropdownMenuItem";
1265
- var DropdownMenuItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1266
- const { __scopeDropdownMenu, classNames, ...itemProps } = props;
1267
- const menuScope = useMenuScope(__scopeDropdownMenu);
1273
+ var ListItemRoot = /* @__PURE__ */ (0, import_react30.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1268
1274
  const { tx } = useThemeContext();
1269
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Item, {
1270
- ...menuScope,
1271
- ...itemProps,
1272
- className: tx("menu.item", "menu__item", {}, classNames),
1275
+ const density = useDensityContext();
1276
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_list.ListItem, {
1277
+ ...props,
1278
+ className: tx("list.item.root", "list__listItem", {
1279
+ density,
1280
+ collapsible: props.collapsible
1281
+ }, classNames),
1282
+ ref: forwardedRef
1283
+ }, children);
1284
+ });
1285
+ var ListItem = {
1286
+ Root: ListItemRoot,
1287
+ Endcap: ListItemEndcap,
1288
+ Heading: ListItemHeading,
1289
+ OpenTrigger: ListItemOpenTrigger,
1290
+ CollapsibleContent: import_react_list.ListItemCollapsibleContent,
1291
+ MockOpenTrigger: MockListItemOpenTrigger,
1292
+ DropIndicator: ListDropIndicator
1293
+ };
1294
+ var edgeToOrientationMap2 = {
1295
+ "reorder-above": "sibling",
1296
+ "reorder-below": "sibling",
1297
+ "make-child": "child",
1298
+ reparent: "child"
1299
+ };
1300
+ var orientationStyles2 = {
1301
+ // TODO(wittjosiah): Stop using left/right here.
1302
+ sibling: "bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]",
1303
+ child: "is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible"
1304
+ };
1305
+ var instructionStyles = {
1306
+ "reorder-above": "block-start-[--line-offset] before:block-start-[--offset-terminal]",
1307
+ "reorder-below": "block-end-[--line-offset] before:block-end-[--offset-terminal]",
1308
+ "make-child": "border-accentSurface",
1309
+ // TODO(wittjosiah): This is not occurring in the current implementation.
1310
+ reparent: ""
1311
+ };
1312
+ var strokeSize2 = 2;
1313
+ var terminalSize2 = 8;
1314
+ var offsetToAlignTerminalWithLine2 = (strokeSize2 - terminalSize2) / 2;
1315
+ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1316
+ const lineOffset = `calc(-0.5 * (${gap}px + ${strokeSize2}px))`;
1317
+ const isBlocked = instruction.type === "instruction-blocked";
1318
+ const desiredInstruction = isBlocked ? instruction.desired : instruction;
1319
+ const orientation = edgeToOrientationMap2[desiredInstruction.type];
1320
+ if (isBlocked) {
1321
+ return null;
1322
+ }
1323
+ return /* @__PURE__ */ import_react33.default.createElement("div", {
1324
+ style: {
1325
+ "--line-thickness": `${strokeSize2}px`,
1326
+ "--line-offset": `${lineOffset}`,
1327
+ "--terminal-size": `${terminalSize2}px`,
1328
+ "--terminal-radius": `${terminalSize2 / 2}px`,
1329
+ "--negative-terminal-size": `-${terminalSize2}px`,
1330
+ "--offset-terminal": `${offsetToAlignTerminalWithLine2}px`,
1331
+ "--horizontal-indent": `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`
1332
+ },
1333
+ 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]}`
1334
+ });
1335
+ };
1336
+ var TreeRoot = /* @__PURE__ */ (0, import_react32.forwardRef)((props, forwardedRef) => {
1337
+ return /* @__PURE__ */ import_react32.default.createElement(List, {
1338
+ ...props,
1273
1339
  ref: forwardedRef
1274
1340
  });
1275
1341
  });
1276
- DropdownMenuItem.displayName = ITEM_NAME;
1277
- var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
1278
- var DropdownMenuCheckboxItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1279
- const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
1280
- const menuScope = useMenuScope(__scopeDropdownMenu);
1281
- const { tx } = useThemeContext();
1282
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.CheckboxItem, {
1283
- ...menuScope,
1284
- ...checkboxItemProps,
1285
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1342
+ var TreeBranch = /* @__PURE__ */ (0, import_react32.forwardRef)(({ __listScope, ...props }, forwardedRef) => {
1343
+ const { headingId } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listScope);
1344
+ return /* @__PURE__ */ import_react32.default.createElement(List, {
1345
+ ...props,
1346
+ "aria-labelledby": headingId,
1286
1347
  ref: forwardedRef
1287
1348
  });
1288
1349
  });
1289
- DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
1290
- var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
1291
- var DropdownMenuRadioGroup = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1292
- const { __scopeDropdownMenu, ...radioGroupProps } = props;
1293
- const menuScope = useMenuScope(__scopeDropdownMenu);
1294
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.RadioGroup, {
1295
- ...menuScope,
1296
- ...radioGroupProps,
1350
+ var TreeItemRoot = /* @__PURE__ */ (0, import_react32.forwardRef)((props, forwardedRef) => {
1351
+ return /* @__PURE__ */ import_react32.default.createElement(ListItem.Root, {
1352
+ role: "treeitem",
1353
+ ...props,
1297
1354
  ref: forwardedRef
1298
1355
  });
1299
1356
  });
1300
- DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
1301
- var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
1302
- var DropdownMenuRadioItem = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1303
- const { __scopeDropdownMenu, ...radioItemProps } = props;
1304
- const menuScope = useMenuScope(__scopeDropdownMenu);
1305
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.RadioItem, {
1306
- ...menuScope,
1307
- ...radioItemProps,
1308
- ref: forwardedRef
1357
+ var TreeItemHeading = ListItem.Heading;
1358
+ var TreeItemOpenTrigger = ListItem.OpenTrigger;
1359
+ var MockTreeItemOpenTrigger = ListItem.MockOpenTrigger;
1360
+ var TreeItemBody = ListItem.CollapsibleContent;
1361
+ var Tree = {
1362
+ Root: TreeRoot,
1363
+ Branch: TreeBranch
1364
+ };
1365
+ var TreeItem = {
1366
+ Root: TreeItemRoot,
1367
+ Heading: TreeItemHeading,
1368
+ Body: TreeItemBody,
1369
+ OpenTrigger: TreeItemOpenTrigger,
1370
+ MockOpenTrigger: MockTreeItemOpenTrigger,
1371
+ DropIndicator: TreeDropIndicator
1372
+ };
1373
+ var TREEGRID_ROW_NAME = "TreegridRow";
1374
+ var [createTreegridRowContext, createTreegridRowScope] = (0, import_react_context5.createContextScope)(TREEGRID_ROW_NAME, []);
1375
+ var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1376
+ var PATH_SEPARATOR = "~";
1377
+ var PARENT_OF_SEPARATOR = " ";
1378
+ var TreegridRoot = /* @__PURE__ */ (0, import_react34.forwardRef)(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1379
+ const { tx } = useThemeContext();
1380
+ const Root5 = asChild ? import_react_slot7.Slot : import_react_primitive6.Primitive.div;
1381
+ const arrowNavigationAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1382
+ axis: "vertical",
1383
+ tabbable: false,
1384
+ circular: true
1309
1385
  });
1310
- });
1311
- DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
1312
- var INDICATOR_NAME = "DropdownMenuItemIndicator";
1313
- var DropdownMenuItemIndicator = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1314
- const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
1315
- const menuScope = useMenuScope(__scopeDropdownMenu);
1316
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.ItemIndicator, {
1317
- ...menuScope,
1318
- ...itemIndicatorProps,
1386
+ return /* @__PURE__ */ import_react34.default.createElement(Root5, {
1387
+ role: "treegrid",
1388
+ ...arrowNavigationAttrs,
1389
+ ...props,
1390
+ className: tx("treegrid.root", "treegrid", {}, classNames),
1391
+ style: {
1392
+ ...style,
1393
+ gridTemplateColumns
1394
+ },
1319
1395
  ref: forwardedRef
1320
- });
1396
+ }, children);
1321
1397
  });
1322
- DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
1323
- var SEPARATOR_NAME = "DropdownMenuSeparator";
1324
- var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1325
- const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
1326
- const menuScope = useMenuScope(__scopeDropdownMenu);
1398
+ var TreegridRow = /* @__PURE__ */ (0, import_react34.forwardRef)(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1327
1399
  const { tx } = useThemeContext();
1328
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Separator, {
1329
- ...menuScope,
1330
- ...separatorProps,
1331
- className: tx("menu.separator", "menu__item", {}, classNames),
1332
- ref: forwardedRef
1400
+ const Root5 = asChild ? import_react_slot7.Slot : import_react_primitive6.Primitive.div;
1401
+ const pathParts = id.split(PATH_SEPARATOR);
1402
+ const level = pathParts.length - 1;
1403
+ const [open, onOpenChange] = (0, import_react_use_controllable_state2.useControllableState)({
1404
+ prop: propsOpen,
1405
+ onChange: propsOnOpenChange,
1406
+ defaultProp: defaultOpen
1333
1407
  });
1334
- });
1335
- DropdownMenuSeparator.displayName = SEPARATOR_NAME;
1336
- var ARROW_NAME = "DropdownMenuArrow";
1337
- var DropdownMenuArrow = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1338
- const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
1339
- const menuScope = useMenuScope(__scopeDropdownMenu);
1340
- const { tx } = useThemeContext();
1341
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Arrow, {
1342
- ...menuScope,
1343
- ...arrowProps,
1344
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1345
- ref: forwardedRef
1408
+ const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1409
+ tabBehavior: "limited"
1346
1410
  });
1347
- });
1348
- DropdownMenuArrow.displayName = ARROW_NAME;
1349
- var DropdownMenuSub = (props) => {
1350
- const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
1351
- const menuScope = useMenuScope(__scopeDropdownMenu);
1352
- const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
1353
- prop: openProp,
1354
- defaultProp: defaultOpen,
1355
- onChange: onOpenChange
1411
+ const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1412
+ axis: "horizontal",
1413
+ tabbable: false,
1414
+ circular: false,
1415
+ memorizeCurrent: false
1356
1416
  });
1357
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Sub, {
1358
- ...menuScope,
1417
+ return /* @__PURE__ */ import_react34.default.createElement(TreegridRowProvider, {
1359
1418
  open,
1360
- onOpenChange: setOpen
1361
- }, children);
1362
- };
1363
- var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
1364
- var DropdownMenuSubTrigger = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1365
- const { __scopeDropdownMenu, ...subTriggerProps } = props;
1366
- const menuScope = useMenuScope(__scopeDropdownMenu);
1367
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.SubTrigger, {
1368
- ...menuScope,
1369
- ...subTriggerProps,
1370
- ref: forwardedRef
1371
- });
1372
- });
1373
- DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
1374
- var SUB_CONTENT_NAME = "DropdownMenuSubContent";
1375
- var DropdownMenuSubContent = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1376
- const { __scopeDropdownMenu, ...subContentProps } = props;
1377
- const menuScope = useMenuScope(__scopeDropdownMenu);
1378
- return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.SubContent, {
1379
- ...menuScope,
1380
- ...subContentProps,
1381
- ref: forwardedRef,
1382
- style: {
1383
- ...props.style,
1384
- // re-namespace exposed content custom properties
1385
- ...{
1386
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1387
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1388
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1389
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1390
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1391
- }
1392
- }
1393
- });
1394
- });
1395
- DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
1396
- var DropdownMenu = {
1397
- Root: DropdownMenuRoot,
1398
- Trigger: DropdownMenuTrigger,
1399
- VirtualTrigger: DropdownMenuVirtualTrigger,
1400
- Portal: DropdownMenuPortal,
1401
- Content: DropdownMenuContent,
1402
- Viewport: DropdownMenuViewport,
1403
- Group: DropdownMenuGroup,
1404
- GroupLabel: DropdownMenuGroupLabel,
1405
- Item: DropdownMenuItem,
1406
- CheckboxItem: DropdownMenuCheckboxItem,
1407
- RadioGroup: DropdownMenuRadioGroup,
1408
- RadioItem: DropdownMenuRadioItem,
1409
- ItemIndicator: DropdownMenuItemIndicator,
1410
- Separator: DropdownMenuSeparator,
1411
- Arrow: DropdownMenuArrow,
1412
- Sub: DropdownMenuSub,
1413
- SubTrigger: DropdownMenuSubTrigger,
1414
- SubContent: DropdownMenuSubContent
1415
- };
1416
- var useDropdownMenuMenuScope = useMenuScope;
1417
- var Label3 = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1418
- const { tx } = useThemeContext();
1419
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Label, {
1420
- ...props,
1421
- className: tx("input.label", "input__label", {
1422
- srOnly
1419
+ onOpenChange,
1420
+ scope: __treegridRowScope
1421
+ }, /* @__PURE__ */ import_react34.default.createElement(Root5, {
1422
+ role: "row",
1423
+ "aria-level": level,
1424
+ className: tx("treegrid.row", "treegrid__row", {
1425
+ level
1423
1426
  }, classNames),
1424
- ref: forwardedRef
1425
- }, children);
1426
- });
1427
- var Description = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1428
- const { tx } = useThemeContext();
1429
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Description, {
1427
+ ...parentOf && {
1428
+ "aria-expanded": open,
1429
+ "aria-owns": parentOf
1430
+ },
1431
+ tabIndex: 0,
1432
+ ...focusableGroupAttrs,
1430
1433
  ...props,
1431
- className: tx("input.description", "input__description", {
1432
- srOnly
1433
- }, classNames),
1434
+ id,
1434
1435
  ref: forwardedRef
1435
- }, children);
1436
+ }, /* @__PURE__ */ import_react34.default.createElement("div", {
1437
+ role: "none",
1438
+ className: "contents",
1439
+ ...arrowGroupAttrs
1440
+ }, children)));
1436
1441
  });
1437
- var Validation = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1442
+ var TreegridCell = /* @__PURE__ */ (0, import_react34.forwardRef)(({ classNames, children, indent, ...props }, forwardedRef) => {
1438
1443
  const { tx } = useThemeContext();
1439
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1440
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.Validation, {
1441
- ...props,
1442
- className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1443
- srOnly,
1444
- validationValence
1444
+ return /* @__PURE__ */ import_react34.default.createElement("div", {
1445
+ role: "gridcell",
1446
+ className: tx("treegrid.cell", "treegrid__cell", {
1447
+ indent
1445
1448
  }, classNames),
1446
- ref: forwardedRef
1447
- }, children);
1448
- });
1449
- var DescriptionAndValidation = /* @__PURE__ */ (0, import_react30.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1450
- const { tx } = useThemeContext();
1451
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.DescriptionAndValidation, {
1452
1449
  ...props,
1453
- className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1454
- srOnly
1455
- }, classNames),
1456
1450
  ref: forwardedRef
1457
1451
  }, children);
1458
1452
  });
1459
- var PinInput = /* @__PURE__ */ (0, import_react30.forwardRef)(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1460
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1461
- const { tx } = useThemeContext();
1462
- const density = useDensityContext(propsDensity);
1463
- const elevation = useElevationContext(propsElevation);
1464
- const segmentClassName = (0, import_react30.useCallback)(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1465
- variant: "static",
1466
- focused,
1467
- disabled: props.disabled,
1468
- density,
1469
- elevation,
1470
- validationValence
1471
- }, propsSegmentClassName), [
1472
- tx,
1473
- props.disabled,
1474
- elevation,
1475
- propsElevation,
1476
- density
1453
+ var Treegrid = {
1454
+ Root: TreegridRoot,
1455
+ Row: TreegridRow,
1456
+ Cell: TreegridCell,
1457
+ PARENT_OF_SEPARATOR,
1458
+ PATH_SEPARATOR,
1459
+ createTreegridRowScope,
1460
+ useTreegridRowContext
1461
+ };
1462
+ var MotionState;
1463
+ (function(MotionState2) {
1464
+ MotionState2[MotionState2["IDLE"] = 0] = "IDLE";
1465
+ MotionState2[MotionState2["DEBOUNCING"] = 1] = "DEBOUNCING";
1466
+ MotionState2[MotionState2["FOLLOWING"] = 2] = "FOLLOWING";
1467
+ })(MotionState || (MotionState = {}));
1468
+ var useSwipeToDismiss = (ref, {
1469
+ onDismiss,
1470
+ dismissThreshold = 64,
1471
+ debounceThreshold = 8,
1472
+ offset = 0
1473
+ /* side = 'inline-start' */
1474
+ }) => {
1475
+ const $root = ref.current;
1476
+ const [motionState, setMotionState] = (0, import_react36.useState)(0);
1477
+ const [gestureStartX, setGestureStartX] = (0, import_react36.useState)(0);
1478
+ const setIdle = (0, import_react36.useCallback)(() => {
1479
+ setMotionState(0);
1480
+ $root?.style.removeProperty("inset-inline-start");
1481
+ $root?.style.setProperty("transition-duration", "200ms");
1482
+ }, [
1483
+ $root
1477
1484
  ]);
1478
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.PinInput, {
1479
- ...props,
1480
- segmentClassName,
1481
- ...props.autoFocus && !hasIosKeyboard2 && {
1482
- autoFocus: true
1483
- },
1484
- inputClassName: tx("input.inputWithSegments", "input input--pin", {
1485
- disabled: props.disabled
1486
- }, inputClassName),
1487
- ref: forwardedRef
1488
- });
1489
- });
1490
- var TextInput = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1491
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1492
- const themeContextValue = useThemeContext();
1493
- const density = useDensityContext(propsDensity);
1494
- const elevation = useElevationContext(propsElevation);
1495
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1496
- const { tx } = themeContextValue;
1497
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.TextInput, {
1498
- ...props,
1499
- className: tx("input.input", "input", {
1500
- variant,
1501
- disabled: props.disabled,
1502
- density,
1503
- elevation,
1504
- validationValence
1505
- }, classNames),
1506
- ...props.autoFocus && !hasIosKeyboard2 && {
1507
- autoFocus: true
1508
- },
1509
- ref: forwardedRef
1510
- });
1485
+ const setFollowing = (0, import_react36.useCallback)(() => {
1486
+ setMotionState(2);
1487
+ $root?.style.setProperty("transition-duration", "0ms");
1488
+ }, [
1489
+ $root
1490
+ ]);
1491
+ const handlePointerDown = (0, import_react36.useCallback)(({ screenX }) => {
1492
+ if (motionState === 0) {
1493
+ setMotionState(1);
1494
+ setGestureStartX(screenX);
1495
+ }
1496
+ }, [
1497
+ motionState
1498
+ ]);
1499
+ const handlePointerMove = (0, import_react36.useCallback)(({ screenX }) => {
1500
+ if ($root) {
1501
+ const delta = Math.min(screenX - gestureStartX, 0);
1502
+ switch (motionState) {
1503
+ case 2:
1504
+ if (Math.abs(delta) > dismissThreshold) {
1505
+ setIdle();
1506
+ onDismiss?.();
1507
+ } else {
1508
+ $root.style.setProperty("inset-inline-start", `${offset + delta}px`);
1509
+ }
1510
+ break;
1511
+ case 1:
1512
+ if (Math.abs(delta) > debounceThreshold) {
1513
+ setFollowing();
1514
+ }
1515
+ break;
1516
+ }
1517
+ }
1518
+ }, [
1519
+ $root,
1520
+ motionState,
1521
+ gestureStartX
1522
+ ]);
1523
+ const handlePointerUp = (0, import_react36.useCallback)(() => {
1524
+ setIdle();
1525
+ }, [
1526
+ setIdle
1527
+ ]);
1528
+ (0, import_react36.useEffect)(() => {
1529
+ $root?.addEventListener("pointerdown", handlePointerDown);
1530
+ return () => {
1531
+ $root?.removeEventListener("pointerdown", handlePointerDown);
1532
+ };
1533
+ }, [
1534
+ $root,
1535
+ handlePointerDown
1536
+ ]);
1537
+ (0, import_react36.useEffect)(() => {
1538
+ $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
1539
+ return () => {
1540
+ document.documentElement.removeEventListener("pointermove", handlePointerMove);
1541
+ };
1542
+ }, [
1543
+ $root,
1544
+ handlePointerMove
1545
+ ]);
1546
+ (0, import_react36.useEffect)(() => {
1547
+ $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
1548
+ return () => {
1549
+ document.documentElement.removeEventListener("pointerup", handlePointerUp);
1550
+ };
1551
+ }, [
1552
+ $root,
1553
+ handlePointerUp
1554
+ ]);
1555
+ };
1556
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
1557
+ var MAIN_ROOT_NAME = "MainRoot";
1558
+ var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
1559
+ var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
1560
+ var MAIN_NAME = "Main";
1561
+ var GENERIC_CONSUMER_NAME = "GenericConsumer";
1562
+ var landmarkAttr = "data-main-landmark";
1563
+ var useLandmarkMover = (propsOnKeyDown, landmark) => {
1564
+ const handleKeyDown = (0, import_react35.useCallback)((event) => {
1565
+ const target = event.target;
1566
+ if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
1567
+ event.preventDefault();
1568
+ const landmarks = Array.from(document.querySelectorAll(`[${landmarkAttr}]:not([inert])`)).map((el) => el.hasAttribute(landmarkAttr) ? parseInt(el.getAttribute(landmarkAttr)) : NaN).sort();
1569
+ const l = landmarks.length;
1570
+ const cursor = landmarks.indexOf(parseInt(target.getAttribute(landmarkAttr)));
1571
+ const nextLandmark = landmarks[(cursor + l + (event.getModifierState("Shift") ? -1 : 1)) % l];
1572
+ document.querySelector(`[${landmarkAttr}="${nextLandmark}"]`)?.focus();
1573
+ }
1574
+ propsOnKeyDown?.(event);
1575
+ }, [
1576
+ propsOnKeyDown
1577
+ ]);
1578
+ const focusableGroupAttrs = window ? {} : {
1579
+ tabBehavior: "limited",
1580
+ ignoreDefaultKeydown: {
1581
+ Tab: true
1582
+ }
1583
+ };
1584
+ return {
1585
+ onKeyDown: handleKeyDown,
1586
+ [landmarkAttr]: landmark,
1587
+ tabIndex: 0,
1588
+ ...focusableGroupAttrs
1589
+ };
1590
+ };
1591
+ var [MainProvider, useMainContext] = (0, import_react_context6.createContext)(MAIN_NAME, {
1592
+ resizing: false,
1593
+ navigationSidebarState: "closed",
1594
+ setNavigationSidebarState: (nextState) => {
1595
+ import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
1596
+ F: __dxlog_file,
1597
+ L: 82,
1598
+ S: void 0,
1599
+ C: (f, a) => f(...a)
1600
+ });
1601
+ },
1602
+ complementarySidebarState: "closed",
1603
+ setComplementarySidebarState: (nextState) => {
1604
+ import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
1605
+ F: __dxlog_file,
1606
+ L: 87,
1607
+ S: void 0,
1608
+ C: (f, a) => f(...a)
1609
+ });
1610
+ }
1511
1611
  });
1512
- var TextArea = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1513
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1514
- const { tx } = useThemeContext();
1515
- const density = useDensityContext(propsDensity);
1516
- const elevation = useElevationContext(propsElevation);
1517
- const { validationValence } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1518
- return /* @__PURE__ */ import_react30.default.createElement(import_react_input.TextArea, {
1519
- ...props,
1520
- className: tx("input.input", "input--text-area", {
1521
- variant,
1522
- disabled: props.disabled,
1523
- density,
1524
- elevation,
1525
- validationValence
1526
- }, classNames),
1527
- ...props.autoFocus && !hasIosKeyboard2 && {
1528
- autoFocus: true
1529
- },
1530
- ref: forwardedRef
1612
+ var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
1613
+ const { setNavigationSidebarState, navigationSidebarState, setComplementarySidebarState, complementarySidebarState } = useMainContext(consumerName);
1614
+ return {
1615
+ navigationSidebarState,
1616
+ setNavigationSidebarState,
1617
+ toggleNavigationSidebar: (0, import_react35.useCallback)(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
1618
+ navigationSidebarState,
1619
+ setNavigationSidebarState
1620
+ ]),
1621
+ openNavigationSidebar: (0, import_react35.useCallback)(() => setNavigationSidebarState("expanded"), []),
1622
+ collapseNavigationSidebar: (0, import_react35.useCallback)(() => setNavigationSidebarState("collapsed"), []),
1623
+ closeNavigationSidebar: (0, import_react35.useCallback)(() => setNavigationSidebarState("closed"), []),
1624
+ complementarySidebarState,
1625
+ setComplementarySidebarState,
1626
+ toggleComplementarySidebar: (0, import_react35.useCallback)(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
1627
+ complementarySidebarState,
1628
+ setComplementarySidebarState
1629
+ ]),
1630
+ openComplementarySidebar: (0, import_react35.useCallback)(() => setComplementarySidebarState("expanded"), []),
1631
+ collapseComplementarySidebar: (0, import_react35.useCallback)(() => setComplementarySidebarState("collapsed"), []),
1632
+ closeComplementarySidebar: (0, import_react35.useCallback)(() => setComplementarySidebarState("closed"), [])
1633
+ };
1634
+ };
1635
+ var resizeDebounce = 3e3;
1636
+ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
1637
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
1638
+ ssr: false
1531
1639
  });
1532
- });
1533
- var Checkbox = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1534
- const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1535
- prop: propsChecked,
1536
- defaultProp: propsDefaultChecked,
1537
- onChange: propsOnCheckedChange
1640
+ const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state3.useControllableState)({
1641
+ prop: propsNavigationSidebarState,
1642
+ defaultProp: defaultNavigationSidebarState,
1643
+ onChange: onNavigationSidebarStateChange
1538
1644
  });
1539
- const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1540
- const { tx } = useThemeContext();
1541
- return /* @__PURE__ */ import_react30.default.createElement(import_react_checkbox.Root, {
1645
+ const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = (0, import_react_use_controllable_state3.useControllableState)({
1646
+ prop: propsComplementarySidebarState,
1647
+ defaultProp: defaultComplementarySidebarState,
1648
+ onChange: onComplementarySidebarStateChange
1649
+ });
1650
+ const [resizing, setResizing] = (0, import_react35.useState)(false);
1651
+ const resizeInterval = (0, import_react35.useRef)(null);
1652
+ const handleResize = (0, import_react35.useCallback)(() => {
1653
+ setResizing(true);
1654
+ if (resizeInterval.current) {
1655
+ clearTimeout(resizeInterval.current);
1656
+ }
1657
+ resizeInterval.current = setTimeout(() => {
1658
+ setResizing(false);
1659
+ resizeInterval.current = null;
1660
+ }, resizeDebounce);
1661
+ }, []);
1662
+ (0, import_react35.useEffect)(() => {
1663
+ window.addEventListener("resize", handleResize);
1664
+ return () => window.removeEventListener("resize", handleResize);
1665
+ }, [
1666
+ handleResize
1667
+ ]);
1668
+ return /* @__PURE__ */ import_react35.default.createElement(MainProvider, {
1542
1669
  ...props,
1543
- checked,
1544
- onCheckedChange,
1545
- id,
1546
- "aria-describedby": descriptionId,
1547
- ...validationValence === "error" && {
1548
- "aria-invalid": "true",
1549
- "aria-errormessage": errorMessageId
1550
- },
1551
- className: tx("input.checkbox", "input--checkbox", {
1552
- size
1553
- }, "shrink-0", classNames),
1554
- ref: forwardedRef
1555
- }, /* @__PURE__ */ import_react30.default.createElement(Icon, {
1556
- icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
1557
- classNames: tx("input.checkboxIndicator", "input--checkbox__indicator", {
1558
- size,
1559
- checked
1560
- })
1561
- }));
1562
- });
1563
- var Switch = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
1564
- const [checked, onCheckedChange] = (0, import_react_use_controllable_state2.useControllableState)({
1565
- prop: propsChecked,
1566
- defaultProp: propsDefaultChecked ?? false,
1567
- onChange: propsOnCheckedChange
1670
+ navigationSidebarState,
1671
+ setNavigationSidebarState,
1672
+ complementarySidebarState,
1673
+ setComplementarySidebarState,
1674
+ resizing
1675
+ }, children);
1676
+ };
1677
+ MainRoot.displayName = MAIN_ROOT_NAME;
1678
+ var handleOpenAutoFocus = (event) => {
1679
+ !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
1680
+ };
1681
+ var MainSidebar = /* @__PURE__ */ (0, import_react35.forwardRef)(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
1682
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
1683
+ ssr: false
1568
1684
  });
1569
- const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1570
- return /* @__PURE__ */ import_react30.default.createElement("input", {
1571
- type: "checkbox",
1572
- className: (0, import_react_ui_theme3.mx)("dx-checkbox--switch dx-focus-ring", classNames),
1573
- checked,
1574
- onChange: (event) => {
1575
- onCheckedChange(event.target.checked);
1685
+ const { tx } = useThemeContext();
1686
+ const { t } = useTranslation();
1687
+ const ref = (0, import_react_hooks4.useForwardedRef)(forwardedRef);
1688
+ const noopRef = (0, import_react35.useRef)(null);
1689
+ useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
1690
+ onDismiss: () => onStateChange?.("closed")
1691
+ });
1692
+ const handleKeyDown = (0, import_react35.useCallback)((event) => {
1693
+ if (event.key === "Escape") {
1694
+ event.target.closest("[data-tabster]")?.focus();
1695
+ }
1696
+ props.onKeyDown?.(event);
1697
+ }, [
1698
+ props.onKeyDown
1699
+ ]);
1700
+ const Root5 = isLg ? import_react_primitive7.Primitive.div : import_react_dialog2.DialogContent;
1701
+ return /* @__PURE__ */ import_react35.default.createElement(import_react_dialog2.Root, {
1702
+ open: state !== "closed",
1703
+ "aria-label": toLocalizedString(label, t),
1704
+ modal: false
1705
+ }, !isLg && /* @__PURE__ */ import_react35.default.createElement(import_react_dialog2.DialogTitle, {
1706
+ className: "sr-only"
1707
+ }, toLocalizedString(label, t)), /* @__PURE__ */ import_react35.default.createElement(Root5, {
1708
+ ...!isLg && {
1709
+ forceMount: true,
1710
+ tabIndex: -1,
1711
+ onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
1576
1712
  },
1577
- id,
1578
- "aria-describedby": descriptionId,
1579
1713
  ...props,
1580
- ...validationValence === "error" && {
1581
- "aria-invalid": "true",
1582
- "aria-errormessage": errorMessageId
1714
+ "data-side": side === "inline-end" ? "ie" : "is",
1715
+ "data-state": state,
1716
+ "data-resizing": resizing ? "true" : "false",
1717
+ className: tx("main.sidebar", "main__sidebar", {}, classNames),
1718
+ onKeyDown: handleKeyDown,
1719
+ ...state === "closed" && {
1720
+ inert: "true"
1583
1721
  },
1722
+ ref
1723
+ }, children));
1724
+ });
1725
+ var MainNavigationSidebar = /* @__PURE__ */ (0, import_react35.forwardRef)((props, forwardedRef) => {
1726
+ const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
1727
+ const mover = useLandmarkMover(props.onKeyDown, "0");
1728
+ return /* @__PURE__ */ import_react35.default.createElement(MainSidebar, {
1729
+ ...mover,
1730
+ ...props,
1731
+ state: navigationSidebarState,
1732
+ onStateChange: setNavigationSidebarState,
1733
+ resizing,
1734
+ side: "inline-start",
1584
1735
  ref: forwardedRef
1585
1736
  });
1586
1737
  });
1587
- var Input = {
1588
- Root: import_react_input.InputRoot,
1589
- PinInput,
1590
- TextInput,
1591
- TextArea,
1592
- Checkbox,
1593
- Switch,
1594
- Label: Label3,
1595
- Description,
1596
- Validation,
1597
- DescriptionAndValidation
1598
- };
1599
- var edgeToOrientationMap = {
1600
- top: "horizontal",
1601
- bottom: "horizontal",
1602
- left: "vertical",
1603
- right: "vertical"
1604
- };
1605
- var orientationStyles = {
1606
- horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1607
- vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1608
- };
1609
- var edgeStyles = {
1610
- top: "top-[--line-offset] before:top-[--offset-terminal]",
1611
- right: "right-[--line-offset] before:right-[--offset-terminal]",
1612
- bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
1613
- left: "left-[--line-offset] before:left-[--offset-terminal]"
1614
- };
1615
- var strokeSize = 2;
1616
- var terminalSize = 8;
1617
- var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
1618
- var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
1619
- const orientation = edgeToOrientationMap[edge];
1620
- return /* @__PURE__ */ import_react33.default.createElement("div", {
1621
- role: "none",
1622
- style: {
1623
- "--line-thickness": `${strokeSize}px`,
1624
- "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
1625
- "--line-inset": `${lineInset}px`,
1626
- "--terminal-size": `${terminalSize}px`,
1627
- "--terminal-radius": `${terminalSize / 2}px`,
1628
- "--terminal-inset": `${terminalInset}px`,
1629
- "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
1630
- },
1631
- 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]}`
1738
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
1739
+ var MainComplementarySidebar = /* @__PURE__ */ (0, import_react35.forwardRef)((props, forwardedRef) => {
1740
+ const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
1741
+ const mover = useLandmarkMover(props.onKeyDown, "2");
1742
+ return /* @__PURE__ */ import_react35.default.createElement(MainSidebar, {
1743
+ ...mover,
1744
+ ...props,
1745
+ state: complementarySidebarState,
1746
+ onStateChange: setComplementarySidebarState,
1747
+ resizing,
1748
+ side: "inline-end",
1749
+ ref: forwardedRef
1632
1750
  });
1633
- };
1634
- var List = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1751
+ });
1752
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
1753
+ var MainContent = /* @__PURE__ */ (0, import_react35.forwardRef)(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
1754
+ const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
1635
1755
  const { tx } = useThemeContext();
1636
- const density = useDensityContext(props.density);
1637
- return /* @__PURE__ */ import_react32.default.createElement(DensityProvider, {
1638
- density
1639
- }, /* @__PURE__ */ import_react32.default.createElement(import_react_list.List, {
1756
+ const Root5 = asChild ? import_react_slot8.Slot : role ? "div" : "main";
1757
+ const mover = useLandmarkMover(props.onKeyDown, "1");
1758
+ return /* @__PURE__ */ import_react35.default.createElement(Root5, {
1759
+ role,
1760
+ ...handlesFocus && {
1761
+ ...mover
1762
+ },
1640
1763
  ...props,
1641
- className: tx("list.root", "list", {}, classNames),
1764
+ "data-sidebar-inline-start-state": navigationSidebarState,
1765
+ "data-sidebar-inline-end-state": complementarySidebarState,
1766
+ className: tx("main.content", "main", {
1767
+ bounce,
1768
+ handlesFocus
1769
+ }, classNames),
1642
1770
  ref: forwardedRef
1643
- }, children));
1771
+ }, children);
1644
1772
  });
1645
- var ListItemEndcap = /* @__PURE__ */ (0, import_react32.forwardRef)(({ children, classNames, asChild, ...props }, forwardedRef) => {
1646
- const Root5 = asChild ? import_react_slot8.Slot : "div";
1647
- const density = useDensityContext();
1773
+ MainContent.displayName = MAIN_NAME;
1774
+ var MainOverlay = /* @__PURE__ */ (0, import_react35.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1775
+ const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
1776
+ ssr: false
1777
+ });
1778
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
1648
1779
  const { tx } = useThemeContext();
1649
- return /* @__PURE__ */ import_react32.default.createElement(Root5, {
1650
- ...!asChild && {
1651
- role: "none"
1780
+ return /* @__PURE__ */ import_react35.default.createElement("div", {
1781
+ onClick: () => {
1782
+ setNavigationSidebarState("collapsed");
1783
+ setComplementarySidebarState("collapsed");
1652
1784
  },
1653
1785
  ...props,
1654
- className: tx("list.item.endcap", "list__listItem__endcap", {
1655
- density
1786
+ className: tx("main.overlay", "main__overlay", {
1787
+ isLg,
1788
+ inlineStartSidebarOpen: navigationSidebarState,
1789
+ inlineEndSidebarOpen: complementarySidebarState
1656
1790
  }, classNames),
1791
+ "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
1792
+ "aria-hidden": "true",
1657
1793
  ref: forwardedRef
1658
- }, children);
1659
- });
1660
- var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1661
- const density = useDensityContext();
1662
- const { tx } = useThemeContext();
1663
- return /* @__PURE__ */ import_react32.default.createElement("div", {
1664
- role: "none",
1665
- ...props,
1666
- className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1667
- density
1668
- }, classNames)
1669
1794
  });
1795
+ });
1796
+ var Main = {
1797
+ Root: MainRoot,
1798
+ Content: MainContent,
1799
+ Overlay: MainOverlay,
1800
+ NavigationSidebar: MainNavigationSidebar,
1801
+ ComplementarySidebar: MainComplementarySidebar
1670
1802
  };
1671
- var ListItemHeading = /* @__PURE__ */ (0, import_react32.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
1803
+ var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
1804
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
1805
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
1806
+ var ContextMenuContent = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
1672
1807
  const { tx } = useThemeContext();
1673
- const density = useDensityContext();
1674
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItemHeading, {
1808
+ const elevation = useElevationContext();
1809
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1810
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Content, {
1675
1811
  ...props,
1676
- className: tx("list.item.heading", "list__listItem__heading", {
1677
- density
1812
+ collisionPadding: safeCollisionPadding,
1813
+ className: tx("menu.content", "menu", {
1814
+ elevation
1678
1815
  }, classNames),
1679
1816
  ref: forwardedRef
1680
1817
  }, children);
1681
1818
  });
1682
- var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react32.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1819
+ var ContextMenuViewport = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1683
1820
  const { tx } = useThemeContext();
1684
- const density = useDensityContext();
1685
- const { open } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listItemScope);
1686
- const Icon3 = open ? import_react31.CaretDown : import_react31.CaretRight;
1687
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItemOpenTrigger, {
1821
+ const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1822
+ return /* @__PURE__ */ import_react37.default.createElement(Root5, {
1688
1823
  ...props,
1689
- className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1690
- density
1691
- }, classNames),
1824
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1692
1825
  ref: forwardedRef
1693
- }, children || /* @__PURE__ */ import_react32.default.createElement(Icon3, {
1694
- weight: "bold",
1695
- className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1696
- }));
1826
+ }, children);
1697
1827
  });
1698
- var ListItemRoot = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1828
+ var ContextMenuArrow = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1699
1829
  const { tx } = useThemeContext();
1700
- const density = useDensityContext();
1701
- return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItem, {
1830
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Arrow, {
1702
1831
  ...props,
1703
- className: tx("list.item.root", "list__listItem", {
1704
- density,
1705
- collapsible: props.collapsible
1706
- }, classNames),
1832
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
1707
1833
  ref: forwardedRef
1708
- }, children);
1709
- });
1710
- var ListItem = {
1711
- Root: ListItemRoot,
1712
- Endcap: ListItemEndcap,
1713
- Heading: ListItemHeading,
1714
- OpenTrigger: ListItemOpenTrigger,
1715
- CollapsibleContent: import_react_list.ListItemCollapsibleContent,
1716
- MockOpenTrigger: MockListItemOpenTrigger,
1717
- DropIndicator: ListDropIndicator
1718
- };
1719
- var edgeToOrientationMap2 = {
1720
- "reorder-above": "sibling",
1721
- "reorder-below": "sibling",
1722
- "make-child": "child",
1723
- reparent: "child"
1724
- };
1725
- var orientationStyles2 = {
1726
- // TODO(wittjosiah): Stop using left/right here.
1727
- sibling: "bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]",
1728
- child: "is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible"
1729
- };
1730
- var instructionStyles = {
1731
- "reorder-above": "block-start-[--line-offset] before:block-start-[--offset-terminal]",
1732
- "reorder-below": "block-end-[--line-offset] before:block-end-[--offset-terminal]",
1733
- "make-child": "border-accentSurface",
1734
- // TODO(wittjosiah): This is not occurring in the current implementation.
1735
- reparent: ""
1736
- };
1737
- var strokeSize2 = 2;
1738
- var terminalSize2 = 8;
1739
- var offsetToAlignTerminalWithLine2 = (strokeSize2 - terminalSize2) / 2;
1740
- var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1741
- const lineOffset = `calc(-0.5 * (${gap}px + ${strokeSize2}px))`;
1742
- const isBlocked = instruction.type === "instruction-blocked";
1743
- const desiredInstruction = isBlocked ? instruction.desired : instruction;
1744
- const orientation = edgeToOrientationMap2[desiredInstruction.type];
1745
- if (isBlocked) {
1746
- return null;
1747
- }
1748
- return /* @__PURE__ */ import_react35.default.createElement("div", {
1749
- style: {
1750
- "--line-thickness": `${strokeSize2}px`,
1751
- "--line-offset": `${lineOffset}`,
1752
- "--terminal-size": `${terminalSize2}px`,
1753
- "--terminal-radius": `${terminalSize2 / 2}px`,
1754
- "--negative-terminal-size": `-${terminalSize2}px`,
1755
- "--offset-terminal": `${offsetToAlignTerminalWithLine2}px`,
1756
- "--horizontal-indent": `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`
1757
- },
1758
- 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]}`
1759
1834
  });
1760
- };
1761
- var TreeRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1762
- return /* @__PURE__ */ import_react34.default.createElement(List, {
1835
+ });
1836
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
1837
+ var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1838
+ var ContextMenuItem = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1839
+ const { tx } = useThemeContext();
1840
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Item, {
1763
1841
  ...props,
1842
+ className: tx("menu.item", "menu__item", {}, classNames),
1764
1843
  ref: forwardedRef
1765
1844
  });
1766
1845
  });
1767
- var TreeBranch = /* @__PURE__ */ (0, import_react34.forwardRef)(({ __listScope, ...props }, forwardedRef) => {
1768
- const { headingId } = (0, import_react_list.useListItemContext)(import_react_list.LIST_ITEM_NAME, __listScope);
1769
- return /* @__PURE__ */ import_react34.default.createElement(List, {
1846
+ var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1847
+ const { tx } = useThemeContext();
1848
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.CheckboxItem, {
1770
1849
  ...props,
1771
- "aria-labelledby": headingId,
1850
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1772
1851
  ref: forwardedRef
1773
1852
  });
1774
1853
  });
1775
- var TreeItemRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1776
- return /* @__PURE__ */ import_react34.default.createElement(ListItem.Root, {
1777
- role: "treeitem",
1854
+ var ContextMenuSeparator = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1855
+ const { tx } = useThemeContext();
1856
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Separator, {
1778
1857
  ...props,
1858
+ className: tx("menu.separator", "menu__item", {}, classNames),
1779
1859
  ref: forwardedRef
1780
1860
  });
1781
1861
  });
1782
- var TreeItemHeading = ListItem.Heading;
1783
- var TreeItemOpenTrigger = ListItem.OpenTrigger;
1784
- var MockTreeItemOpenTrigger = ListItem.MockOpenTrigger;
1785
- var TreeItemBody = ListItem.CollapsibleContent;
1786
- var Tree = {
1787
- Root: TreeRoot,
1788
- Branch: TreeBranch
1789
- };
1790
- var TreeItem = {
1791
- Root: TreeItemRoot,
1792
- Heading: TreeItemHeading,
1793
- Body: TreeItemBody,
1794
- OpenTrigger: TreeItemOpenTrigger,
1795
- MockOpenTrigger: MockTreeItemOpenTrigger,
1796
- DropIndicator: TreeDropIndicator
1797
- };
1798
- var TREEGRID_ROW_NAME = "TreegridRow";
1799
- var [createTreegridRowContext, createTreegridRowScope] = (0, import_react_context6.createContextScope)(TREEGRID_ROW_NAME, []);
1800
- var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1801
- var PATH_SEPARATOR = "~";
1802
- var PARENT_OF_SEPARATOR = " ";
1803
- var TreegridRoot = /* @__PURE__ */ (0, import_react36.forwardRef)(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1862
+ var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1804
1863
  const { tx } = useThemeContext();
1805
- const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1806
- const arrowNavigationAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1807
- axis: "vertical",
1808
- tabbable: false,
1809
- circular: true
1810
- });
1811
- return /* @__PURE__ */ import_react36.default.createElement(Root5, {
1812
- role: "treegrid",
1813
- ...arrowNavigationAttrs,
1864
+ return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Label, {
1814
1865
  ...props,
1815
- className: tx("treegrid.root", "treegrid", {}, classNames),
1816
- style: {
1817
- ...style,
1818
- gridTemplateColumns
1819
- },
1866
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1820
1867
  ref: forwardedRef
1821
- }, children);
1868
+ });
1822
1869
  });
1823
- var TreegridRow = /* @__PURE__ */ (0, import_react36.forwardRef)(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1824
- const { tx } = useThemeContext();
1825
- const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1826
- const pathParts = id.split(PATH_SEPARATOR);
1827
- const level = pathParts.length - 1;
1828
- const [open, onOpenChange] = (0, import_react_use_controllable_state3.useControllableState)({
1829
- prop: propsOpen,
1830
- onChange: propsOnOpenChange,
1831
- defaultProp: defaultOpen
1870
+ var ContextMenu2 = {
1871
+ Root: ContextMenuRoot,
1872
+ Trigger: ContextMenuTrigger,
1873
+ Portal: ContextMenuPortal,
1874
+ Content: ContextMenuContent,
1875
+ Viewport: ContextMenuViewport,
1876
+ Arrow: ContextMenuArrow,
1877
+ Group: ContextMenuGroup,
1878
+ Item: ContextMenuItem,
1879
+ CheckboxItem: ContextMenuCheckboxItem,
1880
+ ItemIndicator: ContextMenuItemIndicator,
1881
+ Separator: ContextMenuSeparator,
1882
+ GroupLabel: ContextMenuGroupLabel
1883
+ };
1884
+ var DROPDOWN_MENU_NAME = "DropdownMenu";
1885
+ var [createDropdownMenuContext, createDropdownMenuScope] = (0, import_react_context7.createContextScope)(DROPDOWN_MENU_NAME, [
1886
+ import_react_menu.createMenuScope
1887
+ ]);
1888
+ var useMenuScope = (0, import_react_menu.createMenuScope)();
1889
+ var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
1890
+ var DropdownMenuRoot = (props) => {
1891
+ const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
1892
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1893
+ const triggerRef = (0, import_react38.useRef)(null);
1894
+ const [open = false, setOpen] = (0, import_react_use_controllable_state4.useControllableState)({
1895
+ prop: openProp,
1896
+ defaultProp: defaultOpen,
1897
+ onChange: onOpenChange
1898
+ });
1899
+ return /* @__PURE__ */ import_react38.default.createElement(DropdownMenuProvider, {
1900
+ scope: __scopeDropdownMenu,
1901
+ triggerId: (0, import_react_id.useId)(),
1902
+ triggerRef,
1903
+ contentId: (0, import_react_id.useId)(),
1904
+ open,
1905
+ onOpenChange: setOpen,
1906
+ onOpenToggle: (0, import_react38.useCallback)(() => setOpen((prevOpen) => !prevOpen), [
1907
+ setOpen
1908
+ ]),
1909
+ modal
1910
+ }, /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Root, {
1911
+ ...menuScope,
1912
+ open,
1913
+ onOpenChange: setOpen,
1914
+ dir,
1915
+ modal
1916
+ }, children));
1917
+ };
1918
+ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
1919
+ var TRIGGER_NAME = "DropdownMenuTrigger";
1920
+ var DropdownMenuTrigger = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
1921
+ const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1922
+ const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
1923
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1924
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Anchor, {
1925
+ asChild: true,
1926
+ ...menuScope
1927
+ }, /* @__PURE__ */ import_react38.default.createElement(import_react_primitive9.Primitive.button, {
1928
+ type: "button",
1929
+ id: context.triggerId,
1930
+ "aria-haspopup": "menu",
1931
+ "aria-expanded": context.open,
1932
+ "aria-controls": context.open ? context.contentId : void 0,
1933
+ "data-state": context.open ? "open" : "closed",
1934
+ "data-disabled": disabled ? "" : void 0,
1935
+ disabled,
1936
+ ...triggerProps,
1937
+ ref: (0, import_react_compose_refs.composeRefs)(forwardedRef, context.triggerRef),
1938
+ onPointerDown: (0, import_primitive.composeEventHandlers)(props.onPointerDown, (event) => {
1939
+ if (!disabled && event.button === 0 && event.ctrlKey === false) {
1940
+ context.onOpenToggle();
1941
+ if (!context.open) {
1942
+ event.preventDefault();
1943
+ }
1944
+ }
1945
+ }),
1946
+ onKeyDown: (0, import_primitive.composeEventHandlers)(props.onKeyDown, (event) => {
1947
+ if (disabled) {
1948
+ return;
1949
+ }
1950
+ if ([
1951
+ "Enter",
1952
+ " "
1953
+ ].includes(event.key)) {
1954
+ context.onOpenToggle();
1955
+ }
1956
+ if (event.key === "ArrowDown") {
1957
+ context.onOpenChange(true);
1958
+ }
1959
+ if ([
1960
+ "Enter",
1961
+ " ",
1962
+ "ArrowDown"
1963
+ ].includes(event.key)) {
1964
+ event.preventDefault();
1965
+ }
1966
+ })
1967
+ }));
1968
+ });
1969
+ DropdownMenuTrigger.displayName = TRIGGER_NAME;
1970
+ var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
1971
+ var DropdownMenuVirtualTrigger = (props) => {
1972
+ const { __scopeDropdownMenu, virtualRef } = props;
1973
+ const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
1974
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1975
+ (0, import_react38.useEffect)(() => {
1976
+ if (virtualRef.current) {
1977
+ context.triggerRef.current = virtualRef.current;
1978
+ }
1832
1979
  });
1833
- const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1834
- tabBehavior: "limited"
1980
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Anchor, {
1981
+ ...menuScope,
1982
+ virtualRef
1835
1983
  });
1836
- const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1837
- axis: "horizontal",
1838
- tabbable: false,
1839
- circular: false,
1840
- memorizeCurrent: false
1984
+ };
1985
+ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
1986
+ var PORTAL_NAME = "DropdownMenuPortal";
1987
+ var DropdownMenuPortal = (props) => {
1988
+ const { __scopeDropdownMenu, ...portalProps } = props;
1989
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1990
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Portal, {
1991
+ ...menuScope,
1992
+ ...portalProps
1841
1993
  });
1842
- return /* @__PURE__ */ import_react36.default.createElement(TreegridRowProvider, {
1843
- open,
1844
- onOpenChange,
1845
- scope: __treegridRowScope
1846
- }, /* @__PURE__ */ import_react36.default.createElement(Root5, {
1847
- role: "row",
1848
- "aria-level": level,
1849
- className: tx("treegrid.row", "treegrid__row", {
1850
- level
1851
- }, classNames),
1852
- ...parentOf && {
1853
- "aria-expanded": open,
1854
- "aria-owns": parentOf
1855
- },
1856
- tabIndex: 0,
1857
- ...focusableGroupAttrs,
1858
- ...props,
1859
- id,
1860
- ref: forwardedRef
1861
- }, /* @__PURE__ */ import_react36.default.createElement("div", {
1862
- role: "none",
1863
- className: "contents",
1864
- ...arrowGroupAttrs
1865
- }, children)));
1866
- });
1867
- var TreegridCell = /* @__PURE__ */ (0, import_react36.forwardRef)(({ classNames, children, indent, ...props }, forwardedRef) => {
1994
+ };
1995
+ DropdownMenuPortal.displayName = PORTAL_NAME;
1996
+ var DropdownMenuViewport = /* @__PURE__ */ (0, import_react38.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1868
1997
  const { tx } = useThemeContext();
1869
- return /* @__PURE__ */ import_react36.default.createElement("div", {
1870
- role: "gridcell",
1871
- className: tx("treegrid.cell", "treegrid__cell", {
1872
- indent
1873
- }, classNames),
1998
+ const Root5 = asChild ? import_react_slot10.Slot : import_react_primitive9.Primitive.div;
1999
+ return /* @__PURE__ */ import_react38.default.createElement(Root5, {
1874
2000
  ...props,
2001
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1875
2002
  ref: forwardedRef
1876
2003
  }, children);
1877
2004
  });
1878
- var Treegrid = {
1879
- Root: TreegridRoot,
1880
- Row: TreegridRow,
1881
- Cell: TreegridCell,
1882
- PARENT_OF_SEPARATOR,
1883
- PATH_SEPARATOR,
1884
- createTreegridRowScope,
1885
- useTreegridRowContext
1886
- };
1887
- var MotionState;
1888
- (function(MotionState2) {
1889
- MotionState2[MotionState2["IDLE"] = 0] = "IDLE";
1890
- MotionState2[MotionState2["DEBOUNCING"] = 1] = "DEBOUNCING";
1891
- MotionState2[MotionState2["FOLLOWING"] = 2] = "FOLLOWING";
1892
- })(MotionState || (MotionState = {}));
1893
- var useSwipeToDismiss = (ref, {
1894
- onDismiss,
1895
- dismissThreshold = 64,
1896
- debounceThreshold = 8,
1897
- offset = 0
1898
- /* side = 'inline-start' */
1899
- }) => {
1900
- const $root = ref.current;
1901
- const [motionState, setMotionState] = (0, import_react38.useState)(0);
1902
- const [gestureStartX, setGestureStartX] = (0, import_react38.useState)(0);
1903
- const setIdle = (0, import_react38.useCallback)(() => {
1904
- setMotionState(0);
1905
- $root?.style.removeProperty("inset-inline-start");
1906
- $root?.style.setProperty("transition-duration", "200ms");
1907
- }, [
1908
- $root
1909
- ]);
1910
- const setFollowing = (0, import_react38.useCallback)(() => {
1911
- setMotionState(2);
1912
- $root?.style.setProperty("transition-duration", "0ms");
1913
- }, [
1914
- $root
1915
- ]);
1916
- const handlePointerDown = (0, import_react38.useCallback)(({ screenX }) => {
1917
- if (motionState === 0) {
1918
- setMotionState(1);
1919
- setGestureStartX(screenX);
1920
- }
1921
- }, [
1922
- motionState
1923
- ]);
1924
- const handlePointerMove = (0, import_react38.useCallback)(({ screenX }) => {
1925
- if ($root) {
1926
- const delta = Math.min(screenX - gestureStartX, 0);
1927
- switch (motionState) {
1928
- case 2:
1929
- if (Math.abs(delta) > dismissThreshold) {
1930
- setIdle();
1931
- onDismiss?.();
1932
- } else {
1933
- $root.style.setProperty("inset-inline-start", `${offset + delta}px`);
1934
- }
1935
- break;
1936
- case 1:
1937
- if (Math.abs(delta) > debounceThreshold) {
1938
- setFollowing();
1939
- }
1940
- break;
2005
+ var CONTENT_NAME = "DropdownMenuContent";
2006
+ var DropdownMenuContent = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2007
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
2008
+ const { tx } = useThemeContext();
2009
+ const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
2010
+ const elevation = useElevationContext();
2011
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2012
+ const hasInteractedOutsideRef = (0, import_react38.useRef)(false);
2013
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2014
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Content, {
2015
+ id: context.contentId,
2016
+ "aria-labelledby": context.triggerId,
2017
+ ...menuScope,
2018
+ ...contentProps,
2019
+ collisionPadding: safeCollisionPadding,
2020
+ ref: forwardedRef,
2021
+ onCloseAutoFocus: (0, import_primitive.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
2022
+ if (!hasInteractedOutsideRef.current) {
2023
+ context.triggerRef.current?.focus();
1941
2024
  }
1942
- }
1943
- }, [
1944
- $root,
1945
- motionState,
1946
- gestureStartX
1947
- ]);
1948
- const handlePointerUp = (0, import_react38.useCallback)(() => {
1949
- setIdle();
1950
- }, [
1951
- setIdle
1952
- ]);
1953
- (0, import_react38.useEffect)(() => {
1954
- $root?.addEventListener("pointerdown", handlePointerDown);
1955
- return () => {
1956
- $root?.removeEventListener("pointerdown", handlePointerDown);
1957
- };
1958
- }, [
1959
- $root,
1960
- handlePointerDown
1961
- ]);
1962
- (0, import_react38.useEffect)(() => {
1963
- $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
1964
- return () => {
1965
- document.documentElement.removeEventListener("pointermove", handlePointerMove);
1966
- };
1967
- }, [
1968
- $root,
1969
- handlePointerMove
1970
- ]);
1971
- (0, import_react38.useEffect)(() => {
1972
- $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
1973
- return () => {
1974
- document.documentElement.removeEventListener("pointerup", handlePointerUp);
1975
- };
1976
- }, [
1977
- $root,
1978
- handlePointerUp
1979
- ]);
1980
- };
1981
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
1982
- var MAIN_ROOT_NAME = "MainRoot";
1983
- var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
1984
- var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
1985
- var MAIN_NAME = "Main";
1986
- var GENERIC_CONSUMER_NAME = "GenericConsumer";
1987
- var landmarkAttr = "data-main-landmark";
1988
- var useLandmarkMover = (propsOnKeyDown, landmark) => {
1989
- const handleKeyDown = (0, import_react37.useCallback)((event) => {
1990
- const target = event.target;
1991
- if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2025
+ hasInteractedOutsideRef.current = false;
1992
2026
  event.preventDefault();
1993
- const landmarks = Array.from(document.querySelectorAll(`[${landmarkAttr}]:not([inert])`)).map((el) => el.hasAttribute(landmarkAttr) ? parseInt(el.getAttribute(landmarkAttr)) : NaN).sort();
1994
- const l = landmarks.length;
1995
- const cursor = landmarks.indexOf(parseInt(target.getAttribute(landmarkAttr)));
1996
- const nextLandmark = landmarks[(cursor + l + (event.getModifierState("Shift") ? -1 : 1)) % l];
1997
- document.querySelector(`[${landmarkAttr}="${nextLandmark}"]`)?.focus();
1998
- }
1999
- propsOnKeyDown?.(event);
2000
- }, [
2001
- propsOnKeyDown
2002
- ]);
2003
- const focusableGroupAttrs = window ? {} : {
2004
- tabBehavior: "limited",
2005
- ignoreDefaultKeydown: {
2006
- Tab: true
2027
+ }),
2028
+ onInteractOutside: (0, import_primitive.composeEventHandlers)(props.onInteractOutside, (event) => {
2029
+ const originalEvent = event.detail.originalEvent;
2030
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2031
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
2032
+ if (!context.modal || isRightClick) {
2033
+ hasInteractedOutsideRef.current = true;
2034
+ }
2035
+ }),
2036
+ className: tx("menu.content", "menu", {
2037
+ elevation
2038
+ }, classNames),
2039
+ style: {
2040
+ ...props.style,
2041
+ // re-namespace exposed content custom properties
2042
+ ...{
2043
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2044
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2045
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2046
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2047
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2048
+ }
2007
2049
  }
2008
- };
2009
- return {
2010
- onKeyDown: handleKeyDown,
2011
- [landmarkAttr]: landmark,
2012
- tabIndex: 0,
2013
- ...focusableGroupAttrs
2014
- };
2015
- };
2016
- var [MainProvider, useMainContext] = (0, import_react_context7.createContext)(MAIN_NAME, {
2017
- resizing: false,
2018
- navigationSidebarState: "closed",
2019
- setNavigationSidebarState: (nextState) => {
2020
- import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2021
- F: __dxlog_file,
2022
- L: 82,
2023
- S: void 0,
2024
- C: (f, a) => f(...a)
2025
- });
2026
- },
2027
- complementarySidebarState: "closed",
2028
- setComplementarySidebarState: (nextState) => {
2029
- import_log.log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2030
- F: __dxlog_file,
2031
- L: 87,
2032
- S: void 0,
2033
- C: (f, a) => f(...a)
2034
- });
2035
- }
2036
- });
2037
- var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2038
- const { setNavigationSidebarState, navigationSidebarState, setComplementarySidebarState, complementarySidebarState } = useMainContext(consumerName);
2039
- return {
2040
- navigationSidebarState,
2041
- setNavigationSidebarState,
2042
- toggleNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2043
- navigationSidebarState,
2044
- setNavigationSidebarState
2045
- ]),
2046
- openNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("expanded"), []),
2047
- collapseNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("collapsed"), []),
2048
- closeNavigationSidebar: (0, import_react37.useCallback)(() => setNavigationSidebarState("closed"), []),
2049
- complementarySidebarState,
2050
- setComplementarySidebarState,
2051
- toggleComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2052
- complementarySidebarState,
2053
- setComplementarySidebarState
2054
- ]),
2055
- openComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("expanded"), []),
2056
- collapseComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("collapsed"), []),
2057
- closeComplementarySidebar: (0, import_react37.useCallback)(() => setComplementarySidebarState("closed"), [])
2058
- };
2059
- };
2060
- var resizeDebounce = 3e3;
2061
- var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2062
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2063
- ssr: false
2064
2050
  });
2065
- const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2066
- prop: propsNavigationSidebarState,
2067
- defaultProp: defaultNavigationSidebarState,
2068
- onChange: onNavigationSidebarStateChange
2051
+ });
2052
+ DropdownMenuContent.displayName = CONTENT_NAME;
2053
+ var GROUP_NAME = "DropdownMenuGroup";
2054
+ var DropdownMenuGroup = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2055
+ const { __scopeDropdownMenu, ...groupProps } = props;
2056
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2057
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Group, {
2058
+ ...menuScope,
2059
+ ...groupProps,
2060
+ ref: forwardedRef
2069
2061
  });
2070
- const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2071
- prop: propsComplementarySidebarState,
2072
- defaultProp: defaultComplementarySidebarState,
2073
- onChange: onComplementarySidebarStateChange
2062
+ });
2063
+ DropdownMenuGroup.displayName = GROUP_NAME;
2064
+ var LABEL_NAME = "DropdownMenuLabel";
2065
+ var DropdownMenuGroupLabel = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2066
+ const { __scopeDropdownMenu, classNames, ...labelProps } = props;
2067
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2068
+ const { tx } = useThemeContext();
2069
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Label, {
2070
+ ...menuScope,
2071
+ ...labelProps,
2072
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
2073
+ ref: forwardedRef
2074
2074
  });
2075
- const [resizing, setResizing] = (0, import_react37.useState)(false);
2076
- const resizeInterval = (0, import_react37.useRef)(null);
2077
- const handleResize = (0, import_react37.useCallback)(() => {
2078
- setResizing(true);
2079
- if (resizeInterval.current) {
2080
- clearTimeout(resizeInterval.current);
2081
- }
2082
- resizeInterval.current = setTimeout(() => {
2083
- setResizing(false);
2084
- resizeInterval.current = null;
2085
- }, resizeDebounce);
2086
- }, []);
2087
- (0, import_react37.useEffect)(() => {
2088
- window.addEventListener("resize", handleResize);
2089
- return () => window.removeEventListener("resize", handleResize);
2090
- }, [
2091
- handleResize
2092
- ]);
2093
- return /* @__PURE__ */ import_react37.default.createElement(MainProvider, {
2094
- ...props,
2095
- navigationSidebarState,
2096
- setNavigationSidebarState,
2097
- complementarySidebarState,
2098
- setComplementarySidebarState,
2099
- resizing
2100
- }, children);
2101
- };
2102
- MainRoot.displayName = MAIN_ROOT_NAME;
2103
- var handleOpenAutoFocus = (event) => {
2104
- !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
2105
- };
2106
- var MainSidebar = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2107
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2108
- ssr: false
2075
+ });
2076
+ DropdownMenuGroupLabel.displayName = LABEL_NAME;
2077
+ var ITEM_NAME = "DropdownMenuItem";
2078
+ var DropdownMenuItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2079
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
2080
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2081
+ const { tx } = useThemeContext();
2082
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Item, {
2083
+ ...menuScope,
2084
+ ...itemProps,
2085
+ className: tx("menu.item", "menu__item", {}, classNames),
2086
+ ref: forwardedRef
2109
2087
  });
2088
+ });
2089
+ DropdownMenuItem.displayName = ITEM_NAME;
2090
+ var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
2091
+ var DropdownMenuCheckboxItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2092
+ const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
2093
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2110
2094
  const { tx } = useThemeContext();
2111
- const { t } = useTranslation();
2112
- const ref = (0, import_react_hooks4.useForwardedRef)(forwardedRef);
2113
- const noopRef = (0, import_react37.useRef)(null);
2114
- useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2115
- onDismiss: () => onStateChange?.("closed")
2095
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.CheckboxItem, {
2096
+ ...menuScope,
2097
+ ...checkboxItemProps,
2098
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
2099
+ ref: forwardedRef
2116
2100
  });
2117
- const handleKeyDown = (0, import_react37.useCallback)((event) => {
2118
- if (event.key === "Escape") {
2119
- event.target.closest("[data-tabster]")?.focus();
2120
- }
2121
- props.onKeyDown?.(event);
2122
- }, [
2123
- props.onKeyDown
2124
- ]);
2125
- const Root5 = isLg ? import_react_primitive9.Primitive.div : import_react_dialog2.DialogContent;
2126
- return /* @__PURE__ */ import_react37.default.createElement(import_react_dialog2.Root, {
2127
- open: state !== "closed",
2128
- "aria-label": toLocalizedString(label, t),
2129
- modal: false
2130
- }, !isLg && /* @__PURE__ */ import_react37.default.createElement(import_react_dialog2.DialogTitle, {
2131
- className: "sr-only"
2132
- }, toLocalizedString(label, t)), /* @__PURE__ */ import_react37.default.createElement(Root5, {
2133
- ...!isLg && {
2134
- forceMount: true,
2135
- tabIndex: -1,
2136
- onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
2137
- },
2138
- ...props,
2139
- "data-side": side === "inline-end" ? "ie" : "is",
2140
- "data-state": state,
2141
- "data-resizing": resizing ? "true" : "false",
2142
- className: tx("main.sidebar", "main__sidebar", {}, classNames),
2143
- onKeyDown: handleKeyDown,
2144
- ...state === "closed" && {
2145
- inert: "true"
2146
- },
2147
- ref
2148
- }, children));
2149
2101
  });
2150
- var MainNavigationSidebar = /* @__PURE__ */ (0, import_react37.forwardRef)((props, forwardedRef) => {
2151
- const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
2152
- const mover = useLandmarkMover(props.onKeyDown, "0");
2153
- return /* @__PURE__ */ import_react37.default.createElement(MainSidebar, {
2154
- ...mover,
2155
- ...props,
2156
- state: navigationSidebarState,
2157
- onStateChange: setNavigationSidebarState,
2158
- resizing,
2159
- side: "inline-start",
2102
+ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
2103
+ var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
2104
+ var DropdownMenuRadioGroup = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2105
+ const { __scopeDropdownMenu, ...radioGroupProps } = props;
2106
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2107
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.RadioGroup, {
2108
+ ...menuScope,
2109
+ ...radioGroupProps,
2160
2110
  ref: forwardedRef
2161
2111
  });
2162
2112
  });
2163
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2164
- var MainComplementarySidebar = /* @__PURE__ */ (0, import_react37.forwardRef)((props, forwardedRef) => {
2165
- const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
2166
- const mover = useLandmarkMover(props.onKeyDown, "2");
2167
- return /* @__PURE__ */ import_react37.default.createElement(MainSidebar, {
2168
- ...mover,
2169
- ...props,
2170
- state: complementarySidebarState,
2171
- onStateChange: setComplementarySidebarState,
2172
- resizing,
2173
- side: "inline-end",
2113
+ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
2114
+ var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
2115
+ var DropdownMenuRadioItem = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2116
+ const { __scopeDropdownMenu, ...radioItemProps } = props;
2117
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2118
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.RadioItem, {
2119
+ ...menuScope,
2120
+ ...radioItemProps,
2174
2121
  ref: forwardedRef
2175
2122
  });
2176
2123
  });
2177
- MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
2178
- var MainContent = /* @__PURE__ */ (0, import_react37.forwardRef)(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
2179
- const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
2180
- const { tx } = useThemeContext();
2181
- const Root5 = asChild ? import_react_slot10.Slot : role ? "div" : "main";
2182
- const mover = useLandmarkMover(props.onKeyDown, "1");
2183
- return /* @__PURE__ */ import_react37.default.createElement(Root5, {
2184
- role,
2185
- ...handlesFocus && {
2186
- ...mover
2187
- },
2188
- ...props,
2189
- "data-sidebar-inline-start-state": navigationSidebarState,
2190
- "data-sidebar-inline-end-state": complementarySidebarState,
2191
- className: tx("main.content", "main", {
2192
- bounce,
2193
- handlesFocus
2194
- }, classNames),
2124
+ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
2125
+ var INDICATOR_NAME = "DropdownMenuItemIndicator";
2126
+ var DropdownMenuItemIndicator = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2127
+ const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
2128
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2129
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.ItemIndicator, {
2130
+ ...menuScope,
2131
+ ...itemIndicatorProps,
2195
2132
  ref: forwardedRef
2196
- }, children);
2133
+ });
2197
2134
  });
2198
- MainContent.displayName = MAIN_NAME;
2199
- var MainOverlay = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
2200
- const [isLg] = (0, import_react_hooks4.useMediaQuery)("lg", {
2201
- ssr: false
2135
+ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
2136
+ var SEPARATOR_NAME = "DropdownMenuSeparator";
2137
+ var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2138
+ const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
2139
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2140
+ const { tx } = useThemeContext();
2141
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Separator, {
2142
+ ...menuScope,
2143
+ ...separatorProps,
2144
+ className: tx("menu.separator", "menu__item", {}, classNames),
2145
+ ref: forwardedRef
2202
2146
  });
2203
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2147
+ });
2148
+ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
2149
+ var ARROW_NAME = "DropdownMenuArrow";
2150
+ var DropdownMenuArrow = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2151
+ const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
2152
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2204
2153
  const { tx } = useThemeContext();
2205
- return /* @__PURE__ */ import_react37.default.createElement("div", {
2206
- onClick: () => {
2207
- setNavigationSidebarState("collapsed");
2208
- setComplementarySidebarState("collapsed");
2209
- },
2210
- ...props,
2211
- className: tx("main.overlay", "main__overlay", {
2212
- isLg,
2213
- inlineStartSidebarOpen: navigationSidebarState,
2214
- inlineEndSidebarOpen: complementarySidebarState
2215
- }, classNames),
2216
- "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
2217
- "aria-hidden": "true",
2154
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Arrow, {
2155
+ ...menuScope,
2156
+ ...arrowProps,
2157
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
2218
2158
  ref: forwardedRef
2219
2159
  });
2220
2160
  });
2221
- var Main = {
2222
- Root: MainRoot,
2223
- Content: MainContent,
2224
- Overlay: MainOverlay,
2225
- NavigationSidebar: MainNavigationSidebar,
2226
- ComplementarySidebar: MainComplementarySidebar
2161
+ DropdownMenuArrow.displayName = ARROW_NAME;
2162
+ var DropdownMenuSub = (props) => {
2163
+ const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
2164
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2165
+ const [open = false, setOpen] = (0, import_react_use_controllable_state4.useControllableState)({
2166
+ prop: openProp,
2167
+ defaultProp: defaultOpen,
2168
+ onChange: onOpenChange
2169
+ });
2170
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Sub, {
2171
+ ...menuScope,
2172
+ open,
2173
+ onOpenChange: setOpen
2174
+ }, children);
2175
+ };
2176
+ var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
2177
+ var DropdownMenuSubTrigger = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2178
+ const { __scopeDropdownMenu, ...subTriggerProps } = props;
2179
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2180
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.SubTrigger, {
2181
+ ...menuScope,
2182
+ ...subTriggerProps,
2183
+ ref: forwardedRef
2184
+ });
2185
+ });
2186
+ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
2187
+ var SUB_CONTENT_NAME = "DropdownMenuSubContent";
2188
+ var DropdownMenuSubContent = /* @__PURE__ */ (0, import_react38.forwardRef)((props, forwardedRef) => {
2189
+ const { __scopeDropdownMenu, ...subContentProps } = props;
2190
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2191
+ return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.SubContent, {
2192
+ ...menuScope,
2193
+ ...subContentProps,
2194
+ ref: forwardedRef,
2195
+ style: {
2196
+ ...props.style,
2197
+ // re-namespace exposed content custom properties
2198
+ ...{
2199
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2200
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2201
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2202
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2203
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2204
+ }
2205
+ }
2206
+ });
2207
+ });
2208
+ DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
2209
+ var DropdownMenu = {
2210
+ Root: DropdownMenuRoot,
2211
+ Trigger: DropdownMenuTrigger,
2212
+ VirtualTrigger: DropdownMenuVirtualTrigger,
2213
+ Portal: DropdownMenuPortal,
2214
+ Content: DropdownMenuContent,
2215
+ Viewport: DropdownMenuViewport,
2216
+ Group: DropdownMenuGroup,
2217
+ GroupLabel: DropdownMenuGroupLabel,
2218
+ Item: DropdownMenuItem,
2219
+ CheckboxItem: DropdownMenuCheckboxItem,
2220
+ RadioGroup: DropdownMenuRadioGroup,
2221
+ RadioItem: DropdownMenuRadioItem,
2222
+ ItemIndicator: DropdownMenuItemIndicator,
2223
+ Separator: DropdownMenuSeparator,
2224
+ Arrow: DropdownMenuArrow,
2225
+ Sub: DropdownMenuSub,
2226
+ SubTrigger: DropdownMenuSubTrigger,
2227
+ SubContent: DropdownMenuSubContent
2227
2228
  };
2229
+ var useDropdownMenuMenuScope = useMenuScope;
2228
2230
  var MESSAGE_NAME = "Message";
2229
2231
  var [MessageProvider, useMessageContext] = (0, import_react_context8.createContext)(MESSAGE_NAME);
2230
2232
  var MessageRoot = /* @__PURE__ */ (0, import_react39.forwardRef)(({ asChild, valence, elevation: propsElevation, className, titleId: propsTitleId, descriptionId: propsDescriptionId, children, ...props }, forwardedRef) => {