@noya-app/noya-designsystem 0.1.70 → 0.1.71

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.
package/dist/index.js CHANGED
@@ -3257,6 +3257,7 @@ __export(src_exports, {
3257
3257
  Tooltip: () => Tooltip,
3258
3258
  TreeView: () => TreeView,
3259
3259
  UserAvatar: () => UserAvatar,
3260
+ UserPicker: () => UserPicker,
3260
3261
  UserPointer: () => UserPointer,
3261
3262
  WorkspaceLayout: () => WorkspaceLayout,
3262
3263
  WorkspaceSideProvider: () => WorkspaceSideProvider,
@@ -3290,6 +3291,7 @@ __export(src_exports, {
3290
3291
  getNextIndex: () => getNextIndex,
3291
3292
  getPipelineResultLink: () => getPipelineResultLink,
3292
3293
  getThumbnailColors: () => getThumbnailColors,
3294
+ getUserDisplayName: () => getUserDisplayName,
3293
3295
  isMenuItemSectionHeader: () => isMenuItemSectionHeader,
3294
3296
  isNonSelectableMenuItem: () => isNonSelectableMenuItem,
3295
3297
  isPopoverMenuItem: () => isPopoverMenuItem,
@@ -5139,7 +5141,15 @@ function parseNumber(value) {
5139
5141
  return value ? Number(value) : NaN;
5140
5142
  }
5141
5143
  function InputFieldNumberInput(props) {
5142
- const { value, placeholder, onNudge, onBlur, readOnly, ...rest } = props;
5144
+ const {
5145
+ value,
5146
+ placeholder,
5147
+ onNudge,
5148
+ onBlur,
5149
+ readOnly,
5150
+ triggersOnEmpty,
5151
+ ...rest
5152
+ } = props;
5143
5153
  const onSubmit = "onSubmit" in props ? props.onSubmit : void 0;
5144
5154
  const onChange = "onChange" in props ? props.onChange : void 0;
5145
5155
  const [internalValue, setInternalValue] = (0, import_react29.useState)();
@@ -5167,6 +5177,9 @@ function InputFieldNumberInput(props) {
5167
5177
  (value2) => {
5168
5178
  if (value2 === "" || value2 === "-" || value2 === ".") {
5169
5179
  setInternalValue(value2);
5180
+ if (triggersOnEmpty) {
5181
+ onChange?.(0, { isEmpty: true });
5182
+ }
5170
5183
  return;
5171
5184
  }
5172
5185
  if (value2.endsWith(".")) {
@@ -5176,10 +5189,10 @@ function InputFieldNumberInput(props) {
5176
5189
  setInternalValue(void 0);
5177
5190
  const newValue = parseNumber(value2);
5178
5191
  if (!isNaN(newValue)) {
5179
- onChange?.(newValue);
5192
+ onChange?.(newValue, { isEmpty: false });
5180
5193
  }
5181
5194
  },
5182
- [onChange]
5195
+ [onChange, triggersOnEmpty]
5183
5196
  );
5184
5197
  const handleBlur = (0, import_react29.useCallback)(
5185
5198
  (event) => {
@@ -11027,6 +11040,7 @@ var Combobox = memoGeneric(
11027
11040
  openMenuBehavior = "showFilteredItems",
11028
11041
  onFocus,
11029
11042
  onDeleteWhenEmpty,
11043
+ iconPosition = "right",
11030
11044
  ...rest
11031
11045
  }, forwardedRef) {
11032
11046
  const props = (0, import_react72.useMemo)(() => {
@@ -11367,6 +11381,7 @@ var Combobox = memoGeneric(
11367
11381
  onSelectItem: handleUpdateSelection,
11368
11382
  onHoverIndex: handleIndexChange,
11369
11383
  listSize: adjustedListSize,
11384
+ iconPosition,
11370
11385
  style: {
11371
11386
  flex: `0 0 ${computedHeight}px`
11372
11387
  },
@@ -15110,7 +15125,7 @@ function ListMenu({
15110
15125
  }) {
15111
15126
  const selectedIds = items.flatMap(
15112
15127
  (item) => isSelectableMenuItem(item) && item.checked ? [item.value] : []
15113
- ).concat(selectedIdsProp);
15128
+ ).concat(selectedIdsProp ?? []);
15114
15129
  let chunks = (0, import_noya_utils15.chunkBy)(
15115
15130
  items,
15116
15131
  (a, b) => a.type !== "separator" && b.type !== "separator"
@@ -16889,16 +16904,105 @@ function Tabs({
16889
16904
  )), /* @__PURE__ */ React101.createElement(Divider, null), renderContent({ value: activeTab }));
16890
16905
  }
16891
16906
 
16892
- // src/components/UserPointer.tsx
16907
+ // src/components/UserPicker.tsx
16893
16908
  var import_react101 = __toESM(require("react"));
16894
- var UserPointerContainer = (0, import_react101.memo)(function UserPointerContainer2({
16909
+ function UserPicker({
16910
+ users,
16911
+ value,
16912
+ defaultValue: defaultValue2,
16913
+ onChangeUserId,
16914
+ onSelectUser,
16915
+ placeholder = "Search users...",
16916
+ ...rest
16917
+ }) {
16918
+ const sortedUsers = (0, import_react101.useMemo)(() => {
16919
+ return [...users].sort(
16920
+ (a, b) => getUserDisplayName(a).localeCompare(getUserDisplayName(b), void 0, {
16921
+ sensitivity: "base"
16922
+ })
16923
+ );
16924
+ }, [users]);
16925
+ const usersById = (0, import_react101.useMemo)(() => {
16926
+ return new Map(sortedUsers.map((user) => [user.id, user]));
16927
+ }, [sortedUsers]);
16928
+ const items = (0, import_react101.useMemo)(() => {
16929
+ return sortedUsers.map(createUserMenuItem);
16930
+ }, [sortedUsers]);
16931
+ const isControlled = value !== void 0;
16932
+ const [uncontrolledValue, setUncontrolledValue] = (0, import_react101.useState)(defaultValue2);
16933
+ const selectedUserId = isControlled ? value : uncontrolledValue;
16934
+ const selectedItem = (0, import_react101.useMemo)(() => {
16935
+ if (!selectedUserId) return void 0;
16936
+ return items.find((item) => item.value === selectedUserId);
16937
+ }, [items, selectedUserId]);
16938
+ const updateSelectedUserId = (0, import_react101.useCallback)(
16939
+ (userId) => {
16940
+ if (!isControlled) {
16941
+ setUncontrolledValue(userId);
16942
+ }
16943
+ onChangeUserId?.(userId);
16944
+ },
16945
+ [isControlled, onChangeUserId]
16946
+ );
16947
+ const handleSelectItem = (0, import_react101.useCallback)(
16948
+ (item) => {
16949
+ updateSelectedUserId(item.value);
16950
+ onSelectUser?.(usersById.get(item.value));
16951
+ },
16952
+ [updateSelectedUserId, onSelectUser, usersById]
16953
+ );
16954
+ return /* @__PURE__ */ import_react101.default.createElement(
16955
+ Combobox,
16956
+ {
16957
+ ...rest,
16958
+ placeholder,
16959
+ mode: "option",
16960
+ items,
16961
+ value: selectedItem,
16962
+ onSelectItem: handleSelectItem,
16963
+ iconPosition: "left"
16964
+ }
16965
+ );
16966
+ }
16967
+ function getUserDisplayName(user) {
16968
+ const name = user.name?.trim();
16969
+ const email = user.email?.trim();
16970
+ return name || email || "Anonymous user";
16971
+ }
16972
+ function createUserMenuItem(user) {
16973
+ const title = getUserDisplayName(user);
16974
+ const overflow = 3;
16975
+ return {
16976
+ value: user.id,
16977
+ title,
16978
+ icon: /* @__PURE__ */ import_react101.default.createElement("div", { className: "n-relative n-w-[15px] n-h-[15px]" }, /* @__PURE__ */ import_react101.default.createElement(
16979
+ Avatar,
16980
+ {
16981
+ size: 15 + overflow * 2,
16982
+ name: title,
16983
+ userId: user.id,
16984
+ image: user.image ?? void 0,
16985
+ className: "n-pointer-events-none",
16986
+ variant: "bare",
16987
+ style: {
16988
+ position: "absolute",
16989
+ inset: -overflow
16990
+ }
16991
+ }
16992
+ ))
16993
+ };
16994
+ }
16995
+
16996
+ // src/components/UserPointer.tsx
16997
+ var import_react102 = __toESM(require("react"));
16998
+ var UserPointerContainer = (0, import_react102.memo)(function UserPointerContainer2({
16895
16999
  point,
16896
17000
  visible,
16897
17001
  children,
16898
17002
  className,
16899
17003
  style: style2
16900
17004
  }) {
16901
- return /* @__PURE__ */ import_react101.default.createElement(
17005
+ return /* @__PURE__ */ import_react102.default.createElement(
16902
17006
  "div",
16903
17007
  {
16904
17008
  style: {
@@ -16915,7 +17019,7 @@ var UserPointerContainer = (0, import_react101.memo)(function UserPointerContain
16915
17019
  children
16916
17020
  );
16917
17021
  });
16918
- var UserNameTag = (0, import_react101.memo)(function UserNameTag2({
17022
+ var UserNameTag = (0, import_react102.memo)(function UserNameTag2({
16919
17023
  backgroundColor,
16920
17024
  className,
16921
17025
  style: style2,
@@ -16924,7 +17028,7 @@ var UserNameTag = (0, import_react101.memo)(function UserNameTag2({
16924
17028
  size = "medium",
16925
17029
  bordered = true
16926
17030
  }) {
16927
- return /* @__PURE__ */ import_react101.default.createElement(
17031
+ return /* @__PURE__ */ import_react102.default.createElement(
16928
17032
  "span",
16929
17033
  {
16930
17034
  className: cx(
@@ -16943,14 +17047,14 @@ var UserNameTag = (0, import_react101.memo)(function UserNameTag2({
16943
17047
  children
16944
17048
  );
16945
17049
  });
16946
- var UserPointerIcon = (0, import_react101.memo)(function PointerIcon({
17050
+ var UserPointerIcon = (0, import_react102.memo)(function PointerIcon({
16947
17051
  size,
16948
17052
  color = "black",
16949
17053
  className,
16950
17054
  style: style2
16951
17055
  }) {
16952
17056
  const points = "0,5 10,0 10,10";
16953
- return /* @__PURE__ */ import_react101.default.createElement(
17057
+ return /* @__PURE__ */ import_react102.default.createElement(
16954
17058
  "svg",
16955
17059
  {
16956
17060
  width: size,
@@ -16965,7 +17069,7 @@ var UserPointerIcon = (0, import_react101.memo)(function PointerIcon({
16965
17069
  ...style2
16966
17070
  }
16967
17071
  },
16968
- /* @__PURE__ */ import_react101.default.createElement(
17072
+ /* @__PURE__ */ import_react102.default.createElement(
16969
17073
  "polygon",
16970
17074
  {
16971
17075
  points,
@@ -16978,7 +17082,7 @@ var UserPointerIcon = (0, import_react101.memo)(function PointerIcon({
16978
17082
  });
16979
17083
  var POINTER_SIZE = 12;
16980
17084
  var POINTER_OVERLAP = 6;
16981
- var UserPointer = (0, import_react101.memo)(function UserPointer2({
17085
+ var UserPointer = (0, import_react102.memo)(function UserPointer2({
16982
17086
  userId,
16983
17087
  name,
16984
17088
  visible = true,
@@ -16991,22 +17095,22 @@ var UserPointer = (0, import_react101.memo)(function UserPointer2({
16991
17095
  labelSize = "medium",
16992
17096
  bordered = true
16993
17097
  }) {
16994
- const userBackgroundColor = (0, import_react101.useMemo)(
17098
+ const userBackgroundColor = (0, import_react102.useMemo)(
16995
17099
  () => backgroundColor ?? colorFromString(userId ?? name ?? ""),
16996
17100
  [backgroundColor, userId, name]
16997
17101
  );
16998
- const pointerOverlapStyle = (0, import_react101.useMemo)(
17102
+ const pointerOverlapStyle = (0, import_react102.useMemo)(
16999
17103
  () => ({
17000
17104
  marginRight: `-${POINTER_OVERLAP}px`,
17001
17105
  marginBottom: `-${POINTER_OVERLAP}px`
17002
17106
  }),
17003
17107
  []
17004
17108
  );
17005
- const nameTagOverlapStyle = (0, import_react101.useMemo)(
17109
+ const nameTagOverlapStyle = (0, import_react102.useMemo)(
17006
17110
  () => ({ marginLeft: `${POINTER_SIZE - POINTER_OVERLAP + 1}px` }),
17007
17111
  []
17008
17112
  );
17009
- return /* @__PURE__ */ import_react101.default.createElement(
17113
+ return /* @__PURE__ */ import_react102.default.createElement(
17010
17114
  UserPointerContainer,
17011
17115
  {
17012
17116
  point,
@@ -17014,14 +17118,14 @@ var UserPointer = (0, import_react101.memo)(function UserPointer2({
17014
17118
  className,
17015
17119
  style: style2
17016
17120
  },
17017
- name && /* @__PURE__ */ import_react101.default.createElement("div", { className: "n-relative" }, showPointerIcon && /* @__PURE__ */ import_react101.default.createElement(
17121
+ name && /* @__PURE__ */ import_react102.default.createElement("div", { className: "n-relative" }, showPointerIcon && /* @__PURE__ */ import_react102.default.createElement(
17018
17122
  UserPointerIcon,
17019
17123
  {
17020
17124
  size: POINTER_SIZE,
17021
17125
  color: userBackgroundColor,
17022
17126
  style: pointerOverlapStyle
17023
17127
  }
17024
- ), /* @__PURE__ */ import_react101.default.createElement(
17128
+ ), /* @__PURE__ */ import_react102.default.createElement(
17025
17129
  UserNameTag,
17026
17130
  {
17027
17131
  backgroundColor: userBackgroundColor,
@@ -17037,10 +17141,10 @@ var UserPointer = (0, import_react101.memo)(function UserPointer2({
17037
17141
 
17038
17142
  // src/components/workspace/WorkspaceLayout.tsx
17039
17143
  var import_noya_keymap7 = require("@noya-app/noya-keymap");
17040
- var import_react108 = __toESM(require("react"));
17144
+ var import_react109 = __toESM(require("react"));
17041
17145
 
17042
17146
  // src/components/workspace/DrawerWorkspaceLayout.tsx
17043
- var import_react105 = __toESM(require("react"));
17147
+ var import_react106 = __toESM(require("react"));
17044
17148
 
17045
17149
  // src/components/workspace/constants.ts
17046
17150
  var EDITOR_PANEL_GROUP_ID = "editor-panel-group";
@@ -17049,17 +17153,17 @@ var RIGHT_SIDEBAR_ID = "editor-3-right-sidebar";
17049
17153
  var CONTENT_AREA_ID = "editor-2-content-area";
17050
17154
 
17051
17155
  // src/components/workspace/VerticalTabMenu.tsx
17052
- var import_react104 = __toESM(require("react"));
17156
+ var import_react105 = __toESM(require("react"));
17053
17157
 
17054
17158
  // src/components/Toolbar.tsx
17055
17159
  var import_noya_keymap6 = require("@noya-app/noya-keymap");
17056
- var import_react103 = __toESM(require("react"));
17160
+ var import_react104 = __toESM(require("react"));
17057
17161
 
17058
17162
  // src/components/ToolbarDrawer.tsx
17059
- var import_react102 = __toESM(require("react"));
17060
- var ToolbarDrawer = (0, import_react102.memo)(
17061
- (0, import_react102.forwardRef)(function ToolbarDrawer2({ children, trigger, sideOffset = 8 }, ref) {
17062
- return /* @__PURE__ */ import_react102.default.createElement("div", { className: "n-relative", ref }, /* @__PURE__ */ import_react102.default.createElement(
17163
+ var import_react103 = __toESM(require("react"));
17164
+ var ToolbarDrawer = (0, import_react103.memo)(
17165
+ (0, import_react103.forwardRef)(function ToolbarDrawer2({ children, trigger, sideOffset = 8 }, ref) {
17166
+ return /* @__PURE__ */ import_react103.default.createElement("div", { className: "n-relative", ref }, /* @__PURE__ */ import_react103.default.createElement(
17063
17167
  "div",
17064
17168
  {
17065
17169
  className: "n-absolute n-bottom-full n-left-1/2 -n-translate-x-1/2 n-rounded-t-lg n-border n-border-toolbar-drawer-border n-border-b-transparent n-bg-toolbar-drawer-background -n-z-10",
@@ -17075,13 +17179,13 @@ var ToolbarDrawer = (0, import_react102.memo)(
17075
17179
 
17076
17180
  // src/components/Toolbar.tsx
17077
17181
  var SIDE_OFFSET = 6;
17078
- var ToolbarMenuContext = (0, import_react103.createContext)({});
17182
+ var ToolbarMenuContext = (0, import_react104.createContext)({});
17079
17183
  var ToolbarMenuDropdown = memoGeneric(function ToolbarMenuDropdown2({
17080
17184
  item,
17081
17185
  onSelectMenuItem
17082
17186
  }) {
17083
- const [open, setOpen] = import_react103.default.useState(false);
17084
- return /* @__PURE__ */ import_react103.default.createElement(
17187
+ const [open, setOpen] = import_react104.default.useState(false);
17188
+ return /* @__PURE__ */ import_react104.default.createElement(
17085
17189
  DropdownMenu,
17086
17190
  {
17087
17191
  open,
@@ -17093,7 +17197,7 @@ var ToolbarMenuDropdown = memoGeneric(function ToolbarMenuDropdown2({
17093
17197
  }
17094
17198
  }
17095
17199
  },
17096
- /* @__PURE__ */ import_react103.default.createElement(
17200
+ /* @__PURE__ */ import_react104.default.createElement(
17097
17201
  Button,
17098
17202
  {
17099
17203
  disabled: item.disabled,
@@ -17109,7 +17213,7 @@ var ToolbarShortcut = ({
17109
17213
  shortcut,
17110
17214
  label
17111
17215
  }) => {
17112
- return /* @__PURE__ */ import_react103.default.createElement("div", { className: "n-flex n-items-center" }, label, /* @__PURE__ */ import_react103.default.createElement(Spacer.Horizontal, { size: 6 }), /* @__PURE__ */ import_react103.default.createElement(KeyboardShortcut, { shortcut }));
17216
+ return /* @__PURE__ */ import_react104.default.createElement("div", { className: "n-flex n-items-center" }, label, /* @__PURE__ */ import_react104.default.createElement(Spacer.Horizontal, { size: 6 }), /* @__PURE__ */ import_react104.default.createElement(KeyboardShortcut, { shortcut }));
17113
17217
  };
17114
17218
  var ToolbarMenuPopover = memoGeneric(function ToolbarMenuPopover2({
17115
17219
  item,
@@ -17123,8 +17227,8 @@ var ToolbarMenuPopover = memoGeneric(function ToolbarMenuPopover2({
17123
17227
  content: itemContent,
17124
17228
  checked
17125
17229
  } = item;
17126
- const [open, setOpen] = import_react103.default.useState(false);
17127
- const content = /* @__PURE__ */ import_react103.default.createElement("span", null, /* @__PURE__ */ import_react103.default.createElement(
17230
+ const [open, setOpen] = import_react104.default.useState(false);
17231
+ const content = /* @__PURE__ */ import_react104.default.createElement("span", null, /* @__PURE__ */ import_react104.default.createElement(
17128
17232
  Popover,
17129
17233
  {
17130
17234
  open,
@@ -17133,7 +17237,7 @@ var ToolbarMenuPopover = memoGeneric(function ToolbarMenuPopover2({
17133
17237
  showArrow: false,
17134
17238
  sideOffset: SIDE_OFFSET,
17135
17239
  portalContainer,
17136
- trigger: /* @__PURE__ */ import_react103.default.createElement(
17240
+ trigger: /* @__PURE__ */ import_react104.default.createElement(
17137
17241
  Button,
17138
17242
  {
17139
17243
  disabled,
@@ -17146,7 +17250,7 @@ var ToolbarMenuPopover = memoGeneric(function ToolbarMenuPopover2({
17146
17250
  },
17147
17251
  typeof itemContent === "function" ? itemContent({ close: () => setOpen(false) }) : itemContent
17148
17252
  ));
17149
- return tooltip && !open ? /* @__PURE__ */ import_react103.default.createElement(
17253
+ return tooltip && !open ? /* @__PURE__ */ import_react104.default.createElement(
17150
17254
  Tooltip,
17151
17255
  {
17152
17256
  sideOffset: SIDE_OFFSET,
@@ -17166,7 +17270,7 @@ var ToolbarMenuButton = memoGeneric(function ToolbarMenuButton2({
17166
17270
  displayFilter
17167
17271
  }) {
17168
17272
  const isActive = item.checked || activeValue === item.value;
17169
- const content = /* @__PURE__ */ import_react103.default.createElement(
17273
+ const content = /* @__PURE__ */ import_react104.default.createElement(
17170
17274
  Button,
17171
17275
  {
17172
17276
  as,
@@ -17183,7 +17287,7 @@ var ToolbarMenuButton = memoGeneric(function ToolbarMenuButton2({
17183
17287
  displayFilter === "iconOnly" ? void 0 : item.title
17184
17288
  );
17185
17289
  const tooltip = item.tooltip ?? (displayFilter === "iconOnly" && item.title ? item.title : void 0);
17186
- return item.drawer && isActive ? /* @__PURE__ */ import_react103.default.createElement(ToolbarDrawer, { trigger: content }, item.drawer) : tooltip ? /* @__PURE__ */ import_react103.default.createElement(Tooltip, { sideOffset: SIDE_OFFSET, content: tooltip, side: tooltipSide }, content) : content;
17290
+ return item.drawer && isActive ? /* @__PURE__ */ import_react104.default.createElement(ToolbarDrawer, { trigger: content }, item.drawer) : tooltip ? /* @__PURE__ */ import_react104.default.createElement(Tooltip, { sideOffset: SIDE_OFFSET, content: tooltip, side: tooltipSide }, content) : content;
17187
17291
  });
17188
17292
  var ToolbarMenuItem = memoGeneric(function ToolbarMenuItem2({
17189
17293
  item,
@@ -17195,17 +17299,17 @@ var ToolbarMenuItem = memoGeneric(function ToolbarMenuItem2({
17195
17299
  displayFilter,
17196
17300
  dividerOverflow: dividerOverflowProp
17197
17301
  }) {
17198
- const { dividerOverflow: contextDividerOverflow } = (0, import_react103.useContext)(ToolbarMenuContext);
17302
+ const { dividerOverflow: contextDividerOverflow } = (0, import_react104.useContext)(ToolbarMenuContext);
17199
17303
  const dividerOverflow = dividerOverflowProp ?? contextDividerOverflow ?? 4;
17200
17304
  if (item.type === "sectionHeader") return null;
17201
17305
  if (item.type === "separator") {
17202
- return /* @__PURE__ */ import_react103.default.createElement(DividerVertical, { overflow: dividerOverflow });
17306
+ return /* @__PURE__ */ import_react104.default.createElement(DividerVertical, { overflow: dividerOverflow });
17203
17307
  }
17204
17308
  if (item.type === "popover") {
17205
- return /* @__PURE__ */ import_react103.default.createElement(ToolbarMenuPopover, { item, portalContainer });
17309
+ return /* @__PURE__ */ import_react104.default.createElement(ToolbarMenuPopover, { item, portalContainer });
17206
17310
  }
17207
17311
  if (isSelectableMenuItem(item)) {
17208
- return /* @__PURE__ */ import_react103.default.createElement(
17312
+ return /* @__PURE__ */ import_react104.default.createElement(
17209
17313
  ToolbarMenuButton,
17210
17314
  {
17211
17315
  item,
@@ -17217,7 +17321,7 @@ var ToolbarMenuItem = memoGeneric(function ToolbarMenuItem2({
17217
17321
  }
17218
17322
  );
17219
17323
  }
17220
- return /* @__PURE__ */ import_react103.default.createElement(ToolbarMenuDropdown, { item, onSelectMenuItem });
17324
+ return /* @__PURE__ */ import_react104.default.createElement(ToolbarMenuDropdown, { item, onSelectMenuItem });
17221
17325
  });
17222
17326
  var ToolbarMenu = memoGeneric(function ToolbarMenu2({
17223
17327
  items,
@@ -17229,8 +17333,8 @@ var ToolbarMenu = memoGeneric(function ToolbarMenu2({
17229
17333
  displayFilter = "iconAndText",
17230
17334
  dividerOverflow
17231
17335
  }) {
17232
- return /* @__PURE__ */ import_react103.default.createElement(import_react103.default.Fragment, null, items.map((item, i) => {
17233
- return /* @__PURE__ */ import_react103.default.createElement(
17336
+ return /* @__PURE__ */ import_react104.default.createElement(import_react104.default.Fragment, null, items.map((item, i) => {
17337
+ return /* @__PURE__ */ import_react104.default.createElement(
17234
17338
  ToolbarMenuItem,
17235
17339
  {
17236
17340
  key: i,
@@ -17255,21 +17359,21 @@ function Toolbar({
17255
17359
  shouldBindKeyboardShortcuts = true,
17256
17360
  dividerOverflow
17257
17361
  }) {
17258
- const allMenuItems = import_react103.default.useMemo(
17362
+ const allMenuItems = import_react104.default.useMemo(
17259
17363
  () => [...leftMenuItems, ...rightMenuItems],
17260
17364
  [leftMenuItems, rightMenuItems]
17261
17365
  );
17262
17366
  (0, import_noya_keymap6.useKeyboardShortcuts)(
17263
- import_react103.default.useMemo(
17367
+ import_react104.default.useMemo(
17264
17368
  () => onSelectMenuItem && shouldBindKeyboardShortcuts ? getKeyboardShortcutsForMenuItems(allMenuItems, onSelectMenuItem) : {},
17265
17369
  [allMenuItems, onSelectMenuItem, shouldBindKeyboardShortcuts]
17266
17370
  )
17267
17371
  );
17268
- return /* @__PURE__ */ import_react103.default.createElement(
17372
+ return /* @__PURE__ */ import_react104.default.createElement(
17269
17373
  BaseToolbar,
17270
17374
  {
17271
17375
  logo,
17272
- left: leftMenuItems.length > 0 && /* @__PURE__ */ import_react103.default.createElement("div", { className: "n-flex n-gap-2" }, /* @__PURE__ */ import_react103.default.createElement(
17376
+ left: leftMenuItems.length > 0 && /* @__PURE__ */ import_react104.default.createElement("div", { className: "n-flex n-gap-2" }, /* @__PURE__ */ import_react104.default.createElement(
17273
17377
  ToolbarMenu,
17274
17378
  {
17275
17379
  items: leftMenuItems,
@@ -17277,7 +17381,7 @@ function Toolbar({
17277
17381
  dividerOverflow
17278
17382
  }
17279
17383
  )),
17280
- right: rightMenuItems.length > 0 && /* @__PURE__ */ import_react103.default.createElement("div", { className: "n-flex n-gap-2" }, /* @__PURE__ */ import_react103.default.createElement(
17384
+ right: rightMenuItems.length > 0 && /* @__PURE__ */ import_react104.default.createElement("div", { className: "n-flex n-gap-2" }, /* @__PURE__ */ import_react104.default.createElement(
17281
17385
  ToolbarMenu,
17282
17386
  {
17283
17387
  items: rightMenuItems,
@@ -17298,19 +17402,19 @@ var VerticalTabMenu = memoGeneric(function VerticalTabMenu2({
17298
17402
  onChange,
17299
17403
  tooltipSide
17300
17404
  }) {
17301
- const style2 = (0, import_react104.useMemo)(() => {
17405
+ const style2 = (0, import_react105.useMemo)(() => {
17302
17406
  return {
17303
17407
  [cssVarNames.colors.inputBackground]: "transparent",
17304
17408
  [cssVarNames.colors.buttonBackground]: "transparent"
17305
17409
  };
17306
17410
  }, []);
17307
- return /* @__PURE__ */ import_react104.default.createElement(
17411
+ return /* @__PURE__ */ import_react105.default.createElement(
17308
17412
  "div",
17309
17413
  {
17310
17414
  className: "n-w-[calc(var(--n-toolbar-height)+1px)] n-h-full n-bg-sidebar-background n-flex n-flex-col n-items-center n-py-3 n-gap-3",
17311
17415
  style: style2
17312
17416
  },
17313
- /* @__PURE__ */ import_react104.default.createElement(
17417
+ /* @__PURE__ */ import_react105.default.createElement(
17314
17418
  ToolbarMenu,
17315
17419
  {
17316
17420
  items,
@@ -17338,12 +17442,12 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17338
17442
  onChangeLeftTab,
17339
17443
  compactDrawerMenu
17340
17444
  }) {
17341
- const portalContainer = (0, import_react105.useRef)(null);
17342
- const [{ leftSidebarCollapsed, rightSidebarCollapsed }, setLayoutState] = (0, import_react105.useState)({
17445
+ const portalContainer = (0, import_react106.useRef)(null);
17446
+ const [{ leftSidebarCollapsed, rightSidebarCollapsed }, setLayoutState] = (0, import_react106.useState)({
17343
17447
  leftSidebarCollapsed: true,
17344
17448
  rightSidebarCollapsed: true
17345
17449
  });
17346
- const allTabItems = (0, import_react105.useMemo)(
17450
+ const allTabItems = (0, import_react106.useMemo)(
17347
17451
  () => [
17348
17452
  ...leftPanel ? leftTabItems ?? [] : [],
17349
17453
  ...rightPanel ? rightTabItems ?? [] : []
@@ -17351,16 +17455,16 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17351
17455
  [leftTabItems, rightTabItems, leftPanel, rightPanel]
17352
17456
  );
17353
17457
  const hasTabs = allTabItems.length > 0;
17354
- const allSelectableTabItems = (0, import_react105.useMemo)(
17458
+ const allSelectableTabItems = (0, import_react106.useMemo)(
17355
17459
  () => allTabItems.filter(isSelectableMenuItem),
17356
17460
  [allTabItems]
17357
17461
  );
17358
17462
  const useCompactInToolbar = !!compactDrawerMenu && allSelectableTabItems.length <= 1;
17359
- const leftSelectableTabItems = (0, import_react105.useMemo)(
17463
+ const leftSelectableTabItems = (0, import_react106.useMemo)(
17360
17464
  () => (leftTabItems ?? []).filter(isSelectableMenuItem),
17361
17465
  [leftTabItems]
17362
17466
  );
17363
- const rightSelectableTabItems = (0, import_react105.useMemo)(
17467
+ const rightSelectableTabItems = (0, import_react106.useMemo)(
17364
17468
  () => (rightTabItems ?? []).filter(isSelectableMenuItem),
17365
17469
  [rightTabItems]
17366
17470
  );
@@ -17397,14 +17501,14 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17397
17501
  activeValue: rightTabValue,
17398
17502
  isSidebarCollapsed: rightSidebarCollapsed
17399
17503
  } : { activeValue: void 0, isSidebarCollapsed: true };
17400
- return /* @__PURE__ */ import_react105.default.createElement(
17504
+ return /* @__PURE__ */ import_react106.default.createElement(
17401
17505
  "div",
17402
17506
  {
17403
17507
  ref: portalContainer,
17404
17508
  id: EDITOR_PANEL_GROUP_ID,
17405
17509
  className: "n-flex n-flex-1 n-relative focus:n-outline-none"
17406
17510
  },
17407
- hasTabs && !useCompactInToolbar && /* @__PURE__ */ import_react105.default.createElement(import_react105.default.Fragment, null, /* @__PURE__ */ import_react105.default.createElement(
17511
+ hasTabs && !useCompactInToolbar && /* @__PURE__ */ import_react106.default.createElement(import_react106.default.Fragment, null, /* @__PURE__ */ import_react106.default.createElement(
17408
17512
  VerticalTabMenu,
17409
17513
  {
17410
17514
  tooltipSide: "right",
@@ -17413,8 +17517,8 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17413
17517
  isSidebarCollapsed,
17414
17518
  onChange: (value) => handleSelectTab(value)
17415
17519
  }
17416
- ), /* @__PURE__ */ import_react105.default.createElement(DividerVertical, { className: "n-h-full" })),
17417
- useCompactInToolbar && /* @__PURE__ */ import_react105.default.createElement("div", { className: "n-absolute n-top-0 n-left-0 n-h-[calc(var(--n-toolbar-height)+1px)] n-w-[calc(var(--n-toolbar-height)+1px)] n-bg-sidebar-background n-border-r n-border-b n-border-divider-strong n-z-10 n-flex n-items-center n-justify-center" }, allSelectableTabItems[0] && /* @__PURE__ */ import_react105.default.createElement(
17520
+ ), /* @__PURE__ */ import_react106.default.createElement(DividerVertical, { className: "n-h-full" })),
17521
+ useCompactInToolbar && /* @__PURE__ */ import_react106.default.createElement("div", { className: "n-absolute n-top-0 n-left-0 n-h-[calc(var(--n-toolbar-height)+1px)] n-w-[calc(var(--n-toolbar-height)+1px)] n-bg-sidebar-background n-border-r n-border-b n-border-divider-strong n-z-10 n-flex n-items-center n-justify-center" }, allSelectableTabItems[0] && /* @__PURE__ */ import_react106.default.createElement(
17418
17522
  Button,
17419
17523
  {
17420
17524
  variant: "none",
@@ -17437,8 +17541,8 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17437
17541
  }
17438
17542
  }
17439
17543
  )),
17440
- /* @__PURE__ */ import_react105.default.createElement("div", { className: "n-flex-1 n-flex n-relative" }, centerPanel),
17441
- leftPanel && /* @__PURE__ */ import_react105.default.createElement(
17544
+ /* @__PURE__ */ import_react106.default.createElement("div", { className: "n-flex-1 n-flex n-relative" }, centerPanel),
17545
+ leftPanel && /* @__PURE__ */ import_react106.default.createElement(
17442
17546
  Drawer,
17443
17547
  {
17444
17548
  ref: leftSidebarRef,
@@ -17459,7 +17563,7 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17459
17563
  },
17460
17564
  leftPanel
17461
17565
  ),
17462
- rightPanel && /* @__PURE__ */ import_react105.default.createElement(
17566
+ rightPanel && /* @__PURE__ */ import_react106.default.createElement(
17463
17567
  Drawer,
17464
17568
  {
17465
17569
  id: RIGHT_SIDEBAR_ID,
@@ -17485,7 +17589,7 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17485
17589
  });
17486
17590
 
17487
17591
  // src/components/workspace/PanelWorkspaceLayout.tsx
17488
- var import_react106 = __toESM(require("react"));
17592
+ var import_react107 = __toESM(require("react"));
17489
17593
  var import_react_resizable_panels = require("react-resizable-panels");
17490
17594
 
17491
17595
  // src/components/workspace/panelStorage.ts
@@ -17651,11 +17755,11 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17651
17755
  onChangeRightTab,
17652
17756
  compactDrawerMenu
17653
17757
  }) {
17654
- const panelGroupRef = (0, import_react106.useRef)(null);
17758
+ const panelGroupRef = (0, import_react107.useRef)(null);
17655
17759
  const hasLeftPanel = !!leftPanel;
17656
17760
  const hasRightPanel = !!rightPanel;
17657
17761
  const hasCenterPanel = !!centerPanel;
17658
- const autoSaveId = (0, import_react106.useMemo)(() => {
17762
+ const autoSaveId = (0, import_react107.useMemo)(() => {
17659
17763
  return autoSavePrefix ? `${autoSavePrefix}--v2--${EDITOR_PANEL_GROUP_ID}` : Math.random().toString(36).substring(2, 15);
17660
17764
  }, [autoSavePrefix]);
17661
17765
  const layoutIds = getLayoutIds({
@@ -17682,7 +17786,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17682
17786
  });
17683
17787
  const [data, setData] = usePersistentStateObject(clientStorage, storageKey, {});
17684
17788
  const layoutGroup = data?.[propertyKey];
17685
- const { leftSidebarCollapsed, rightSidebarCollapsed } = (0, import_react106.useMemo)(() => {
17789
+ const { leftSidebarCollapsed, rightSidebarCollapsed } = (0, import_react107.useMemo)(() => {
17686
17790
  return getLayoutCollapsedState({
17687
17791
  layoutGroup,
17688
17792
  propertyKey,
@@ -17691,7 +17795,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17691
17795
  hasRightPanel
17692
17796
  });
17693
17797
  }, [layoutGroup, propertyKey, layoutIds, hasLeftPanel, hasRightPanel]);
17694
- const handleLeftTabChange = (0, import_react106.useCallback)(
17798
+ const handleLeftTabChange = (0, import_react107.useCallback)(
17695
17799
  (value) => {
17696
17800
  if (value === leftTabValue) {
17697
17801
  if (leftSidebarRef.current?.isExpanded()) {
@@ -17708,7 +17812,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17708
17812
  },
17709
17813
  [leftSidebarRef, leftTabValue, onChangeLeftTab]
17710
17814
  );
17711
- const handleRightTabChange = (0, import_react106.useCallback)(
17815
+ const handleRightTabChange = (0, import_react107.useCallback)(
17712
17816
  (value) => {
17713
17817
  if (value === rightTabValue) {
17714
17818
  if (rightSidebarRef.current?.isExpanded()) {
@@ -17725,7 +17829,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17725
17829
  },
17726
17830
  [onChangeRightTab, rightSidebarRef, rightTabValue]
17727
17831
  );
17728
- const handleLayoutChange = (0, import_react106.useCallback)(
17832
+ const handleLayoutChange = (0, import_react107.useCallback)(
17729
17833
  (layout) => {
17730
17834
  setData((prev) => {
17731
17835
  const newData = {
@@ -17743,7 +17847,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17743
17847
  const showLeftTabs = !!leftSidebarOptions.showTabs && !!leftTabItems && // When compact drawer UI is enabled, only show the rail when the
17744
17848
  // sidebar is collapsed (for large screens/panel layout).
17745
17849
  (!compactDrawerMenu || leftSidebarCollapsed);
17746
- return /* @__PURE__ */ import_react106.default.createElement(
17850
+ return /* @__PURE__ */ import_react107.default.createElement(
17747
17851
  import_react_resizable_panels.PanelGroup,
17748
17852
  {
17749
17853
  ref: panelGroupRef,
@@ -17754,7 +17858,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17754
17858
  autoSaveId,
17755
17859
  onLayout: handleLayoutChange
17756
17860
  },
17757
- leftPanel && /* @__PURE__ */ import_react106.default.createElement(import_react106.default.Fragment, null, showLeftTabs && /* @__PURE__ */ import_react106.default.createElement(
17861
+ leftPanel && /* @__PURE__ */ import_react107.default.createElement(import_react107.default.Fragment, null, showLeftTabs && /* @__PURE__ */ import_react107.default.createElement(
17758
17862
  VerticalTabMenu,
17759
17863
  {
17760
17864
  tooltipSide: "right",
@@ -17763,7 +17867,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17763
17867
  isSidebarCollapsed: leftSidebarCollapsed,
17764
17868
  onChange: handleLeftTabChange
17765
17869
  }
17766
- ), showLeftTabs && !leftSidebarCollapsed && /* @__PURE__ */ import_react106.default.createElement(DividerVertical, { className: "n-h-full" }), /* @__PURE__ */ import_react106.default.createElement(
17870
+ ), showLeftTabs && !leftSidebarCollapsed && /* @__PURE__ */ import_react107.default.createElement(DividerVertical, { className: "n-h-full" }), /* @__PURE__ */ import_react107.default.createElement(
17767
17871
  import_react_resizable_panels.Panel,
17768
17872
  {
17769
17873
  id: LEFT_SIDEBAR_ID,
@@ -17776,8 +17880,8 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17776
17880
  collapsible: true
17777
17881
  },
17778
17882
  leftSidebarCollapsed ? null : leftPanel
17779
- ), /* @__PURE__ */ import_react106.default.createElement(import_react_resizable_panels.PanelResizeHandle, { className: "n-cursor-col-resize n-w-px n-h-full n-bg-divider" })),
17780
- /* @__PURE__ */ import_react106.default.createElement(
17883
+ ), /* @__PURE__ */ import_react107.default.createElement(import_react_resizable_panels.PanelResizeHandle, { className: "n-cursor-col-resize n-w-px n-h-full n-bg-divider" })),
17884
+ /* @__PURE__ */ import_react107.default.createElement(
17781
17885
  import_react_resizable_panels.Panel,
17782
17886
  {
17783
17887
  id: CONTENT_AREA_ID,
@@ -17788,7 +17892,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17788
17892
  },
17789
17893
  centerPanel
17790
17894
  ),
17791
- rightPanel && /* @__PURE__ */ import_react106.default.createElement(import_react106.default.Fragment, null, /* @__PURE__ */ import_react106.default.createElement(import_react_resizable_panels.PanelResizeHandle, { className: "n-cursor-col-resize n-w-px n-h-full n-bg-divider" }), /* @__PURE__ */ import_react106.default.createElement(
17895
+ rightPanel && /* @__PURE__ */ import_react107.default.createElement(import_react107.default.Fragment, null, /* @__PURE__ */ import_react107.default.createElement(import_react_resizable_panels.PanelResizeHandle, { className: "n-cursor-col-resize n-w-px n-h-full n-bg-divider" }), /* @__PURE__ */ import_react107.default.createElement(
17792
17896
  import_react_resizable_panels.Panel,
17793
17897
  {
17794
17898
  id: RIGHT_SIDEBAR_ID,
@@ -17801,7 +17905,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17801
17905
  collapsible: true
17802
17906
  },
17803
17907
  rightSidebarCollapsed ? null : rightPanel
17804
- ), rightSidebarOptions.showTabs && rightTabItems && !rightSidebarCollapsed && /* @__PURE__ */ import_react106.default.createElement(DividerVertical, { className: "n-h-full" }), rightSidebarOptions.showTabs && rightTabItems && /* @__PURE__ */ import_react106.default.createElement(
17908
+ ), rightSidebarOptions.showTabs && rightTabItems && !rightSidebarCollapsed && /* @__PURE__ */ import_react107.default.createElement(DividerVertical, { className: "n-h-full" }), rightSidebarOptions.showTabs && rightTabItems && /* @__PURE__ */ import_react107.default.createElement(
17805
17909
  VerticalTabMenu,
17806
17910
  {
17807
17911
  tooltipSide: "left",
@@ -17823,11 +17927,11 @@ function renderPanelChildren(fn, props) {
17823
17927
  }
17824
17928
 
17825
17929
  // src/components/workspace/WorkspaceSideContext.tsx
17826
- var import_react107 = require("react");
17827
- var WorkspaceSideContext = (0, import_react107.createContext)({});
17930
+ var import_react108 = require("react");
17931
+ var WorkspaceSideContext = (0, import_react108.createContext)({});
17828
17932
  var WorkspaceSideProvider = WorkspaceSideContext.Provider;
17829
17933
  function useWorkspaceSide() {
17830
- return (0, import_react107.useContext)(WorkspaceSideContext);
17934
+ return (0, import_react108.useContext)(WorkspaceSideContext);
17831
17935
  }
17832
17936
 
17833
17937
  // src/components/workspace/WorkspaceLayout.tsx
@@ -17890,7 +17994,7 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
17890
17994
  theme,
17891
17995
  compactDrawerMenu
17892
17996
  }, forwardedRef) {
17893
- const containerRef = import_react108.default.useRef(null);
17997
+ const containerRef = import_react109.default.useRef(null);
17894
17998
  const containerSize = useSize(containerRef);
17895
17999
  const windowSize = useWindowSize();
17896
18000
  const parentSize = detectSize === "window" ? windowSize : containerSize && containerSize.width > 0 ? containerSize : windowSize;
@@ -17921,8 +18025,8 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
17921
18025
  rightSidebarMinPercentage,
17922
18026
  rightSidebarMaxPercentage
17923
18027
  );
17924
- const leftSidebarRef = (0, import_react108.useRef)(null);
17925
- const rightSidebarRef = (0, import_react108.useRef)(null);
18028
+ const leftSidebarRef = (0, import_react109.useRef)(null);
18029
+ const rightSidebarRef = (0, import_react109.useRef)(null);
17926
18030
  const [leftTabValue, setLeftTabValue] = useControlledOrUncontrolled({
17927
18031
  value: leftTabValueProp,
17928
18032
  onChange: onChangeLeftTab,
@@ -17933,7 +18037,7 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
17933
18037
  onChange: onChangeRightTab,
17934
18038
  defaultValue: getFirstTabValue(rightTabItems, "")
17935
18039
  });
17936
- (0, import_react108.useImperativeHandle)(forwardedRef, () => ({
18040
+ (0, import_react109.useImperativeHandle)(forwardedRef, () => ({
17937
18041
  setLeftExpanded: (expanded) => {
17938
18042
  if (expanded) {
17939
18043
  leftSidebarRef.current?.expand();
@@ -17991,56 +18095,56 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
17991
18095
  });
17992
18096
  const centerPanelPercentage = 100 - (left ? leftSidebarPercentage : 0) - (right ? rightSidebarPercentage : 0);
17993
18097
  const isDrawerActive = sideType === "drawer" || sideType === "auto" && parentSize.width <= sideTypeBreakpoint;
17994
- const closeLeftSidebar = (0, import_react108.useCallback)(() => {
18098
+ const closeLeftSidebar = (0, import_react109.useCallback)(() => {
17995
18099
  if (isDrawerActive) {
17996
18100
  leftSidebarRef.current?.collapse();
17997
18101
  }
17998
18102
  }, [isDrawerActive]);
17999
- const closeRightSidebar = (0, import_react108.useCallback)(() => {
18103
+ const closeRightSidebar = (0, import_react109.useCallback)(() => {
18000
18104
  if (isDrawerActive) {
18001
18105
  rightSidebarRef.current?.collapse();
18002
18106
  }
18003
18107
  }, [isDrawerActive]);
18004
- const leftChildrenProps = (0, import_react108.useMemo)(() => {
18108
+ const leftChildrenProps = (0, import_react109.useMemo)(() => {
18005
18109
  return {
18006
18110
  activeTabValue: leftTabValue,
18007
18111
  closeSidebar: closeLeftSidebar
18008
18112
  };
18009
18113
  }, [leftTabValue, closeLeftSidebar]);
18010
- const rightChildrenProps = (0, import_react108.useMemo)(() => {
18114
+ const rightChildrenProps = (0, import_react109.useMemo)(() => {
18011
18115
  return {
18012
18116
  activeTabValue: rightTabValue,
18013
18117
  closeSidebar: closeRightSidebar
18014
18118
  };
18015
18119
  }, [rightTabValue, closeRightSidebar]);
18016
- const leftSidebarProviderValue = (0, import_react108.useMemo)(() => {
18120
+ const leftSidebarProviderValue = (0, import_react109.useMemo)(() => {
18017
18121
  return {
18018
18122
  closeSidebar: closeLeftSidebar
18019
18123
  };
18020
18124
  }, [closeLeftSidebar]);
18021
- const rightSidebarProviderValue = (0, import_react108.useMemo)(() => {
18125
+ const rightSidebarProviderValue = (0, import_react109.useMemo)(() => {
18022
18126
  return {
18023
18127
  closeSidebar: closeRightSidebar
18024
18128
  };
18025
18129
  }, [closeRightSidebar]);
18026
- const leftPanel = left && leftVisible !== false ? /* @__PURE__ */ import_react108.default.createElement(
18130
+ const leftPanel = left && leftVisible !== false ? /* @__PURE__ */ import_react109.default.createElement(
18027
18131
  PanelInner,
18028
18132
  {
18029
18133
  style: leftStyle,
18030
18134
  className: cx("n-bg-sidebar-background n-flex-col", leftClassName)
18031
18135
  },
18032
- /* @__PURE__ */ import_react108.default.createElement(WorkspaceSideProvider, { value: leftSidebarProviderValue }, leftTabValue ? renderPanelChildren(left, leftChildrenProps) : null)
18136
+ /* @__PURE__ */ import_react109.default.createElement(WorkspaceSideProvider, { value: leftSidebarProviderValue }, leftTabValue ? renderPanelChildren(left, leftChildrenProps) : null)
18033
18137
  ) : null;
18034
- const rightPanel = right && rightVisible !== false ? /* @__PURE__ */ import_react108.default.createElement(
18138
+ const rightPanel = right && rightVisible !== false ? /* @__PURE__ */ import_react109.default.createElement(
18035
18139
  PanelInner,
18036
18140
  {
18037
18141
  style: rightStyle,
18038
18142
  className: cx("n-bg-sidebar-background n-flex-col", rightClassName)
18039
18143
  },
18040
- /* @__PURE__ */ import_react108.default.createElement(WorkspaceSideProvider, { value: rightSidebarProviderValue }, rightTabValue ? renderPanelChildren(right, rightChildrenProps) : null)
18144
+ /* @__PURE__ */ import_react109.default.createElement(WorkspaceSideProvider, { value: rightSidebarProviderValue }, rightTabValue ? renderPanelChildren(right, rightChildrenProps) : null)
18041
18145
  ) : null;
18042
- const centerPanel = /* @__PURE__ */ import_react108.default.createElement(PanelInner, { className: "n-bg-canvas-background" }, children);
18043
- const leftSidebarOptions = (0, import_react108.useMemo)(
18146
+ const centerPanel = /* @__PURE__ */ import_react109.default.createElement(PanelInner, { className: "n-bg-canvas-background" }, children);
18147
+ const leftSidebarOptions = (0, import_react109.useMemo)(
18044
18148
  () => ({
18045
18149
  minSize: leftSidebarMinPercentage,
18046
18150
  maxSize: leftSidebarMaxPercentage,
@@ -18058,7 +18162,7 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
18058
18162
  leftShowTabs
18059
18163
  ]
18060
18164
  );
18061
- const rightSidebarOptions = (0, import_react108.useMemo)(
18165
+ const rightSidebarOptions = (0, import_react109.useMemo)(
18062
18166
  () => ({
18063
18167
  minSize: rightSidebarMinPercentage,
18064
18168
  maxSize: rightSidebarMaxPercentage,
@@ -18078,7 +18182,7 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
18078
18182
  );
18079
18183
  const LayoutComponent = sideType === "panel" ? PanelWorkspaceLayout : sideType === "drawer" ? DrawerWorkspaceLayout : parentSize.width > sideTypeBreakpoint ? PanelWorkspaceLayout : DrawerWorkspaceLayout;
18080
18184
  const readyToRender = detectSize === "window" || containerSize && containerSize.width > 0;
18081
- return /* @__PURE__ */ import_react108.default.createElement(
18185
+ return /* @__PURE__ */ import_react109.default.createElement(
18082
18186
  "div",
18083
18187
  {
18084
18188
  ref: containerRef,
@@ -18091,7 +18195,7 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
18091
18195
  "data-theme": theme
18092
18196
  },
18093
18197
  toolbar,
18094
- /* @__PURE__ */ import_react108.default.createElement("div", { className: "n-flex n-flex-row n-flex-1 n-relative" }, readyToRender && /* @__PURE__ */ import_react108.default.createElement(
18198
+ /* @__PURE__ */ import_react109.default.createElement("div", { className: "n-flex n-flex-row n-flex-1 n-relative" }, readyToRender && /* @__PURE__ */ import_react109.default.createElement(
18095
18199
  LayoutComponent,
18096
18200
  {
18097
18201
  leftPanel,
@@ -18114,12 +18218,12 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
18114
18218
  ))
18115
18219
  );
18116
18220
  });
18117
- var PanelInner = (0, import_react108.memo)(function PanelInner2({
18221
+ var PanelInner = (0, import_react109.memo)(function PanelInner2({
18118
18222
  children,
18119
18223
  style: style2,
18120
18224
  className
18121
18225
  }) {
18122
- return /* @__PURE__ */ import_react108.default.createElement(
18226
+ return /* @__PURE__ */ import_react109.default.createElement(
18123
18227
  "div",
18124
18228
  {
18125
18229
  style: style2,
@@ -18134,22 +18238,22 @@ function getFirstTabValue(items, defaultValue2) {
18134
18238
  }
18135
18239
 
18136
18240
  // src/contexts/ImageDataContext.tsx
18137
- var React109 = __toESM(require("react"));
18138
- var ImageDataContext = React109.createContext(
18241
+ var React110 = __toESM(require("react"));
18242
+ var ImageDataContext = React110.createContext(
18139
18243
  void 0
18140
18244
  );
18141
- var ImageDataProvider = React109.memo(function ImageDataProvider2({
18245
+ var ImageDataProvider = React110.memo(function ImageDataProvider2({
18142
18246
  children,
18143
18247
  getImageData
18144
18248
  }) {
18145
- const contextValue = React109.useMemo(
18249
+ const contextValue = React110.useMemo(
18146
18250
  () => ({ getImageData: getImageData ?? (() => void 0) }),
18147
18251
  [getImageData]
18148
18252
  );
18149
- return /* @__PURE__ */ React109.createElement(ImageDataContext.Provider, { value: contextValue }, children);
18253
+ return /* @__PURE__ */ React110.createElement(ImageDataContext.Provider, { value: contextValue }, children);
18150
18254
  });
18151
18255
  function useImageData(ref) {
18152
- const value = React109.useContext(ImageDataContext);
18256
+ const value = React110.useContext(ImageDataContext);
18153
18257
  if (!value) {
18154
18258
  throw new Error("Missing ImageDataProvider");
18155
18259
  }
@@ -18166,9 +18270,9 @@ function usePlatformModKey() {
18166
18270
  }
18167
18271
 
18168
18272
  // src/hooks/useTheme.ts
18169
- var import_react109 = require("react");
18273
+ var import_react110 = require("react");
18170
18274
  function useTheme() {
18171
- const [theme, setTheme] = (0, import_react109.useState)("light");
18275
+ const [theme, setTheme] = (0, import_react110.useState)("light");
18172
18276
  const checkTheme = () => {
18173
18277
  const currentTheme = document.body.getAttribute("data-theme");
18174
18278
  switch (currentTheme) {
@@ -18180,7 +18284,7 @@ function useTheme() {
18180
18284
  break;
18181
18285
  }
18182
18286
  };
18183
- (0, import_react109.useEffect)(() => {
18287
+ (0, import_react110.useEffect)(() => {
18184
18288
  checkTheme();
18185
18289
  const observer = new MutationObserver((mutations) => {
18186
18290
  mutations.forEach((mutation) => {
@@ -18303,11 +18407,11 @@ var SUPPORTED_CANVAS_UPLOAD_TYPES = [
18303
18407
 
18304
18408
  // src/components/DimensionInput.tsx
18305
18409
  var import_noya_utils21 = require("@noya-app/noya-utils");
18306
- var React110 = __toESM(require("react"));
18410
+ var React111 = __toESM(require("react"));
18307
18411
  function getNewValue(value, mode, delta) {
18308
18412
  return delta === void 0 ? value : mode === "replace" ? delta : value + delta;
18309
18413
  }
18310
- var DimensionInput = React110.memo(function DimensionInput2({
18414
+ var DimensionInput = React111.memo(function DimensionInput2({
18311
18415
  id,
18312
18416
  value,
18313
18417
  onSetValue,
@@ -18317,15 +18421,15 @@ var DimensionInput = React110.memo(function DimensionInput2({
18317
18421
  disabled,
18318
18422
  trigger = "submit"
18319
18423
  }) {
18320
- const handleNudgeValue = React110.useCallback(
18424
+ const handleNudgeValue = React111.useCallback(
18321
18425
  (value2) => onSetValue(value2, "adjust"),
18322
18426
  [onSetValue]
18323
18427
  );
18324
- const handleSetValue = React110.useCallback(
18428
+ const handleSetValue = React111.useCallback(
18325
18429
  (value2) => onSetValue(value2, "replace"),
18326
18430
  [onSetValue]
18327
18431
  );
18328
- return /* @__PURE__ */ React110.createElement(LabeledField, { label, labelType: "inset" }, /* @__PURE__ */ React110.createElement(InputField2.Root, { id, width: size }, /* @__PURE__ */ React110.createElement(
18432
+ return /* @__PURE__ */ React111.createElement(LabeledField, { label, labelType: "inset" }, /* @__PURE__ */ React111.createElement(InputField2.Root, { id, width: size }, /* @__PURE__ */ React111.createElement(
18329
18433
  InputField2.NumberInput,
18330
18434
  {
18331
18435
  value: value === void 0 ? value : (0, import_noya_utils21.round)(value, 2),
@@ -18352,8 +18456,8 @@ __export(InspectorPrimitives_exports, {
18352
18456
  Title: () => Title,
18353
18457
  VerticalSeparator: () => VerticalSeparator
18354
18458
  });
18355
- var import_react110 = __toESM(require("react"));
18356
- var Section2 = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18459
+ var import_react111 = __toESM(require("react"));
18460
+ var Section2 = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18357
18461
  "div",
18358
18462
  {
18359
18463
  ref,
@@ -18361,8 +18465,8 @@ var Section2 = (0, import_react110.forwardRef)(({ className, ...props }, ref) =>
18361
18465
  ...props
18362
18466
  }
18363
18467
  ));
18364
- var SectionHeader2 = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement("div", { ref, className: cx(`n-flex n-items-center`, className), ...props }));
18365
- var Title = (0, import_react110.forwardRef)(({ className, $textStyle, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18468
+ var SectionHeader2 = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement("div", { ref, className: cx(`n-flex n-items-center`, className), ...props }));
18469
+ var Title = (0, import_react111.forwardRef)(({ className, $textStyle, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18366
18470
  "div",
18367
18471
  {
18368
18472
  ref,
@@ -18373,7 +18477,7 @@ var Title = (0, import_react110.forwardRef)(({ className, $textStyle, ...props }
18373
18477
  ...props
18374
18478
  }
18375
18479
  ));
18376
- var Row = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18480
+ var Row = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18377
18481
  "div",
18378
18482
  {
18379
18483
  ref,
@@ -18381,7 +18485,7 @@ var Row = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @
18381
18485
  ...props
18382
18486
  }
18383
18487
  ));
18384
- var Column = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18488
+ var Column = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18385
18489
  "div",
18386
18490
  {
18387
18491
  ref,
@@ -18389,7 +18493,7 @@ var Column = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /
18389
18493
  ...props
18390
18494
  }
18391
18495
  ));
18392
- var Checkbox3 = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18496
+ var Checkbox3 = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18393
18497
  "input",
18394
18498
  {
18395
18499
  ref,
@@ -18398,7 +18502,7 @@ var Checkbox3 = (0, import_react110.forwardRef)(({ className, ...props }, ref) =
18398
18502
  ...props
18399
18503
  }
18400
18504
  ));
18401
- var Text3 = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react110.default.createElement(
18505
+ var Text3 = (0, import_react111.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ import_react111.default.createElement(
18402
18506
  "span",
18403
18507
  {
18404
18508
  ref,
@@ -18406,14 +18510,14 @@ var Text3 = (0, import_react110.forwardRef)(({ className, ...props }, ref) => /*
18406
18510
  ...props
18407
18511
  }
18408
18512
  ));
18409
- var VerticalSeparator = () => /* @__PURE__ */ import_react110.default.createElement(Spacer.Vertical, { size: "inspector-v-separator" });
18410
- var HorizontalSeparator = () => /* @__PURE__ */ import_react110.default.createElement(Spacer.Horizontal, { size: "inspector-h-separator" });
18411
- var RowLabel = (0, import_react110.forwardRef)(function RowLabel2({
18513
+ var VerticalSeparator = () => /* @__PURE__ */ import_react111.default.createElement(Spacer.Vertical, { size: "inspector-v-separator" });
18514
+ var HorizontalSeparator = () => /* @__PURE__ */ import_react111.default.createElement(Spacer.Horizontal, { size: "inspector-h-separator" });
18515
+ var RowLabel = (0, import_react111.forwardRef)(function RowLabel2({
18412
18516
  className,
18413
18517
  $textStyle,
18414
18518
  ...props
18415
18519
  }, ref) {
18416
- return /* @__PURE__ */ import_react110.default.createElement(
18520
+ return /* @__PURE__ */ import_react111.default.createElement(
18417
18521
  "label",
18418
18522
  {
18419
18523
  ref,
@@ -18425,7 +18529,7 @@ var RowLabel = (0, import_react110.forwardRef)(function RowLabel2({
18425
18529
  }
18426
18530
  );
18427
18531
  });
18428
- var LabeledRow = (0, import_react110.memo)(function LabeledRow2({
18532
+ var LabeledRow = (0, import_react111.memo)(function LabeledRow2({
18429
18533
  id,
18430
18534
  children,
18431
18535
  label,
@@ -18433,7 +18537,7 @@ var LabeledRow = (0, import_react110.memo)(function LabeledRow2({
18433
18537
  right,
18434
18538
  className
18435
18539
  }) {
18436
- return /* @__PURE__ */ import_react110.default.createElement(Row, { id, className }, /* @__PURE__ */ import_react110.default.createElement(Column, null, /* @__PURE__ */ import_react110.default.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ import_react110.default.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ import_react110.default.createElement(Row, null, children)));
18540
+ return /* @__PURE__ */ import_react111.default.createElement(Row, { id, className }, /* @__PURE__ */ import_react111.default.createElement(Column, null, /* @__PURE__ */ import_react111.default.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ import_react111.default.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ import_react111.default.createElement(Row, null, children)));
18437
18541
  });
18438
18542
  // Annotate the CommonJS export names for ESM import in node:
18439
18543
  0 && (module.exports = {
@@ -18573,6 +18677,7 @@ var LabeledRow = (0, import_react110.memo)(function LabeledRow2({
18573
18677
  Tooltip,
18574
18678
  TreeView,
18575
18679
  UserAvatar,
18680
+ UserPicker,
18576
18681
  UserPointer,
18577
18682
  WorkspaceLayout,
18578
18683
  WorkspaceSideProvider,
@@ -18606,6 +18711,7 @@ var LabeledRow = (0, import_react110.memo)(function LabeledRow2({
18606
18711
  getNextIndex,
18607
18712
  getPipelineResultLink,
18608
18713
  getThumbnailColors,
18714
+ getUserDisplayName,
18609
18715
  isMenuItemSectionHeader,
18610
18716
  isNonSelectableMenuItem,
18611
18717
  isPopoverMenuItem,