@noya-app/noya-designsystem 0.1.21 → 0.1.22

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.mjs CHANGED
@@ -59,7 +59,7 @@ function mergeBreakpoints(breakpoints, transform) {
59
59
  ) : breakpoints;
60
60
  const breakpointList = Object.entries(breakpointMap);
61
61
  const transformedList = breakpointList.sort((a, b) => Number(b[0]) - Number(a[0])).map(([width, value]) => [
62
- `@media screen and (max-width: ${width}px)`,
62
+ `@media (min-width: ${width}px)`,
63
63
  transform?.(value) ?? value
64
64
  ]);
65
65
  return Object.fromEntries(transformedList);
@@ -89,7 +89,17 @@ var Element = styled2.div(({ $styleProps, $breakpoints }) => ({
89
89
  ...$styleProps,
90
90
  ...mergeBreakpoints($breakpoints || [])
91
91
  }));
92
- var StackBase = forwardRef(function StackBase2({ id, as, children, separator, breakpoints, tabIndex, href, ...rest }, forwardedRef) {
92
+ var StackBase = forwardRef(function StackBase2({
93
+ id,
94
+ className,
95
+ as,
96
+ children,
97
+ separator,
98
+ breakpoints,
99
+ tabIndex,
100
+ href,
101
+ ...rest
102
+ }, forwardedRef) {
93
103
  const elements2 = separator ? withSeparatorElements(Children2.toArray(children), separator) : children;
94
104
  const styleProps = {
95
105
  display: "flex",
@@ -102,6 +112,7 @@ var StackBase = forwardRef(function StackBase2({ id, as, children, separator, br
102
112
  {
103
113
  ref: forwardedRef,
104
114
  id,
115
+ className,
105
116
  as,
106
117
  $styleProps: styleProps,
107
118
  $breakpoints: breakpoints,
@@ -386,7 +397,7 @@ var Button = forwardRef3(function Button2({
386
397
 
387
398
  // src/components/Chip.tsx
388
399
  import { Cross1Icon, PlusIcon } from "@noya-app/noya-icons";
389
- import React22, { memo as memo11 } from "react";
400
+ import React22, { forwardRef as forwardRef10, memo as memo11 } from "react";
390
401
  import styled14 from "styled-components";
391
402
 
392
403
  // src/contexts/DesignSystemConfiguration.tsx
@@ -397,7 +408,7 @@ import React20, {
397
408
  useContext as useContext5,
398
409
  useEffect as useEffect11,
399
410
  useMemo as useMemo9,
400
- useState as useState13
411
+ useState as useState14
401
412
  } from "react";
402
413
  import { ThemeProvider, useTheme as useTheme2 } from "styled-components";
403
414
 
@@ -698,7 +709,8 @@ var textStyles = {
698
709
  fontFamily: fonts.normal,
699
710
  fontSize: "0.62rem",
700
711
  fontWeight: 400,
701
- lineHeight: "1.4",
712
+ lineHeight: "19px",
713
+ // lineHeight: "1.4",
702
714
  textTransform: "uppercase",
703
715
  letterSpacing: "-0.3px"
704
716
  }
@@ -775,7 +787,7 @@ import React18, {
775
787
  useContext as useContext3,
776
788
  useMemo as useMemo7,
777
789
  useRef as useRef11,
778
- useState as useState11
790
+ useState as useState12
779
791
  } from "react";
780
792
  import styled13 from "styled-components";
781
793
 
@@ -1225,7 +1237,8 @@ import React17, {
1225
1237
  useEffect as useEffect10,
1226
1238
  useLayoutEffect as useLayoutEffect4,
1227
1239
  useMemo as useMemo6,
1228
- useRef as useRef10
1240
+ useRef as useRef10,
1241
+ useState as useState11
1229
1242
  } from "react";
1230
1243
  import styled12 from "styled-components";
1231
1244
 
@@ -1790,13 +1803,7 @@ function Popover({
1790
1803
  onFocusOutside,
1791
1804
  onPointerDownOutside,
1792
1805
  collisionPadding: 8,
1793
- arrowPadding: 2,
1794
- onPointerDown: (event) => {
1795
- event.stopPropagation();
1796
- },
1797
- onWheel: (event) => {
1798
- event.stopPropagation();
1799
- }
1806
+ arrowPadding: 2
1800
1807
  },
1801
1808
  children,
1802
1809
  showArrow && /* @__PURE__ */ React16.createElement(ArrowElement, null),
@@ -2057,9 +2064,10 @@ function parseNumber(value) {
2057
2064
  return value ? Number(value) : NaN;
2058
2065
  }
2059
2066
  function InputFieldNumberInput(props) {
2060
- const { value, placeholder, onNudge, ...rest } = props;
2067
+ const { value, placeholder, onNudge, onBlur, ...rest } = props;
2061
2068
  const onSubmit = "onSubmit" in props ? props.onSubmit : void 0;
2062
2069
  const onChange = "onChange" in props ? props.onChange : void 0;
2070
+ const [internalValue, setInternalValue] = useState11();
2063
2071
  const handleSubmit = useCallback11(
2064
2072
  (value2) => {
2065
2073
  const newValue = parseNumber(value2);
@@ -2075,6 +2083,7 @@ function InputFieldNumberInput(props) {
2075
2083
  if (!amount)
2076
2084
  return;
2077
2085
  onNudge?.(amount);
2086
+ setInternalValue(void 0);
2078
2087
  event.preventDefault();
2079
2088
  event.stopPropagation();
2080
2089
  },
@@ -2082,17 +2091,37 @@ function InputFieldNumberInput(props) {
2082
2091
  );
2083
2092
  const handleChange = useCallback11(
2084
2093
  (value2) => {
2085
- onChange?.(parseNumber(value2));
2094
+ if (value2 === "" || value2 === "-" || value2 === ".") {
2095
+ setInternalValue(value2);
2096
+ return;
2097
+ }
2098
+ if (value2.endsWith(".")) {
2099
+ setInternalValue(value2);
2100
+ return;
2101
+ }
2102
+ setInternalValue(void 0);
2103
+ const newValue = parseNumber(value2);
2104
+ if (!isNaN(newValue)) {
2105
+ onChange?.(newValue);
2106
+ }
2086
2107
  },
2087
2108
  [onChange]
2088
2109
  );
2110
+ const handleBlur = useCallback11(
2111
+ (event) => {
2112
+ setInternalValue(void 0);
2113
+ onBlur?.(event);
2114
+ },
2115
+ [onBlur]
2116
+ );
2089
2117
  return /* @__PURE__ */ React17.createElement(
2090
2118
  InputFieldInput,
2091
2119
  {
2092
2120
  ...rest,
2093
- value: value === void 0 ? "" : String(value),
2121
+ value: internalValue !== void 0 ? String(internalValue) : value === void 0 ? "" : String(value),
2094
2122
  placeholder,
2095
2123
  onKeyDown: handleKeyDown,
2124
+ onBlur: handleBlur,
2096
2125
  ..."onChange" in props ? { onChange: handleChange } : { onSubmit: handleSubmit }
2097
2126
  }
2098
2127
  );
@@ -2220,7 +2249,7 @@ var DialogContext = createContext3(void 0);
2220
2249
  var DialogProvider = function DialogProvider2({
2221
2250
  children
2222
2251
  }) {
2223
- const [contents, setContents] = useState11();
2252
+ const [contents, setContents] = useState12();
2224
2253
  const isOpen = !!contents;
2225
2254
  const close = useCallback12(() => {
2226
2255
  if (!contents)
@@ -2331,14 +2360,14 @@ function useDialogContainsElement() {
2331
2360
 
2332
2361
  // src/contexts/FloatingWindowContext.tsx
2333
2362
  import { uuid } from "@noya-app/noya-utils";
2334
- import React19, { createContext as createContext4, useContext as useContext4, useMemo as useMemo8, useState as useState12 } from "react";
2363
+ import React19, { createContext as createContext4, useContext as useContext4, useMemo as useMemo8, useState as useState13 } from "react";
2335
2364
  import { createPortal } from "react-dom";
2336
2365
  var FloatingWindowContext = createContext4(void 0);
2337
2366
  var CurrentWindowContext = createContext4(void 0);
2338
2367
  var FloatingWindowProvider = ({
2339
2368
  children
2340
2369
  }) => {
2341
- const [windows, setWindows] = useState12({});
2370
+ const [windows, setWindows] = useState13({});
2342
2371
  const contextValue = useMemo8(() => {
2343
2372
  const createWindow = (element) => {
2344
2373
  const id = uuid();
@@ -2406,7 +2435,7 @@ var DesignSystemConfigurationProvider = memo10(
2406
2435
  theme,
2407
2436
  platform
2408
2437
  }) {
2409
- const [internalPlatform, setInternalPlatform] = useState13(
2438
+ const [internalPlatform, setInternalPlatform] = useState14(
2410
2439
  platform ?? "key"
2411
2440
  );
2412
2441
  useEffect11(() => {
@@ -2609,76 +2638,78 @@ var AddElement = styled14(PlusIcon).withConfig({
2609
2638
  opacity: 0.85
2610
2639
  }
2611
2640
  }));
2612
- var Chip = memo11(function Chip2({
2613
- colorScheme,
2614
- children,
2615
- deletable,
2616
- addable,
2617
- style: style3,
2618
- size: size2 = "medium",
2619
- variant = "solid",
2620
- monospace = false,
2621
- tabIndex,
2622
- onDelete,
2623
- onClick,
2624
- onAdd,
2625
- onHoverDeleteChange
2626
- }) {
2627
- const theme = useDesignSystemTheme();
2628
- const { hoverProps: hoverDeleteProps } = useHover({
2629
- onHoverChange: onHoverDeleteChange
2630
- });
2631
- const handleClick = !children && !deletable && addable ? onAdd : onClick;
2632
- const color = colorScheme === "primary" ? theme.colors.primary : colorScheme === "secondary" ? theme.colors.secondary : theme.colors.text;
2633
- return /* @__PURE__ */ React22.createElement(
2634
- ChipElement,
2635
- {
2636
- $variant: variant,
2637
- $colorScheme: colorScheme,
2638
- style: style3,
2639
- onClick: handleClick,
2640
- $size: size2,
2641
- $monospace: monospace,
2642
- $isInteractive: !!handleClick,
2643
- tabIndex
2644
- },
2645
- addable && /* @__PURE__ */ React22.createElement(
2646
- AddElement,
2647
- {
2648
- size: size2,
2649
- isOnlyChild: !children && !deletable,
2650
- onClick: onAdd ? (event) => {
2651
- event.stopPropagation();
2652
- onAdd?.();
2653
- } : void 0,
2654
- color
2655
- }
2656
- ),
2641
+ var Chip = memo11(
2642
+ forwardRef10(function Chip2({
2643
+ colorScheme,
2657
2644
  children,
2658
- deletable && /* @__PURE__ */ React22.createElement(
2659
- DeleteElement,
2645
+ deletable,
2646
+ addable,
2647
+ clickable,
2648
+ style: style3,
2649
+ size: size2 = "medium",
2650
+ variant = "solid",
2651
+ monospace = false,
2652
+ tabIndex,
2653
+ onDelete,
2654
+ onClick,
2655
+ onAdd,
2656
+ onHoverDeleteChange,
2657
+ ...rest
2658
+ }, forwardedRef) {
2659
+ const theme = useDesignSystemTheme();
2660
+ const { hoverProps: hoverDeleteProps } = useHover({
2661
+ onHoverChange: onHoverDeleteChange
2662
+ });
2663
+ const handleClick = !children && !deletable && addable ? onAdd : onClick;
2664
+ const color = colorScheme === "primary" ? theme.colors.primary : colorScheme === "secondary" ? theme.colors.secondary : theme.colors.text;
2665
+ return /* @__PURE__ */ React22.createElement(
2666
+ ChipElement,
2660
2667
  {
2661
- size: size2,
2662
- ...hoverDeleteProps,
2663
- onClick: onDelete ? (event) => {
2664
- event.stopPropagation();
2665
- onDelete?.();
2666
- } : void 0,
2667
- color
2668
- }
2669
- )
2670
- );
2671
- });
2668
+ ref: forwardedRef,
2669
+ $variant: variant,
2670
+ $colorScheme: colorScheme,
2671
+ style: style3,
2672
+ onClick: handleClick,
2673
+ $size: size2,
2674
+ $monospace: monospace,
2675
+ $isInteractive: !!handleClick || clickable === true,
2676
+ tabIndex,
2677
+ ...rest
2678
+ },
2679
+ addable && /* @__PURE__ */ React22.createElement(
2680
+ AddElement,
2681
+ {
2682
+ size: size2,
2683
+ isOnlyChild: !children && !deletable,
2684
+ onClick: onAdd ? (event) => {
2685
+ event.stopPropagation();
2686
+ onAdd?.();
2687
+ } : void 0,
2688
+ color
2689
+ }
2690
+ ),
2691
+ children,
2692
+ deletable && /* @__PURE__ */ React22.createElement(
2693
+ DeleteElement,
2694
+ {
2695
+ size: size2,
2696
+ ...hoverDeleteProps,
2697
+ onClick: onDelete ? (event) => {
2698
+ event.stopPropagation();
2699
+ onDelete?.();
2700
+ } : void 0,
2701
+ color
2702
+ }
2703
+ )
2704
+ );
2705
+ })
2706
+ );
2672
2707
 
2673
2708
  // src/components/ContextMenu.tsx
2674
2709
  import { CheckIcon as CheckIcon2, ChevronRightIcon as ChevronRightIcon2 } from "@noya-app/noya-icons";
2675
2710
  import { useKeyboardShortcuts as useKeyboardShortcuts2 } from "@noya-app/noya-keymap";
2676
2711
  import * as RadixContextMenu from "@radix-ui/react-context-menu";
2677
- import React23, {
2678
- memo as memo12,
2679
- useCallback as useCallback13,
2680
- useMemo as useMemo11
2681
- } from "react";
2712
+ import React23, { memo as memo12, useCallback as useCallback13, useMemo as useMemo11 } from "react";
2682
2713
  import styled15 from "styled-components";
2683
2714
  var SeparatorElement2 = styled15(RadixContextMenu.Separator)(
2684
2715
  styles.separatorStyle
@@ -2826,7 +2857,7 @@ var DividerVertical = memo13(function DividerVertical2({
2826
2857
 
2827
2858
  // src/components/DraggableMenuButton.tsx
2828
2859
  import { DragHandleDots2Icon } from "@noya-app/noya-icons";
2829
- import React25, { memo as memo14, useCallback as useCallback14, useState as useState15 } from "react";
2860
+ import React25, { memo as memo14, useCallback as useCallback14, useState as useState16 } from "react";
2830
2861
  import styled17 from "styled-components";
2831
2862
  var DotButtonElement = styled17.div(({ theme }) => ({
2832
2863
  cursor: "pointer",
@@ -2852,7 +2883,7 @@ var DraggableMenuButton = memo14(function DraggableMenuButton2({
2852
2883
  isVisible = true
2853
2884
  }) {
2854
2885
  const color = useDesignSystemTheme().colors.icon;
2855
- const [open, setOpen] = useState15(false);
2886
+ const [open, setOpen] = useState16(false);
2856
2887
  const [downPosition, setDownPosition] = React25.useState(null);
2857
2888
  const handlePointerDownCapture = useCallback14(
2858
2889
  (event) => {
@@ -2925,7 +2956,7 @@ var DraggableMenuButton = memo14(function DraggableMenuButton2({
2925
2956
  });
2926
2957
 
2927
2958
  // src/components/FillInputField.tsx
2928
- import React28, { forwardRef as forwardRef10, memo as memo17 } from "react";
2959
+ import React28, { forwardRef as forwardRef11, memo as memo17 } from "react";
2929
2960
  import styled19 from "styled-components";
2930
2961
 
2931
2962
  // ../noya-file-format/src/types.ts
@@ -3453,13 +3484,13 @@ var Container = styled19.button(
3453
3484
  })
3454
3485
  );
3455
3486
  var FillInputField = memo17(
3456
- forwardRef10(function FillInputField2({ id, value, flex, ...rest }, ref) {
3487
+ forwardRef11(function FillInputField2({ id, value, flex, ...rest }, ref) {
3457
3488
  return /* @__PURE__ */ React28.createElement(Container, { ref, id, $flex: flex, ...rest }, /* @__PURE__ */ React28.createElement(FillPreviewBackground, { value }));
3458
3489
  })
3459
3490
  );
3460
3491
 
3461
3492
  // src/components/FloatingWindow.tsx
3462
- import React29, { useCallback as useCallback15, useRef as useRef13, useState as useState16 } from "react";
3493
+ import React29, { useCallback as useCallback15, useRef as useRef13, useState as useState17 } from "react";
3463
3494
  var styles2 = {
3464
3495
  noSelect: {
3465
3496
  userSelect: "none",
@@ -3577,15 +3608,15 @@ var FloatingWindow = ({
3577
3608
  toolbarContent,
3578
3609
  renderToolbar = defaultRenderToolbar
3579
3610
  }) => {
3580
- const [position, setPosition] = useState16({ x: initialX, y: initialY });
3581
- const [size2, setSize] = useState16({
3611
+ const [position, setPosition] = useState17({ x: initialX, y: initialY });
3612
+ const [size2, setSize] = useState17({
3582
3613
  width: initialWidth,
3583
3614
  height: initialHeight
3584
3615
  });
3585
- const [isDragging, setIsDragging] = useState16(false);
3586
- const [isResizing, setIsResizing] = useState16(false);
3587
- const [dragOffset, setDragOffset] = useState16({ x: 0, y: 0 });
3588
- const [resizeDirection, setResizeDirection] = useState16(null);
3616
+ const [isDragging, setIsDragging] = useState17(false);
3617
+ const [isResizing, setIsResizing] = useState17(false);
3618
+ const [dragOffset, setDragOffset] = useState17({ x: 0, y: 0 });
3619
+ const [resizeDirection, setResizeDirection] = useState17(null);
3589
3620
  const wrapperRef = useRef13(null);
3590
3621
  const toggleGlobalTextSelection = (disable) => {
3591
3622
  if (disable) {
@@ -3830,7 +3861,7 @@ var Grid = styled20.div((props) => ({
3830
3861
  // src/components/GridView.tsx
3831
3862
  import React32, {
3832
3863
  createContext as createContext7,
3833
- forwardRef as forwardRef11,
3864
+ forwardRef as forwardRef12,
3834
3865
  memo as memo20,
3835
3866
  useCallback as useCallback18,
3836
3867
  useContext as useContext7,
@@ -3840,7 +3871,7 @@ import styled22, { keyframes as keyframes2 } from "styled-components";
3840
3871
 
3841
3872
  // src/components/ScrollArea.tsx
3842
3873
  import * as RadixScrollArea from "@radix-ui/react-scroll-area";
3843
- import React31, { memo as memo19, useCallback as useCallback17, useState as useState17 } from "react";
3874
+ import React31, { memo as memo19, useCallback as useCallback17, useState as useState18 } from "react";
3844
3875
  import styled21 from "styled-components";
3845
3876
  var SCROLLBAR_SIZE = 10;
3846
3877
  var StyledViewport = styled21(RadixScrollArea.Viewport)({
@@ -3869,7 +3900,7 @@ var Container2 = styled21.div({
3869
3900
  minHeight: 0
3870
3901
  });
3871
3902
  var ScrollArea = memo19(function ScrollArea2({ children }) {
3872
- const [scrollElementRef, setScrollElementRef] = useState17(null);
3903
+ const [scrollElementRef, setScrollElementRef] = useState18(null);
3873
3904
  return /* @__PURE__ */ React31.createElement(Container2, null, /* @__PURE__ */ React31.createElement(RadixScrollArea.Root, { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ React31.createElement(
3874
3905
  StyledViewport,
3875
3906
  {
@@ -4059,7 +4090,7 @@ var Shimmer = styled22.div`
4059
4090
  align-items: end;
4060
4091
  padding: 4px;
4061
4092
  `;
4062
- var GridViewItem = forwardRef11(function GridViewItem2({
4093
+ var GridViewItem = forwardRef12(function GridViewItem2({
4063
4094
  id,
4064
4095
  title,
4065
4096
  subtitle,
@@ -4204,7 +4235,7 @@ var GridView;
4204
4235
  // src/components/InputFieldWithCompletions.tsx
4205
4236
  import { chunkBy, partition } from "@noya-app/noya-utils";
4206
4237
  import React36, {
4207
- forwardRef as forwardRef14,
4238
+ forwardRef as forwardRef15,
4208
4239
  memo as memo23,
4209
4240
  useCallback as useCallback21,
4210
4241
  useEffect as useEffect14,
@@ -4212,7 +4243,7 @@ import React36, {
4212
4243
  useLayoutEffect as useLayoutEffect7,
4213
4244
  useMemo as useMemo19,
4214
4245
  useRef as useRef16,
4215
- useState as useState19
4246
+ useState as useState20
4216
4247
  } from "react";
4217
4248
  import styled25 from "styled-components";
4218
4249
 
@@ -4293,7 +4324,7 @@ import { composeRefs as composeRefs2 } from "@radix-ui/react-compose-refs";
4293
4324
  import React34, {
4294
4325
  Children as Children4,
4295
4326
  createContext as createContext9,
4296
- forwardRef as forwardRef12,
4327
+ forwardRef as forwardRef13,
4297
4328
  isValidElement as isValidElement3,
4298
4329
  memo as memo22,
4299
4330
  useCallback as useCallback20,
@@ -4352,7 +4383,7 @@ import React33, {
4352
4383
  useEffect as useEffect13,
4353
4384
  useMemo as useMemo17,
4354
4385
  useRef as useRef14,
4355
- useState as useState18
4386
+ useState as useState19
4356
4387
  } from "react";
4357
4388
  import { createPortal as createPortal2 } from "react-dom";
4358
4389
  var normalizeListDestinationIndex = (index, position) => {
@@ -4440,12 +4471,12 @@ function SortableRoot({
4440
4471
  }
4441
4472
  })
4442
4473
  );
4443
- const [activeIndex, setActiveIndex] = useState18();
4474
+ const [activeIndex, setActiveIndex] = useState19();
4444
4475
  const activatorEvent = useRef14(null);
4445
4476
  const setActivatorEvent = useCallback19((event) => {
4446
4477
  activatorEvent.current = event;
4447
4478
  }, []);
4448
- const [position, setPosition] = useState18({ x: 0, y: 0 });
4479
+ const [position, setPosition] = useState19({ x: 0, y: 0 });
4449
4480
  const handleDragStart = useCallback19(
4450
4481
  (event) => {
4451
4482
  setActiveIndex(keys.indexOf(event.active.id));
@@ -4482,7 +4513,7 @@ function SortableRoot({
4482
4513
  },
4483
4514
  [acceptsDrop, axis, keys, onMoveItem, position.x, position.y]
4484
4515
  );
4485
- const [mounted, setMounted] = useState18(false);
4516
+ const [mounted, setMounted] = useState19(false);
4486
4517
  useEffect13(() => {
4487
4518
  setMounted(true);
4488
4519
  }, []);
@@ -4691,7 +4722,7 @@ var ListViewDragIndicatorElement = styled23.div(({ theme, $relativeDropPosition,
4691
4722
  boxShadow: "0 0 2px rgba(0,0,0,0.5)"
4692
4723
  }
4693
4724
  }));
4694
- var ListViewRow = forwardRef12(function ListViewRow2({
4725
+ var ListViewRow = forwardRef13(function ListViewRow2({
4695
4726
  id,
4696
4727
  tabIndex = 0,
4697
4728
  gap,
@@ -4832,7 +4863,7 @@ var VirtualizedListRow = memo22(function VirtualizedListRow2({
4832
4863
  const renderItem = useContext9(RenderItemContext);
4833
4864
  return /* @__PURE__ */ React34.createElement("div", { key: index, style: style3 }, renderItem(index));
4834
4865
  });
4835
- var VirtualizedListInner = forwardRef12(function VirtualizedListInner2({
4866
+ var VirtualizedListInner = forwardRef13(function VirtualizedListInner2({
4836
4867
  size: size2,
4837
4868
  scrollElement,
4838
4869
  items,
@@ -4913,7 +4944,10 @@ var RootContainer2 = styled23.div(({ theme, $scrollable, $gap }) => ({
4913
4944
  color: theme.colors.textMuted,
4914
4945
  gap: $gap
4915
4946
  }));
4916
- var ListViewRootInner = forwardRef12(function ListViewRootInner2({
4947
+ var ListViewRootInner = forwardRef13(function ListViewRootInner2({
4948
+ id,
4949
+ className,
4950
+ style: style3,
4917
4951
  onPress,
4918
4952
  scrollable = false,
4919
4953
  expandable = true,
@@ -5053,6 +5087,9 @@ var ListViewRootInner = forwardRef12(function ListViewRootInner2({
5053
5087
  return /* @__PURE__ */ React34.createElement(DraggingContext.Provider, { value: draggingContextValue }, /* @__PURE__ */ React34.createElement(
5054
5088
  RootContainer2,
5055
5089
  {
5090
+ id,
5091
+ className,
5092
+ style: style3,
5056
5093
  ...{
5057
5094
  [pressEventName]: handleClick
5058
5095
  },
@@ -5078,7 +5115,7 @@ var ListViewRootInner = forwardRef12(function ListViewRootInner2({
5078
5115
  ));
5079
5116
  });
5080
5117
  var ListViewRoot = memo22(ListViewRootInner);
5081
- var ChildrenListViewInner = forwardRef12(function ChildrenListViewInner2({ children, ...rest }, forwardedRef) {
5118
+ var ChildrenListViewInner = forwardRef13(function ChildrenListViewInner2({ children, ...rest }, forwardedRef) {
5082
5119
  const items = useMemo18(
5083
5120
  () => Children4.toArray(children).flatMap(
5084
5121
  (child) => isValidElement3(child) ? [child] : []
@@ -5100,7 +5137,7 @@ var ChildrenListViewInner = forwardRef12(function ChildrenListViewInner2({ child
5100
5137
  );
5101
5138
  });
5102
5139
  var ChildrenListView = memo22(ChildrenListViewInner);
5103
- var SimpleListViewInner = forwardRef12(function SimpleListViewInner2(props, forwardedRef) {
5140
+ var SimpleListViewInner = forwardRef13(function SimpleListViewInner2(props, forwardedRef) {
5104
5141
  if ("children" in props) {
5105
5142
  return /* @__PURE__ */ React34.createElement(ChildrenListView, { ref: forwardedRef, ...props });
5106
5143
  } else {
@@ -5125,7 +5162,7 @@ var ListView;
5125
5162
  })(ListView || (ListView = {}));
5126
5163
 
5127
5164
  // src/components/Text.tsx
5128
- import React35, { forwardRef as forwardRef13 } from "react";
5165
+ import React35, { forwardRef as forwardRef14 } from "react";
5129
5166
  import styled24 from "styled-components";
5130
5167
  var elements = {
5131
5168
  title: "h1",
@@ -5147,7 +5184,7 @@ var StyledElement = styled24.span(({ theme, $variant, $styleProps, $breakpoints,
5147
5184
  ...$styleProps,
5148
5185
  ...mergeBreakpoints($breakpoints || [])
5149
5186
  }));
5150
- var Text = forwardRef13(function Text2({
5187
+ var Text = forwardRef14(function Text2({
5151
5188
  as,
5152
5189
  variant,
5153
5190
  breakpoints,
@@ -5155,7 +5192,9 @@ var Text = forwardRef13(function Text2({
5155
5192
  className,
5156
5193
  color,
5157
5194
  href,
5195
+ tabIndex,
5158
5196
  onClick,
5197
+ onKeyDown,
5159
5198
  ...rest
5160
5199
  }, forwardedRef) {
5161
5200
  const element = as ?? elements[variant] ?? "span";
@@ -5165,35 +5204,37 @@ var Text = forwardRef13(function Text2({
5165
5204
  ref: forwardedRef,
5166
5205
  as: element,
5167
5206
  className,
5207
+ tabIndex,
5168
5208
  $variant: variant,
5169
5209
  $breakpoints: breakpoints,
5170
5210
  $styleProps: rest,
5171
5211
  $color: color,
5172
5212
  onClick,
5213
+ onKeyDown,
5173
5214
  ...href && { href }
5174
5215
  },
5175
5216
  children
5176
5217
  );
5177
5218
  });
5178
- var Heading1 = forwardRef13(
5219
+ var Heading1 = forwardRef14(
5179
5220
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "heading1" })
5180
5221
  );
5181
- var Heading2 = forwardRef13(
5222
+ var Heading2 = forwardRef14(
5182
5223
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "heading2" })
5183
5224
  );
5184
- var Heading3 = forwardRef13(
5225
+ var Heading3 = forwardRef14(
5185
5226
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "heading3" })
5186
5227
  );
5187
- var Heading4 = forwardRef13(
5228
+ var Heading4 = forwardRef14(
5188
5229
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "heading4" })
5189
5230
  );
5190
- var Heading5 = forwardRef13(
5231
+ var Heading5 = forwardRef14(
5191
5232
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "heading5" })
5192
5233
  );
5193
- var Body = forwardRef13(
5234
+ var Body = forwardRef14(
5194
5235
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "body" })
5195
5236
  );
5196
- var Small = forwardRef13(
5237
+ var Small = forwardRef14(
5197
5238
  (props, ref) => /* @__PURE__ */ React35.createElement(Text, { ref, ...props, variant: "small" })
5198
5239
  );
5199
5240
  var Italic = ({ children }) => /* @__PURE__ */ React35.createElement(
@@ -5239,7 +5280,7 @@ var CompletionToken = styled25.span(
5239
5280
  })
5240
5281
  );
5241
5282
  var CompletionMenu = memo23(
5242
- forwardRef14(function CompletionMenu2({
5283
+ forwardRef15(function CompletionMenu2({
5243
5284
  items,
5244
5285
  selectedIndex,
5245
5286
  onSelectItem,
@@ -5285,7 +5326,7 @@ var CompletionMenu = memo23(
5285
5326
  })
5286
5327
  );
5287
5328
  var InputFieldWithCompletions = memo23(
5288
- forwardRef14(function InputFieldWithCompletions2({
5329
+ forwardRef15(function InputFieldWithCompletions2({
5289
5330
  loading,
5290
5331
  initialValue = "",
5291
5332
  placeholder,
@@ -5304,8 +5345,8 @@ var InputFieldWithCompletions = memo23(
5304
5345
  hideMenuWhenEmptyValue = false
5305
5346
  }, forwardedRef) {
5306
5347
  const ref = useRef16(null);
5307
- const [isFocused, setIsFocused] = useState19(false);
5308
- const [state, _setState] = useState19({
5348
+ const [isFocused, setIsFocused] = useState20(false);
5349
+ const [state, _setState] = useState20({
5309
5350
  filter: initialValue,
5310
5351
  selectedIndex: 0
5311
5352
  });
@@ -5559,9 +5600,9 @@ function getNextIndex(items, currentIndex, direction, isDisabled) {
5559
5600
  }
5560
5601
 
5561
5602
  // src/components/InspectorContainer.tsx
5562
- import React37, { forwardRef as forwardRef15, memo as memo24 } from "react";
5603
+ import React37, { forwardRef as forwardRef16, memo as memo24 } from "react";
5563
5604
  var InspectorContainer = memo24(
5564
- forwardRef15(function InspectorContainer2({
5605
+ forwardRef16(function InspectorContainer2({
5565
5606
  header,
5566
5607
  children,
5567
5608
  fallback,
@@ -5797,7 +5838,7 @@ var ProgressIndicator = styled28(ProgressPrimitive.Indicator)(({ theme, variant
5797
5838
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
5798
5839
  import React41, {
5799
5840
  createContext as createContext10,
5800
- forwardRef as forwardRef16,
5841
+ forwardRef as forwardRef17,
5801
5842
  memo as memo27,
5802
5843
  useCallback as useCallback22,
5803
5844
  useContext as useContext10,
@@ -5855,7 +5896,7 @@ var StyledItem = styled29(ToggleGroupPrimitive.Item).withConfig({
5855
5896
  boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${theme.colors[colorScheme ?? "primary"]}`
5856
5897
  }
5857
5898
  }));
5858
- var ToggleGroupItem = forwardRef16(function ToggleGroupItem2({ value, tooltip, children, disabled = false }, forwardedRef) {
5899
+ var ToggleGroupItem = forwardRef17(function ToggleGroupItem2({ value, tooltip, children, disabled = false }, forwardedRef) {
5859
5900
  const { colorScheme } = useContext10(RadioGroupContext);
5860
5901
  const itemElement = /* @__PURE__ */ React41.createElement(
5861
5902
  StyledItem,
@@ -6041,11 +6082,51 @@ var Select = memo28(function Select2({
6041
6082
  )), label && /* @__PURE__ */ React42.createElement(SelectLabel, { htmlFor: id }, label));
6042
6083
  });
6043
6084
 
6085
+ // src/components/SelectMenu.tsx
6086
+ import { DropdownChevronIcon } from "@noya-app/noya-icons";
6087
+ import * as Select3 from "@radix-ui/react-select";
6088
+ import React43, { memo as memo29 } from "react";
6089
+ import { styled as styled31 } from "styled-components";
6090
+ var SelectMenu = memo29(function SelectMenu2({
6091
+ id,
6092
+ style: style3,
6093
+ className,
6094
+ menuItems,
6095
+ value,
6096
+ onSelect,
6097
+ placeholder
6098
+ }) {
6099
+ const selectedItem = menuItems.find(
6100
+ (item) => typeof item !== "string" && item.value === value
6101
+ );
6102
+ const icon = selectedItem?.icon;
6103
+ return /* @__PURE__ */ React43.createElement(Select3.Root, { value, onValueChange: onSelect }, /* @__PURE__ */ React43.createElement(Select3.SelectTrigger, { asChild: true }, /* @__PURE__ */ React43.createElement(Button, { id, style: style3, className }, icon && /* @__PURE__ */ React43.createElement(React43.Fragment, null, icon, /* @__PURE__ */ React43.createElement(Spacer.Horizontal, { size: 8 })), /* @__PURE__ */ React43.createElement(Select3.Value, { placeholder }), /* @__PURE__ */ React43.createElement(Spacer.Horizontal, null), /* @__PURE__ */ React43.createElement(DropdownChevronIcon, null))), /* @__PURE__ */ React43.createElement(Select3.Portal, null, /* @__PURE__ */ React43.createElement(SelectContent, null, /* @__PURE__ */ React43.createElement(SelectViewport, null, menuItems.map((menuItem) => {
6104
+ if (typeof menuItem === "string") {
6105
+ return /* @__PURE__ */ React43.createElement(StyledSeparator, null);
6106
+ }
6107
+ const value2 = menuItem.value ?? "";
6108
+ return /* @__PURE__ */ React43.createElement(SelectItem, { key: value2, value: value2, icon: menuItem.icon }, menuItem.title ?? value2);
6109
+ })))));
6110
+ });
6111
+ var SelectContent = styled31(Select3.Content)(styles.contentStyle);
6112
+ var SelectViewport = styled31(Select3.Viewport)({});
6113
+ var SelectItem = React43.forwardRef(
6114
+ ({
6115
+ children,
6116
+ icon,
6117
+ ...props
6118
+ }, forwardedRef) => {
6119
+ return /* @__PURE__ */ React43.createElement(StyledItem2, { ...props, ref: forwardedRef }, icon && /* @__PURE__ */ React43.createElement(React43.Fragment, null, icon, /* @__PURE__ */ React43.createElement(Spacer.Horizontal, { size: 8 })), /* @__PURE__ */ React43.createElement(Select3.ItemText, null, children));
6120
+ }
6121
+ );
6122
+ var StyledItem2 = styled31(Select3.Item)(styles.itemStyle);
6123
+ var StyledSeparator = styled31(Select3.Separator)(styles.separatorStyle);
6124
+
6044
6125
  // src/components/Slider.tsx
6045
6126
  import * as RadixSlider from "@radix-ui/react-slider";
6046
- import React43, { useCallback as useCallback24, useMemo as useMemo23 } from "react";
6047
- import styled31 from "styled-components";
6048
- var StyledSlider = styled31(RadixSlider.Root)({
6127
+ import React44, { useCallback as useCallback24, useMemo as useMemo23 } from "react";
6128
+ import styled32 from "styled-components";
6129
+ var StyledSlider = styled32(RadixSlider.Root)({
6049
6130
  flex: "1",
6050
6131
  position: "relative",
6051
6132
  display: "flex",
@@ -6054,19 +6135,19 @@ var StyledSlider = styled31(RadixSlider.Root)({
6054
6135
  touchAction: "none",
6055
6136
  height: "16px"
6056
6137
  });
6057
- var StyledTrack = styled31(RadixSlider.Track)(({ theme }) => ({
6138
+ var StyledTrack = styled32(RadixSlider.Track)(({ theme }) => ({
6058
6139
  backgroundColor: theme.colors.divider,
6059
6140
  position: "relative",
6060
6141
  flexGrow: 1,
6061
6142
  height: "2px"
6062
6143
  }));
6063
- var StyledRange = styled31(RadixSlider.Range)(({ theme }) => ({
6144
+ var StyledRange = styled32(RadixSlider.Range)(({ theme }) => ({
6064
6145
  position: "absolute",
6065
6146
  backgroundColor: theme.colors.primary,
6066
6147
  borderRadius: "9999px",
6067
6148
  height: "100%"
6068
6149
  }));
6069
- var StyledThumb2 = styled31(RadixSlider.Thumb)(({ theme }) => ({
6150
+ var StyledThumb2 = styled32(RadixSlider.Thumb)(({ theme }) => ({
6070
6151
  display: "block",
6071
6152
  width: "12px",
6072
6153
  height: "12px",
@@ -6094,7 +6175,7 @@ var Slider = function Slider2({
6094
6175
  },
6095
6176
  [onValueChange]
6096
6177
  );
6097
- return /* @__PURE__ */ React43.createElement(
6178
+ return /* @__PURE__ */ React44.createElement(
6098
6179
  StyledSlider,
6099
6180
  {
6100
6181
  min,
@@ -6103,16 +6184,16 @@ var Slider = function Slider2({
6103
6184
  value: arrayValue,
6104
6185
  onValueChange: handleValueChange
6105
6186
  },
6106
- /* @__PURE__ */ React43.createElement(StyledTrack, null, /* @__PURE__ */ React43.createElement(StyledRange, null)),
6107
- /* @__PURE__ */ React43.createElement(StyledThumb2, null)
6187
+ /* @__PURE__ */ React44.createElement(StyledTrack, null, /* @__PURE__ */ React44.createElement(StyledRange, null)),
6188
+ /* @__PURE__ */ React44.createElement(StyledThumb2, null)
6108
6189
  );
6109
6190
  };
6110
6191
 
6111
6192
  // src/components/Switch.tsx
6112
6193
  import * as SwitchPrimitive from "@radix-ui/react-switch";
6113
- import React44 from "react";
6114
- import styled32 from "styled-components";
6115
- var SwitchRoot = styled32(SwitchPrimitive.Root)(({ theme, $colorScheme }) => ({
6194
+ import React45 from "react";
6195
+ import styled33 from "styled-components";
6196
+ var SwitchRoot = styled33(SwitchPrimitive.Root)(({ theme, $colorScheme }) => ({
6116
6197
  all: "unset",
6117
6198
  width: 32,
6118
6199
  height: 19,
@@ -6129,7 +6210,7 @@ var SwitchRoot = styled32(SwitchPrimitive.Root)(({ theme, $colorScheme }) => ({
6129
6210
  backgroundColor: $colorScheme === "primary" ? theme.colors.primary : $colorScheme === "secondary" ? theme.colors.secondary : void 0
6130
6211
  }
6131
6212
  }));
6132
- var SwitchThumb = styled32(SwitchPrimitive.Thumb)({
6213
+ var SwitchThumb = styled33(SwitchPrimitive.Thumb)({
6133
6214
  display: "block",
6134
6215
  width: 15,
6135
6216
  height: 15,
@@ -6145,7 +6226,7 @@ var Switch = function Switch2({
6145
6226
  onChange,
6146
6227
  colorScheme = "normal"
6147
6228
  }) {
6148
- return /* @__PURE__ */ React44.createElement(
6229
+ return /* @__PURE__ */ React45.createElement(
6149
6230
  SwitchRoot,
6150
6231
  {
6151
6232
  $colorScheme: colorScheme,
@@ -6154,18 +6235,18 @@ var Switch = function Switch2({
6154
6235
  onChange(newValue);
6155
6236
  }
6156
6237
  },
6157
- /* @__PURE__ */ React44.createElement(SwitchThumb, null)
6238
+ /* @__PURE__ */ React45.createElement(SwitchThumb, null)
6158
6239
  );
6159
6240
  };
6160
6241
 
6161
6242
  // src/components/TreeView.tsx
6162
- import React45, {
6163
- forwardRef as forwardRef17,
6164
- memo as memo29,
6243
+ import React46, {
6244
+ forwardRef as forwardRef18,
6245
+ memo as memo30,
6165
6246
  useCallback as useCallback25,
6166
6247
  useContext as useContext12
6167
6248
  } from "react";
6168
- var TreeRow = forwardRef17(function TreeRow2({
6249
+ var TreeRow = forwardRef18(function TreeRow2({
6169
6250
  icon,
6170
6251
  expanded,
6171
6252
  onClickChevron,
@@ -6180,26 +6261,26 @@ var TreeRow = forwardRef17(function TreeRow2({
6180
6261
  },
6181
6262
  [onClickChevron]
6182
6263
  );
6183
- return /* @__PURE__ */ React45.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && /* @__PURE__ */ React45.createElement(React45.Fragment, null, expanded === void 0 ? /* @__PURE__ */ React45.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ React45.createElement(
6264
+ return /* @__PURE__ */ React46.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && /* @__PURE__ */ React46.createElement(React46.Fragment, null, expanded === void 0 ? /* @__PURE__ */ React46.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ React46.createElement(
6184
6265
  IconButton,
6185
6266
  {
6186
- iconName: expanded ? "ChevronDownIcon" : "ChevronRightIcon",
6267
+ iconName: expanded ? "ChevronDownIcon2" : "ChevronRightIcon2",
6187
6268
  onClick: handleClickChevron,
6188
6269
  selected: rest.selected
6189
6270
  }
6190
- ), /* @__PURE__ */ React45.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ React45.createElement(React45.Fragment, null, icon, /* @__PURE__ */ React45.createElement(Spacer.Horizontal, { size: 10 })), children);
6271
+ ), /* @__PURE__ */ React46.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ React46.createElement(React46.Fragment, null, icon, /* @__PURE__ */ React46.createElement(Spacer.Horizontal, { size: 10 })), children);
6191
6272
  });
6192
6273
  var TreeView;
6193
6274
  ((TreeView2) => {
6194
6275
  TreeView2.Root = ListView.Root;
6195
6276
  TreeView2.RowTitle = ListView.RowTitle;
6196
6277
  TreeView2.EditableRowTitle = ListView.EditableRowTitle;
6197
- TreeView2.Row = memo29(TreeRow);
6278
+ TreeView2.Row = memo30(TreeRow);
6198
6279
  })(TreeView || (TreeView = {}));
6199
6280
 
6200
6281
  // src/components/WorkspaceLayout.tsx
6201
6282
  import { useKeyboardShortcuts as useKeyboardShortcuts3 } from "@noya-app/noya-keymap";
6202
- import React47, { forwardRef as forwardRef18, useImperativeHandle as useImperativeHandle4, useRef as useRef20 } from "react";
6283
+ import React48, { forwardRef as forwardRef19, useImperativeHandle as useImperativeHandle4, useRef as useRef20 } from "react";
6203
6284
  import {
6204
6285
  Panel,
6205
6286
  PanelGroup,
@@ -6210,9 +6291,9 @@ import {
6210
6291
  import { useLayoutEffect as useLayoutEffect9, useRef as useRef19 } from "react";
6211
6292
 
6212
6293
  // src/hooks/useWindowSize.tsx
6213
- import { useEffect as useEffect16, useState as useState20 } from "react";
6294
+ import { useEffect as useEffect16, useState as useState21 } from "react";
6214
6295
  function useWindowSize() {
6215
- const [size2, setSize] = useState20(
6296
+ const [size2, setSize] = useState21(
6216
6297
  typeof window === "undefined" ? { width: 0, height: 0 } : {
6217
6298
  width: window.innerWidth,
6218
6299
  height: window.innerHeight
@@ -6340,7 +6421,7 @@ function usePreservePanelSize(panelGroupRef, setPanelLayoutState) {
6340
6421
  }
6341
6422
 
6342
6423
  // src/components/WorkspaceLayout.tsx
6343
- var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6424
+ var WorkspaceLayout = forwardRef19(function WorkspaceLayout2({
6344
6425
  autoSavePrefix,
6345
6426
  leftSidebarContent: leftPanelContent,
6346
6427
  children: centerPanelContent,
@@ -6427,7 +6508,7 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6427
6508
  }
6428
6509
  });
6429
6510
  const centerPanelPercentage = 100 - (leftPanelContent ? leftSidebarPercentage : 0) - (rightPanelContent ? rightSidebarPercentage : 0);
6430
- return /* @__PURE__ */ React47.createElement(
6511
+ return /* @__PURE__ */ React48.createElement(
6431
6512
  "div",
6432
6513
  {
6433
6514
  id,
@@ -6439,7 +6520,7 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6439
6520
  ...style3
6440
6521
  }
6441
6522
  },
6442
- /* @__PURE__ */ React47.createElement(
6523
+ /* @__PURE__ */ React48.createElement(
6443
6524
  PanelGroup,
6444
6525
  {
6445
6526
  ref: panelGroupRef,
@@ -6448,7 +6529,7 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6448
6529
  autoSaveId: autoSavePrefix ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}` : void 0,
6449
6530
  style: { flex: "1" }
6450
6531
  },
6451
- hasLeftSidebar && /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement(
6532
+ hasLeftSidebar && /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement(
6452
6533
  Panel,
6453
6534
  {
6454
6535
  id: LEFT_SIDEBAR_ID,
@@ -6460,11 +6541,12 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6460
6541
  collapsible: true,
6461
6542
  style: {
6462
6543
  display: "flex",
6463
- flexDirection: "row"
6544
+ flexDirection: "row",
6545
+ position: "relative"
6464
6546
  }
6465
6547
  },
6466
6548
  leftPanelContent
6467
- ), /* @__PURE__ */ React47.createElement(
6549
+ ), /* @__PURE__ */ React48.createElement(
6468
6550
  PanelResizeHandle,
6469
6551
  {
6470
6552
  style: {
@@ -6475,7 +6557,7 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6475
6557
  }
6476
6558
  }
6477
6559
  )),
6478
- /* @__PURE__ */ React47.createElement(
6560
+ /* @__PURE__ */ React48.createElement(
6479
6561
  Panel,
6480
6562
  {
6481
6563
  id: CONTENT_AREA_ID,
@@ -6484,12 +6566,13 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6484
6566
  minSize: 10,
6485
6567
  style: {
6486
6568
  display: "flex",
6487
- flexDirection: "row"
6569
+ flexDirection: "row",
6570
+ position: "relative"
6488
6571
  }
6489
6572
  },
6490
6573
  centerPanelContent
6491
6574
  ),
6492
- hasRightSidebar && /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement(
6575
+ hasRightSidebar && /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement(
6493
6576
  PanelResizeHandle,
6494
6577
  {
6495
6578
  style: {
@@ -6499,7 +6582,7 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6499
6582
  backgroundColor: theme.colors.divider
6500
6583
  }
6501
6584
  }
6502
- ), /* @__PURE__ */ React47.createElement(
6585
+ ), /* @__PURE__ */ React48.createElement(
6503
6586
  Panel,
6504
6587
  {
6505
6588
  id: RIGHT_SIDEBAR_ID,
@@ -6510,7 +6593,8 @@ var WorkspaceLayout = forwardRef18(function WorkspaceLayout2({
6510
6593
  collapsible: true,
6511
6594
  style: {
6512
6595
  display: "flex",
6513
- flexDirection: "row"
6596
+ flexDirection: "row",
6597
+ position: "relative"
6514
6598
  }
6515
6599
  },
6516
6600
  rightPanelContent
@@ -6561,8 +6645,8 @@ var SUPPORTED_CANVAS_UPLOAD_TYPES = [
6561
6645
 
6562
6646
  // src/components/ArrayController.tsx
6563
6647
  import { range as range2 } from "@noya-app/noya-utils";
6564
- import React49, { memo as memo31, useCallback as useCallback26, useMemo as useMemo24 } from "react";
6565
- import styled34, { useTheme as useTheme5 } from "styled-components";
6648
+ import React50, { memo as memo32, useCallback as useCallback26, useMemo as useMemo24 } from "react";
6649
+ import styled35, { useTheme as useTheme5 } from "styled-components";
6566
6650
 
6567
6651
  // src/components/InspectorPrimitives.tsx
6568
6652
  var InspectorPrimitives_exports = {};
@@ -6580,20 +6664,20 @@ __export(InspectorPrimitives_exports, {
6580
6664
  Title: () => Title3,
6581
6665
  VerticalSeparator: () => VerticalSeparator
6582
6666
  });
6583
- import React48, { memo as memo30 } from "react";
6584
- import styled33, { useTheme as useTheme4 } from "styled-components";
6585
- var Section = styled33.div(({ theme, $padding = "10px", $gap }) => ({
6667
+ import React49, { memo as memo31 } from "react";
6668
+ import styled34, { useTheme as useTheme4 } from "styled-components";
6669
+ var Section = styled34.div(({ theme, $padding = "10px", $gap }) => ({
6586
6670
  flex: "0 0 auto",
6587
6671
  display: "flex",
6588
6672
  flexDirection: "column",
6589
6673
  padding: $padding,
6590
6674
  gap: $gap
6591
6675
  }));
6592
- var SectionHeader = styled33.div(({ theme }) => ({
6676
+ var SectionHeader = styled34.div(({ theme }) => ({
6593
6677
  display: "flex",
6594
6678
  alignItems: "center"
6595
6679
  }));
6596
- var Title3 = styled33.div(({ theme, $textStyle }) => ({
6680
+ var Title3 = styled34.div(({ theme, $textStyle }) => ({
6597
6681
  display: "flex",
6598
6682
  flexDirection: "row",
6599
6683
  userSelect: "none",
@@ -6606,7 +6690,7 @@ var Title3 = styled33.div(({ theme, $textStyle }) => ({
6606
6690
  fontWeight: "bold"
6607
6691
  }
6608
6692
  }));
6609
- var Row2 = styled33.div(
6693
+ var Row2 = styled34.div(
6610
6694
  ({ theme, $gap }) => ({
6611
6695
  flex: "1",
6612
6696
  display: "flex",
@@ -6615,26 +6699,26 @@ var Row2 = styled33.div(
6615
6699
  gap: $gap
6616
6700
  })
6617
6701
  );
6618
- var Column = styled33.div(({ theme }) => ({
6702
+ var Column = styled34.div(({ theme }) => ({
6619
6703
  flex: "1",
6620
6704
  display: "flex",
6621
6705
  flexDirection: "column",
6622
6706
  gap: "4px"
6623
6707
  }));
6624
- var Checkbox = styled33.input(({ theme }) => ({
6708
+ var Checkbox = styled34.input(({ theme }) => ({
6625
6709
  margin: 0
6626
6710
  }));
6627
- var Text3 = styled33.span(({ theme }) => ({
6711
+ var Text3 = styled34.span(({ theme }) => ({
6628
6712
  ...theme.textStyles.small
6629
6713
  }));
6630
- var VerticalSeparator = () => /* @__PURE__ */ React48.createElement(Spacer.Vertical, { size: useTheme4().sizes.inspector.verticalSeparator });
6631
- var HorizontalSeparator = () => /* @__PURE__ */ React48.createElement(Spacer.Horizontal, { size: useTheme4().sizes.inspector.horizontalSeparator });
6632
- var SliderRowLabel = styled33.span(({ theme }) => ({
6714
+ var VerticalSeparator = () => /* @__PURE__ */ React49.createElement(Spacer.Vertical, { size: useTheme4().sizes.inspector.verticalSeparator });
6715
+ var HorizontalSeparator = () => /* @__PURE__ */ React49.createElement(Spacer.Horizontal, { size: useTheme4().sizes.inspector.horizontalSeparator });
6716
+ var SliderRowLabel = styled34.span(({ theme }) => ({
6633
6717
  ...theme.textStyles.small,
6634
6718
  color: theme.colors.textMuted,
6635
6719
  marginBottom: "-6px"
6636
6720
  }));
6637
- var RowLabel = styled33.span(({ theme, $textStyle }) => ({
6721
+ var RowLabel = styled34.span(({ theme, $textStyle }) => ({
6638
6722
  // marginBottom: '6px',
6639
6723
  display: "flex",
6640
6724
  ...$textStyle ? {
@@ -6648,7 +6732,7 @@ var RowLabel = styled33.span(({ theme, $textStyle }) => ({
6648
6732
  // Button height
6649
6733
  alignItems: "center"
6650
6734
  }));
6651
- var LabeledRow = memo30(function LabeledRow2({
6735
+ var LabeledRow = memo31(function LabeledRow2({
6652
6736
  id,
6653
6737
  children,
6654
6738
  label,
@@ -6656,26 +6740,26 @@ var LabeledRow = memo30(function LabeledRow2({
6656
6740
  gap,
6657
6741
  right
6658
6742
  }) {
6659
- return /* @__PURE__ */ React48.createElement(Row2, { id }, /* @__PURE__ */ React48.createElement(Column, null, /* @__PURE__ */ React48.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ React48.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ React48.createElement(Row2, { $gap: gap }, children)));
6743
+ return /* @__PURE__ */ React49.createElement(Row2, { id }, /* @__PURE__ */ React49.createElement(Column, null, /* @__PURE__ */ React49.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ React49.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ React49.createElement(Row2, { $gap: gap }, children)));
6660
6744
  });
6661
- var LabeledSliderRow = memo30(function LabeledRow3({
6745
+ var LabeledSliderRow = memo31(function LabeledRow3({
6662
6746
  children,
6663
6747
  label
6664
6748
  }) {
6665
- return /* @__PURE__ */ React48.createElement(Row2, null, /* @__PURE__ */ React48.createElement(Column, null, /* @__PURE__ */ React48.createElement(SliderRowLabel, null, label), /* @__PURE__ */ React48.createElement(Row2, null, children)));
6749
+ return /* @__PURE__ */ React49.createElement(Row2, null, /* @__PURE__ */ React49.createElement(Column, null, /* @__PURE__ */ React49.createElement(SliderRowLabel, null, label), /* @__PURE__ */ React49.createElement(Row2, null, children)));
6666
6750
  });
6667
6751
 
6668
6752
  // src/components/ArrayController.tsx
6669
- var ElementRow = styled34.div({
6753
+ var ElementRow = styled35.div({
6670
6754
  flex: "0 0 auto",
6671
6755
  display: "flex",
6672
6756
  flexDirection: "row",
6673
6757
  alignItems: "center"
6674
6758
  });
6675
- var ItemContainer2 = styled34.div({
6759
+ var ItemContainer2 = styled35.div({
6676
6760
  position: "relative"
6677
6761
  });
6678
- var ArrayController = memo31(function ArrayController2({
6762
+ var ArrayController = memo32(function ArrayController2({
6679
6763
  id,
6680
6764
  items,
6681
6765
  title,
@@ -6715,11 +6799,11 @@ var ArrayController = memo31(function ArrayController2({
6715
6799
  [onMoveItem, reversed]
6716
6800
  );
6717
6801
  const renderRow = (index) => {
6718
- return /* @__PURE__ */ React49.createElement(ElementRow, { key: keys[index] }, renderItem({ item: items[index], index }));
6802
+ return /* @__PURE__ */ React50.createElement(ElementRow, { key: keys[index] }, renderItem({ item: items[index], index }));
6719
6803
  };
6720
- return /* @__PURE__ */ React49.createElement(Section, { id, $padding: padding, $gap: "2px" }, /* @__PURE__ */ React49.createElement(SectionHeader, null, /* @__PURE__ */ React49.createElement(Button, { variant: "none", onClick: onClickPlus }, /* @__PURE__ */ React49.createElement(Title3, null, title)), /* @__PURE__ */ React49.createElement(Spacer.Horizontal, null), withSeparatorElements(
6804
+ return /* @__PURE__ */ React50.createElement(Section, { id, $padding: padding, $gap: "2px" }, /* @__PURE__ */ React50.createElement(SectionHeader, null, /* @__PURE__ */ React50.createElement(Button, { variant: "none", onClick: onClickPlus }, /* @__PURE__ */ React50.createElement(Title3, null, title)), /* @__PURE__ */ React50.createElement(Spacer.Horizontal, null), withSeparatorElements(
6721
6805
  [
6722
- onClickTrash && /* @__PURE__ */ React49.createElement(
6806
+ onClickTrash && /* @__PURE__ */ React50.createElement(
6723
6807
  IconButton,
6724
6808
  {
6725
6809
  id: `${id}-trash`,
@@ -6728,7 +6812,7 @@ var ArrayController = memo31(function ArrayController2({
6728
6812
  onClick: onClickTrash
6729
6813
  }
6730
6814
  ),
6731
- onClickExpand && /* @__PURE__ */ React49.createElement(
6815
+ onClickExpand && /* @__PURE__ */ React50.createElement(
6732
6816
  IconButton,
6733
6817
  {
6734
6818
  id: `${id}-gear`,
@@ -6737,7 +6821,7 @@ var ArrayController = memo31(function ArrayController2({
6737
6821
  onClick: onClickExpand
6738
6822
  }
6739
6823
  ),
6740
- onClickPlus && /* @__PURE__ */ React49.createElement(
6824
+ onClickPlus && /* @__PURE__ */ React50.createElement(
6741
6825
  IconButton,
6742
6826
  {
6743
6827
  id: `${id}-add`,
@@ -6747,15 +6831,15 @@ var ArrayController = memo31(function ArrayController2({
6747
6831
  }
6748
6832
  )
6749
6833
  ],
6750
- /* @__PURE__ */ React49.createElement(Spacer.Horizontal, { size: 8 })
6751
- )), /* @__PURE__ */ React49.createElement(Stack.V, { gap: "4px" }, sortable ? /* @__PURE__ */ React49.createElement(
6834
+ /* @__PURE__ */ React50.createElement(Spacer.Horizontal, { size: 8 })
6835
+ )), /* @__PURE__ */ React50.createElement(Stack.V, { gap: "4px" }, sortable ? /* @__PURE__ */ React50.createElement(
6752
6836
  Sortable.Root,
6753
6837
  {
6754
6838
  keys,
6755
6839
  renderOverlay: renderRow,
6756
6840
  onMoveItem: handleMoveItem
6757
6841
  },
6758
- indexes.map((index) => /* @__PURE__ */ React49.createElement(Sortable.Item, { id: keys[index], key: keys[index] }, ({ relativeDropPosition, ...sortableProps }) => /* @__PURE__ */ React49.createElement(ItemContainer2, { ...sortableProps }, renderRow(index), relativeDropPosition && /* @__PURE__ */ React49.createElement(
6842
+ indexes.map((index) => /* @__PURE__ */ React50.createElement(Sortable.Item, { id: keys[index], key: keys[index] }, ({ relativeDropPosition, ...sortableProps }) => /* @__PURE__ */ React50.createElement(ItemContainer2, { ...sortableProps }, renderRow(index), relativeDropPosition && /* @__PURE__ */ React50.createElement(
6759
6843
  ListView.DragIndicator,
6760
6844
  {
6761
6845
  $gap: 0,
@@ -6769,11 +6853,11 @@ var ArrayController = memo31(function ArrayController2({
6769
6853
 
6770
6854
  // src/components/DimensionInput.tsx
6771
6855
  import { round } from "@noya-app/noya-utils";
6772
- import React50, { memo as memo32, useCallback as useCallback27 } from "react";
6856
+ import React51, { memo as memo33, useCallback as useCallback27 } from "react";
6773
6857
  function getNewValue(value, mode, delta) {
6774
6858
  return delta === void 0 ? value : mode === "replace" ? delta : value + delta;
6775
6859
  }
6776
- var DimensionInput = memo32(function DimensionInput2({
6860
+ var DimensionInput = memo33(function DimensionInput2({
6777
6861
  id,
6778
6862
  value,
6779
6863
  onSetValue,
@@ -6791,7 +6875,7 @@ var DimensionInput = memo32(function DimensionInput2({
6791
6875
  (value2) => onSetValue(value2, "replace"),
6792
6876
  [onSetValue]
6793
6877
  );
6794
- return /* @__PURE__ */ React50.createElement(InputField.Root, { id, width: size2 }, /* @__PURE__ */ React50.createElement(
6878
+ return /* @__PURE__ */ React51.createElement(InputField.Root, { id, width: size2 }, /* @__PURE__ */ React51.createElement(
6795
6879
  InputField.NumberInput,
6796
6880
  {
6797
6881
  value: value === void 0 ? value : round(value, 2),
@@ -6800,7 +6884,7 @@ var DimensionInput = memo32(function DimensionInput2({
6800
6884
  disabled,
6801
6885
  ...trigger === "change" ? { onChange: handleSetValue } : { onSubmit: handleSetValue }
6802
6886
  }
6803
- ), label && /* @__PURE__ */ React50.createElement(InputField.Label, null, label));
6887
+ ), label && /* @__PURE__ */ React51.createElement(InputField.Label, null, label));
6804
6888
  });
6805
6889
  export {
6806
6890
  ActivityIndicator,
@@ -6859,6 +6943,7 @@ export {
6859
6943
  SUPPORTED_IMAGE_UPLOAD_TYPES,
6860
6944
  ScrollArea,
6861
6945
  Select,
6946
+ SelectMenu,
6862
6947
  SelectOption,
6863
6948
  Slider,
6864
6949
  Small,