@noya-app/noya-designsystem 0.1.68 → 0.1.70

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
@@ -4193,7 +4193,8 @@ var variantStyles = {
4193
4193
  floating: "n-bg-floating-button n-text-text n-shadow-[0_1px_2px_rgba(0,0,0,0.1)] hover:n-opacity-80 active:n-opacity-90",
4194
4194
  thin: "n-bg-transparent n-text-text hover:n-bg-input-background-light",
4195
4195
  none: "n-bg-transparent n-text-text hover:n-bg-input-background-light",
4196
- ghost: "n-bg-transparent n-text-text hover:n-bg-input-background-light"
4196
+ ghost: "n-bg-transparent n-text-text hover:n-bg-input-background-light",
4197
+ link: "n-bg-transparent n-text-text hover:n-bg-input-background-light"
4197
4198
  };
4198
4199
  var sizeStyles = {
4199
4200
  small: "n-px-[2px] n-font-sans n-text-[10px] n-font-medium",
@@ -5248,8 +5249,8 @@ function InputFieldRoot({
5248
5249
  },
5249
5250
  [onFocusChange]
5250
5251
  );
5251
- const startWidth = measuredStartSize?.width ?? startWidthProp;
5252
- const endWidth = measuredEndSize?.width ?? endWidthProp;
5252
+ const startWidth = startWidthProp ?? measuredStartSize?.width;
5253
+ const endWidth = endWidthProp ?? measuredEndSize?.width;
5253
5254
  const contextValue = (0, import_react29.useMemo)(
5254
5255
  () => ({
5255
5256
  startWidth,
@@ -9876,6 +9877,7 @@ var TreeRow = forwardRefGeneric(function TreeRow2({
9876
9877
  onClickChevron,
9877
9878
  chevronClassName,
9878
9879
  chevronAs,
9880
+ chevronPosition = "start",
9879
9881
  children,
9880
9882
  ...rest
9881
9883
  }, forwardedRef) {
@@ -9889,7 +9891,7 @@ var TreeRow = forwardRefGeneric(function TreeRow2({
9889
9891
  },
9890
9892
  [stableOnClickChevron]
9891
9893
  );
9892
- return /* @__PURE__ */ import_react65.default.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, expanded === void 0 ? /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ import_react65.default.createElement(
9894
+ return /* @__PURE__ */ import_react65.default.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && chevronPosition !== "end" && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, expanded === void 0 ? /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ import_react65.default.createElement(
9893
9895
  IconButton,
9894
9896
  {
9895
9897
  as: chevronAs,
@@ -9898,7 +9900,16 @@ var TreeRow = forwardRefGeneric(function TreeRow2({
9898
9900
  onClick: handleClickChevron,
9899
9901
  selected: rest.selected
9900
9902
  }
9901
- ), /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 10 })), children);
9903
+ ), /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 10 })), children, expandable && chevronPosition === "end" && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 6 }), expanded === void 0 ? /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null) : /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement(
9904
+ IconButton,
9905
+ {
9906
+ as: chevronAs,
9907
+ className: chevronClassName,
9908
+ iconName: expanded ? "ChevronDownIcon2" : "ChevronRightIcon2",
9909
+ onClick: handleClickChevron,
9910
+ selected: rest.selected
9911
+ }
9912
+ ), /* @__PURE__ */ import_react65.default.createElement(Spacer.Horizontal, { size: 8 }))));
9902
9913
  });
9903
9914
  var TreeView;
9904
9915
  ((TreeView2) => {
@@ -9961,7 +9972,10 @@ var List = memoGeneric(
9961
9972
  sortableId,
9962
9973
  sharedDragProps,
9963
9974
  virtualized,
9964
- renameSelectsBeforeDot
9975
+ renameSelectsBeforeDot,
9976
+ chevronPosition = "start",
9977
+ getItemStyle,
9978
+ getItemClassName
9965
9979
  } = props;
9966
9980
  const [internalHoveredId, setHoveredId] = (0, import_react66.useState)();
9967
9981
  const [internalRenamingId, setRenamingId] = (0, import_react66.useState)();
@@ -10091,6 +10105,8 @@ var List = memoGeneric(
10091
10105
  below
10092
10106
  );
10093
10107
  }
10108
+ const perItemStyle = getItemStyle?.(item, isSelected);
10109
+ const perItemClassName = getItemClassName?.(item, isSelected);
10094
10110
  return /* @__PURE__ */ import_react66.default.createElement(
10095
10111
  ViewComponent.Row,
10096
10112
  {
@@ -10103,11 +10119,14 @@ var List = memoGeneric(
10103
10119
  "aria-roledescription": itemRoleDescription,
10104
10120
  "aria-label": getName(item),
10105
10121
  "aria-selected": isSelected,
10106
- className: itemClassName,
10122
+ className: cx(itemClassName, perItemClassName),
10107
10123
  testRelativeDropPosition: testShowDropIndicatorId === id ? "inside" : void 0,
10108
- chevronClassName: cx(expandable && "n-relative n-left-2"),
10124
+ chevronClassName: cx(
10125
+ expandable && chevronPosition !== "end" && "n-relative n-left-2"
10126
+ ),
10109
10127
  chevronAs: href ? "div" : void 0,
10110
- style: itemStyle,
10128
+ ...expandable ? { chevronPosition } : {},
10129
+ style: perItemStyle ? { ...itemStyle, ...perItemStyle } : itemStyle,
10111
10130
  hovered: isHovered,
10112
10131
  selected: isSelected,
10113
10132
  expanded,
@@ -11661,6 +11680,9 @@ var DraggableMenuButton = memoGeneric(function DraggableMenuButton2({
11661
11680
  (event) => {
11662
11681
  if (open || !downPosition) {
11663
11682
  setDownPosition(null);
11683
+ if (open && event.target === event.currentTarget) {
11684
+ setOpen(false);
11685
+ }
11664
11686
  return;
11665
11687
  }
11666
11688
  const dx = event.clientX - downPosition.x;
@@ -16753,29 +16775,51 @@ var Stepper = (0, import_react100.memo)(function Stepper2({
16753
16775
  onBlur
16754
16776
  },
16755
16777
  /* @__PURE__ */ import_react100.default.createElement(
16756
- Button,
16757
- {
16758
- icon: "MinusIcon",
16759
- disabled: readOnly,
16760
- onClick: () => handleValueChange(value - step)
16761
- }
16762
- ),
16763
- /* @__PURE__ */ import_react100.default.createElement(InputField2.Root, { className: "n-flex-1" }, /* @__PURE__ */ import_react100.default.createElement(
16764
- InputField2.NumberInput,
16765
- {
16766
- value,
16767
- onChange: handleValueChange,
16768
- onNudge: (amount) => handleValueChange(value + amount),
16769
- readOnly
16770
- }
16771
- )),
16772
- /* @__PURE__ */ import_react100.default.createElement(
16773
- Button,
16778
+ InputField2.Root,
16774
16779
  {
16775
- icon: "PlusIcon",
16776
- disabled: readOnly,
16777
- onClick: () => handleValueChange(value + step)
16778
- }
16780
+ className: "n-flex-1",
16781
+ startWidth: 17,
16782
+ startClassName: "-n-ml-[3px]",
16783
+ endWidth: 17,
16784
+ endClassName: "-n-mr-[3px]",
16785
+ start: /* @__PURE__ */ import_react100.default.createElement(
16786
+ IconButton,
16787
+ {
16788
+ iconName: "MinusIcon",
16789
+ disabled: readOnly,
16790
+ onClick: () => handleValueChange(value - step),
16791
+ className: "n-w-[21px] n-h-[21px]",
16792
+ style: {
16793
+ outline: `1px solid ${cssVars.colors.dividerStrong}`,
16794
+ outlineOffset: "-1px",
16795
+ background: cssVars.colors.background
16796
+ }
16797
+ }
16798
+ ),
16799
+ end: /* @__PURE__ */ import_react100.default.createElement(
16800
+ IconButton,
16801
+ {
16802
+ iconName: "PlusIcon",
16803
+ disabled: readOnly,
16804
+ onClick: () => handleValueChange(value + step),
16805
+ className: "n-w-[21px] n-h-[21px]",
16806
+ style: {
16807
+ outline: `1px solid ${cssVars.colors.dividerStrong}`,
16808
+ outlineOffset: "-1px",
16809
+ background: cssVars.colors.background
16810
+ }
16811
+ }
16812
+ )
16813
+ },
16814
+ /* @__PURE__ */ import_react100.default.createElement(
16815
+ InputField2.NumberInput,
16816
+ {
16817
+ value,
16818
+ onChange: handleValueChange,
16819
+ onNudge: (amount) => handleValueChange(value + amount),
16820
+ readOnly
16821
+ }
16822
+ )
16779
16823
  )
16780
16824
  );
16781
16825
  });
@@ -17263,7 +17307,7 @@ var VerticalTabMenu = memoGeneric(function VerticalTabMenu2({
17263
17307
  return /* @__PURE__ */ import_react104.default.createElement(
17264
17308
  "div",
17265
17309
  {
17266
- className: "n-w-[47px] n-h-full n-bg-sidebar-background n-flex n-flex-col n-items-center n-py-3 n-gap-3",
17310
+ 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",
17267
17311
  style: style2
17268
17312
  },
17269
17313
  /* @__PURE__ */ import_react104.default.createElement(
@@ -17291,7 +17335,8 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17291
17335
  rightTabItems,
17292
17336
  rightTabValue,
17293
17337
  onChangeRightTab,
17294
- onChangeLeftTab
17338
+ onChangeLeftTab,
17339
+ compactDrawerMenu
17295
17340
  }) {
17296
17341
  const portalContainer = (0, import_react105.useRef)(null);
17297
17342
  const [{ leftSidebarCollapsed, rightSidebarCollapsed }, setLayoutState] = (0, import_react105.useState)({
@@ -17306,6 +17351,11 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17306
17351
  [leftTabItems, rightTabItems, leftPanel, rightPanel]
17307
17352
  );
17308
17353
  const hasTabs = allTabItems.length > 0;
17354
+ const allSelectableTabItems = (0, import_react105.useMemo)(
17355
+ () => allTabItems.filter(isSelectableMenuItem),
17356
+ [allTabItems]
17357
+ );
17358
+ const useCompactInToolbar = !!compactDrawerMenu && allSelectableTabItems.length <= 1;
17309
17359
  const leftSelectableTabItems = (0, import_react105.useMemo)(
17310
17360
  () => (leftTabItems ?? []).filter(isSelectableMenuItem),
17311
17361
  [leftTabItems]
@@ -17314,6 +17364,35 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17314
17364
  () => (rightTabItems ?? []).filter(isSelectableMenuItem),
17315
17365
  [rightTabItems]
17316
17366
  );
17367
+ const toggleSidebar = (ref) => {
17368
+ if (ref.current?.isExpanded()) {
17369
+ ref.current?.collapse();
17370
+ } else {
17371
+ ref.current?.expand();
17372
+ }
17373
+ };
17374
+ const ensureExpanded = (ref) => {
17375
+ if (!ref.current?.isExpanded()) {
17376
+ ref.current?.expand();
17377
+ }
17378
+ };
17379
+ const handleSelectTab = (value) => {
17380
+ if (leftSelectableTabItems.some((item) => item.value === value)) {
17381
+ if (value === leftTabValue) {
17382
+ toggleSidebar(leftSidebarRef);
17383
+ } else {
17384
+ ensureExpanded(leftSidebarRef);
17385
+ onChangeLeftTab?.(value);
17386
+ }
17387
+ } else if (rightSelectableTabItems.some((item) => item.value === value)) {
17388
+ if (value === rightTabValue) {
17389
+ toggleSidebar(rightSidebarRef);
17390
+ } else {
17391
+ ensureExpanded(rightSidebarRef);
17392
+ onChangeRightTab?.(value);
17393
+ }
17394
+ }
17395
+ };
17317
17396
  const { activeValue, isSidebarCollapsed } = leftSelectableTabItems.length > 0 && !leftSidebarCollapsed ? { activeValue: leftTabValue, isSidebarCollapsed: leftSidebarCollapsed } : rightSelectableTabItems.length > 0 && !rightSidebarCollapsed ? {
17318
17397
  activeValue: rightTabValue,
17319
17398
  isSidebarCollapsed: rightSidebarCollapsed
@@ -17325,58 +17404,47 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17325
17404
  id: EDITOR_PANEL_GROUP_ID,
17326
17405
  className: "n-flex n-flex-1 n-relative focus:n-outline-none"
17327
17406
  },
17328
- hasTabs && /* @__PURE__ */ import_react105.default.createElement(
17407
+ hasTabs && !useCompactInToolbar && /* @__PURE__ */ import_react105.default.createElement(import_react105.default.Fragment, null, /* @__PURE__ */ import_react105.default.createElement(
17329
17408
  VerticalTabMenu,
17330
17409
  {
17331
17410
  tooltipSide: "right",
17332
17411
  items: allTabItems,
17333
17412
  activeValue,
17334
17413
  isSidebarCollapsed,
17335
- onChange: (value) => {
17336
- if (leftSelectableTabItems.some((item) => item.value === value)) {
17337
- if (value === leftTabValue) {
17338
- if (leftSidebarRef.current?.isExpanded()) {
17339
- leftSidebarRef.current?.collapse();
17340
- } else {
17341
- leftSidebarRef.current?.expand();
17342
- }
17343
- } else {
17344
- if (!leftSidebarRef.current?.isExpanded()) {
17345
- leftSidebarRef.current?.expand();
17346
- }
17347
- onChangeLeftTab?.(value);
17348
- }
17349
- } else if (rightSelectableTabItems.some((item) => item.value === value)) {
17350
- if (value === rightTabValue) {
17351
- if (rightSidebarRef.current?.isExpanded()) {
17352
- rightSidebarRef.current?.collapse();
17353
- } else {
17354
- rightSidebarRef.current?.expand();
17355
- }
17356
- } else {
17357
- if (!rightSidebarRef.current?.isExpanded()) {
17358
- rightSidebarRef.current?.expand();
17359
- }
17360
- onChangeRightTab?.(value);
17361
- }
17362
- }
17414
+ onChange: (value) => handleSelectTab(value)
17415
+ }
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(
17418
+ Button,
17419
+ {
17420
+ variant: "none",
17421
+ className: "n-rounded",
17422
+ style: {
17423
+ width: "var(--n-input-height)",
17424
+ height: "var(--n-input-height)"
17425
+ },
17426
+ icon: allSelectableTabItems[0].icon,
17427
+ tooltip: allSelectableTabItems[0].tooltip ?? allSelectableTabItems[0].title,
17428
+ active: (() => {
17429
+ const value = allSelectableTabItems[0].value;
17430
+ const isLeftItem = leftSelectableTabItems.some((i) => i.value === value);
17431
+ const isRightItem = rightSelectableTabItems.some((i) => i.value === value);
17432
+ return isLeftItem ? !leftSidebarCollapsed : isRightItem ? !rightSidebarCollapsed : false;
17433
+ })(),
17434
+ onClick: () => {
17435
+ const value = allSelectableTabItems[0].value;
17436
+ handleSelectTab(value);
17363
17437
  }
17364
17438
  }
17365
- ),
17366
- hasTabs && /* @__PURE__ */ import_react105.default.createElement(DividerVertical, { className: "n-h-full" }),
17439
+ )),
17367
17440
  /* @__PURE__ */ import_react105.default.createElement("div", { className: "n-flex-1 n-flex n-relative" }, centerPanel),
17368
17441
  leftPanel && /* @__PURE__ */ import_react105.default.createElement(
17369
17442
  Drawer,
17370
17443
  {
17371
17444
  ref: leftSidebarRef,
17372
17445
  className: "n-flex-1",
17373
- style: {
17374
- left: 48,
17375
- maxWidth: "calc(100% - 48px)"
17376
- },
17377
- overlayStyle: {
17378
- left: 48
17379
- },
17446
+ style: useCompactInToolbar ? void 0 : { left: 48, maxWidth: "calc(100% - 48px)" },
17447
+ overlayStyle: useCompactInToolbar ? void 0 : { left: 48 },
17380
17448
  open: !leftSidebarCollapsed,
17381
17449
  positioning: "absolute",
17382
17450
  side: "left",
@@ -17397,13 +17465,8 @@ var DrawerWorkspaceLayout = memoGeneric(function DrawerWorkspaceLayout2({
17397
17465
  id: RIGHT_SIDEBAR_ID,
17398
17466
  ref: rightSidebarRef,
17399
17467
  className: "n-flex-1",
17400
- style: {
17401
- left: 48,
17402
- maxWidth: "calc(100% - 48px)"
17403
- },
17404
- overlayStyle: {
17405
- left: 48
17406
- },
17468
+ style: useCompactInToolbar ? void 0 : { left: 48, maxWidth: "calc(100% - 48px)" },
17469
+ overlayStyle: useCompactInToolbar ? void 0 : { left: 48 },
17407
17470
  open: !rightSidebarCollapsed,
17408
17471
  positioning: "absolute",
17409
17472
  side: "left",
@@ -17585,7 +17648,8 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17585
17648
  leftTabValue,
17586
17649
  rightTabValue,
17587
17650
  onChangeLeftTab,
17588
- onChangeRightTab
17651
+ onChangeRightTab,
17652
+ compactDrawerMenu
17589
17653
  }) {
17590
17654
  const panelGroupRef = (0, import_react106.useRef)(null);
17591
17655
  const hasLeftPanel = !!leftPanel;
@@ -17676,6 +17740,9 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17676
17740
  },
17677
17741
  [setData, propertyKey]
17678
17742
  );
17743
+ const showLeftTabs = !!leftSidebarOptions.showTabs && !!leftTabItems && // When compact drawer UI is enabled, only show the rail when the
17744
+ // sidebar is collapsed (for large screens/panel layout).
17745
+ (!compactDrawerMenu || leftSidebarCollapsed);
17679
17746
  return /* @__PURE__ */ import_react106.default.createElement(
17680
17747
  import_react_resizable_panels.PanelGroup,
17681
17748
  {
@@ -17687,7 +17754,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17687
17754
  autoSaveId,
17688
17755
  onLayout: handleLayoutChange
17689
17756
  },
17690
- leftPanel && /* @__PURE__ */ import_react106.default.createElement(import_react106.default.Fragment, null, leftSidebarOptions.showTabs && leftTabItems && /* @__PURE__ */ import_react106.default.createElement(
17757
+ leftPanel && /* @__PURE__ */ import_react106.default.createElement(import_react106.default.Fragment, null, showLeftTabs && /* @__PURE__ */ import_react106.default.createElement(
17691
17758
  VerticalTabMenu,
17692
17759
  {
17693
17760
  tooltipSide: "right",
@@ -17696,7 +17763,7 @@ var PanelWorkspaceLayout = memoGeneric(function PanelWorkspaceLayout2({
17696
17763
  isSidebarCollapsed: leftSidebarCollapsed,
17697
17764
  onChange: handleLeftTabChange
17698
17765
  }
17699
- ), leftSidebarOptions.showTabs && leftTabItems && !leftSidebarCollapsed && /* @__PURE__ */ import_react106.default.createElement(DividerVertical, { className: "n-h-full" }), /* @__PURE__ */ import_react106.default.createElement(
17766
+ ), showLeftTabs && !leftSidebarCollapsed && /* @__PURE__ */ import_react106.default.createElement(DividerVertical, { className: "n-h-full" }), /* @__PURE__ */ import_react106.default.createElement(
17700
17767
  import_react_resizable_panels.Panel,
17701
17768
  {
17702
17769
  id: LEFT_SIDEBAR_ID,
@@ -17820,7 +17887,8 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
17820
17887
  defaultCollapsed: rightDefaultCollapsed = false,
17821
17888
  showTabs: rightShowTabs = true
17822
17889
  } = {},
17823
- theme
17890
+ theme,
17891
+ compactDrawerMenu
17824
17892
  }, forwardedRef) {
17825
17893
  const containerRef = import_react108.default.useRef(null);
17826
17894
  const containerSize = useSize(containerRef);
@@ -18040,7 +18108,8 @@ var WorkspaceLayout = forwardRefGeneric(function WorkspaceLayout2({
18040
18108
  centerPanelPercentage,
18041
18109
  autoSavePrefix,
18042
18110
  leftSidebarRef,
18043
- rightSidebarRef
18111
+ rightSidebarRef,
18112
+ compactDrawerMenu
18044
18113
  }
18045
18114
  ))
18046
18115
  );