@dxos/react-ui 0.8.2-main.f11618f → 0.8.2-staging.7ac8446

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 import_react_checkbox = require("@radix-ui/react-checkbox");
163
- var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
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");
164
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
+ 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"));
165
179
  var import_react_input = require("@dxos/react-input");
166
180
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
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"));
170
- var import_react_list = require("@dxos/react-list");
171
- var import_react31 = __toESM(require("react"));
181
+ var import_react31 = require("@phosphor-icons/react");
182
+ var import_react_slot8 = require("@radix-ui/react-slot");
172
183
  var import_react32 = __toESM(require("react"));
184
+ var import_react_list = require("@dxos/react-list");
173
185
  var import_react33 = __toESM(require("react"));
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
186
  var import_react34 = __toESM(require("react"));
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
187
  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"));
188
+ var import_react_tabster = require("@fluentui/react-tabster");
189
+ var import_react_context6 = require("@radix-ui/react-context");
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_react37 = __toESM(require("react"));
193
- var import_primitive = require("@radix-ui/primitive");
194
- var import_react_compose_refs = require("@radix-ui/react-compose-refs");
192
+ var import_react_use_controllable_state3 = require("@radix-ui/react-use-controllable-state");
193
+ var import_react36 = __toESM(require("react"));
195
194
  var import_react_context7 = require("@radix-ui/react-context");
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");
195
+ var import_react_dialog2 = require("@radix-ui/react-dialog");
199
196
  var import_react_primitive9 = require("@radix-ui/react-primitive");
200
197
  var import_react_slot10 = require("@radix-ui/react-slot");
201
198
  var import_react_use_controllable_state4 = require("@radix-ui/react-use-controllable-state");
202
- var import_react38 = __toESM(require("react"));
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");
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,18 +386,17 @@ var DxAvatar = (0, import_react9.createComponent)({
386
386
  elementClass: import_lit_ui.DxAvatar,
387
387
  react: import_react10.default
388
388
  });
389
- var AvatarContent = /* @__PURE__ */ (0, import_react10.forwardRef)(({ icon, classNames, ...props }, forwardedRef) => {
389
+ var AvatarContent = ({ icon, classNames, ...props }) => {
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
- "aria-labelledby": labelId,
395
+ labelId,
396
396
  "aria-describedby": descriptionId,
397
- rootClassName: (0, import_react_ui_theme.mx)(classNames),
398
- ref: forwardedRef
397
+ rootClassName: (0, import_react_ui_theme.mx)(classNames)
399
398
  });
400
- });
399
+ };
401
400
  var AvatarLabel = /* @__PURE__ */ (0, import_react10.forwardRef)(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
402
401
  const Root5 = asChild ? import_react_slot2.Slot : import_react_primitive2.Primitive.span;
403
402
  const { tx } = useThemeContext();
@@ -903,7 +902,6 @@ var DialogContent = /* @__PURE__ */ (0, import_react26.forwardRef)(({ classNames
903
902
  const { tx } = useThemeContext();
904
903
  const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
905
904
  return /* @__PURE__ */ import_react26.default.createElement(import_react_dialog.DialogContent, {
906
- "aria-describedby": void 0,
907
905
  ...props,
908
906
  className: tx("dialog.content", "dialog", {
909
907
  inOverlayLayout: propsInOverlayLayout || inOverlayLayout
@@ -989,1244 +987,1244 @@ var AlertDialog = {
989
987
  Cancel: AlertDialogCancel,
990
988
  Action: AlertDialogAction
991
989
  };
992
- var Label = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
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) => {
993
994
  const { tx } = useThemeContext();
994
- return /* @__PURE__ */ import_react28.default.createElement(import_react_input.Label, {
995
+ const elevation = useElevationContext();
996
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
997
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Content, {
995
998
  ...props,
996
- className: tx("input.label", "input__label", {
997
- srOnly
999
+ collisionPadding: safeCollisionPadding,
1000
+ className: tx("menu.content", "menu", {
1001
+ elevation
998
1002
  }, classNames),
999
1003
  ref: forwardedRef
1000
1004
  }, children);
1001
1005
  });
1002
- var Description = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1006
+ var ContextMenuViewport = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1003
1007
  const { tx } = useThemeContext();
1004
- return /* @__PURE__ */ import_react28.default.createElement(import_react_input.Description, {
1008
+ const Root5 = asChild ? import_react_slot6.Slot : import_react_primitive6.Primitive.div;
1009
+ return /* @__PURE__ */ import_react28.default.createElement(Root5, {
1005
1010
  ...props,
1006
- className: tx("input.description", "input__description", {
1007
- srOnly
1008
- }, classNames),
1011
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1009
1012
  ref: forwardedRef
1010
1013
  }, children);
1011
1014
  });
1012
- var Validation = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1015
+ var ContextMenuArrow = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1013
1016
  const { tx } = useThemeContext();
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, {
1017
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Arrow, {
1016
1018
  ...props,
1017
- className: tx("input.validation", `input__validation-message input__validation-message--${validationValence}`, {
1018
- srOnly,
1019
- validationValence
1020
- }, classNames),
1019
+ className: tx("menu.arrow", "menu__arrow", {}, classNames),
1021
1020
  ref: forwardedRef
1022
- }, children);
1021
+ });
1023
1022
  });
1024
- var DescriptionAndValidation = /* @__PURE__ */ (0, import_react28.forwardRef)(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1023
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
1024
+ var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1025
+ var ContextMenuItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1025
1026
  const { tx } = useThemeContext();
1026
- return /* @__PURE__ */ import_react28.default.createElement(import_react_input.DescriptionAndValidation, {
1027
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Item, {
1027
1028
  ...props,
1028
- className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1029
- srOnly
1030
- }, classNames),
1029
+ className: tx("menu.item", "menu__item", {}, classNames),
1031
1030
  ref: forwardedRef
1032
- }, children);
1031
+ });
1033
1032
  });
1034
- var PinInput = /* @__PURE__ */ (0, import_react28.forwardRef)(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, variant, ...props }, forwardedRef) => {
1035
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1033
+ var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1036
1034
  const { tx } = useThemeContext();
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, {
1035
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.CheckboxItem, {
1054
1036
  ...props,
1055
- segmentClassName,
1056
- ...props.autoFocus && !hasIosKeyboard2 && {
1057
- autoFocus: true
1058
- },
1059
- inputClassName: tx("input.inputWithSegments", "input input--pin", {
1060
- disabled: props.disabled
1061
- }, inputClassName),
1037
+ className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1062
1038
  ref: forwardedRef
1063
1039
  });
1064
1040
  });
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, {
1041
+ var ContextMenuSeparator = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1042
+ const { tx } = useThemeContext();
1043
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Separator, {
1073
1044
  ...props,
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
- },
1045
+ className: tx("menu.separator", "menu__item", {}, classNames),
1084
1046
  ref: forwardedRef
1085
1047
  });
1086
1048
  });
1087
- var TextArea = /* @__PURE__ */ (0, import_react28.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1088
- const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1049
+ var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react28.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1089
1050
  const { tx } = useThemeContext();
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, {
1051
+ return /* @__PURE__ */ import_react28.default.createElement(ContextMenuPrimitive.Label, {
1094
1052
  ...props,
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
- },
1053
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1105
1054
  ref: forwardedRef
1106
1055
  });
1107
1056
  });
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
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
1113
1085
  });
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
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
+ }
1135
1153
  })
1136
1154
  }));
1137
1155
  });
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
1143
- });
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
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
+ }
1166
+ });
1167
+ return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Anchor, {
1168
+ ...menuScope,
1169
+ virtualRef
1160
1170
  });
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
1173
- };
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
1171
  };
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]}`
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
1207
1180
  });
1208
1181
  };
1209
- var List = /* @__PURE__ */ (0, import_react30.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1210
- const { tx } = useThemeContext();
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, {
1215
- ...props,
1216
- className: tx("list.root", "list", {}, classNames),
1217
- ref: forwardedRef
1218
- }, children));
1219
- });
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();
1182
+ DropdownMenuPortal.displayName = PORTAL_NAME;
1183
+ var DropdownMenuViewport = /* @__PURE__ */ (0, import_react29.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1223
1184
  const { tx } = useThemeContext();
1224
- return /* @__PURE__ */ import_react30.default.createElement(Root5, {
1225
- ...!asChild && {
1226
- role: "none"
1227
- },
1185
+ const Root5 = asChild ? import_react_slot7.Slot : import_react_primitive7.Primitive.div;
1186
+ return /* @__PURE__ */ import_react29.default.createElement(Root5, {
1228
1187
  ...props,
1229
- className: tx("list.item.endcap", "list__listItem__endcap", {
1230
- density
1231
- }, classNames),
1188
+ className: tx("menu.viewport", "menu__viewport", {}, classNames),
1232
1189
  ref: forwardedRef
1233
1190
  }, children);
1234
1191
  });
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)
1244
- });
1245
- };
1246
- var ListItemHeading = /* @__PURE__ */ (0, import_react30.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
1192
+ var CONTENT_NAME = "DropdownMenuContent";
1193
+ var DropdownMenuContent = /* @__PURE__ */ (0, import_react29.forwardRef)((props, forwardedRef) => {
1194
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
1247
1195
  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
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
1253
1225
  }, 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,
1254
1247
  ref: forwardedRef
1255
- }, children);
1248
+ });
1256
1249
  });
1257
- var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
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);
1258
1255
  const { tx } = useThemeContext();
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),
1256
+ return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Label, {
1257
+ ...menuScope,
1258
+ ...labelProps,
1259
+ className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1267
1260
  ref: forwardedRef
1268
- }, children || /* @__PURE__ */ import_react30.default.createElement(Icon3, {
1269
- weight: "bold",
1270
- className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1271
- }));
1261
+ });
1272
1262
  });
1273
- var ListItemRoot = /* @__PURE__ */ (0, import_react30.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
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);
1274
1268
  const { tx } = useThemeContext();
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),
1269
+ return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Item, {
1270
+ ...menuScope,
1271
+ ...itemProps,
1272
+ className: tx("menu.item", "menu__item", {}, classNames),
1282
1273
  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
1274
  });
1335
- };
1336
- var TreeRoot = /* @__PURE__ */ (0, import_react32.forwardRef)((props, forwardedRef) => {
1337
- return /* @__PURE__ */ import_react32.default.createElement(List, {
1338
- ...props,
1275
+ });
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),
1339
1286
  ref: forwardedRef
1340
1287
  });
1341
1288
  });
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,
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,
1347
1297
  ref: forwardedRef
1348
1298
  });
1349
1299
  });
1350
- var TreeItemRoot = /* @__PURE__ */ (0, import_react32.forwardRef)((props, forwardedRef) => {
1351
- return /* @__PURE__ */ import_react32.default.createElement(ListItem.Root, {
1352
- role: "treeitem",
1353
- ...props,
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,
1354
1308
  ref: forwardedRef
1355
1309
  });
1356
1310
  });
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
1385
- });
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
- },
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,
1395
1319
  ref: forwardedRef
1396
- }, children);
1320
+ });
1397
1321
  });
1398
- var TreegridRow = /* @__PURE__ */ (0, import_react34.forwardRef)(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
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);
1399
1327
  const { tx } = useThemeContext();
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
1328
+ return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Separator, {
1329
+ ...menuScope,
1330
+ ...separatorProps,
1331
+ className: tx("menu.separator", "menu__item", {}, classNames),
1332
+ ref: forwardedRef
1407
1333
  });
1408
- const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1409
- tabBehavior: "limited"
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
1410
1346
  });
1411
- const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1412
- axis: "horizontal",
1413
- tabbable: false,
1414
- circular: false,
1415
- memorizeCurrent: false
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
1416
1356
  });
1417
- return /* @__PURE__ */ import_react34.default.createElement(TreegridRowProvider, {
1357
+ return /* @__PURE__ */ import_react29.default.createElement(MenuPrimitive.Sub, {
1358
+ ...menuScope,
1418
1359
  open,
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
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
1426
1423
  }, classNames),
1427
- ...parentOf && {
1428
- "aria-expanded": open,
1429
- "aria-owns": parentOf
1430
- },
1431
- tabIndex: 0,
1432
- ...focusableGroupAttrs,
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, {
1433
1430
  ...props,
1434
- id,
1431
+ className: tx("input.description", "input__description", {
1432
+ srOnly
1433
+ }, classNames),
1435
1434
  ref: forwardedRef
1436
- }, /* @__PURE__ */ import_react34.default.createElement("div", {
1437
- role: "none",
1438
- className: "contents",
1439
- ...arrowGroupAttrs
1440
- }, children)));
1435
+ }, children);
1441
1436
  });
1442
- var TreegridCell = /* @__PURE__ */ (0, import_react34.forwardRef)(({ classNames, children, indent, ...props }, forwardedRef) => {
1437
+ var Validation = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
1443
1438
  const { tx } = useThemeContext();
1444
- return /* @__PURE__ */ import_react34.default.createElement("div", {
1445
- role: "gridcell",
1446
- className: tx("treegrid.cell", "treegrid__cell", {
1447
- indent
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
1448
1445
  }, 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, {
1449
1452
  ...props,
1453
+ className: tx("input.descriptionAndValidation", "input__description-and-validation", {
1454
+ srOnly
1455
+ }, classNames),
1450
1456
  ref: forwardedRef
1451
1457
  }, children);
1452
1458
  });
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
1484
- ]);
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
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
1498
1477
  ]);
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
- }
1611
- });
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
1639
- });
1640
- const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state3.useControllableState)({
1641
- prop: propsNavigationSidebarState,
1642
- defaultProp: defaultNavigationSidebarState,
1643
- onChange: onNavigationSidebarStateChange
1644
- });
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, {
1669
- ...props,
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
1684
- });
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
1712
- },
1478
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_input.PinInput, {
1713
1479
  ...props,
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"
1480
+ segmentClassName,
1481
+ ...props.autoFocus && !hasIosKeyboard2 && {
1482
+ autoFocus: true
1721
1483
  },
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",
1484
+ inputClassName: tx("input.inputWithSegments", "input input--pin", {
1485
+ disabled: props.disabled
1486
+ }, inputClassName),
1735
1487
  ref: forwardedRef
1736
1488
  });
1737
1489
  });
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,
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, {
1744
1498
  ...props,
1745
- state: complementarySidebarState,
1746
- onStateChange: setComplementarySidebarState,
1747
- resizing,
1748
- side: "inline-end",
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
+ },
1749
1509
  ref: forwardedRef
1750
1510
  });
1751
1511
  });
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);
1512
+ var TextArea = /* @__PURE__ */ (0, import_react30.forwardRef)(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
1513
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
1755
1514
  const { tx } = useThemeContext();
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
- },
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, {
1763
1519
  ...props,
1764
- "data-sidebar-inline-start-state": navigationSidebarState,
1765
- "data-sidebar-inline-end-state": complementarySidebarState,
1766
- className: tx("main.content", "main", {
1767
- bounce,
1768
- handlesFocus
1520
+ className: tx("input.input", "input--text-area", {
1521
+ variant,
1522
+ disabled: props.disabled,
1523
+ density,
1524
+ elevation,
1525
+ validationValence
1769
1526
  }, classNames),
1527
+ ...props.autoFocus && !hasIosKeyboard2 && {
1528
+ autoFocus: true
1529
+ },
1770
1530
  ref: forwardedRef
1771
- }, children);
1531
+ });
1772
1532
  });
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
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
1777
1538
  });
1778
- const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
1539
+ const { id, validationValence, descriptionId, errorMessageId } = (0, import_react_input.useInputContext)(import_react_input.INPUT_NAME, __inputScope);
1779
1540
  const { tx } = useThemeContext();
1780
- return /* @__PURE__ */ import_react35.default.createElement("div", {
1781
- onClick: () => {
1782
- setNavigationSidebarState("collapsed");
1783
- setComplementarySidebarState("collapsed");
1541
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_checkbox.Root, {
1542
+ ...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
1568
+ });
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);
1784
1576
  },
1577
+ id,
1578
+ "aria-describedby": descriptionId,
1785
1579
  ...props,
1786
- className: tx("main.overlay", "main__overlay", {
1787
- isLg,
1788
- inlineStartSidebarOpen: navigationSidebarState,
1789
- inlineEndSidebarOpen: complementarySidebarState
1790
- }, classNames),
1791
- "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
1792
- "aria-hidden": "true",
1580
+ ...validationValence === "error" && {
1581
+ "aria-invalid": "true",
1582
+ "aria-errormessage": errorMessageId
1583
+ },
1793
1584
  ref: forwardedRef
1794
1585
  });
1795
1586
  });
1796
- var Main = {
1797
- Root: MainRoot,
1798
- Content: MainContent,
1799
- Overlay: MainOverlay,
1800
- NavigationSidebar: MainNavigationSidebar,
1801
- ComplementarySidebar: MainComplementarySidebar
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
1802
1598
  };
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) => {
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]}`
1632
+ });
1633
+ };
1634
+ var List = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1807
1635
  const { tx } = useThemeContext();
1808
- const elevation = useElevationContext();
1809
- const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1810
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Content, {
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, {
1811
1640
  ...props,
1812
- collisionPadding: safeCollisionPadding,
1813
- className: tx("menu.content", "menu", {
1814
- elevation
1641
+ className: tx("list.root", "list", {}, classNames),
1642
+ ref: forwardedRef
1643
+ }, children));
1644
+ });
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();
1648
+ const { tx } = useThemeContext();
1649
+ return /* @__PURE__ */ import_react32.default.createElement(Root5, {
1650
+ ...!asChild && {
1651
+ role: "none"
1652
+ },
1653
+ ...props,
1654
+ className: tx("list.item.endcap", "list__listItem__endcap", {
1655
+ density
1815
1656
  }, classNames),
1816
1657
  ref: forwardedRef
1817
1658
  }, children);
1818
1659
  });
1819
- var ContextMenuViewport = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
1660
+ var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1661
+ const density = useDensityContext();
1820
1662
  const { tx } = useThemeContext();
1821
- const Root5 = asChild ? import_react_slot9.Slot : import_react_primitive8.Primitive.div;
1822
- return /* @__PURE__ */ import_react37.default.createElement(Root5, {
1663
+ return /* @__PURE__ */ import_react32.default.createElement("div", {
1664
+ role: "none",
1823
1665
  ...props,
1824
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
1666
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger--mock", {
1667
+ density
1668
+ }, classNames)
1669
+ });
1670
+ };
1671
+ var ListItemHeading = /* @__PURE__ */ (0, import_react32.forwardRef)(({ children, classNames, ...props }, forwardedRef) => {
1672
+ const { tx } = useThemeContext();
1673
+ const density = useDensityContext();
1674
+ return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItemHeading, {
1675
+ ...props,
1676
+ className: tx("list.item.heading", "list__listItem__heading", {
1677
+ density
1678
+ }, classNames),
1825
1679
  ref: forwardedRef
1826
1680
  }, children);
1827
1681
  });
1828
- var ContextMenuArrow = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1682
+ var ListItemOpenTrigger = /* @__PURE__ */ (0, import_react32.forwardRef)(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1829
1683
  const { tx } = useThemeContext();
1830
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Arrow, {
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, {
1831
1688
  ...props,
1832
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
1689
+ className: tx("list.item.openTrigger", "list__listItem__openTrigger", {
1690
+ density
1691
+ }, classNames),
1833
1692
  ref: forwardedRef
1834
- });
1693
+ }, children || /* @__PURE__ */ import_react32.default.createElement(Icon3, {
1694
+ weight: "bold",
1695
+ className: tx("list.item.openTriggerIcon", "list__listItem__openTrigger__icon", {})
1696
+ }));
1835
1697
  });
1836
- var ContextMenuGroup = ContextMenuPrimitive.Group;
1837
- var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1838
- var ContextMenuItem = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1698
+ var ListItemRoot = /* @__PURE__ */ (0, import_react32.forwardRef)(({ classNames, children, ...props }, forwardedRef) => {
1839
1699
  const { tx } = useThemeContext();
1840
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Item, {
1700
+ const density = useDensityContext();
1701
+ return /* @__PURE__ */ import_react32.default.createElement(import_react_list.ListItem, {
1841
1702
  ...props,
1842
- className: tx("menu.item", "menu__item", {}, classNames),
1703
+ className: tx("list.item.root", "list__listItem", {
1704
+ density,
1705
+ collapsible: props.collapsible
1706
+ }, classNames),
1843
1707
  ref: forwardedRef
1844
- });
1708
+ }, children);
1845
1709
  });
1846
- var ContextMenuCheckboxItem = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1847
- const { tx } = useThemeContext();
1848
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.CheckboxItem, {
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
+ });
1760
+ };
1761
+ var TreeRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1762
+ return /* @__PURE__ */ import_react34.default.createElement(List, {
1849
1763
  ...props,
1850
- className: tx("menu.item", "menu__item--checkbox", {}, classNames),
1851
1764
  ref: forwardedRef
1852
1765
  });
1853
1766
  });
1854
- var ContextMenuSeparator = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1855
- const { tx } = useThemeContext();
1856
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Separator, {
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, {
1857
1770
  ...props,
1858
- className: tx("menu.separator", "menu__item", {}, classNames),
1771
+ "aria-labelledby": headingId,
1859
1772
  ref: forwardedRef
1860
1773
  });
1861
1774
  });
1862
- var ContextMenuGroupLabel = /* @__PURE__ */ (0, import_react37.forwardRef)(({ classNames, ...props }, forwardedRef) => {
1863
- const { tx } = useThemeContext();
1864
- return /* @__PURE__ */ import_react37.default.createElement(ContextMenuPrimitive.Label, {
1775
+ var TreeItemRoot = /* @__PURE__ */ (0, import_react34.forwardRef)((props, forwardedRef) => {
1776
+ return /* @__PURE__ */ import_react34.default.createElement(ListItem.Root, {
1777
+ role: "treeitem",
1865
1778
  ...props,
1866
- className: tx("menu.groupLabel", "menu__group__label", {}, classNames),
1867
1779
  ref: forwardedRef
1868
1780
  });
1869
1781
  });
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
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
1883
1789
  };
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));
1790
+ var TreeItem = {
1791
+ Root: TreeItemRoot,
1792
+ Heading: TreeItemHeading,
1793
+ Body: TreeItemBody,
1794
+ OpenTrigger: TreeItemOpenTrigger,
1795
+ MockOpenTrigger: MockTreeItemOpenTrigger,
1796
+ DropIndicator: TreeDropIndicator
1917
1797
  };
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
- }));
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) => {
1804
+ 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,
1814
+ ...props,
1815
+ className: tx("treegrid.root", "treegrid", {}, classNames),
1816
+ style: {
1817
+ ...style,
1818
+ gridTemplateColumns
1819
+ },
1820
+ ref: forwardedRef
1821
+ }, children);
1968
1822
  });
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
- }
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
1979
1832
  });
1980
- return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Anchor, {
1981
- ...menuScope,
1982
- virtualRef
1833
+ const focusableGroupAttrs = (0, import_react_tabster.useFocusableGroup)({
1834
+ tabBehavior: "limited"
1983
1835
  });
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
1836
+ const arrowGroupAttrs = (0, import_react_tabster.useArrowNavigationGroup)({
1837
+ axis: "horizontal",
1838
+ tabbable: false,
1839
+ circular: false,
1840
+ memorizeCurrent: false
1993
1841
  });
1994
- };
1995
- DropdownMenuPortal.displayName = PORTAL_NAME;
1996
- var DropdownMenuViewport = /* @__PURE__ */ (0, import_react38.forwardRef)(({ classNames, asChild, children, ...props }, forwardedRef) => {
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) => {
1997
1868
  const { tx } = useThemeContext();
1998
- const Root5 = asChild ? import_react_slot10.Slot : import_react_primitive9.Primitive.div;
1999
- return /* @__PURE__ */ import_react38.default.createElement(Root5, {
1869
+ return /* @__PURE__ */ import_react36.default.createElement("div", {
1870
+ role: "gridcell",
1871
+ className: tx("treegrid.cell", "treegrid__cell", {
1872
+ indent
1873
+ }, classNames),
2000
1874
  ...props,
2001
- className: tx("menu.viewport", "menu__viewport", {}, classNames),
2002
1875
  ref: forwardedRef
2003
1876
  }, children);
2004
1877
  });
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();
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;
2024
1941
  }
2025
- hasInteractedOutsideRef.current = false;
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)) {
2026
1992
  event.preventDefault();
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
- }
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();
2049
1998
  }
1999
+ propsOnKeyDown?.(event);
2000
+ }, [
2001
+ propsOnKeyDown
2002
+ ]);
2003
+ const focusableGroupAttrs = window ? {} : {
2004
+ tabBehavior: "limited",
2005
+ ignoreDefaultKeydown: {
2006
+ Tab: true
2007
+ }
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
2050
2064
  });
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
2065
+ const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2066
+ prop: propsNavigationSidebarState,
2067
+ defaultProp: defaultNavigationSidebarState,
2068
+ onChange: onNavigationSidebarStateChange
2061
2069
  });
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
2070
+ const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = (0, import_react_use_controllable_state4.useControllableState)({
2071
+ prop: propsComplementarySidebarState,
2072
+ defaultProp: defaultComplementarySidebarState,
2073
+ onChange: onComplementarySidebarStateChange
2074
2074
  });
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
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
2087
2109
  });
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);
2094
2110
  const { tx } = useThemeContext();
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
2100
- });
2101
- });
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,
2110
- ref: forwardedRef
2111
- });
2112
- });
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,
2121
- ref: forwardedRef
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")
2122
2116
  });
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));
2123
2149
  });
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,
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",
2132
2160
  ref: forwardedRef
2133
2161
  });
2134
2162
  });
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),
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",
2145
2174
  ref: forwardedRef
2146
2175
  });
2147
2176
  });
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);
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);
2153
2180
  const { tx } = useThemeContext();
2154
- return /* @__PURE__ */ import_react38.default.createElement(MenuPrimitive.Arrow, {
2155
- ...menuScope,
2156
- ...arrowProps,
2157
- className: tx("menu.arrow", "menu__arrow", {}, classNames),
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),
2158
2195
  ref: forwardedRef
2159
- });
2196
+ }, children);
2160
2197
  });
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
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
2169
2202
  });
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,
2203
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2204
+ 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",
2183
2218
  ref: forwardedRef
2184
2219
  });
2185
2220
  });
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
2221
+ var Main = {
2222
+ Root: MainRoot,
2223
+ Content: MainContent,
2224
+ Overlay: MainOverlay,
2225
+ NavigationSidebar: MainNavigationSidebar,
2226
+ ComplementarySidebar: MainComplementarySidebar
2228
2227
  };
2229
- var useDropdownMenuMenuScope = useMenuScope;
2230
2228
  var MESSAGE_NAME = "Message";
2231
2229
  var [MessageProvider, useMessageContext] = (0, import_react_context8.createContext)(MESSAGE_NAME);
2232
2230
  var MessageRoot = /* @__PURE__ */ (0, import_react39.forwardRef)(({ asChild, valence, elevation: propsElevation, className, titleId: propsTitleId, descriptionId: propsDescriptionId, children, ...props }, forwardedRef) => {