@tutti-os/workspace-issue-manager 0.0.41 → 0.0.42

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.
@@ -101,6 +101,9 @@ var issueManagerTopicDeleteHub = createIssueManagerKeyedEventHub({
101
101
  var issueManagerTopicUpdateHub = createIssueManagerKeyedEventHub({
102
102
  getKey: issueManagerNodeScopeKey
103
103
  });
104
+ var issueManagerIssueCreateRequestHub = createIssueManagerKeyedEventHub({
105
+ getKey: issueManagerNodeScopeKey
106
+ });
104
107
  function resolveIssueManagerTopicHeaderState(input) {
105
108
  return issueManagerTopicHeaderStateHub.get(issueManagerNodeScopeKey(input)) ?? {
106
109
  activeTopicId: input.activeTopicId,
@@ -137,6 +140,9 @@ function dispatchIssueManagerTopicDelete(input) {
137
140
  function dispatchIssueManagerTopicUpdate(input) {
138
141
  issueManagerTopicUpdateHub.publish(input);
139
142
  }
143
+ function dispatchIssueManagerIssueCreateRequest(input) {
144
+ issueManagerIssueCreateRequestHub.publish(input);
145
+ }
140
146
  function useIssueManagerTaskListCollapsedSync(input) {
141
147
  const onCollapsedChange = useEffectEvent(input.onCollapsedChange);
142
148
  useEffect(() => {
@@ -231,6 +237,18 @@ function useIssueManagerTopicHeaderCommandSync(input) {
231
237
  onUpdateTopic
232
238
  ]);
233
239
  }
240
+ function useIssueManagerIssueCreateRequestSync(input) {
241
+ const onCreateIssue = useEffectEvent(input.onCreateIssue);
242
+ useEffect(() => {
243
+ const handleCreateIssueRequest = () => {
244
+ onCreateIssue();
245
+ };
246
+ return issueManagerIssueCreateRequestHub.subscribe(
247
+ issueManagerNodeScopeKey(input),
248
+ handleCreateIssueRequest
249
+ );
250
+ }, [input.nodeId, input.workspaceId, onCreateIssue]);
251
+ }
234
252
  function useIssueManagerNodeHeaderView(input) {
235
253
  const [manualCollapsed, setManualCollapsed] = useState(
236
254
  input.isSidebarCollapsed
@@ -2277,7 +2295,16 @@ import {
2277
2295
  useEffect as useEffect10,
2278
2296
  useRef as useRef8
2279
2297
  } from "react";
2280
- import { Button as Button13, PanelIcon, cn as cn13 } from "@tutti-os/ui-system";
2298
+ import {
2299
+ Button as Button13,
2300
+ FileCreateIcon as FileCreateIcon6,
2301
+ PanelIcon,
2302
+ Tooltip as Tooltip2,
2303
+ TooltipContent as TooltipContent2,
2304
+ TooltipProvider,
2305
+ TooltipTrigger as TooltipTrigger2,
2306
+ cn as cn13
2307
+ } from "@tutti-os/ui-system";
2281
2308
  import {
2282
2309
  ReferenceSourcePicker,
2283
2310
  WorkspaceFileReferencePicker
@@ -2289,7 +2316,7 @@ import {
2289
2316
  useRef as useRef7,
2290
2317
  useState as useState10
2291
2318
  } from "react";
2292
- import { Button as Button11, FileCreateIcon as FileCreateIcon3, cn as cn11 } from "@tutti-os/ui-system";
2319
+ import { Button as Button11, FileCreateIcon as FileCreateIcon4, cn as cn11 } from "@tutti-os/ui-system";
2293
2320
 
2294
2321
  // src/ui/internal/shell/IssueManagerPanels.tsx
2295
2322
  import { useState as useState7 } from "react";
@@ -4241,12 +4268,12 @@ import {
4241
4268
  Badge as Badge4,
4242
4269
  Button as Button8,
4243
4270
  CloseIcon,
4271
+ FileCreateIcon as FileCreateIcon3,
4244
4272
  Input as Input2,
4245
4273
  ScrollArea as ScrollArea3,
4246
4274
  UnderlineTabs,
4247
4275
  cn as cn8
4248
4276
  } from "@tutti-os/ui-system";
4249
- import { CreateChatIcon } from "@tutti-os/ui-system/icons";
4250
4277
 
4251
4278
  // src/ui/internal/shell/IssueManagerShellState.ts
4252
4279
  var issueManagerStatusFilters = [
@@ -4398,7 +4425,7 @@ function IssueManagerSidebarHeader({
4398
4425
  variant: "secondary",
4399
4426
  onClick: onCreateIssue,
4400
4427
  children: [
4401
- /* @__PURE__ */ jsx13(CreateChatIcon, { "aria-hidden": "true" }),
4428
+ /* @__PURE__ */ jsx13(FileCreateIcon3, { "aria-hidden": "true" }),
4402
4429
  /* @__PURE__ */ jsx13("span", { children: copy.t("actions.createIssue") })
4403
4430
  ]
4404
4431
  }
@@ -5937,7 +5964,7 @@ function IssueManagerShellEmptyState({
5937
5964
  type: "button",
5938
5965
  onClick: () => controller.setIssueEditorMode("create"),
5939
5966
  children: [
5940
- /* @__PURE__ */ jsx18(FileCreateIcon3, { size: 16 }),
5967
+ /* @__PURE__ */ jsx18(FileCreateIcon4, { size: 16 }),
5941
5968
  controller.copy.t("actions.createIssue")
5942
5969
  ]
5943
5970
  }
@@ -5965,7 +5992,7 @@ import {
5965
5992
  DropdownMenuSeparator,
5966
5993
  DropdownMenuTrigger as DropdownMenuTrigger2,
5967
5994
  EditIcon,
5968
- FileCreateIcon as FileCreateIcon4,
5995
+ FileCreateIcon as FileCreateIcon5,
5969
5996
  Input as Input3,
5970
5997
  MoreHorizontalIcon,
5971
5998
  PinFilledIcon,
@@ -6142,7 +6169,7 @@ function IssueManagerTopicSelector({
6142
6169
  });
6143
6170
  },
6144
6171
  children: [
6145
- /* @__PURE__ */ jsx19(FileCreateIcon4, { className: "size-3.5" }),
6172
+ /* @__PURE__ */ jsx19(FileCreateIcon5, { className: "size-3.5" }),
6146
6173
  /* @__PURE__ */ jsx19("span", { className: "truncate", children: copy.t("actions.createTopic") })
6147
6174
  ]
6148
6175
  }
@@ -6367,6 +6394,13 @@ function IssueManagerNode({
6367
6394
  },
6368
6395
  workspaceId
6369
6396
  });
6397
+ useIssueManagerIssueCreateRequestSync({
6398
+ nodeId,
6399
+ onCreateIssue: () => {
6400
+ controller.setIssueEditorMode("create");
6401
+ },
6402
+ workspaceId
6403
+ });
6370
6404
  return /* @__PURE__ */ jsxs18(
6371
6405
  "section",
6372
6406
  {
@@ -6416,7 +6450,7 @@ function IssueManagerNode({
6416
6450
  var issueManagerWorkbenchDragHandleAttribute = "data-workbench-drag-handle";
6417
6451
  var issueManagerHeaderChromeIconButtonClassName = "size-7 min-h-7 min-w-7 cursor-pointer rounded-md p-0 text-[var(--text-secondary)] hover:bg-[color-mix(in_srgb,var(--text-primary)_8%,transparent)] hover:text-[var(--text-primary)]";
6418
6452
  var issueManagerHeaderChromeIconClassName = "size-[18px]";
6419
- var issueManagerHeaderTrafficLightClassName = "size-3 shrink-0 rounded-full border-0 p-0 opacity-95 outline-none transition-[filter,opacity] duration-150 hover:brightness-110 focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:ring-offset-[var(--background-panel)]";
6453
+ var issueManagerHeaderTrafficLightClassName = "relative -m-1 size-5 shrink-0 cursor-pointer rounded-full border-0 bg-transparent p-0 text-[var(--text-placeholder)] opacity-95 outline-none transition-[color,filter,opacity] duration-150 ease-out before:absolute before:inset-1 before:rounded-full before:bg-current before:transition-colors before:duration-150 before:ease-out before:content-[''] hover:brightness-110 focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:ring-offset-[var(--background-panel)]";
6420
6454
  function IssueManagerNodeHeader({
6421
6455
  activeTopicId = null,
6422
6456
  className,
@@ -6464,7 +6498,13 @@ function IssueManagerNodeHeader({
6464
6498
  };
6465
6499
  const displayModeLabel = safeDisplayMode === "fullscreen" ? copy.t("actions.restoreWindow") : copy.t("actions.maximizeWindow");
6466
6500
  const sidebarHeaderStyle = {
6467
- width: effectiveCollapsed ? "min(100%, 520px)" : "min(var(--issue-manager-sidebar-width, 280px), 100%)"
6501
+ width: effectiveCollapsed ? "max-content" : "min(var(--issue-manager-sidebar-width, 280px), 100%)"
6502
+ };
6503
+ const rightHeaderDividerMaskStyle = {
6504
+ left: effectiveCollapsed ? "0px" : "min(var(--issue-manager-sidebar-width, 280px), 100%)"
6505
+ };
6506
+ const topicHeaderStyle = {
6507
+ left: effectiveCollapsed ? "50%" : "calc(min(var(--issue-manager-sidebar-width, 280px), 100%) + ((100% - min(var(--issue-manager-sidebar-width, 280px), 100%)) / 2))"
6468
6508
  };
6469
6509
  return /* @__PURE__ */ jsxs18(
6470
6510
  "header",
@@ -6483,11 +6523,22 @@ function IssueManagerNodeHeader({
6483
6523
  className: "absolute inset-0 cursor-grab active:cursor-grabbing"
6484
6524
  }
6485
6525
  ),
6526
+ /* @__PURE__ */ jsx20(
6527
+ "div",
6528
+ {
6529
+ "aria-hidden": "true",
6530
+ className: "pointer-events-none absolute right-0 bottom-0 z-[11] h-px bg-[var(--background-panel)]",
6531
+ style: rightHeaderDividerMaskStyle
6532
+ }
6533
+ ),
6486
6534
  /* @__PURE__ */ jsxs18(
6487
6535
  "div",
6488
6536
  {
6489
6537
  ...dragHandleProps,
6490
- className: "relative z-10 flex h-full min-w-0 cursor-grab items-center gap-2 border-r border-[var(--border-1)] bg-[var(--background-panel)] pr-3 pl-7 active:cursor-grabbing",
6538
+ className: cn13(
6539
+ "relative z-10 flex h-full min-w-0 cursor-grab items-center gap-2 bg-[var(--background-panel)] pr-3 pl-4 active:cursor-grabbing",
6540
+ !effectiveCollapsed && "border-r border-[var(--border-1)]"
6541
+ ),
6491
6542
  style: sidebarHeaderStyle,
6492
6543
  children: [
6493
6544
  /* @__PURE__ */ jsxs18(
@@ -6526,56 +6577,14 @@ function IssueManagerNodeHeader({
6526
6577
  }
6527
6578
  ),
6528
6579
  /* @__PURE__ */ jsx20("span", { className: "min-w-0 shrink truncate text-[15px] font-semibold leading-5 text-[var(--text-primary)]", children: title?.trim() || copy.t("title") }),
6529
- /* @__PURE__ */ jsx20(
6530
- "div",
6531
- {
6532
- className: "ml-auto flex min-w-0 shrink items-center",
6533
- onDoubleClick: (event) => event.stopPropagation(),
6534
- onPointerDown: (event) => event.stopPropagation(),
6535
- children: /* @__PURE__ */ jsx20(
6536
- IssueManagerTopicSelector,
6537
- {
6538
- activeTopicId: topicState.activeTopicId,
6539
- className: "max-w-[150px] flex-none text-[var(--text-primary)]",
6540
- copy,
6541
- topics: topicState.topics,
6542
- onCreateTopic: (input) => {
6543
- dispatchIssueManagerTopicCreate({
6544
- input,
6545
- nodeId,
6546
- workspaceId
6547
- });
6548
- },
6549
- onDeleteTopic: (topicId) => {
6550
- dispatchIssueManagerTopicDelete({
6551
- nodeId,
6552
- topicId,
6553
- workspaceId
6554
- });
6555
- },
6556
- onSelectTopic: (topicId) => {
6557
- dispatchIssueManagerTopicSelection({
6558
- nodeId,
6559
- topicId,
6560
- workspaceId
6561
- });
6562
- },
6563
- onUpdateTopic: (input) => {
6564
- dispatchIssueManagerTopicUpdate({
6565
- input,
6566
- nodeId,
6567
- workspaceId
6568
- });
6569
- }
6570
- }
6571
- )
6572
- }
6573
- ),
6574
6580
  /* @__PURE__ */ jsx20(
6575
6581
  Button13,
6576
6582
  {
6577
6583
  "aria-label": toggleLabel,
6578
- className: issueManagerHeaderChromeIconButtonClassName,
6584
+ className: cn13(
6585
+ !effectiveCollapsed && "ml-auto",
6586
+ issueManagerHeaderChromeIconButtonClassName
6587
+ ),
6579
6588
  "data-issue-manager-sidebar-auto-collapsed": isSidebarAutoCollapsed ? "true" : void 0,
6580
6589
  "data-issue-manager-sidebar-collapsed": effectiveCollapsed ? "true" : void 0,
6581
6590
  size: "icon-sm",
@@ -6590,9 +6599,84 @@ function IssueManagerNodeHeader({
6590
6599
  onPointerDown: (event) => event.stopPropagation(),
6591
6600
  children: /* @__PURE__ */ jsx20(PanelIcon, { className: issueManagerHeaderChromeIconClassName })
6592
6601
  }
6593
- )
6602
+ ),
6603
+ effectiveCollapsed ? /* @__PURE__ */ jsx20(TooltipProvider, { delayDuration: 250, skipDelayDuration: 0, children: /* @__PURE__ */ jsxs18(Tooltip2, { children: [
6604
+ /* @__PURE__ */ jsx20(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx20(
6605
+ Button13,
6606
+ {
6607
+ "aria-label": copy.t("actions.createIssue"),
6608
+ className: issueManagerHeaderChromeIconButtonClassName,
6609
+ size: "icon-sm",
6610
+ type: "button",
6611
+ variant: "ghost",
6612
+ onClick: (event) => {
6613
+ event.stopPropagation();
6614
+ dispatchIssueManagerIssueCreateRequest({
6615
+ nodeId,
6616
+ workspaceId
6617
+ });
6618
+ },
6619
+ onDoubleClick: (event) => event.stopPropagation(),
6620
+ onPointerDown: (event) => event.stopPropagation(),
6621
+ children: /* @__PURE__ */ jsx20(FileCreateIcon6, { "aria-hidden": "true" })
6622
+ }
6623
+ ) }),
6624
+ /* @__PURE__ */ jsx20(TooltipContent2, { side: "bottom", children: copy.t("actions.createIssue") })
6625
+ ] }) }) : null
6594
6626
  ]
6595
6627
  }
6628
+ ),
6629
+ /* @__PURE__ */ jsx20(
6630
+ "div",
6631
+ {
6632
+ className: "pointer-events-none absolute inset-y-0 z-10 flex min-w-0 -translate-x-1/2 items-center justify-center px-3",
6633
+ style: topicHeaderStyle,
6634
+ children: /* @__PURE__ */ jsx20(
6635
+ "div",
6636
+ {
6637
+ className: "pointer-events-auto flex min-w-0 max-w-full items-center",
6638
+ onDoubleClick: (event) => event.stopPropagation(),
6639
+ onPointerDown: (event) => event.stopPropagation(),
6640
+ children: /* @__PURE__ */ jsx20(
6641
+ IssueManagerTopicSelector,
6642
+ {
6643
+ activeTopicId: topicState.activeTopicId,
6644
+ className: "max-w-[220px] text-[var(--text-primary)]",
6645
+ copy,
6646
+ topics: topicState.topics,
6647
+ onCreateTopic: (input) => {
6648
+ dispatchIssueManagerTopicCreate({
6649
+ input,
6650
+ nodeId,
6651
+ workspaceId
6652
+ });
6653
+ },
6654
+ onDeleteTopic: (topicId) => {
6655
+ dispatchIssueManagerTopicDelete({
6656
+ nodeId,
6657
+ topicId,
6658
+ workspaceId
6659
+ });
6660
+ },
6661
+ onSelectTopic: (topicId) => {
6662
+ dispatchIssueManagerTopicSelection({
6663
+ nodeId,
6664
+ topicId,
6665
+ workspaceId
6666
+ });
6667
+ },
6668
+ onUpdateTopic: (input) => {
6669
+ dispatchIssueManagerTopicUpdate({
6670
+ input,
6671
+ nodeId,
6672
+ workspaceId
6673
+ });
6674
+ }
6675
+ }
6676
+ )
6677
+ }
6678
+ )
6679
+ }
6596
6680
  )
6597
6681
  ]
6598
6682
  }
@@ -6604,18 +6688,17 @@ function IssueManagerTrafficLightButton({
6604
6688
  pressed,
6605
6689
  tone
6606
6690
  }) {
6607
- return /* @__PURE__ */ jsx20(
6691
+ const button = /* @__PURE__ */ jsx20(
6608
6692
  "button",
6609
6693
  {
6610
6694
  "aria-label": label,
6611
6695
  "aria-pressed": pressed,
6612
6696
  className: cn13(
6613
6697
  issueManagerHeaderTrafficLightClassName,
6614
- tone === "close" && "bg-[#ff5f57]",
6615
- tone === "minimize" && "bg-[#ffbd2e]",
6616
- tone === "maximize" && "bg-[#28c840]"
6698
+ tone === "close" && "hover:text-[#ff5f57] focus-visible:text-[#ff5f57]",
6699
+ tone === "minimize" && "hover:text-[#ffbd2e] focus-visible:text-[#ffbd2e]",
6700
+ tone === "maximize" && "hover:text-[#28c840] focus-visible:text-[#28c840]"
6617
6701
  ),
6618
- title: label,
6619
6702
  type: "button",
6620
6703
  onClick: (event) => {
6621
6704
  event.stopPropagation();
@@ -6625,6 +6708,10 @@ function IssueManagerTrafficLightButton({
6625
6708
  onPointerDown: (event) => event.stopPropagation()
6626
6709
  }
6627
6710
  );
6711
+ return /* @__PURE__ */ jsx20(TooltipProvider, { delayDuration: 250, skipDelayDuration: 0, children: /* @__PURE__ */ jsxs18(Tooltip2, { children: [
6712
+ /* @__PURE__ */ jsx20(TooltipTrigger2, { asChild: true, children: button }),
6713
+ /* @__PURE__ */ jsx20(TooltipContent2, { side: "bottom", children: label })
6714
+ ] }) });
6628
6715
  }
6629
6716
 
6630
6717
  export {
@@ -6632,4 +6719,4 @@ export {
6632
6719
  IssueManagerNode,
6633
6720
  IssueManagerNodeHeader
6634
6721
  };
6635
- //# sourceMappingURL=chunk-UKHXZOVZ.js.map
6722
+ //# sourceMappingURL=chunk-UVXKVWZL.js.map