@dxos/react-ui 0.8.2-main.12df754 → 0.8.2-main.36232bc

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