@gallop.software/studio 0.1.64 → 0.1.66

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.
@@ -447,22 +447,54 @@ var styles2 = {
447
447
  folderList: css2`
448
448
  display: flex;
449
449
  flex-direction: column;
450
- gap: 2px;
450
+ gap: 0;
451
451
  `,
452
452
  folderItem: css2`
453
453
  display: flex;
454
454
  align-items: center;
455
455
  gap: 8px;
456
- padding: 10px 12px;
456
+ padding: 8px 12px;
457
457
  border-radius: 6px;
458
458
  cursor: pointer;
459
459
  transition: all 0.15s ease;
460
460
  border: 1px solid transparent;
461
+ position: relative;
461
462
 
462
463
  &:hover {
463
464
  background-color: ${colors.surfaceHover};
464
465
  }
465
466
  `,
467
+ treeIndent: css2`
468
+ display: flex;
469
+ align-items: center;
470
+ height: 100%;
471
+ `,
472
+ treeLine: css2`
473
+ width: 16px;
474
+ height: 100%;
475
+ position: relative;
476
+ flex-shrink: 0;
477
+
478
+ &::before {
479
+ content: '';
480
+ position: absolute;
481
+ left: 8px;
482
+ top: 0;
483
+ bottom: 50%;
484
+ width: 0;
485
+ border-left: 1px dashed ${colors.border};
486
+ }
487
+
488
+ &::after {
489
+ content: '';
490
+ position: absolute;
491
+ left: 8px;
492
+ top: 50%;
493
+ width: 8px;
494
+ height: 0;
495
+ border-top: 1px dashed ${colors.border};
496
+ }
497
+ `,
466
498
  folderItemSelected: css2`
467
499
  background-color: ${colors.primaryLight};
468
500
  border-color: ${colors.primary};
@@ -607,9 +639,10 @@ function StudioFolderPicker({ selectedItems, currentPath, onMove, onCancel }) {
607
639
  selectedFolder === folder.path && styles2.folderItemSelected,
608
640
  disabled && styles2.folderItemDisabled
609
641
  ],
610
- style: { paddingLeft: 12 + folder.depth * 16 },
642
+ style: { paddingLeft: 12 },
611
643
  onClick: () => !disabled && setSelectedFolder(folder.path),
612
644
  children: [
645
+ folder.depth > 0 && /* @__PURE__ */ jsx2("div", { css: styles2.treeIndent, children: Array.from({ length: folder.depth }).map((_, i) => /* @__PURE__ */ jsx2("div", { css: styles2.treeLine }, i)) }),
613
646
  /* @__PURE__ */ jsx2("svg", { css: styles2.folderIcon, fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { d: "M10 4H4a2 2 0 00-2 2v12a2 2 0 002 2h16a2 2 0 002-2V8a2 2 0 00-2-2h-8l-2-2z" }) }),
614
647
  /* @__PURE__ */ jsxs2("span", { css: styles2.folderName, children: [
615
648
  folder.name,
@@ -3469,6 +3502,44 @@ var styles8 = {
3469
3502
  margin: 0;
3470
3503
  letter-spacing: -0.02em;
3471
3504
  `,
3505
+ headerLeft: css8`
3506
+ display: flex;
3507
+ align-items: center;
3508
+ gap: 12px;
3509
+ min-width: 0;
3510
+ flex: 1;
3511
+ `,
3512
+ breadcrumbs: css8`
3513
+ display: flex;
3514
+ align-items: center;
3515
+ gap: 6px;
3516
+ font-size: ${fontSize.base};
3517
+ color: ${colors.textSecondary};
3518
+ min-width: 0;
3519
+ overflow: hidden;
3520
+ `,
3521
+ breadcrumbSeparator: css8`
3522
+ color: ${colors.border};
3523
+ flex-shrink: 0;
3524
+ `,
3525
+ breadcrumbItem: css8`
3526
+ color: ${colors.textSecondary};
3527
+ text-decoration: none;
3528
+ cursor: pointer;
3529
+ transition: color 0.15s ease;
3530
+ white-space: nowrap;
3531
+
3532
+ &:hover {
3533
+ color: ${colors.primary};
3534
+ }
3535
+ `,
3536
+ breadcrumbCurrent: css8`
3537
+ color: ${colors.text};
3538
+ font-weight: 500;
3539
+ white-space: nowrap;
3540
+ overflow: hidden;
3541
+ text-overflow: ellipsis;
3542
+ `,
3472
3543
  headerActions: css8`
3473
3544
  display: flex;
3474
3545
  align-items: center;
@@ -3685,7 +3756,10 @@ function StudioUI({ onClose, isVisible = true }) {
3685
3756
  };
3686
3757
  return /* @__PURE__ */ jsx8(StudioContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs8("div", { css: styles8.container, children: [
3687
3758
  /* @__PURE__ */ jsxs8("div", { css: styles8.header, children: [
3688
- /* @__PURE__ */ jsx8("h1", { css: styles8.title, children: "Studio" }),
3759
+ /* @__PURE__ */ jsxs8("div", { css: styles8.headerLeft, children: [
3760
+ /* @__PURE__ */ jsx8("h1", { css: styles8.title, children: "Studio" }),
3761
+ /* @__PURE__ */ jsx8(Breadcrumbs, { currentPath, onNavigate: setCurrentPath })
3762
+ ] }),
3689
3763
  /* @__PURE__ */ jsxs8("div", { css: styles8.headerActions, children: [
3690
3764
  /* @__PURE__ */ jsx8(StudioSettings, {}),
3691
3765
  /* @__PURE__ */ jsx8(
@@ -3719,6 +3793,24 @@ function StudioUI({ onClose, isVisible = true }) {
3719
3793
  focusedItem && /* @__PURE__ */ jsx8(StudioDetailView, {})
3720
3794
  ] }) });
3721
3795
  }
3796
+ function Breadcrumbs({ currentPath, onNavigate }) {
3797
+ const parts = currentPath.split("/").filter(Boolean);
3798
+ const breadcrumbs = parts.map((part, index) => ({
3799
+ name: part,
3800
+ path: parts.slice(0, index + 1).join("/")
3801
+ }));
3802
+ return /* @__PURE__ */ jsx8("div", { css: styles8.breadcrumbs, children: breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs8("span", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
3803
+ index > 0 && /* @__PURE__ */ jsx8("span", { css: styles8.breadcrumbSeparator, children: "/" }),
3804
+ index === breadcrumbs.length - 1 ? /* @__PURE__ */ jsx8("span", { css: styles8.breadcrumbCurrent, children: crumb.name }) : /* @__PURE__ */ jsx8(
3805
+ "span",
3806
+ {
3807
+ css: styles8.breadcrumbItem,
3808
+ onClick: () => onNavigate(crumb.path),
3809
+ children: crumb.name
3810
+ }
3811
+ )
3812
+ ] }, crumb.path)) });
3813
+ }
3722
3814
  function CloseIcon() {
3723
3815
  return /* @__PURE__ */ jsxs8(
3724
3816
  "svg",
@@ -3743,4 +3835,4 @@ export {
3743
3835
  StudioUI,
3744
3836
  StudioUI_default as default
3745
3837
  };
3746
- //# sourceMappingURL=StudioUI-57YOECIG.mjs.map
3838
+ //# sourceMappingURL=StudioUI-BFPT2G4P.mjs.map