github-issue-tower-defence-management 1.91.0 → 1.91.2

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.
Files changed (116) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +5 -4
  3. package/bin/adapter/entry-points/cli/index.js +1 -1
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/consoleListsWriter.js +1 -0
  6. package/bin/adapter/entry-points/handlers/consoleListsWriter.js.map +1 -1
  7. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +3 -0
  8. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/adapter/entry-points/cli/index.test.ts +6 -1
  11. package/src/adapter/entry-points/cli/index.ts +1 -1
  12. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMarkdownView.stories.tsx → content/ConsoleMarkdownContent.stories.tsx} +6 -6
  13. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMarkdownView.test.tsx → content/ConsoleMarkdownContent.test.tsx} +6 -6
  14. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMarkdownView.tsx → content/ConsoleMarkdownContent.tsx} +2 -2
  15. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMermaidDiagram.stories.tsx → content/ConsoleMermaidDiagram.stories.tsx} +1 -1
  16. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMermaidDiagram.test.tsx → content/ConsoleMermaidDiagram.test.tsx} +2 -2
  17. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleMermaidDiagram.tsx → content/ConsoleMermaidDiagram.tsx} +1 -1
  18. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleChangedFileList.stories.tsx → detail/ConsoleChangedFileList.stories.tsx} +1 -1
  19. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleChangedFileList.test.tsx → detail/ConsoleChangedFileList.test.tsx} +1 -1
  20. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleChangedFileList.tsx → detail/ConsoleChangedFileList.tsx} +2 -2
  21. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommentList.stories.tsx → detail/ConsoleCommentList.stories.tsx} +1 -1
  22. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommentList.test.tsx → detail/ConsoleCommentList.test.tsx} +1 -1
  23. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommentList.tsx → detail/ConsoleCommentList.tsx} +4 -4
  24. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommitList.stories.tsx → detail/ConsoleCommitList.stories.tsx} +1 -1
  25. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommitList.test.tsx → detail/ConsoleCommitList.test.tsx} +1 -1
  26. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCommitList.tsx → detail/ConsoleCommitList.tsx} +2 -2
  27. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemDetail.stories.tsx → detail/ConsoleItemDetail.stories.tsx} +1 -1
  28. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemDetail.test.tsx → detail/ConsoleItemDetail.test.tsx} +2 -2
  29. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemDetail.tsx → detail/ConsoleItemDetail.tsx} +11 -8
  30. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemIcon.test.tsx → detail/ConsoleItemIcon.test.tsx} +1 -1
  31. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemIcon.tsx → detail/ConsoleItemIcon.tsx} +1 -1
  32. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePullRequestSection.stories.tsx → detail/ConsolePullRequestDetail.stories.tsx} +6 -6
  33. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePullRequestSection.test.tsx → detail/ConsolePullRequestDetail.test.tsx} +5 -5
  34. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePullRequestSection.tsx → detail/ConsolePullRequestDetail.tsx} +5 -5
  35. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleProjectHeader.stories.tsx → layout/ConsoleProjectSummary.stories.tsx} +5 -5
  36. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleProjectHeader.test.tsx → layout/ConsoleProjectSummary.test.tsx} +4 -4
  37. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleProjectHeader.tsx → layout/ConsoleProjectSummary.tsx} +3 -1
  38. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleTabBar.stories.tsx → layout/ConsoleTabList.stories.tsx} +7 -7
  39. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleTabBar.test.tsx → layout/ConsoleTabList.test.tsx} +7 -7
  40. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleTabBar.tsx → layout/ConsoleTabList.tsx} +2 -2
  41. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListView.stories.tsx → list/ConsoleItemList.stories.tsx} +7 -7
  42. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListView.test.tsx → list/ConsoleItemList.test.tsx} +9 -9
  43. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListView.tsx → list/ConsoleItemList.tsx} +13 -7
  44. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListItemRow.stories.tsx → list/ConsoleItemSummary.stories.tsx} +6 -6
  45. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListItemRow.test.tsx → list/ConsoleItemSummary.test.tsx} +7 -7
  46. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleListItemRow.tsx → list/ConsoleItemSummary.tsx} +3 -3
  47. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStoryGroupHeader.stories.tsx → list/ConsoleStorySummary.stories.tsx} +5 -5
  48. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStoryGroupHeader.test.tsx → list/ConsoleStorySummary.test.tsx} +4 -4
  49. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStoryGroupHeader.tsx → list/ConsoleStorySummary.tsx} +3 -3
  50. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.stories.tsx +14 -0
  51. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCloseButtonGroup.test.tsx → operations/ConsoleCloseActions.test.tsx} +4 -6
  52. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleCloseButtonGroup.tsx → operations/ConsoleCloseActions.tsx} +2 -2
  53. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.stories.tsx +20 -0
  54. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleNextActionDateGroup.test.tsx → operations/ConsoleNextActionDateActions.test.tsx} +5 -5
  55. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleNextActionDateGroup.tsx → operations/ConsoleNextActionDateActions.tsx} +2 -2
  56. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleOperationBar.stories.tsx → operations/ConsoleOperationMenu.stories.tsx} +7 -7
  57. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleOperationBar.test.tsx → operations/ConsoleOperationMenu.test.tsx} +8 -8
  58. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleOperationBar.tsx → operations/ConsoleOperationMenu.tsx} +16 -13
  59. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.stories.tsx +14 -0
  60. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePullRequestReviewGroup.test.tsx → operations/ConsolePullRequestReviewActions.test.tsx} +4 -4
  61. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePullRequestReviewGroup.tsx → operations/ConsolePullRequestReviewActions.tsx} +2 -2
  62. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.stories.tsx +17 -0
  63. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStatusButtonGroup.test.tsx → operations/ConsoleStatusActions.test.tsx} +6 -6
  64. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStatusButtonGroup.tsx → operations/ConsoleStatusActions.tsx} +7 -4
  65. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStoryActions.stories.tsx +17 -0
  66. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStoryButtonGroup.test.tsx → operations/ConsoleStoryActions.test.tsx} +5 -11
  67. package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleStoryButtonGroup.tsx → operations/ConsoleStoryActions.tsx} +3 -3
  68. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.ts +1 -1
  69. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.test.ts +1 -1
  70. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.ts +2 -2
  71. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.test.ts +2 -2
  72. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.ts +3 -3
  73. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.test.ts +1 -1
  74. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.ts +2 -2
  75. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.ts +2 -2
  76. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +1 -1
  77. package/src/adapter/entry-points/console/ui/src/features/console/{grouping.ts → logic/grouping.ts} +2 -2
  78. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +146 -0
  79. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.ts +48 -0
  80. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +4 -4
  81. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +6 -6
  82. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +55 -1
  83. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +12 -20
  84. package/src/adapter/entry-points/console/ui/src/features/console/{fixtures.ts → testing/fixtures.ts} +1 -1
  85. package/src/adapter/entry-points/console/ui-dist/assets/{index-BvuSQN9s.js → index-Druih-WG.js} +20 -20
  86. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  87. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +27 -2
  88. package/src/adapter/entry-points/handlers/consoleListsWriter.ts +1 -0
  89. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +26 -0
  90. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +17 -1
  91. package/types/adapter/entry-points/handlers/consoleListsWriter.d.ts.map +1 -1
  92. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts +2 -1
  93. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
  94. package/src/adapter/entry-points/console/ui/src/features/console/components/ConsoleCloseButtonGroup.stories.tsx +0 -14
  95. package/src/adapter/entry-points/console/ui/src/features/console/components/ConsoleNextActionDateGroup.stories.tsx +0 -20
  96. package/src/adapter/entry-points/console/ui/src/features/console/components/ConsolePullRequestReviewGroup.stories.tsx +0 -14
  97. package/src/adapter/entry-points/console/ui/src/features/console/components/ConsoleStatusButtonGroup.stories.tsx +0 -17
  98. package/src/adapter/entry-points/console/ui/src/features/console/components/ConsoleStoryButtonGroup.stories.tsx +0 -17
  99. package/src/adapter/entry-points/console/ui/src/features/console/overlay.test.ts +0 -124
  100. package/src/adapter/entry-points/console/ui/src/features/console/overlay.ts +0 -101
  101. /package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsoleItemIcon.stories.tsx → detail/ConsoleItemIcon.stories.tsx} +0 -0
  102. /package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePanel.stories.tsx → layout/ConsolePanel.stories.tsx} +0 -0
  103. /package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePanel.test.tsx → layout/ConsolePanel.test.tsx} +0 -0
  104. /package/src/adapter/entry-points/console/ui/src/features/console/components/{ConsolePanel.tsx → layout/ConsolePanel.tsx} +0 -0
  105. /package/src/adapter/entry-points/console/ui/src/features/console/{colors.test.ts → logic/colors.test.ts} +0 -0
  106. /package/src/adapter/entry-points/console/ui/src/features/console/{colors.ts → logic/colors.ts} +0 -0
  107. /package/src/adapter/entry-points/console/ui/src/features/console/{fileStatus.test.ts → logic/fileStatus.test.ts} +0 -0
  108. /package/src/adapter/entry-points/console/ui/src/features/console/{fileStatus.ts → logic/fileStatus.ts} +0 -0
  109. /package/src/adapter/entry-points/console/ui/src/features/console/{grouping.test.ts → logic/grouping.test.ts} +0 -0
  110. /package/src/adapter/entry-points/console/ui/src/features/console/{itemIcons.test.ts → logic/itemIcons.test.ts} +0 -0
  111. /package/src/adapter/entry-points/console/ui/src/features/console/{itemIcons.ts → logic/itemIcons.ts} +0 -0
  112. /package/src/adapter/entry-points/console/ui/src/features/console/{operations.test.ts → logic/operations.test.ts} +0 -0
  113. /package/src/adapter/entry-points/console/ui/src/features/console/{operations.ts → logic/operations.ts} +0 -0
  114. /package/src/adapter/entry-points/console/ui/src/features/console/{relativeTime.test.ts → logic/relativeTime.test.ts} +0 -0
  115. /package/src/adapter/entry-points/console/ui/src/features/console/{relativeTime.ts → logic/relativeTime.ts} +0 -0
  116. /package/src/adapter/entry-points/console/ui/src/features/console/{types.ts → logic/types.ts} +0 -0
@@ -1,14 +1,14 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { ConsoleProjectHeader } from './ConsoleProjectHeader';
2
+ import { ConsoleProjectSummary } from './ConsoleProjectSummary';
3
3
 
4
- const meta: Meta<typeof ConsoleProjectHeader> = {
5
- title: 'Console/ConsoleProjectHeader',
6
- component: ConsoleProjectHeader,
4
+ const meta: Meta<typeof ConsoleProjectSummary> = {
5
+ title: 'Console/ConsoleProjectSummary',
6
+ component: ConsoleProjectSummary,
7
7
  };
8
8
 
9
9
  export default meta;
10
10
 
11
- type Story = StoryObj<typeof ConsoleProjectHeader>;
11
+ type Story = StoryObj<typeof ConsoleProjectSummary>;
12
12
 
13
13
  export const WithProject: Story = {
14
14
  args: {
@@ -1,14 +1,14 @@
1
1
  import { render } from '@testing-library/react';
2
- import { ConsoleProjectHeader } from './ConsoleProjectHeader';
2
+ import { ConsoleProjectSummary } from './ConsoleProjectSummary';
3
3
 
4
- describe('ConsoleProjectHeader', () => {
4
+ describe('ConsoleProjectSummary', () => {
5
5
  it('shows the active project code when a pjcode is provided', () => {
6
- const { getByText } = render(<ConsoleProjectHeader pjcode="umino" />);
6
+ const { getByText } = render(<ConsoleProjectSummary pjcode="umino" />);
7
7
  expect(getByText('project: umino')).toBeInTheDocument();
8
8
  });
9
9
 
10
10
  it('shows a no-project message when the pjcode is null', () => {
11
- const { getByText } = render(<ConsoleProjectHeader pjcode={null} />);
11
+ const { getByText } = render(<ConsoleProjectSummary pjcode={null} />);
12
12
  expect(getByText('no project selected')).toBeInTheDocument();
13
13
  });
14
14
  });
@@ -2,7 +2,9 @@ export type ConsoleProjectHeaderProps = {
2
2
  pjcode: string | null;
3
3
  };
4
4
 
5
- export const ConsoleProjectHeader = ({ pjcode }: ConsoleProjectHeaderProps) => (
5
+ export const ConsoleProjectSummary = ({
6
+ pjcode,
7
+ }: ConsoleProjectHeaderProps) => (
6
8
  <header className="flex items-baseline gap-2 border-b border-border p-3">
7
9
  <h1 className="text-base font-semibold">TDPM Console</h1>
8
10
  {pjcode === null ? (
@@ -1,16 +1,16 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
2
  import { useState } from 'react';
3
- import type { ConsoleTabName } from '../types';
4
- import { ConsoleTabBar } from './ConsoleTabBar';
3
+ import type { ConsoleTabName } from '../../logic/types';
4
+ import { ConsoleTabList } from './ConsoleTabList';
5
5
 
6
- const meta: Meta<typeof ConsoleTabBar> = {
7
- title: 'Console/ConsoleTabBar',
8
- component: ConsoleTabBar,
6
+ const meta: Meta<typeof ConsoleTabList> = {
7
+ title: 'Console/ConsoleTabList',
8
+ component: ConsoleTabList,
9
9
  };
10
10
 
11
11
  export default meta;
12
12
 
13
- type Story = StoryObj<typeof ConsoleTabBar>;
13
+ type Story = StoryObj<typeof ConsoleTabList>;
14
14
 
15
15
  const counts: Record<ConsoleTabName, number> = {
16
16
  prs: 35,
@@ -60,7 +60,7 @@ export const Interactive: Story = {
60
60
  render: () => {
61
61
  const [activeTab, setActiveTab] = useState<ConsoleTabName>('prs');
62
62
  return (
63
- <ConsoleTabBar
63
+ <ConsoleTabList
64
64
  activeTab={activeTab}
65
65
  counts={counts}
66
66
  onSelectTab={setActiveTab}
@@ -1,6 +1,6 @@
1
1
  import { fireEvent, render } from '@testing-library/react';
2
- import type { ConsoleTabName } from '../types';
3
- import { ConsoleTabBar } from './ConsoleTabBar';
2
+ import type { ConsoleTabName } from '../../logic/types';
3
+ import { ConsoleTabList } from './ConsoleTabList';
4
4
 
5
5
  const counts: Record<ConsoleTabName, number> = {
6
6
  prs: 3,
@@ -10,10 +10,10 @@ const counts: Record<ConsoleTabName, number> = {
10
10
  'todo-by-human': 2,
11
11
  };
12
12
 
13
- describe('ConsoleTabBar', () => {
13
+ describe('ConsoleTabList', () => {
14
14
  it('hides zero-count tabs except the active tab', () => {
15
15
  const { queryByText } = render(
16
- <ConsoleTabBar activeTab="prs" counts={counts} onSelectTab={() => {}} />,
16
+ <ConsoleTabList activeTab="prs" counts={counts} onSelectTab={() => {}} />,
17
17
  );
18
18
  expect(queryByText('Awaiting Quality Check')).not.toBeNull();
19
19
  expect(queryByText('Unread')).not.toBeNull();
@@ -24,7 +24,7 @@ describe('ConsoleTabBar', () => {
24
24
 
25
25
  it('keeps a zero-count active tab visible', () => {
26
26
  const { queryByText } = render(
27
- <ConsoleTabBar
27
+ <ConsoleTabList
28
28
  activeTab="triage"
29
29
  counts={counts}
30
30
  onSelectTab={() => {}}
@@ -35,7 +35,7 @@ describe('ConsoleTabBar', () => {
35
35
 
36
36
  it('uses the exact lowercase Todo by human label', () => {
37
37
  const { getByText } = render(
38
- <ConsoleTabBar
38
+ <ConsoleTabList
39
39
  activeTab="todo-by-human"
40
40
  counts={counts}
41
41
  onSelectTab={() => {}}
@@ -47,7 +47,7 @@ describe('ConsoleTabBar', () => {
47
47
  it('reports the selected tab', () => {
48
48
  const onSelectTab = jest.fn();
49
49
  const { getByText } = render(
50
- <ConsoleTabBar
50
+ <ConsoleTabList
51
51
  activeTab="prs"
52
52
  counts={counts}
53
53
  onSelectTab={onSelectTab}
@@ -1,4 +1,4 @@
1
- import { CONSOLE_TABS, type ConsoleTabName } from '../types';
1
+ import { CONSOLE_TABS, type ConsoleTabName } from '../../logic/types';
2
2
 
3
3
  export type ConsoleTabBarProps = {
4
4
  activeTab: ConsoleTabName;
@@ -6,7 +6,7 @@ export type ConsoleTabBarProps = {
6
6
  onSelectTab: (tab: ConsoleTabName) => void;
7
7
  };
8
8
 
9
- export const ConsoleTabBar = ({
9
+ export const ConsoleTabList = ({
10
10
  activeTab,
11
11
  counts,
12
12
  onSelectTab,
@@ -1,19 +1,19 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { buildConsoleListRows } from '../../logic/grouping';
2
3
  import {
3
4
  consoleListItemsFixture,
4
5
  consoleStoryColorsFixture,
5
- } from '../fixtures';
6
- import { buildConsoleListRows } from '../grouping';
7
- import { ConsoleListView } from './ConsoleListView';
6
+ } from '../../testing/fixtures';
7
+ import { ConsoleItemList } from './ConsoleItemList';
8
8
 
9
- const meta: Meta<typeof ConsoleListView> = {
10
- title: 'Console/ConsoleListView',
11
- component: ConsoleListView,
9
+ const meta: Meta<typeof ConsoleItemList> = {
10
+ title: 'Console/ConsoleItemList',
11
+ component: ConsoleItemList,
12
12
  };
13
13
 
14
14
  export default meta;
15
15
 
16
- type Story = StoryObj<typeof ConsoleListView>;
16
+ type Story = StoryObj<typeof ConsoleItemList>;
17
17
 
18
18
  export const WithStoryGroups: Story = {
19
19
  args: {
@@ -1,17 +1,17 @@
1
1
  import { fireEvent, render } from '@testing-library/react';
2
+ import { buildConsoleListRows } from '../../logic/grouping';
2
3
  import {
3
4
  consoleListItemsFixture,
4
5
  consoleStoryColorsFixture,
5
- } from '../fixtures';
6
- import { buildConsoleListRows } from '../grouping';
7
- import { ConsoleListView } from './ConsoleListView';
6
+ } from '../../testing/fixtures';
7
+ import { ConsoleItemList } from './ConsoleItemList';
8
8
 
9
9
  const rows = buildConsoleListRows(consoleListItemsFixture, {});
10
10
 
11
- describe('ConsoleListView', () => {
11
+ describe('ConsoleItemList', () => {
12
12
  it('renders group headers and items in array order', () => {
13
13
  const { getAllByRole, getByText } = render(
14
- <ConsoleListView
14
+ <ConsoleItemList
15
15
  rows={rows}
16
16
  storyColors={consoleStoryColorsFixture}
17
17
  activeItemId={null}
@@ -28,7 +28,7 @@ describe('ConsoleListView', () => {
28
28
  it('reports the selected item', () => {
29
29
  const onSelectItem = jest.fn();
30
30
  const { getByText } = render(
31
- <ConsoleListView
31
+ <ConsoleItemList
32
32
  rows={rows}
33
33
  storyColors={consoleStoryColorsFixture}
34
34
  activeItemId={null}
@@ -45,7 +45,7 @@ describe('ConsoleListView', () => {
45
45
 
46
46
  it('shows the loading state', () => {
47
47
  const { getByText } = render(
48
- <ConsoleListView
48
+ <ConsoleItemList
49
49
  rows={[]}
50
50
  storyColors={{}}
51
51
  activeItemId={null}
@@ -59,7 +59,7 @@ describe('ConsoleListView', () => {
59
59
 
60
60
  it('shows the empty state', () => {
61
61
  const { getByText } = render(
62
- <ConsoleListView
62
+ <ConsoleItemList
63
63
  rows={[]}
64
64
  storyColors={{}}
65
65
  activeItemId={null}
@@ -73,7 +73,7 @@ describe('ConsoleListView', () => {
73
73
 
74
74
  it('shows the error state', () => {
75
75
  const { getByRole } = render(
76
- <ConsoleListView
76
+ <ConsoleItemList
77
77
  rows={[]}
78
78
  storyColors={{}}
79
79
  activeItemId={null}
@@ -1,7 +1,13 @@
1
- import { type ConsoleListRow, resolveStoryColorEnum } from '../grouping';
2
- import type { ConsoleListItem, ConsoleStoryColorSource } from '../types';
3
- import { ConsoleListItemRow } from './ConsoleListItemRow';
4
- import { ConsoleStoryGroupHeader } from './ConsoleStoryGroupHeader';
1
+ import {
2
+ type ConsoleListRow,
3
+ resolveStoryColorEnum,
4
+ } from '../../logic/grouping';
5
+ import type {
6
+ ConsoleListItem,
7
+ ConsoleStoryColorSource,
8
+ } from '../../logic/types';
9
+ import { ConsoleItemSummary } from './ConsoleItemSummary';
10
+ import { ConsoleStorySummary } from './ConsoleStorySummary';
5
11
 
6
12
  export type ConsoleListViewProps = {
7
13
  rows: ConsoleListRow[];
@@ -12,7 +18,7 @@ export type ConsoleListViewProps = {
12
18
  onSelectItem: (item: ConsoleListItem) => void;
13
19
  };
14
20
 
15
- export const ConsoleListView = ({
21
+ export const ConsoleItemList = ({
16
22
  rows,
17
23
  storyColors,
18
24
  activeItemId,
@@ -41,7 +47,7 @@ export const ConsoleListView = ({
41
47
  {rows.map((row) =>
42
48
  row.kind === 'group-header' ? (
43
49
  <li key={`group:${row.story}`} className="console-list-group">
44
- <ConsoleStoryGroupHeader
50
+ <ConsoleStorySummary
45
51
  story={row.story}
46
52
  count={row.count}
47
53
  colorEnum={resolveStoryColorEnum(storyColors, row.story)}
@@ -49,7 +55,7 @@ export const ConsoleListView = ({
49
55
  </li>
50
56
  ) : (
51
57
  <li key={row.item.itemId} className="console-list-row">
52
- <ConsoleListItemRow
58
+ <ConsoleItemSummary
53
59
  item={row.item}
54
60
  isActive={row.item.itemId === activeItemId}
55
61
  onSelect={onSelectItem}
@@ -1,16 +1,16 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { consoleListItemsFixture } from '../fixtures';
3
- import { ConsoleListItemRow } from './ConsoleListItemRow';
2
+ import { consoleListItemsFixture } from '../../testing/fixtures';
3
+ import { ConsoleItemSummary } from './ConsoleItemSummary';
4
4
 
5
- const meta: Meta<typeof ConsoleListItemRow> = {
6
- title: 'Console/ConsoleListItemRow',
7
- component: ConsoleListItemRow,
5
+ const meta: Meta<typeof ConsoleItemSummary> = {
6
+ title: 'Console/ConsoleItemSummary',
7
+ component: ConsoleItemSummary,
8
8
  args: { onSelect: () => {} },
9
9
  };
10
10
 
11
11
  export default meta;
12
12
 
13
- type Story = StoryObj<typeof ConsoleListItemRow>;
13
+ type Story = StoryObj<typeof ConsoleItemSummary>;
14
14
 
15
15
  export const PullRequestRow: Story = {
16
16
  args: { item: consoleListItemsFixture[0], isActive: false },
@@ -1,14 +1,14 @@
1
1
  import { fireEvent, render } from '@testing-library/react';
2
- import { consoleListItemsFixture } from '../fixtures';
3
- import { ConsoleListItemRow } from './ConsoleListItemRow';
2
+ import { consoleListItemsFixture } from '../../testing/fixtures';
3
+ import { ConsoleItemSummary } from './ConsoleItemSummary';
4
4
 
5
5
  const prItem = consoleListItemsFixture[0];
6
6
  const issueItem = consoleListItemsFixture[2];
7
7
 
8
- describe('ConsoleListItemRow', () => {
8
+ describe('ConsoleItemSummary', () => {
9
9
  it('renders a PR number with the PR prefix', () => {
10
10
  const { getByText } = render(
11
- <ConsoleListItemRow item={prItem} isActive={false} onSelect={() => {}} />,
11
+ <ConsoleItemSummary item={prItem} isActive={false} onSelect={() => {}} />,
12
12
  );
13
13
  expect(getByText(`PR #${prItem.number}`)).toBeInTheDocument();
14
14
  expect(getByText(prItem.title)).toBeInTheDocument();
@@ -16,7 +16,7 @@ describe('ConsoleListItemRow', () => {
16
16
 
17
17
  it('renders an issue number with the hash prefix', () => {
18
18
  const { getByText } = render(
19
- <ConsoleListItemRow
19
+ <ConsoleItemSummary
20
20
  item={issueItem}
21
21
  isActive={false}
22
22
  onSelect={() => {}}
@@ -28,7 +28,7 @@ describe('ConsoleListItemRow', () => {
28
28
  it('reports the item on click', () => {
29
29
  const onSelect = jest.fn();
30
30
  const { getByRole } = render(
31
- <ConsoleListItemRow item={prItem} isActive={false} onSelect={onSelect} />,
31
+ <ConsoleItemSummary item={prItem} isActive={false} onSelect={onSelect} />,
32
32
  );
33
33
  fireEvent.click(getByRole('button'));
34
34
  expect(onSelect).toHaveBeenCalledWith(prItem);
@@ -36,7 +36,7 @@ describe('ConsoleListItemRow', () => {
36
36
 
37
37
  it('marks the active row', () => {
38
38
  const { getByRole } = render(
39
- <ConsoleListItemRow item={prItem} isActive onSelect={() => {}} />,
39
+ <ConsoleItemSummary item={prItem} isActive onSelect={() => {}} />,
40
40
  );
41
41
  expect(getByRole('button')).toHaveAttribute('data-active', 'true');
42
42
  });
@@ -1,5 +1,5 @@
1
- import type { ConsoleListItem } from '../types';
2
- import { ConsoleItemIcon } from './ConsoleItemIcon';
1
+ import type { ConsoleListItem } from '../../logic/types';
2
+ import { ConsoleItemIcon } from '../detail/ConsoleItemIcon';
3
3
 
4
4
  export type ConsoleListItemRowProps = {
5
5
  item: ConsoleListItem;
@@ -7,7 +7,7 @@ export type ConsoleListItemRowProps = {
7
7
  onSelect: (item: ConsoleListItem) => void;
8
8
  };
9
9
 
10
- export const ConsoleListItemRow = ({
10
+ export const ConsoleItemSummary = ({
11
11
  item,
12
12
  isActive,
13
13
  onSelect,
@@ -1,14 +1,14 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { ConsoleStoryGroupHeader } from './ConsoleStoryGroupHeader';
2
+ import { ConsoleStorySummary } from './ConsoleStorySummary';
3
3
 
4
- const meta: Meta<typeof ConsoleStoryGroupHeader> = {
5
- title: 'Console/ConsoleStoryGroupHeader',
6
- component: ConsoleStoryGroupHeader,
4
+ const meta: Meta<typeof ConsoleStorySummary> = {
5
+ title: 'Console/ConsoleStorySummary',
6
+ component: ConsoleStorySummary,
7
7
  };
8
8
 
9
9
  export default meta;
10
10
 
11
- type Story = StoryObj<typeof ConsoleStoryGroupHeader>;
11
+ type Story = StoryObj<typeof ConsoleStorySummary>;
12
12
 
13
13
  export const ConsolePortStory: Story = {
14
14
  args: { story: 'TDPM Console port', count: 4, colorEnum: 'BLUE' },
@@ -1,10 +1,10 @@
1
1
  import { render } from '@testing-library/react';
2
- import { ConsoleStoryGroupHeader } from './ConsoleStoryGroupHeader';
2
+ import { ConsoleStorySummary } from './ConsoleStorySummary';
3
3
 
4
- describe('ConsoleStoryGroupHeader', () => {
4
+ describe('ConsoleStorySummary', () => {
5
5
  it('renders the story name and count', () => {
6
6
  const { getByText } = render(
7
- <ConsoleStoryGroupHeader
7
+ <ConsoleStorySummary
8
8
  story="TDPM Console port"
9
9
  count={4}
10
10
  colorEnum="BLUE"
@@ -16,7 +16,7 @@ describe('ConsoleStoryGroupHeader', () => {
16
16
 
17
17
  it('applies the dot color from the enum', () => {
18
18
  const { container } = render(
19
- <ConsoleStoryGroupHeader story="s" count={1} colorEnum="GREEN" />,
19
+ <ConsoleStorySummary story="s" count={1} colorEnum="GREEN" />,
20
20
  );
21
21
  const dot = container.querySelector('.console-story-dot');
22
22
  expect(dot).toHaveStyle({ backgroundColor: '#3fb950' });
@@ -1,5 +1,5 @@
1
- import { colorFromEnum } from '../colors';
2
- import type { ConsoleColor } from '../types';
1
+ import { colorFromEnum } from '../../logic/colors';
2
+ import type { ConsoleColor } from '../../logic/types';
3
3
 
4
4
  export type ConsoleStoryGroupHeaderProps = {
5
5
  story: string;
@@ -7,7 +7,7 @@ export type ConsoleStoryGroupHeaderProps = {
7
7
  colorEnum: ConsoleColor | null;
8
8
  };
9
9
 
10
- export const ConsoleStoryGroupHeader = ({
10
+ export const ConsoleStorySummary = ({
11
11
  story,
12
12
  count,
13
13
  colorEnum,
@@ -0,0 +1,14 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { ConsoleCloseActions } from './ConsoleCloseActions';
3
+
4
+ const meta: Meta<typeof ConsoleCloseActions> = {
5
+ title: 'Console/ConsoleCloseActions',
6
+ component: ConsoleCloseActions,
7
+ args: { onClose: () => {} },
8
+ };
9
+
10
+ export default meta;
11
+
12
+ type Story = StoryObj<typeof ConsoleCloseActions>;
13
+
14
+ export const Default: Story = {};
@@ -1,18 +1,16 @@
1
1
  import { fireEvent, render } from '@testing-library/react';
2
- import { ConsoleCloseButtonGroup } from './ConsoleCloseButtonGroup';
2
+ import { ConsoleCloseActions } from './ConsoleCloseActions';
3
3
 
4
- describe('ConsoleCloseButtonGroup', () => {
4
+ describe('ConsoleCloseActions', () => {
5
5
  it('renders both close buttons', () => {
6
- const { getByText } = render(
7
- <ConsoleCloseButtonGroup onClose={() => {}} />,
8
- );
6
+ const { getByText } = render(<ConsoleCloseActions onClose={() => {}} />);
9
7
  expect(getByText('Close')).toBeInTheDocument();
10
8
  expect(getByText('Close as not planned')).toBeInTheDocument();
11
9
  });
12
10
 
13
11
  it('reports the close actions', () => {
14
12
  const onClose = jest.fn();
15
- const { getByText } = render(<ConsoleCloseButtonGroup onClose={onClose} />);
13
+ const { getByText } = render(<ConsoleCloseActions onClose={onClose} />);
16
14
  fireEvent.click(getByText('Close'));
17
15
  fireEvent.click(getByText('Close as not planned'));
18
16
  expect(onClose.mock.calls.map((call) => call[0])).toEqual([
@@ -1,10 +1,10 @@
1
- import type { ConsoleCloseAction } from '../operations';
1
+ import type { ConsoleCloseAction } from '../../logic/operations';
2
2
 
3
3
  export type ConsoleCloseButtonGroupProps = {
4
4
  onClose: (action: ConsoleCloseAction) => void;
5
5
  };
6
6
 
7
- export const ConsoleCloseButtonGroup = ({
7
+ export const ConsoleCloseActions = ({
8
8
  onClose,
9
9
  }: ConsoleCloseButtonGroupProps) => (
10
10
  <div className="console-op-group">
@@ -0,0 +1,20 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { ConsoleNextActionDateActions } from './ConsoleNextActionDateActions';
3
+
4
+ const meta: Meta<typeof ConsoleNextActionDateActions> = {
5
+ title: 'Console/ConsoleNextActionDateActions',
6
+ component: ConsoleNextActionDateActions,
7
+ args: { onSetNextActionDate: () => {} },
8
+ };
9
+
10
+ export default meta;
11
+
12
+ type Story = StoryObj<typeof ConsoleNextActionDateActions>;
13
+
14
+ export const StandardTab: Story = {
15
+ args: { isTodoByHuman: false },
16
+ };
17
+
18
+ export const TodoByHumanTab: Story = {
19
+ args: { isTodoByHuman: true },
20
+ };
@@ -1,10 +1,10 @@
1
1
  import { fireEvent, render } from '@testing-library/react';
2
- import { ConsoleNextActionDateGroup } from './ConsoleNextActionDateGroup';
2
+ import { ConsoleNextActionDateActions } from './ConsoleNextActionDateActions';
3
3
 
4
- describe('ConsoleNextActionDateGroup', () => {
4
+ describe('ConsoleNextActionDateActions', () => {
5
5
  it('shows +1 day and +1 week outside the todo-by-human tab', () => {
6
6
  const { getByText, queryByText } = render(
7
- <ConsoleNextActionDateGroup
7
+ <ConsoleNextActionDateActions
8
8
  isTodoByHuman={false}
9
9
  onSetNextActionDate={() => {}}
10
10
  />,
@@ -16,7 +16,7 @@ describe('ConsoleNextActionDateGroup', () => {
16
16
 
17
17
  it('shows +1 week and skip on the todo-by-human tab', () => {
18
18
  const { getByText } = render(
19
- <ConsoleNextActionDateGroup
19
+ <ConsoleNextActionDateActions
20
20
  isTodoByHuman
21
21
  onSetNextActionDate={() => {}}
22
22
  />,
@@ -27,7 +27,7 @@ describe('ConsoleNextActionDateGroup', () => {
27
27
  it('reports the snooze actions', () => {
28
28
  const onSetNextActionDate = jest.fn();
29
29
  const { getByText } = render(
30
- <ConsoleNextActionDateGroup
30
+ <ConsoleNextActionDateActions
31
31
  isTodoByHuman={false}
32
32
  onSetNextActionDate={onSetNextActionDate}
33
33
  />,
@@ -1,11 +1,11 @@
1
- import type { ConsoleNextActionDateAction } from '../operations';
1
+ import type { ConsoleNextActionDateAction } from '../../logic/operations';
2
2
 
3
3
  export type ConsoleNextActionDateGroupProps = {
4
4
  isTodoByHuman: boolean;
5
5
  onSetNextActionDate: (action: ConsoleNextActionDateAction) => void;
6
6
  };
7
7
 
8
- export const ConsoleNextActionDateGroup = ({
8
+ export const ConsoleNextActionDateActions = ({
9
9
  isTodoByHuman,
10
10
  onSetNextActionDate,
11
11
  }: ConsoleNextActionDateGroupProps) => (
@@ -1,11 +1,11 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import type { ConsoleOperationHandlers } from '../../logic/operations';
2
3
  import {
3
4
  consoleListItemsFixture,
4
5
  consoleStatusOptionsFixture,
5
6
  consoleStoryOptionsFixture,
6
- } from '../fixtures';
7
- import type { ConsoleOperationHandlers } from '../operations';
8
- import { ConsoleOperationBar } from './ConsoleOperationBar';
7
+ } from '../../testing/fixtures';
8
+ import { ConsoleOperationMenu } from './ConsoleOperationMenu';
9
9
 
10
10
  const handlers: ConsoleOperationHandlers = {
11
11
  onReview: () => {},
@@ -16,9 +16,9 @@ const handlers: ConsoleOperationHandlers = {
16
16
  onClose: () => {},
17
17
  };
18
18
 
19
- const meta: Meta<typeof ConsoleOperationBar> = {
20
- title: 'Console/ConsoleOperationBar',
21
- component: ConsoleOperationBar,
19
+ const meta: Meta<typeof ConsoleOperationMenu> = {
20
+ title: 'Console/ConsoleOperationMenu',
21
+ component: ConsoleOperationMenu,
22
22
  args: {
23
23
  statusOptions: consoleStatusOptionsFixture,
24
24
  storyOptions: consoleStoryOptionsFixture,
@@ -28,7 +28,7 @@ const meta: Meta<typeof ConsoleOperationBar> = {
28
28
 
29
29
  export default meta;
30
30
 
31
- type Story = StoryObj<typeof ConsoleOperationBar>;
31
+ type Story = StoryObj<typeof ConsoleOperationMenu>;
32
32
 
33
33
  export const PrsTabPullRequest: Story = {
34
34
  args: {
@@ -1,11 +1,11 @@
1
1
  import { render } from '@testing-library/react';
2
+ import type { ConsoleOperationHandlers } from '../../logic/operations';
2
3
  import {
3
4
  consoleListItemsFixture,
4
5
  consoleStatusOptionsFixture,
5
6
  consoleStoryOptionsFixture,
6
- } from '../fixtures';
7
- import type { ConsoleOperationHandlers } from '../operations';
8
- import { ConsoleOperationBar } from './ConsoleOperationBar';
7
+ } from '../../testing/fixtures';
8
+ import { ConsoleOperationMenu } from './ConsoleOperationMenu';
9
9
 
10
10
  const handlers: ConsoleOperationHandlers = {
11
11
  onReview: jest.fn(),
@@ -19,10 +19,10 @@ const handlers: ConsoleOperationHandlers = {
19
19
  const prItem = consoleListItemsFixture[0];
20
20
  const issueItem = consoleListItemsFixture[2];
21
21
 
22
- describe('ConsoleOperationBar', () => {
22
+ describe('ConsoleOperationMenu', () => {
23
23
  it('shows the review group for a PR and hides story and close groups outside triage', () => {
24
24
  const { getByText, queryByText } = render(
25
- <ConsoleOperationBar
25
+ <ConsoleOperationMenu
26
26
  tab="prs"
27
27
  item={prItem}
28
28
  hasPullRequest
@@ -40,7 +40,7 @@ describe('ConsoleOperationBar', () => {
40
40
 
41
41
  it('shows the story group on the triage tab and the close group for an issue', () => {
42
42
  const { getByText } = render(
43
- <ConsoleOperationBar
43
+ <ConsoleOperationMenu
44
44
  tab="triage"
45
45
  item={issueItem}
46
46
  hasPullRequest={false}
@@ -56,7 +56,7 @@ describe('ConsoleOperationBar', () => {
56
56
 
57
57
  it('shows +1 week and skip on the todo-by-human tab', () => {
58
58
  const { getByText } = render(
59
- <ConsoleOperationBar
59
+ <ConsoleOperationMenu
60
60
  tab="todo-by-human"
61
61
  item={issueItem}
62
62
  hasPullRequest={false}
@@ -70,7 +70,7 @@ describe('ConsoleOperationBar', () => {
70
70
 
71
71
  it('hides the review group when there is no pull request', () => {
72
72
  const { queryByText } = render(
73
- <ConsoleOperationBar
73
+ <ConsoleOperationMenu
74
74
  tab="unread"
75
75
  item={issueItem}
76
76
  hasPullRequest={false}