@noya-app/noya-designsystem 0.1.30 → 0.1.31

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
@@ -1422,6 +1422,7 @@ __export(src_exports, {
1422
1422
  Body: () => Body,
1423
1423
  Button: () => Button,
1424
1424
  ButtonElement: () => ButtonElement,
1425
+ CONTENT_AREA_ID: () => CONTENT_AREA_ID,
1425
1426
  Chip: () => Chip,
1426
1427
  CloseButtonContainer: () => CloseButtonContainer,
1427
1428
  CompletionMenu: () => CompletionMenu,
@@ -1436,6 +1437,7 @@ __export(src_exports, {
1436
1437
  DividerVertical: () => DividerVertical,
1437
1438
  DraggableMenuButton: () => DraggableMenuButton,
1438
1439
  DropdownMenu: () => DropdownMenu,
1440
+ EDITOR_PANEL_GROUP_ID: () => EDITOR_PANEL_GROUP_ID,
1439
1441
  FillInputField: () => FillInputField,
1440
1442
  FillPreviewBackground: () => FillPreviewBackground,
1441
1443
  FloatingWindow: () => FloatingWindow,
@@ -1459,21 +1461,21 @@ __export(src_exports, {
1459
1461
  InspectorPrimitives: () => InspectorPrimitives_exports,
1460
1462
  Italic: () => Italic,
1461
1463
  KeyboardShortcut: () => KeyboardShortcut,
1464
+ LEFT_SIDEBAR_ID: () => LEFT_SIDEBAR_ID,
1462
1465
  Label: () => Label,
1463
1466
  LabeledElementView: () => LabeledElementView,
1464
1467
  ListView: () => ListView,
1465
1468
  PatternPreviewBackground: () => PatternPreviewBackground,
1466
1469
  Popover: () => Popover,
1467
1470
  Progress: () => Progress,
1471
+ RIGHT_SIDEBAR_ID: () => RIGHT_SIDEBAR_ID,
1468
1472
  RadioGroup: () => RadioGroup,
1469
1473
  Row: () => Row,
1470
1474
  SEPARATOR_ITEM: () => SEPARATOR_ITEM,
1471
1475
  SUPPORTED_CANVAS_UPLOAD_TYPES: () => SUPPORTED_CANVAS_UPLOAD_TYPES,
1472
1476
  SUPPORTED_IMAGE_UPLOAD_TYPES: () => SUPPORTED_IMAGE_UPLOAD_TYPES,
1473
1477
  ScrollArea: () => ScrollArea,
1474
- Select: () => Select,
1475
1478
  SelectMenu: () => SelectMenu,
1476
- SelectOption: () => SelectOption,
1477
1479
  Slider: () => Slider,
1478
1480
  Small: () => Small,
1479
1481
  Sortable: () => Sortable,
@@ -1516,6 +1518,7 @@ __export(src_exports, {
1516
1518
  useOpenInputDialog: () => useOpenInputDialog,
1517
1519
  usePlatform: () => usePlatform,
1518
1520
  usePlatformModKey: () => usePlatformModKey,
1521
+ usePreservePanelSize: () => usePreservePanelSize,
1519
1522
  withSeparatorElements: () => withSeparatorElements
1520
1523
  });
1521
1524
  module.exports = __toCommonJS(src_exports);
@@ -1610,6 +1613,10 @@ var StackBase = (0, import_react3.forwardRef)(function StackBase2({
1610
1613
  breakpoints,
1611
1614
  tabIndex,
1612
1615
  href,
1616
+ paddingHorizontal,
1617
+ paddingVertical,
1618
+ padding,
1619
+ style: style5,
1613
1620
  ...rest
1614
1621
  }, forwardedRef) {
1615
1622
  const elements2 = separator ? withSeparatorElements(import_react3.Children.toArray(children2), separator) : children2;
@@ -1617,7 +1624,9 @@ var StackBase = (0, import_react3.forwardRef)(function StackBase2({
1617
1624
  display: "flex",
1618
1625
  position: "relative",
1619
1626
  alignItems: "stretch",
1620
- ...rest
1627
+ padding: padding || `${paddingVertical ?? 0} ${paddingHorizontal ?? 0} ${paddingVertical ?? 0} ${paddingHorizontal ?? 0}`,
1628
+ ...rest,
1629
+ ...style5
1621
1630
  };
1622
1631
  return /* @__PURE__ */ import_react3.default.createElement(
1623
1632
  Element2,
@@ -1839,8 +1848,8 @@ var ButtonElement = import_styled_components5.default.button(
1839
1848
  background: "white",
1840
1849
  color: theme.colors.text,
1841
1850
  boxShadow: "0 1px 2px rgba(0, 0, 0, 0.1)",
1842
- fontSize: "12px",
1843
- padding: "0px 4px",
1851
+ fontSize: $size === "small" ? "10px" : "12px",
1852
+ padding: $size === "small" ? "0px 2px" : "0px 4px",
1844
1853
  "&:hover": {
1845
1854
  opacity: 0.8
1846
1855
  },
@@ -3320,35 +3329,38 @@ function Popover({
3320
3329
  // src/components/InputField.tsx
3321
3330
  var InputFieldContext = (0, import_react33.createContext)({
3322
3331
  labelPosition: "end",
3323
- labelSize: 6,
3324
- hasLabel: false,
3332
+ labelSize: void 0,
3333
+ buttonSize: void 0,
3325
3334
  hasDropdown: false,
3326
3335
  size: "medium",
3327
3336
  isFocused: false,
3328
3337
  onFocusChange: () => {
3329
3338
  }
3330
3339
  });
3331
- var LabelContainer = import_styled_components13.default.label(({ theme, $labelPosition, $hasDropdown, pointerEvents }) => ({
3332
- ...theme.textStyles.label,
3333
- fontWeight: "bold",
3334
- color: theme.colors.textDisabled,
3335
- position: "absolute",
3336
- top: 0,
3337
- right: $labelPosition === "end" ? 0 : void 0,
3338
- bottom: 0,
3339
- left: $labelPosition === "start" ? 0 : void 0,
3340
- display: "flex",
3341
- alignItems: "center",
3342
- pointerEvents,
3343
- userSelect: "none",
3344
- ...$labelPosition === "start" ? { justifyContent: "flex-start", paddingLeft: "6px" } : {
3345
- justifyContent: "flex-end",
3346
- paddingRight: $hasDropdown ? "16px" : "6px"
3347
- }
3348
- }));
3340
+ var LabelContainer = import_styled_components13.default.label(({ theme, $labelPosition, $hasDropdown, pointerEvents, $size }) => {
3341
+ const offsetRelativeToSize = $size === "large" ? 6 : $size === "medium" ? 2 : 0;
3342
+ return {
3343
+ ...theme.textStyles.label,
3344
+ fontWeight: "bold",
3345
+ color: theme.colors.textDisabled,
3346
+ position: "absolute",
3347
+ top: 0,
3348
+ bottom: 0,
3349
+ right: $labelPosition === "end" ? offsetRelativeToSize : void 0,
3350
+ left: $labelPosition === "start" ? offsetRelativeToSize : void 0,
3351
+ display: "flex",
3352
+ alignItems: "center",
3353
+ pointerEvents,
3354
+ userSelect: "none",
3355
+ ...$labelPosition === "start" ? { justifyContent: "flex-start", paddingLeft: "6px" } : {
3356
+ justifyContent: "flex-end",
3357
+ paddingRight: $hasDropdown ? "16px" : "6px"
3358
+ }
3359
+ };
3360
+ });
3349
3361
  var InputFieldLabel = (0, import_react33.memo)(
3350
3362
  (0, import_react33.forwardRef)(function InputFieldLabel2({ children: children2 = false, pointerEvents = "none", style: style5 }, forwardedRef) {
3351
- const { labelPosition, hasDropdown, setLabelWidth } = (0, import_react33.useContext)(InputFieldContext);
3363
+ const { labelPosition, hasDropdown, setLabelWidth, size: size3 } = (0, import_react33.useContext)(InputFieldContext);
3352
3364
  const ref = (0, import_react33.useRef)(null);
3353
3365
  (0, import_react33.useLayoutEffect)(() => {
3354
3366
  if (!setLabelWidth)
@@ -3361,6 +3373,7 @@ var InputFieldLabel = (0, import_react33.memo)(
3361
3373
  return /* @__PURE__ */ import_react33.default.createElement(
3362
3374
  LabelContainer,
3363
3375
  {
3376
+ $size: size3,
3364
3377
  ref: (element) => {
3365
3378
  ref.current = element;
3366
3379
  assignRef(forwardedRef, element);
@@ -3397,40 +3410,56 @@ var ButtonContainer = import_styled_components13.default.span(
3397
3410
  ({ theme, $size }) => ({
3398
3411
  position: "absolute",
3399
3412
  right: $size === "large" ? "9px" : $size === "medium" ? "4px" : "2px",
3400
- top: $size === "large" ? "8px" : $size === "medium" ? "4px" : "2px"
3413
+ top: $size === "large" ? "10px" : $size === "medium" ? "4px" : "2px"
3401
3414
  })
3402
3415
  );
3403
- var InputFieldButton = (0, import_react33.memo)(function InputFieldButton2({
3404
- children: children2,
3405
- onClick
3406
- }) {
3407
- const { size: size3, inputRef } = (0, import_react33.useContext)(InputFieldContext);
3408
- const defaultHandleClick = (0, import_react33.useCallback)(
3409
- (event) => {
3410
- if (inputRef && typeof inputRef !== "function") {
3411
- inputRef.current?.focus();
3412
- inputRef.current?.setSelectionRange(0, inputRef.current.value.length);
3413
- }
3416
+ var InputFieldButton = (0, import_react33.memo)(
3417
+ (0, import_react33.forwardRef)(function InputFieldButton2({
3418
+ children: children2,
3419
+ onClick
3420
+ }, forwardedRef) {
3421
+ const { size: size3, inputRef, setButtonWidth } = (0, import_react33.useContext)(InputFieldContext);
3422
+ const ref = (0, import_react33.useRef)(null);
3423
+ (0, import_react33.useLayoutEffect)(() => {
3424
+ if (!setButtonWidth)
3425
+ return;
3426
+ const width = ref.current?.getBoundingClientRect().width;
3427
+ if (!width)
3428
+ return;
3429
+ setButtonWidth(width);
3430
+ }, [setButtonWidth]);
3431
+ const defaultHandleClick = (0, import_react33.useCallback)(
3432
+ (event) => {
3433
+ if (inputRef && typeof inputRef !== "function") {
3434
+ inputRef.current?.focus();
3435
+ inputRef.current?.setSelectionRange(0, inputRef.current.value.length);
3436
+ }
3437
+ event.preventDefault();
3438
+ event.stopPropagation();
3439
+ },
3440
+ [inputRef]
3441
+ );
3442
+ const handlePointerDown = (0, import_react33.useCallback)((event) => {
3414
3443
  event.preventDefault();
3415
3444
  event.stopPropagation();
3416
- },
3417
- [inputRef]
3418
- );
3419
- const handlePointerDown = (0, import_react33.useCallback)((event) => {
3420
- event.preventDefault();
3421
- event.stopPropagation();
3422
- }, []);
3423
- return /* @__PURE__ */ import_react33.default.createElement(ButtonContainer, { $size: size3 }, /* @__PURE__ */ import_react33.default.createElement(
3424
- Button,
3425
- {
3426
- variant: "floating",
3427
- onClick: onClick ?? defaultHandleClick,
3428
- onPointerDown: handlePointerDown,
3429
- tabIndex: -1
3430
- },
3431
- children2
3432
- ));
3433
- });
3445
+ }, []);
3446
+ return /* @__PURE__ */ import_react33.default.createElement(ButtonContainer, { $size: size3 }, /* @__PURE__ */ import_react33.default.createElement(
3447
+ Button,
3448
+ {
3449
+ ref: (element) => {
3450
+ ref.current = element;
3451
+ assignRef(forwardedRef, element);
3452
+ },
3453
+ variant: "floating",
3454
+ onClick: onClick ?? defaultHandleClick,
3455
+ onPointerDown: handlePointerDown,
3456
+ tabIndex: -1,
3457
+ size: size3 === "medium" ? "normal" : size3
3458
+ },
3459
+ children2
3460
+ ));
3461
+ })
3462
+ );
3434
3463
  var InputElement = (0, import_styled_components13.default)(TextInput_default)(({
3435
3464
  theme,
3436
3465
  $labelPosition,
@@ -3438,7 +3467,6 @@ var InputElement = (0, import_styled_components13.default)(TextInput_default)(({
3438
3467
  $hasDropdown,
3439
3468
  $textAlign,
3440
3469
  disabled,
3441
- $hasLabel,
3442
3470
  readOnly,
3443
3471
  $variant = "normal",
3444
3472
  $size
@@ -3465,8 +3493,8 @@ var InputElement = (0, import_styled_components13.default)(TextInput_default)(({
3465
3493
  borderRadius: "4px",
3466
3494
  paddingTop: $size === "large" ? "10px" : $size === "medium" ? "4px" : "1px",
3467
3495
  paddingBottom: $size === "large" ? "10px" : $size === "medium" ? "4px" : "1px",
3468
- paddingLeft: ($size === "large" ? 10 : $size === "medium" ? 6 : 4) + ($hasLabel && $labelPosition === "start" ? 6 + $labelSize : 0) + "px",
3469
- paddingRight: ($size === "large" ? 10 : $size === "medium" ? 6 : 4) + ($hasLabel && $labelPosition === "end" ? 6 + $labelSize : 0) + ($hasDropdown ? 11 : 0) + "px",
3496
+ paddingLeft: ($size === "large" ? 10 : $size === "medium" ? 6 : 4) + ($labelSize && $labelPosition === "start" ? 6 + $labelSize : 0) + "px",
3497
+ paddingRight: ($size === "large" ? 10 : $size === "medium" ? 6 : 4) + ($labelSize && $labelPosition === "end" ? 6 + $labelSize : 0) + ($hasDropdown ? 11 : 0) + "px",
3470
3498
  background: theme.colors.inputBackground,
3471
3499
  "&:focus": {
3472
3500
  boxShadow: `0 0 0 2px ${theme.colors.primary}`
@@ -3500,7 +3528,7 @@ var InputFieldInput = (0, import_react33.forwardRef)(function InputFieldInput2({
3500
3528
  labelPosition,
3501
3529
  labelSize,
3502
3530
  hasDropdown,
3503
- hasLabel,
3531
+ buttonSize,
3504
3532
  size: size3,
3505
3533
  onFocusChange,
3506
3534
  setInputRef
@@ -3519,8 +3547,7 @@ var InputFieldInput = (0, import_react33.forwardRef)(function InputFieldInput2({
3519
3547
  {
3520
3548
  ref: forwardedRef,
3521
3549
  $labelPosition: labelPosition,
3522
- $labelSize: labelSize,
3523
- $hasLabel: hasLabel,
3550
+ $labelSize: labelSize || buttonSize,
3524
3551
  $hasDropdown: hasDropdown,
3525
3552
  $size: size3,
3526
3553
  $variant: variant,
@@ -3535,7 +3562,6 @@ var InputFieldTypeahead = (props) => {
3535
3562
  labelPosition,
3536
3563
  labelSize,
3537
3564
  hasDropdown,
3538
- hasLabel,
3539
3565
  size: size3
3540
3566
  // onFocusChange,
3541
3567
  } = (0, import_react33.useContext)(InputFieldContext);
@@ -3545,7 +3571,6 @@ var InputFieldTypeahead = (props) => {
3545
3571
  as: "span",
3546
3572
  $labelPosition: labelPosition,
3547
3573
  $labelSize: labelSize,
3548
- $hasLabel: hasLabel,
3549
3574
  $hasDropdown: hasDropdown,
3550
3575
  $size: size3,
3551
3576
  value: "",
@@ -3632,15 +3657,13 @@ function InputFieldNumberInput(props) {
3632
3657
  }
3633
3658
  );
3634
3659
  }
3635
- var RootContainer = import_styled_components13.default.div(
3636
- ({ theme, $flex, $width }) => ({
3637
- flex: $flex ?? "1",
3638
- display: "flex",
3639
- flexDirection: "row",
3640
- position: "relative",
3641
- maxWidth: typeof $width === "number" ? `${$width}px` : void 0
3642
- })
3643
- );
3660
+ var RootContainer = import_styled_components13.default.div(({ theme, $flex, $width }) => ({
3661
+ flex: $flex ?? "1",
3662
+ display: "flex",
3663
+ flexDirection: "row",
3664
+ position: "relative",
3665
+ maxWidth: typeof $width === "number" ? `${$width}px` : void 0
3666
+ }));
3644
3667
  function InputFieldRoot({
3645
3668
  id,
3646
3669
  flex,
@@ -3658,11 +3681,9 @@ function InputFieldRoot({
3658
3681
  const hasDropdown = childrenArray.some(
3659
3682
  (child) => (0, import_react33.isValidElement)(child) && child.type === InputFieldDropdownMenu
3660
3683
  );
3661
- const hasLabel = childrenArray.some(
3662
- (child) => (0, import_react33.isValidElement)(child) && child.type === InputFieldLabel
3663
- );
3664
3684
  const [isFocused, setIsFocused] = import_react33.default.useState(false);
3665
3685
  const [measuredLabelSize, setMeasuredLabelSize] = import_react33.default.useState();
3686
+ const [measuredButtonSize, setMeasuredButtonSize] = import_react33.default.useState();
3666
3687
  const [measuredWidth, setMeasuredWidth] = import_react33.default.useState();
3667
3688
  const handleFocusChange = (0, import_react33.useCallback)(
3668
3689
  (isFocused2) => {
@@ -3682,22 +3703,23 @@ function InputFieldRoot({
3682
3703
  const contextValue = (0, import_react33.useMemo)(
3683
3704
  () => ({
3684
3705
  labelPosition,
3685
- labelSize: measuredLabelSize ?? labelSize ?? 6,
3706
+ labelSize: measuredLabelSize ?? labelSize,
3707
+ buttonSize: measuredButtonSize,
3686
3708
  hasDropdown,
3687
- hasLabel,
3688
3709
  size: size3,
3689
3710
  isFocused,
3690
3711
  onFocusChange: handleFocusChange,
3691
3712
  inputRef,
3692
3713
  setInputRef,
3693
- setLabelWidth: setMeasuredLabelSize
3714
+ setLabelWidth: setMeasuredLabelSize,
3715
+ setButtonWidth: setMeasuredButtonSize
3694
3716
  }),
3695
3717
  [
3696
3718
  labelPosition,
3697
3719
  measuredLabelSize,
3698
3720
  labelSize,
3721
+ measuredButtonSize,
3699
3722
  hasDropdown,
3700
- hasLabel,
3701
3723
  size3,
3702
3724
  isFocused,
3703
3725
  handleFocusChange,
@@ -14593,72 +14615,22 @@ var RadioGroup;
14593
14615
  RadioGroup2.Item = (0, import_react57.memo)(ToggleGroupItem);
14594
14616
  })(RadioGroup || (RadioGroup = {}));
14595
14617
 
14596
- // src/components/Select.tsx
14597
- var import_noya_utils10 = require("@noya-app/noya-utils");
14618
+ // src/components/SelectMenu.tsx
14619
+ var import_noya_icons6 = require("@noya-app/noya-icons");
14620
+ var Select = __toESM(require("@radix-ui/react-select"));
14598
14621
  var import_react58 = __toESM(require("react"));
14599
- var import_styled_components32 = __toESM(require("styled-components"));
14600
- var SelectContext = (0, import_react58.createContext)(void 0);
14601
- var SelectOption = (0, import_react58.memo)(function SelectOption2({
14602
- value,
14603
- title,
14604
- onSelect
14605
- }) {
14606
- const { addListener, removeListener } = (0, import_react58.useContext)(SelectContext);
14607
- (0, import_react58.useEffect)(() => {
14608
- if (!onSelect)
14609
- return;
14610
- addListener(value, onSelect);
14611
- return () => removeListener(value);
14612
- }, [addListener, onSelect, removeListener, value]);
14613
- return /* @__PURE__ */ import_react58.default.createElement("option", { value }, title ?? value);
14614
- });
14615
- var createChevronSVGString = (0, import_noya_utils10.memoize)(
14616
- (color) => `
14617
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='${color}'>
14618
- <path d='M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z'></path>
14619
- </svg>
14620
- `.replace(/\n/g, "")
14621
- );
14622
- var SelectContainer = import_styled_components32.default.div(
14623
- ({ $flex }) => ({
14624
- flex: $flex ?? "1 1 0px",
14625
- display: "flex",
14626
- flexDirection: "row",
14627
- position: "relative"
14628
- })
14629
- );
14630
- var SelectElement = import_styled_components32.default.select(
14631
- ({ theme, $flex }) => ({
14632
- appearance: "none",
14633
- ...theme.textStyles.small,
14634
- color: theme.colors.text,
14635
- lineHeight: "19px",
14636
- width: "0px",
14637
- // Reset intrinsic width
14638
- flex: $flex ?? "1 1 0px",
14639
- position: "relative",
14640
- border: "0",
14641
- outline: "none",
14642
- minWidth: "0",
14643
- textAlign: "left",
14644
- alignSelf: "stretch",
14645
- borderRadius: "4px",
14646
- paddingTop: "4px",
14647
- paddingBottom: "4px",
14648
- paddingLeft: "6px",
14649
- paddingRight: "23px",
14650
- background: [
14651
- `calc(100% - 6px) / 15px url("data:image/svg+xml;utf8,${createChevronSVGString(
14652
- theme.colors.icon
14653
- )}") no-repeat`,
14654
- theme.colors.inputBackground
14655
- ].join(","),
14656
- "&:focus": {
14657
- boxShadow: `0 0 0 2px ${theme.colors.primary}`
14658
- }
14659
- })
14660
- );
14661
- var SelectLabel = import_styled_components32.default.label(({ theme }) => ({
14622
+ var import_styled_components32 = require("styled-components");
14623
+ var readOnlyStyle = {
14624
+ justifyContent: "flex-start",
14625
+ textAlign: "left"
14626
+ };
14627
+ var flexStyle = {
14628
+ flex: 1
14629
+ };
14630
+ var textStyle = {
14631
+ fontSize: "0.85rem"
14632
+ };
14633
+ var SelectLabel = import_styled_components32.styled.label(({ theme }) => ({
14662
14634
  ...theme.textStyles.label,
14663
14635
  color: theme.colors.textDisabled,
14664
14636
  lineHeight: "19px",
@@ -14672,66 +14644,7 @@ var SelectLabel = import_styled_components32.default.label(({ theme }) => ({
14672
14644
  justifyContent: "end",
14673
14645
  paddingRight: "24px"
14674
14646
  }));
14675
- var Select = (0, import_react58.memo)(function Select2({
14676
- id,
14677
- flex,
14678
- value,
14679
- label,
14680
- ...rest
14681
- }) {
14682
- const options = "options" in rest ? rest.options : void 0;
14683
- const getTitle = "options" in rest ? rest.getTitle : void 0;
14684
- const onChange = "options" in rest ? rest.onChange : void 0;
14685
- const children2 = "options" in rest ? void 0 : rest.children;
14686
- const optionElements = (0, import_react58.useMemo)(
14687
- () => options ? options.map((option, index) => /* @__PURE__ */ import_react58.default.createElement(
14688
- SelectOption,
14689
- {
14690
- key: option,
14691
- value: option,
14692
- title: getTitle?.(option, index),
14693
- onSelect: () => onChange?.(option)
14694
- }
14695
- )) : children2,
14696
- [children2, getTitle, onChange, options]
14697
- );
14698
- const listeners = (0, import_react58.useRef)(/* @__PURE__ */ new Map());
14699
- const contextValue = (0, import_react58.useMemo)(
14700
- () => ({
14701
- addListener: (value2, listener) => listeners.current.set(value2, listener),
14702
- removeListener: (value2) => listeners.current.delete(value2)
14703
- }),
14704
- []
14705
- );
14706
- return /* @__PURE__ */ import_react58.default.createElement(SelectContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react58.default.createElement(SelectContainer, { $flex: flex }, /* @__PURE__ */ import_react58.default.createElement(
14707
- SelectElement,
14708
- {
14709
- id,
14710
- $flex: flex,
14711
- value,
14712
- onChange: (0, import_react58.useCallback)(
14713
- (event) => listeners.current.get(event.target.value)?.(),
14714
- [listeners]
14715
- ),
14716
- onPointerDown: (event) => event.stopPropagation()
14717
- },
14718
- optionElements
14719
- )), label && /* @__PURE__ */ import_react58.default.createElement(SelectLabel, { htmlFor: id }, label));
14720
- });
14721
-
14722
- // src/components/SelectMenu.tsx
14723
- var import_noya_icons6 = require("@noya-app/noya-icons");
14724
- var Select3 = __toESM(require("@radix-ui/react-select"));
14725
- var import_react59 = __toESM(require("react"));
14726
- var import_styled_components33 = require("styled-components");
14727
- var readOnlyStyle = {
14728
- justifyContent: "flex-start",
14729
- textAlign: "left"
14730
- };
14731
- var flexStyle = {
14732
- flex: 1
14733
- };
14734
- var SelectMenu = (0, import_react59.memo)(function SelectMenu2({
14647
+ var SelectMenu = (0, import_react58.memo)(function SelectMenu2({
14735
14648
  id,
14736
14649
  style: style5,
14737
14650
  className,
@@ -14740,53 +14653,75 @@ var SelectMenu = (0, import_react59.memo)(function SelectMenu2({
14740
14653
  onSelect,
14741
14654
  placeholder,
14742
14655
  disabled,
14743
- readOnly
14656
+ readOnly,
14657
+ label,
14658
+ open
14744
14659
  }) {
14745
14660
  const selectedItem = menuItems.find(
14746
14661
  (item) => typeof item !== "string" && item.value === value
14747
14662
  );
14748
14663
  const icon = selectedItem?.icon;
14749
- if (readOnly) {
14750
- return /* @__PURE__ */ import_react59.default.createElement(
14664
+ const readOnlyButton = (0, import_react58.useMemo)(
14665
+ () => /* @__PURE__ */ import_react58.default.createElement(
14751
14666
  Button,
14752
14667
  {
14753
14668
  id,
14754
- style: style5,
14669
+ style: { ...style5, ...flexStyle },
14755
14670
  contentStyle: readOnlyStyle,
14756
14671
  className,
14757
14672
  disabled
14758
14673
  },
14759
- icon && /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react59.default.createElement(Spacer.Horizontal, { inline: true, size: 6 })),
14760
- /* @__PURE__ */ import_react59.default.createElement("span", { style: flexStyle }, selectedItem?.title ?? value)
14761
- );
14674
+ icon && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react58.default.createElement(Spacer.Horizontal, { inline: true, size: 6 })),
14675
+ /* @__PURE__ */ import_react58.default.createElement("span", { style: { ...flexStyle, ...textStyle } }, selectedItem?.title ?? value)
14676
+ ),
14677
+ [icon, id, style5, className, disabled, value, selectedItem]
14678
+ );
14679
+ const trigger = (0, import_react58.useMemo)(
14680
+ () => /* @__PURE__ */ import_react58.default.createElement(Select.SelectTrigger, { asChild: true }, /* @__PURE__ */ import_react58.default.createElement(
14681
+ Button,
14682
+ {
14683
+ id,
14684
+ style: { ...textStyle, ...style5, ...flexStyle },
14685
+ className,
14686
+ disabled
14687
+ },
14688
+ icon && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react58.default.createElement(Spacer.Horizontal, { inline: true, size: 6 })),
14689
+ /* @__PURE__ */ import_react58.default.createElement("span", { style: flexStyle }, /* @__PURE__ */ import_react58.default.createElement(Select.Value, { placeholder })),
14690
+ /* @__PURE__ */ import_react58.default.createElement(Spacer.Horizontal, { inline: true, size: 6 }),
14691
+ /* @__PURE__ */ import_react58.default.createElement(import_noya_icons6.DropdownChevronIcon, null)
14692
+ )),
14693
+ [icon, id, style5, className, disabled, placeholder]
14694
+ );
14695
+ if (readOnly) {
14696
+ return label ? /* @__PURE__ */ import_react58.default.createElement(Stack.V, { position: "relative" }, readOnlyButton, /* @__PURE__ */ import_react58.default.createElement(SelectLabel, { htmlFor: id }, label)) : readOnlyButton;
14762
14697
  }
14763
- return /* @__PURE__ */ import_react59.default.createElement(Select3.Root, { value, onValueChange: onSelect }, /* @__PURE__ */ import_react59.default.createElement(Select3.SelectTrigger, { asChild: true }, /* @__PURE__ */ import_react59.default.createElement(Button, { id, style: style5, className, disabled }, icon && /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react59.default.createElement(Spacer.Horizontal, { inline: true, size: 6 })), /* @__PURE__ */ import_react59.default.createElement("span", { style: flexStyle }, /* @__PURE__ */ import_react59.default.createElement(Select3.Value, { placeholder })), /* @__PURE__ */ import_react59.default.createElement(Spacer.Horizontal, { inline: true, size: 6 }), /* @__PURE__ */ import_react59.default.createElement(import_noya_icons6.DropdownChevronIcon, null))), /* @__PURE__ */ import_react59.default.createElement(Select3.Portal, null, /* @__PURE__ */ import_react59.default.createElement(SelectContent, null, /* @__PURE__ */ import_react59.default.createElement(SelectViewport, null, menuItems.map((menuItem) => {
14698
+ return /* @__PURE__ */ import_react58.default.createElement(Select.Root, { value, onValueChange: onSelect, open }, label ? /* @__PURE__ */ import_react58.default.createElement(Stack.V, { position: "relative", style: flexStyle }, trigger, /* @__PURE__ */ import_react58.default.createElement(SelectLabel, { htmlFor: id }, label)) : trigger, /* @__PURE__ */ import_react58.default.createElement(Select.Portal, null, /* @__PURE__ */ import_react58.default.createElement(SelectContent, null, /* @__PURE__ */ import_react58.default.createElement(SelectViewport, null, menuItems.map((menuItem) => {
14764
14699
  if (typeof menuItem === "string") {
14765
- return /* @__PURE__ */ import_react59.default.createElement(StyledSeparator, null);
14700
+ return /* @__PURE__ */ import_react58.default.createElement(StyledSeparator, null);
14766
14701
  }
14767
14702
  const value2 = menuItem.value ?? "";
14768
- return /* @__PURE__ */ import_react59.default.createElement(SelectItem, { key: value2, value: value2, icon: menuItem.icon }, menuItem.title ?? value2);
14703
+ return /* @__PURE__ */ import_react58.default.createElement(SelectItem, { key: value2, value: value2, icon: menuItem.icon }, menuItem.title ?? value2);
14769
14704
  })))));
14770
14705
  });
14771
- var SelectContent = (0, import_styled_components33.styled)(Select3.Content)(styles.contentStyle);
14772
- var SelectViewport = (0, import_styled_components33.styled)(Select3.Viewport)({});
14773
- var SelectItem = import_react59.default.forwardRef(
14706
+ var SelectContent = (0, import_styled_components32.styled)(Select.Content)(styles.contentStyle);
14707
+ var SelectViewport = (0, import_styled_components32.styled)(Select.Viewport)({});
14708
+ var SelectItem = import_react58.default.forwardRef(
14774
14709
  ({
14775
14710
  children: children2,
14776
14711
  icon,
14777
14712
  ...props
14778
14713
  }, forwardedRef) => {
14779
- return /* @__PURE__ */ import_react59.default.createElement(StyledItem2, { ...props, ref: forwardedRef }, icon && /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react59.default.createElement(Spacer.Horizontal, { size: 8 })), /* @__PURE__ */ import_react59.default.createElement(Select3.ItemText, null, children2));
14714
+ return /* @__PURE__ */ import_react58.default.createElement(StyledItem2, { ...props, ref: forwardedRef }, icon && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react58.default.createElement(Spacer.Horizontal, { size: 8 })), /* @__PURE__ */ import_react58.default.createElement(Select.ItemText, { style: textStyle }, children2));
14780
14715
  }
14781
14716
  );
14782
- var StyledItem2 = (0, import_styled_components33.styled)(Select3.Item)(styles.itemStyle);
14783
- var StyledSeparator = (0, import_styled_components33.styled)(Select3.Separator)(styles.separatorStyle);
14717
+ var StyledItem2 = (0, import_styled_components32.styled)(Select.Item)(styles.itemStyle);
14718
+ var StyledSeparator = (0, import_styled_components32.styled)(Select.Separator)(styles.separatorStyle);
14784
14719
 
14785
14720
  // src/components/Slider.tsx
14786
14721
  var RadixSlider = __toESM(require("@radix-ui/react-slider"));
14787
- var import_react60 = __toESM(require("react"));
14788
- var import_styled_components34 = __toESM(require("styled-components"));
14789
- var StyledSlider = (0, import_styled_components34.default)(RadixSlider.Root)({
14722
+ var import_react59 = __toESM(require("react"));
14723
+ var import_styled_components33 = __toESM(require("styled-components"));
14724
+ var StyledSlider = (0, import_styled_components33.default)(RadixSlider.Root)({
14790
14725
  flex: "1",
14791
14726
  position: "relative",
14792
14727
  display: "flex",
@@ -14795,19 +14730,19 @@ var StyledSlider = (0, import_styled_components34.default)(RadixSlider.Root)({
14795
14730
  touchAction: "none",
14796
14731
  height: "16px"
14797
14732
  });
14798
- var StyledTrack = (0, import_styled_components34.default)(RadixSlider.Track)(({ theme }) => ({
14733
+ var StyledTrack = (0, import_styled_components33.default)(RadixSlider.Track)(({ theme }) => ({
14799
14734
  backgroundColor: theme.colors.divider,
14800
14735
  position: "relative",
14801
14736
  flexGrow: 1,
14802
14737
  height: "2px"
14803
14738
  }));
14804
- var StyledRange = (0, import_styled_components34.default)(RadixSlider.Range)(({ theme }) => ({
14739
+ var StyledRange = (0, import_styled_components33.default)(RadixSlider.Range)(({ theme }) => ({
14805
14740
  position: "absolute",
14806
14741
  backgroundColor: theme.colors.primary,
14807
14742
  borderRadius: "9999px",
14808
14743
  height: "100%"
14809
14744
  }));
14810
- var StyledThumb2 = (0, import_styled_components34.default)(RadixSlider.Thumb)(({ theme }) => ({
14745
+ var StyledThumb2 = (0, import_styled_components33.default)(RadixSlider.Thumb)(({ theme }) => ({
14811
14746
  display: "block",
14812
14747
  width: "12px",
14813
14748
  height: "12px",
@@ -14825,17 +14760,17 @@ var Slider = function Slider2({
14825
14760
  min,
14826
14761
  max
14827
14762
  }) {
14828
- const arrayValue = (0, import_react60.useMemo)(
14763
+ const arrayValue = (0, import_react59.useMemo)(
14829
14764
  () => [Math.min(Math.max(value, min), max)],
14830
14765
  [value, min, max]
14831
14766
  );
14832
- const handleValueChange = (0, import_react60.useCallback)(
14767
+ const handleValueChange = (0, import_react59.useCallback)(
14833
14768
  (arrayValue2) => {
14834
14769
  onValueChange(arrayValue2[0]);
14835
14770
  },
14836
14771
  [onValueChange]
14837
14772
  );
14838
- return /* @__PURE__ */ import_react60.default.createElement(
14773
+ return /* @__PURE__ */ import_react59.default.createElement(
14839
14774
  StyledSlider,
14840
14775
  {
14841
14776
  min,
@@ -14844,16 +14779,16 @@ var Slider = function Slider2({
14844
14779
  value: arrayValue,
14845
14780
  onValueChange: handleValueChange
14846
14781
  },
14847
- /* @__PURE__ */ import_react60.default.createElement(StyledTrack, null, /* @__PURE__ */ import_react60.default.createElement(StyledRange, null)),
14848
- /* @__PURE__ */ import_react60.default.createElement(StyledThumb2, null)
14782
+ /* @__PURE__ */ import_react59.default.createElement(StyledTrack, null, /* @__PURE__ */ import_react59.default.createElement(StyledRange, null)),
14783
+ /* @__PURE__ */ import_react59.default.createElement(StyledThumb2, null)
14849
14784
  );
14850
14785
  };
14851
14786
 
14852
14787
  // src/components/Switch.tsx
14853
14788
  var SwitchPrimitive = __toESM(require("@radix-ui/react-switch"));
14854
- var import_react61 = __toESM(require("react"));
14855
- var import_styled_components35 = __toESM(require("styled-components"));
14856
- var SwitchRoot = (0, import_styled_components35.default)(SwitchPrimitive.Root)(({ theme, $colorScheme }) => ({
14789
+ var import_react60 = __toESM(require("react"));
14790
+ var import_styled_components34 = __toESM(require("styled-components"));
14791
+ var SwitchRoot = (0, import_styled_components34.default)(SwitchPrimitive.Root)(({ theme, $colorScheme }) => ({
14857
14792
  all: "unset",
14858
14793
  width: 32,
14859
14794
  height: 19,
@@ -14870,7 +14805,7 @@ var SwitchRoot = (0, import_styled_components35.default)(SwitchPrimitive.Root)((
14870
14805
  backgroundColor: $colorScheme === "primary" ? theme.colors.primary : $colorScheme === "secondary" ? theme.colors.secondary : void 0
14871
14806
  }
14872
14807
  }));
14873
- var SwitchThumb = (0, import_styled_components35.default)(SwitchPrimitive.Thumb)({
14808
+ var SwitchThumb = (0, import_styled_components34.default)(SwitchPrimitive.Thumb)({
14874
14809
  display: "block",
14875
14810
  width: 15,
14876
14811
  height: 15,
@@ -14887,7 +14822,7 @@ var Switch = function Switch2({
14887
14822
  colorScheme = "normal",
14888
14823
  disabled
14889
14824
  }) {
14890
- return /* @__PURE__ */ import_react61.default.createElement(
14825
+ return /* @__PURE__ */ import_react60.default.createElement(
14891
14826
  SwitchRoot,
14892
14827
  {
14893
14828
  $colorScheme: colorScheme,
@@ -14897,14 +14832,14 @@ var Switch = function Switch2({
14897
14832
  onChange(newValue);
14898
14833
  }
14899
14834
  },
14900
- /* @__PURE__ */ import_react61.default.createElement(SwitchThumb, null)
14835
+ /* @__PURE__ */ import_react60.default.createElement(SwitchThumb, null)
14901
14836
  );
14902
14837
  };
14903
14838
 
14904
14839
  // src/components/TextArea.tsx
14905
- var import_react62 = __toESM(require("react"));
14906
- var import_styled_components36 = __toESM(require("styled-components"));
14907
- var TextAreaElement = import_styled_components36.default.textarea(({ theme }) => ({
14840
+ var import_react61 = __toESM(require("react"));
14841
+ var import_styled_components35 = __toESM(require("styled-components"));
14842
+ var TextAreaElement = import_styled_components35.default.textarea(({ theme }) => ({
14908
14843
  ...theme.textStyles.small,
14909
14844
  color: theme.colors.text,
14910
14845
  background: theme.colors.inputBackground,
@@ -14928,8 +14863,8 @@ var TextAreaElement = import_styled_components36.default.textarea(({ theme }) =>
14928
14863
  resize: "none"
14929
14864
  }));
14930
14865
  var useAutoResize = (value) => {
14931
- const textareaRef = (0, import_react62.useRef)(null);
14932
- (0, import_react62.useEffect)(() => {
14866
+ const textareaRef = (0, import_react61.useRef)(null);
14867
+ (0, import_react61.useEffect)(() => {
14933
14868
  if (!textareaRef.current)
14934
14869
  return;
14935
14870
  textareaRef.current.style.height = "auto";
@@ -14937,25 +14872,25 @@ var useAutoResize = (value) => {
14937
14872
  }, [value]);
14938
14873
  return textareaRef;
14939
14874
  };
14940
- var AutoResizingTextArea = (0, import_react62.memo)(
14941
- (0, import_react62.forwardRef)(function AutoResizingTextArea2({
14875
+ var AutoResizingTextArea = (0, import_react61.memo)(
14876
+ (0, import_react61.forwardRef)(function AutoResizingTextArea2({
14942
14877
  value,
14943
14878
  onChangeText,
14944
14879
  ...rest
14945
14880
  }, forwardedRef) {
14946
14881
  const ref = useAutoResize(value || rest.placeholder || "");
14947
- const handleChange = (0, import_react62.useCallback)(
14882
+ const handleChange = (0, import_react61.useCallback)(
14948
14883
  (event) => onChangeText(event.target.value),
14949
14884
  [onChangeText]
14950
14885
  );
14951
- const handleRef = (0, import_react62.useCallback)(
14886
+ const handleRef = (0, import_react61.useCallback)(
14952
14887
  (value2) => {
14953
14888
  ref.current = value2;
14954
14889
  assignRef(forwardedRef, value2);
14955
14890
  },
14956
14891
  [ref, forwardedRef]
14957
14892
  );
14958
- return /* @__PURE__ */ import_react62.default.createElement(
14893
+ return /* @__PURE__ */ import_react61.default.createElement(
14959
14894
  TextAreaElement,
14960
14895
  {
14961
14896
  ref: handleRef,
@@ -14968,57 +14903,57 @@ var AutoResizingTextArea = (0, import_react62.memo)(
14968
14903
  );
14969
14904
 
14970
14905
  // src/components/TreeView.tsx
14971
- var import_react63 = __toESM(require("react"));
14972
- var TreeRow = (0, import_react63.forwardRef)(function TreeRow2({
14906
+ var import_react62 = __toESM(require("react"));
14907
+ var TreeRow = (0, import_react62.forwardRef)(function TreeRow2({
14973
14908
  icon,
14974
14909
  expanded,
14975
14910
  onClickChevron,
14976
14911
  children: children2,
14977
14912
  ...rest
14978
14913
  }, forwardedRef) {
14979
- const { expandable } = (0, import_react63.useContext)(ListView.RowContext);
14980
- const handleClickChevron = (0, import_react63.useCallback)(
14914
+ const { expandable } = (0, import_react62.useContext)(ListView.RowContext);
14915
+ const handleClickChevron = (0, import_react62.useCallback)(
14981
14916
  (event) => {
14982
14917
  event.stopPropagation();
14983
14918
  onClickChevron?.({ altKey: event.altKey });
14984
14919
  },
14985
14920
  [onClickChevron]
14986
14921
  );
14987
- return /* @__PURE__ */ import_react63.default.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && /* @__PURE__ */ import_react63.default.createElement(import_react63.default.Fragment, null, expanded === void 0 ? /* @__PURE__ */ import_react63.default.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ import_react63.default.createElement(
14922
+ return /* @__PURE__ */ import_react62.default.createElement(ListView.Row, { ref: forwardedRef, ...rest }, expandable && /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, expanded === void 0 ? /* @__PURE__ */ import_react62.default.createElement(Spacer.Horizontal, { size: 19 }) : /* @__PURE__ */ import_react62.default.createElement(
14988
14923
  IconButton,
14989
14924
  {
14990
14925
  iconName: expanded ? "ChevronDownIcon2" : "ChevronRightIcon2",
14991
14926
  onClick: handleClickChevron,
14992
14927
  selected: rest.selected
14993
14928
  }
14994
- ), /* @__PURE__ */ import_react63.default.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ import_react63.default.createElement(import_react63.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react63.default.createElement(Spacer.Horizontal, { size: 10 })), children2);
14929
+ ), /* @__PURE__ */ import_react62.default.createElement(Spacer.Horizontal, { size: 6 })), icon && /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, renderIcon(icon), /* @__PURE__ */ import_react62.default.createElement(Spacer.Horizontal, { size: 10 })), children2);
14995
14930
  });
14996
14931
  var TreeView;
14997
14932
  ((TreeView2) => {
14998
14933
  TreeView2.Root = ListView.Root;
14999
14934
  TreeView2.RowTitle = ListView.RowTitle;
15000
14935
  TreeView2.EditableRowTitle = ListView.EditableRowTitle;
15001
- TreeView2.Row = (0, import_react63.memo)(TreeRow);
14936
+ TreeView2.Row = (0, import_react62.memo)(TreeRow);
15002
14937
  })(TreeView || (TreeView = {}));
15003
14938
 
15004
14939
  // src/components/WorkspaceLayout.tsx
15005
14940
  var import_noya_keymap5 = require("@noya-app/noya-keymap");
15006
- var import_react66 = __toESM(require("react"));
14941
+ var import_react65 = __toESM(require("react"));
15007
14942
  var import_react_resizable_panels = require("react-resizable-panels");
15008
14943
 
15009
14944
  // src/hooks/usePreservePanelSize.tsx
15010
- var import_react65 = require("react");
14945
+ var import_react64 = require("react");
15011
14946
 
15012
14947
  // src/hooks/useWindowSize.tsx
15013
- var import_react64 = require("react");
14948
+ var import_react63 = require("react");
15014
14949
  function useWindowSize() {
15015
- const [size3, setSize] = (0, import_react64.useState)(
14950
+ const [size3, setSize] = (0, import_react63.useState)(
15016
14951
  typeof window === "undefined" ? { width: 0, height: 0 } : {
15017
14952
  width: window.innerWidth,
15018
14953
  height: window.innerHeight
15019
14954
  }
15020
14955
  );
15021
- (0, import_react64.useEffect)(() => {
14956
+ (0, import_react63.useEffect)(() => {
15022
14957
  const handleResize = () => setSize({
15023
14958
  width: window.innerWidth,
15024
14959
  height: window.innerHeight
@@ -15036,8 +14971,8 @@ var RIGHT_SIDEBAR_ID = "editor-right-sidebar";
15036
14971
  var CONTENT_AREA_ID = "editor-content-area";
15037
14972
  function usePreservePanelSize(panelGroupRef, setPanelLayoutState) {
15038
14973
  const windowSize = useWindowSize();
15039
- const layoutRef = (0, import_react65.useRef)();
15040
- (0, import_react65.useLayoutEffect)(() => {
14974
+ const layoutRef = (0, import_react64.useRef)();
14975
+ (0, import_react64.useLayoutEffect)(() => {
15041
14976
  const panelGroup = document.querySelector(
15042
14977
  `[data-panel-group-id="${EDITOR_PANEL_GROUP_ID}"]`
15043
14978
  );
@@ -15080,7 +15015,7 @@ function usePreservePanelSize(panelGroupRef, setPanelLayoutState) {
15080
15015
  panelGroupObserver.disconnect();
15081
15016
  };
15082
15017
  }, [panelGroupRef, setPanelLayoutState]);
15083
- (0, import_react65.useLayoutEffect)(() => {
15018
+ (0, import_react64.useLayoutEffect)(() => {
15084
15019
  if (!layoutRef.current)
15085
15020
  return;
15086
15021
  const {
@@ -15140,7 +15075,7 @@ function usePreservePanelSize(panelGroupRef, setPanelLayoutState) {
15140
15075
  }
15141
15076
 
15142
15077
  // src/components/WorkspaceLayout.tsx
15143
- var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function WorkspaceLayoutWithTheme2({
15078
+ var WorkspaceLayoutWithTheme = (0, import_react65.forwardRef)(function WorkspaceLayoutWithTheme2({
15144
15079
  autoSavePrefix,
15145
15080
  leftSidebarContent: leftPanelContent,
15146
15081
  children: centerPanelContent,
@@ -15165,12 +15100,20 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15165
15100
  const rightSidebarPercentage = getPercentage(rightSidebarInitialSize);
15166
15101
  const leftSidebarMinPercentage = leftSidebarMinSize !== void 0 ? getPercentage(leftSidebarMinSize) : void 0;
15167
15102
  const rightSidebarMinPercentage = rightSidebarMinSize !== void 0 ? getPercentage(rightSidebarMinSize) : void 0;
15168
- const panelGroupRef = (0, import_react66.useRef)(null);
15169
- const leftSidebarRef = (0, import_react66.useRef)(null);
15170
- const rightSidebarRef = (0, import_react66.useRef)(null);
15171
- usePreservePanelSize(panelGroupRef, onChangeLayoutState);
15103
+ const panelGroupRef = (0, import_react65.useRef)(null);
15104
+ const leftSidebarRef = (0, import_react65.useRef)(null);
15105
+ const rightSidebarRef = (0, import_react65.useRef)(null);
15106
+ const [internalLayoutState, setInternalLayoutState] = (0, import_react65.useState)(null);
15107
+ const handleChangeLayoutState = (0, import_react65.useCallback)(
15108
+ (state) => {
15109
+ setInternalLayoutState(state);
15110
+ onChangeLayoutState?.(state);
15111
+ },
15112
+ [onChangeLayoutState]
15113
+ );
15114
+ usePreservePanelSize(panelGroupRef, handleChangeLayoutState);
15172
15115
  const theme = useDesignSystemTheme();
15173
- (0, import_react66.useImperativeHandle)(forwardedRef, () => ({
15116
+ (0, import_react65.useImperativeHandle)(forwardedRef, () => ({
15174
15117
  setLeftSidebarExpanded: (expanded) => {
15175
15118
  if (expanded) {
15176
15119
  leftSidebarRef.current?.expand();
@@ -15227,7 +15170,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15227
15170
  }
15228
15171
  });
15229
15172
  const centerPanelPercentage = 100 - (leftPanelContent ? leftSidebarPercentage : 0) - (rightPanelContent ? rightSidebarPercentage : 0);
15230
- return /* @__PURE__ */ import_react66.default.createElement(
15173
+ return /* @__PURE__ */ import_react65.default.createElement(
15231
15174
  "div",
15232
15175
  {
15233
15176
  id,
@@ -15239,7 +15182,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15239
15182
  ...style5
15240
15183
  }
15241
15184
  },
15242
- /* @__PURE__ */ import_react66.default.createElement(
15185
+ /* @__PURE__ */ import_react65.default.createElement(
15243
15186
  import_react_resizable_panels.PanelGroup,
15244
15187
  {
15245
15188
  ref: panelGroupRef,
@@ -15248,7 +15191,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15248
15191
  autoSaveId: autoSavePrefix ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}` : void 0,
15249
15192
  style: { flex: "1" }
15250
15193
  },
15251
- hasLeftSidebar && /* @__PURE__ */ import_react66.default.createElement(import_react66.default.Fragment, null, /* @__PURE__ */ import_react66.default.createElement(
15194
+ hasLeftSidebar && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement(
15252
15195
  import_react_resizable_panels.Panel,
15253
15196
  {
15254
15197
  id: LEFT_SIDEBAR_ID,
@@ -15264,8 +15207,8 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15264
15207
  position: "relative"
15265
15208
  }
15266
15209
  },
15267
- leftPanelContent
15268
- ), /* @__PURE__ */ import_react66.default.createElement(
15210
+ internalLayoutState?.leftSidebarCollapsed ? null : leftPanelContent
15211
+ ), /* @__PURE__ */ import_react65.default.createElement(
15269
15212
  import_react_resizable_panels.PanelResizeHandle,
15270
15213
  {
15271
15214
  style: {
@@ -15276,7 +15219,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15276
15219
  }
15277
15220
  }
15278
15221
  )),
15279
- /* @__PURE__ */ import_react66.default.createElement(
15222
+ /* @__PURE__ */ import_react65.default.createElement(
15280
15223
  import_react_resizable_panels.Panel,
15281
15224
  {
15282
15225
  id: CONTENT_AREA_ID,
@@ -15291,7 +15234,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15291
15234
  },
15292
15235
  centerPanelContent
15293
15236
  ),
15294
- hasRightSidebar && /* @__PURE__ */ import_react66.default.createElement(import_react66.default.Fragment, null, /* @__PURE__ */ import_react66.default.createElement(
15237
+ hasRightSidebar && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement(
15295
15238
  import_react_resizable_panels.PanelResizeHandle,
15296
15239
  {
15297
15240
  style: {
@@ -15301,7 +15244,7 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15301
15244
  backgroundColor: theme.colors.divider
15302
15245
  }
15303
15246
  }
15304
- ), /* @__PURE__ */ import_react66.default.createElement(
15247
+ ), /* @__PURE__ */ import_react65.default.createElement(
15305
15248
  import_react_resizable_panels.Panel,
15306
15249
  {
15307
15250
  id: RIGHT_SIDEBAR_ID,
@@ -15316,13 +15259,13 @@ var WorkspaceLayoutWithTheme = (0, import_react66.forwardRef)(function Workspace
15316
15259
  position: "relative"
15317
15260
  }
15318
15261
  },
15319
- rightPanelContent
15262
+ internalLayoutState?.rightSidebarCollapsed ? null : rightPanelContent
15320
15263
  ))
15321
15264
  )
15322
15265
  );
15323
15266
  });
15324
- var WorkspaceLayout = (0, import_react66.forwardRef)(function WorkspaceLayout2(props, forwardedRef) {
15325
- return /* @__PURE__ */ import_react66.default.createElement(DesignSystemThemeProvider, null, /* @__PURE__ */ import_react66.default.createElement(WorkspaceLayoutWithTheme, { ...props, ref: forwardedRef }));
15267
+ var WorkspaceLayout = (0, import_react65.forwardRef)(function WorkspaceLayout2(props, forwardedRef) {
15268
+ return /* @__PURE__ */ import_react65.default.createElement(DesignSystemThemeProvider, null, /* @__PURE__ */ import_react65.default.createElement(WorkspaceLayoutWithTheme, { ...props, ref: forwardedRef }));
15326
15269
  });
15327
15270
 
15328
15271
  // src/hooks/usePlatform.ts
@@ -15366,12 +15309,12 @@ var SUPPORTED_CANVAS_UPLOAD_TYPES = [
15366
15309
  ];
15367
15310
 
15368
15311
  // src/components/DimensionInput.tsx
15369
- var import_noya_utils11 = require("@noya-app/noya-utils");
15370
- var import_react67 = __toESM(require("react"));
15312
+ var import_noya_utils10 = require("@noya-app/noya-utils");
15313
+ var import_react66 = __toESM(require("react"));
15371
15314
  function getNewValue(value, mode, delta) {
15372
15315
  return delta === void 0 ? value : mode === "replace" ? delta : value + delta;
15373
15316
  }
15374
- var DimensionInput = (0, import_react67.memo)(function DimensionInput2({
15317
+ var DimensionInput = (0, import_react66.memo)(function DimensionInput2({
15375
15318
  id,
15376
15319
  value,
15377
15320
  onSetValue,
@@ -15381,24 +15324,24 @@ var DimensionInput = (0, import_react67.memo)(function DimensionInput2({
15381
15324
  disabled,
15382
15325
  trigger = "submit"
15383
15326
  }) {
15384
- const handleNudgeValue = (0, import_react67.useCallback)(
15327
+ const handleNudgeValue = (0, import_react66.useCallback)(
15385
15328
  (value2) => onSetValue(value2, "adjust"),
15386
15329
  [onSetValue]
15387
15330
  );
15388
- const handleSetValue = (0, import_react67.useCallback)(
15331
+ const handleSetValue = (0, import_react66.useCallback)(
15389
15332
  (value2) => onSetValue(value2, "replace"),
15390
15333
  [onSetValue]
15391
15334
  );
15392
- return /* @__PURE__ */ import_react67.default.createElement(InputField.Root, { id, width: size3 }, /* @__PURE__ */ import_react67.default.createElement(
15335
+ return /* @__PURE__ */ import_react66.default.createElement(InputField.Root, { id, width: size3 }, /* @__PURE__ */ import_react66.default.createElement(
15393
15336
  InputField.NumberInput,
15394
15337
  {
15395
- value: value === void 0 ? value : (0, import_noya_utils11.round)(value, 2),
15338
+ value: value === void 0 ? value : (0, import_noya_utils10.round)(value, 2),
15396
15339
  placeholder: value === void 0 ? placeholder : void 0,
15397
15340
  onNudge: handleNudgeValue,
15398
15341
  disabled,
15399
15342
  ...trigger === "change" ? { onChange: handleSetValue } : { onSubmit: handleSetValue }
15400
15343
  }
15401
- ), label && /* @__PURE__ */ import_react67.default.createElement(InputField.Label, null, label));
15344
+ ), label && /* @__PURE__ */ import_react66.default.createElement(InputField.Label, null, label));
15402
15345
  });
15403
15346
 
15404
15347
  // src/components/InspectorPrimitives.tsx
@@ -15417,20 +15360,20 @@ __export(InspectorPrimitives_exports, {
15417
15360
  Title: () => Title3,
15418
15361
  VerticalSeparator: () => VerticalSeparator
15419
15362
  });
15420
- var import_react68 = __toESM(require("react"));
15421
- var import_styled_components37 = __toESM(require("styled-components"));
15422
- var Section2 = import_styled_components37.default.div(({ theme, $padding = "10px", $gap }) => ({
15363
+ var import_react67 = __toESM(require("react"));
15364
+ var import_styled_components36 = __toESM(require("styled-components"));
15365
+ var Section2 = import_styled_components36.default.div(({ theme, $padding = "10px", $gap }) => ({
15423
15366
  flex: "0 0 auto",
15424
15367
  display: "flex",
15425
15368
  flexDirection: "column",
15426
15369
  padding: $padding,
15427
15370
  gap: $gap
15428
15371
  }));
15429
- var SectionHeader = import_styled_components37.default.div(({ theme }) => ({
15372
+ var SectionHeader = import_styled_components36.default.div(({ theme }) => ({
15430
15373
  display: "flex",
15431
15374
  alignItems: "center"
15432
15375
  }));
15433
- var Title3 = import_styled_components37.default.div(({ theme, $textStyle }) => ({
15376
+ var Title3 = import_styled_components36.default.div(({ theme, $textStyle }) => ({
15434
15377
  display: "flex",
15435
15378
  flexDirection: "row",
15436
15379
  userSelect: "none",
@@ -15443,7 +15386,7 @@ var Title3 = import_styled_components37.default.div(({ theme, $textStyle }) => (
15443
15386
  fontWeight: "bold"
15444
15387
  }
15445
15388
  }));
15446
- var Row2 = import_styled_components37.default.div(
15389
+ var Row2 = import_styled_components36.default.div(
15447
15390
  ({ theme, $gap }) => ({
15448
15391
  flex: "1",
15449
15392
  display: "flex",
@@ -15452,26 +15395,26 @@ var Row2 = import_styled_components37.default.div(
15452
15395
  gap: $gap
15453
15396
  })
15454
15397
  );
15455
- var Column2 = import_styled_components37.default.div(({ theme }) => ({
15398
+ var Column2 = import_styled_components36.default.div(({ theme }) => ({
15456
15399
  flex: "1",
15457
15400
  display: "flex",
15458
15401
  flexDirection: "column",
15459
15402
  gap: "4px"
15460
15403
  }));
15461
- var Checkbox = import_styled_components37.default.input(({ theme }) => ({
15404
+ var Checkbox = import_styled_components36.default.input(({ theme }) => ({
15462
15405
  margin: 0
15463
15406
  }));
15464
- var Text3 = import_styled_components37.default.span(({ theme }) => ({
15407
+ var Text3 = import_styled_components36.default.span(({ theme }) => ({
15465
15408
  ...theme.textStyles.small
15466
15409
  }));
15467
- var VerticalSeparator = () => /* @__PURE__ */ import_react68.default.createElement(Spacer.Vertical, { size: (0, import_styled_components37.useTheme)().sizes.inspector.verticalSeparator });
15468
- var HorizontalSeparator = () => /* @__PURE__ */ import_react68.default.createElement(Spacer.Horizontal, { size: (0, import_styled_components37.useTheme)().sizes.inspector.horizontalSeparator });
15469
- var SliderRowLabel = import_styled_components37.default.span(({ theme }) => ({
15410
+ var VerticalSeparator = () => /* @__PURE__ */ import_react67.default.createElement(Spacer.Vertical, { size: (0, import_styled_components36.useTheme)().sizes.inspector.verticalSeparator });
15411
+ var HorizontalSeparator = () => /* @__PURE__ */ import_react67.default.createElement(Spacer.Horizontal, { size: (0, import_styled_components36.useTheme)().sizes.inspector.horizontalSeparator });
15412
+ var SliderRowLabel = import_styled_components36.default.span(({ theme }) => ({
15470
15413
  ...theme.textStyles.small,
15471
15414
  color: theme.colors.textMuted,
15472
15415
  marginBottom: "-6px"
15473
15416
  }));
15474
- var RowLabel = import_styled_components37.default.span(({ theme, $textStyle }) => ({
15417
+ var RowLabel = import_styled_components36.default.span(({ theme, $textStyle }) => ({
15475
15418
  // marginBottom: '6px',
15476
15419
  display: "flex",
15477
15420
  ...$textStyle ? {
@@ -15485,7 +15428,7 @@ var RowLabel = import_styled_components37.default.span(({ theme, $textStyle }) =
15485
15428
  // Button height
15486
15429
  alignItems: "center"
15487
15430
  }));
15488
- var LabeledRow = (0, import_react68.memo)(function LabeledRow2({
15431
+ var LabeledRow = (0, import_react67.memo)(function LabeledRow2({
15489
15432
  id,
15490
15433
  children: children2,
15491
15434
  label,
@@ -15493,13 +15436,13 @@ var LabeledRow = (0, import_react68.memo)(function LabeledRow2({
15493
15436
  gap,
15494
15437
  right
15495
15438
  }) {
15496
- return /* @__PURE__ */ import_react68.default.createElement(Row2, { id }, /* @__PURE__ */ import_react68.default.createElement(Column2, null, /* @__PURE__ */ import_react68.default.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ import_react68.default.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ import_react68.default.createElement(Row2, { $gap: gap }, children2)));
15439
+ return /* @__PURE__ */ import_react67.default.createElement(Row2, { id }, /* @__PURE__ */ import_react67.default.createElement(Column2, null, /* @__PURE__ */ import_react67.default.createElement(RowLabel, { $textStyle: labelTextStyle }, label, right && /* @__PURE__ */ import_react67.default.createElement(Spacer.Horizontal, null), right), /* @__PURE__ */ import_react67.default.createElement(Row2, { $gap: gap }, children2)));
15497
15440
  });
15498
- var LabeledSliderRow = (0, import_react68.memo)(function LabeledRow3({
15441
+ var LabeledSliderRow = (0, import_react67.memo)(function LabeledRow3({
15499
15442
  children: children2,
15500
15443
  label
15501
15444
  }) {
15502
- return /* @__PURE__ */ import_react68.default.createElement(Row2, null, /* @__PURE__ */ import_react68.default.createElement(Column2, null, /* @__PURE__ */ import_react68.default.createElement(SliderRowLabel, null, label), /* @__PURE__ */ import_react68.default.createElement(Row2, null, children2)));
15445
+ return /* @__PURE__ */ import_react67.default.createElement(Row2, null, /* @__PURE__ */ import_react67.default.createElement(Column2, null, /* @__PURE__ */ import_react67.default.createElement(SliderRowLabel, null, label), /* @__PURE__ */ import_react67.default.createElement(Row2, null, children2)));
15503
15446
  });
15504
15447
  // Annotate the CommonJS export names for ESM import in node:
15505
15448
  0 && (module.exports = {
@@ -15510,6 +15453,7 @@ var LabeledSliderRow = (0, import_react68.memo)(function LabeledRow3({
15510
15453
  Body,
15511
15454
  Button,
15512
15455
  ButtonElement,
15456
+ CONTENT_AREA_ID,
15513
15457
  Chip,
15514
15458
  CloseButtonContainer,
15515
15459
  CompletionMenu,
@@ -15524,6 +15468,7 @@ var LabeledSliderRow = (0, import_react68.memo)(function LabeledRow3({
15524
15468
  DividerVertical,
15525
15469
  DraggableMenuButton,
15526
15470
  DropdownMenu,
15471
+ EDITOR_PANEL_GROUP_ID,
15527
15472
  FillInputField,
15528
15473
  FillPreviewBackground,
15529
15474
  FloatingWindow,
@@ -15547,21 +15492,21 @@ var LabeledSliderRow = (0, import_react68.memo)(function LabeledRow3({
15547
15492
  InspectorPrimitives,
15548
15493
  Italic,
15549
15494
  KeyboardShortcut,
15495
+ LEFT_SIDEBAR_ID,
15550
15496
  Label,
15551
15497
  LabeledElementView,
15552
15498
  ListView,
15553
15499
  PatternPreviewBackground,
15554
15500
  Popover,
15555
15501
  Progress,
15502
+ RIGHT_SIDEBAR_ID,
15556
15503
  RadioGroup,
15557
15504
  Row,
15558
15505
  SEPARATOR_ITEM,
15559
15506
  SUPPORTED_CANVAS_UPLOAD_TYPES,
15560
15507
  SUPPORTED_IMAGE_UPLOAD_TYPES,
15561
15508
  ScrollArea,
15562
- Select,
15563
15509
  SelectMenu,
15564
- SelectOption,
15565
15510
  Slider,
15566
15511
  Small,
15567
15512
  Sortable,
@@ -15604,6 +15549,7 @@ var LabeledSliderRow = (0, import_react68.memo)(function LabeledRow3({
15604
15549
  useOpenInputDialog,
15605
15550
  usePlatform,
15606
15551
  usePlatformModKey,
15552
+ usePreservePanelSize,
15607
15553
  withSeparatorElements
15608
15554
  });
15609
15555
  /*! Bundled license information: