github-issue-tower-defence-management 1.185.1 → 1.186.0

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 (135) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -0
  3. package/bin/adapter/entry-points/cli/index.js +2 -1
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/console/consoleOperationApi.js +43 -1
  6. package/bin/adapter/entry-points/console/consoleOperationApi.js.map +1 -1
  7. package/bin/adapter/entry-points/console/consoleProjectResolver.js +7 -1
  8. package/bin/adapter/entry-points/console/consoleProjectResolver.js.map +1 -1
  9. package/bin/adapter/entry-points/console/ui-dist/assets/index-wj6o8qvo.js +86 -0
  10. package/bin/adapter/entry-points/console/ui-dist/assets/index-yZy1TUOo.css +2 -0
  11. package/bin/adapter/entry-points/console/ui-dist/index.html +2 -2
  12. package/bin/adapter/entry-points/console/webServer.js +3 -0
  13. package/bin/adapter/entry-points/console/webServer.js.map +1 -1
  14. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +5 -1
  15. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  16. package/bin/adapter/entry-points/handlers/tokenStatusWriter.js +1 -0
  17. package/bin/adapter/entry-points/handlers/tokenStatusWriter.js.map +1 -1
  18. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +36 -0
  19. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  20. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +12 -0
  21. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
  22. package/bin/domain/entities/Project.js +11 -1
  23. package/bin/domain/entities/Project.js.map +1 -1
  24. package/bin/domain/usecases/HandleScheduledEventUseCase.js +12 -1
  25. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  26. package/bin/domain/usecases/IssueNoStatusUpdateUseCase.js +36 -0
  27. package/bin/domain/usecases/IssueNoStatusUpdateUseCase.js.map +1 -0
  28. package/bin/domain/usecases/IssueRejectionEvaluator.js +19 -0
  29. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
  30. package/bin/domain/usecases/QualityCheckAdvanceUseCase.js +1 -0
  31. package/bin/domain/usecases/QualityCheckAdvanceUseCase.js.map +1 -1
  32. package/bin/domain/usecases/ReopenedDoneIssueRevertUseCase.js +36 -0
  33. package/bin/domain/usecases/ReopenedDoneIssueRevertUseCase.js.map +1 -0
  34. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +2 -5
  35. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/adapter/entry-points/cli/index.ts +14 -10
  38. package/src/adapter/entry-points/console/consoleOperationApi.test.ts +199 -0
  39. package/src/adapter/entry-points/console/consoleOperationApi.ts +65 -0
  40. package/src/adapter/entry-points/console/consoleProjectResolver.test.ts +26 -0
  41. package/src/adapter/entry-points/console/consoleProjectResolver.ts +8 -1
  42. package/src/adapter/entry-points/console/dashboardEmitterComposerKey.test.ts +1 -0
  43. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +40 -0
  44. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +18 -0
  45. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.stories.tsx +4 -0
  46. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.test.tsx +114 -141
  47. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.tsx +84 -3
  48. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +23 -0
  49. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +73 -0
  50. package/src/adapter/entry-points/console/ui/src/index.css +35 -0
  51. package/src/adapter/entry-points/console/ui-dist/assets/index-wj6o8qvo.js +86 -0
  52. package/src/adapter/entry-points/console/ui-dist/assets/index-yZy1TUOo.css +2 -0
  53. package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
  54. package/src/adapter/entry-points/console/webServer.ts +7 -0
  55. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +11 -0
  56. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.test.ts +1 -0
  57. package/src/adapter/entry-points/handlers/dashboardRowWriter.test.ts +1 -0
  58. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.test.ts +1 -0
  59. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.test.ts +1 -0
  60. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +1 -0
  61. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.test.ts +1 -0
  62. package/src/adapter/entry-points/handlers/situationFileWriter.test.ts +1 -0
  63. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.test.ts +1 -0
  64. package/src/adapter/entry-points/handlers/tokenStatusWriter.test.ts +1 -0
  65. package/src/adapter/entry-points/handlers/tokenStatusWriter.ts +1 -0
  66. package/src/adapter/repositories/GitHubIssueCommentRepository.test.ts +1 -0
  67. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +90 -0
  68. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +48 -2
  69. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +107 -0
  70. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +20 -0
  71. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +1 -0
  72. package/src/domain/entities/Issue.ts +1 -0
  73. package/src/domain/entities/Project.ts +11 -2
  74. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.test.ts +1 -0
  75. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +1 -0
  76. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +1 -0
  77. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +144 -0
  78. package/src/domain/usecases/HandleScheduledEventUseCase.ts +16 -0
  79. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.test.ts +1 -0
  80. package/src/domain/usecases/IssueNoStatusUpdateUseCase.test.ts +165 -0
  81. package/src/domain/usecases/IssueNoStatusUpdateUseCase.ts +44 -0
  82. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +120 -0
  83. package/src/domain/usecases/IssueRejectionEvaluator.ts +21 -0
  84. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +1 -0
  85. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +1 -0
  86. package/src/domain/usecases/QualityCheckAdvanceUseCase.test.ts +34 -0
  87. package/src/domain/usecases/QualityCheckAdvanceUseCase.ts +1 -0
  88. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.test.ts +188 -0
  89. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.ts +57 -0
  90. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +44 -0
  91. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +4 -12
  92. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +1 -0
  93. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +1 -0
  94. package/src/domain/usecases/StaleTmuxSessionKillUseCase.test.ts +1 -0
  95. package/src/domain/usecases/StartPreparationUseCase.test.ts +1 -0
  96. package/src/domain/usecases/TriagerApprovalDispatchUseCase.test.ts +1 -0
  97. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +5 -0
  98. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +1 -0
  99. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.test.ts +1 -0
  100. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.test.ts +1 -0
  101. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +1 -0
  102. package/src/domain/usecases/issueReactivationTriggerIsPending.test.ts +1 -0
  103. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  104. package/types/adapter/entry-points/console/consoleOperationApi.d.ts +2 -0
  105. package/types/adapter/entry-points/console/consoleOperationApi.d.ts.map +1 -1
  106. package/types/adapter/entry-points/console/consoleProjectResolver.d.ts +1 -0
  107. package/types/adapter/entry-points/console/consoleProjectResolver.d.ts.map +1 -1
  108. package/types/adapter/entry-points/console/webServer.d.ts +2 -0
  109. package/types/adapter/entry-points/console/webServer.d.ts.map +1 -1
  110. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  111. package/types/adapter/entry-points/handlers/tokenStatusWriter.d.ts.map +1 -1
  112. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +4 -1
  113. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  114. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +1 -0
  115. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
  116. package/types/domain/entities/Issue.d.ts +1 -0
  117. package/types/domain/entities/Issue.d.ts.map +1 -1
  118. package/types/domain/entities/Project.d.ts +2 -1
  119. package/types/domain/entities/Project.d.ts.map +1 -1
  120. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +6 -1
  121. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  122. package/types/domain/usecases/IssueNoStatusUpdateUseCase.d.ts +12 -0
  123. package/types/domain/usecases/IssueNoStatusUpdateUseCase.d.ts.map +1 -0
  124. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +1 -0
  125. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
  126. package/types/domain/usecases/QualityCheckAdvanceUseCase.d.ts.map +1 -1
  127. package/types/domain/usecases/ReopenedDoneIssueRevertUseCase.d.ts +12 -0
  128. package/types/domain/usecases/ReopenedDoneIssueRevertUseCase.d.ts.map +1 -0
  129. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  130. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +3 -0
  131. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  132. package/bin/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +0 -2
  133. package/bin/adapter/entry-points/console/ui-dist/assets/index-DQT4HL0G.js +0 -86
  134. package/src/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +0 -2
  135. package/src/adapter/entry-points/console/ui-dist/assets/index-DQT4HL0G.js +0 -86
@@ -1,6 +1,8 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
- import { colorFromEnum } from '../../logic/colors';
3
- import type { ConsoleStoryEntry } from '../../logic/types';
2
+ import { CONSOLE_COLOR_PALETTE, colorFromEnum } from '../../logic/colors';
3
+ import type { ConsoleColor, ConsoleStoryEntry } from '../../logic/types';
4
+
5
+ const ALL_COLORS = Object.keys(CONSOLE_COLOR_PALETTE) as ConsoleColor[];
4
6
 
5
7
  type InlineInputFormProps = {
6
8
  placeholder: string;
@@ -97,12 +99,44 @@ const StoryCreateForm = ({
97
99
  />
98
100
  );
99
101
 
102
+ type ColorPaletteProps = {
103
+ onSelectColor: (color: ConsoleColor) => void;
104
+ disabled: boolean;
105
+ };
106
+
107
+ const ColorPalette = ({ onSelectColor, disabled }: ColorPaletteProps) => (
108
+ <div className="console-story-color-palette">
109
+ {ALL_COLORS.map((color) => {
110
+ const palette = CONSOLE_COLOR_PALETTE[color];
111
+ return (
112
+ <button
113
+ key={color}
114
+ type="button"
115
+ className="console-story-color-swatch"
116
+ aria-label={color === 'GRAY' ? `${color} (disable)` : color}
117
+ style={{ backgroundColor: palette.dot }}
118
+ onClick={() => onSelectColor(color)}
119
+ disabled={disabled}
120
+ >
121
+ {color === 'GRAY' && (
122
+ <span className="console-story-color-swatch-label">disable</span>
123
+ )}
124
+ </button>
125
+ );
126
+ })}
127
+ </div>
128
+ );
129
+
100
130
  export type ConsoleStoryListProps = {
101
131
  stories: ConsoleStoryEntry[];
102
132
  isLoading: boolean;
103
133
  error: string | null;
104
134
  onCreateIssue: (storyOptionId: string, title: string) => Promise<void>;
105
135
  onAddStory: (storyName: string) => Promise<void>;
136
+ onSelectColor: (storyOptionId: string, newColor: ConsoleColor) => void;
137
+ optimisticColors: Record<string, ConsoleColor>;
138
+ colorChangeInFlight: string | null;
139
+ colorErrors: Record<string, string>;
106
140
  };
107
141
 
108
142
  export const ConsoleStoryList = ({
@@ -111,9 +145,16 @@ export const ConsoleStoryList = ({
111
145
  error,
112
146
  onCreateIssue,
113
147
  onAddStory,
148
+ onSelectColor,
149
+ optimisticColors,
150
+ colorChangeInFlight,
151
+ colorErrors,
114
152
  }: ConsoleStoryListProps) => {
115
153
  const [expandedOptionId, setExpandedOptionId] = useState<string | null>(null);
116
154
  const [addStoryExpanded, setAddStoryExpanded] = useState(false);
155
+ const [colorPickerOptionId, setColorPickerOptionId] = useState<string | null>(
156
+ null,
157
+ );
117
158
 
118
159
  if (error !== null) {
119
160
  return (
@@ -141,6 +182,20 @@ export const ConsoleStoryList = ({
141
182
  setExpandedOptionId(null);
142
183
  };
143
184
 
185
+ const handleColorButtonClick = (storyOptionId: string): void => {
186
+ setColorPickerOptionId(
187
+ colorPickerOptionId === storyOptionId ? null : storyOptionId,
188
+ );
189
+ };
190
+
191
+ const handleSwatchClick = (
192
+ storyOptionId: string,
193
+ newColor: ConsoleColor,
194
+ ): void => {
195
+ setColorPickerOptionId(null);
196
+ onSelectColor(storyOptionId, newColor);
197
+ };
198
+
144
199
  return (
145
200
  <div className="console-story-list-container">
146
201
  {stories.length === 0 ? (
@@ -148,8 +203,13 @@ export const ConsoleStoryList = ({
148
203
  ) : (
149
204
  <ul className="console-story-list">
150
205
  {stories.map((entry) => {
151
- const palette = colorFromEnum(entry.color);
206
+ const displayColor: ConsoleColor =
207
+ optimisticColors[entry.storyOptionId] ?? entry.color;
208
+ const palette = colorFromEnum(displayColor);
152
209
  const isExpanded = expandedOptionId === entry.storyOptionId;
210
+ const isPickerOpen = colorPickerOptionId === entry.storyOptionId;
211
+ const isInFlight = colorChangeInFlight === entry.storyOptionId;
212
+ const colorError = colorErrors[entry.storyOptionId] ?? null;
153
213
  return (
154
214
  <li key={entry.storyOptionId} className="console-story-list-row">
155
215
  <div className="console-story-list-row-main">
@@ -189,7 +249,28 @@ export const ConsoleStoryList = ({
189
249
  >
190
250
  Add task
191
251
  </button>
252
+ <button
253
+ type="button"
254
+ className="console-op-button"
255
+ onClick={() => handleColorButtonClick(entry.storyOptionId)}
256
+ disabled={isInFlight}
257
+ >
258
+ Change color
259
+ </button>
192
260
  </div>
261
+ {isPickerOpen && (
262
+ <ColorPalette
263
+ onSelectColor={(newColor) =>
264
+ handleSwatchClick(entry.storyOptionId, newColor)
265
+ }
266
+ disabled={isInFlight}
267
+ />
268
+ )}
269
+ {colorError !== null && (
270
+ <p role="alert" className="console-list-error">
271
+ {colorError}
272
+ </p>
273
+ )}
193
274
  {isExpanded && (
194
275
  <StoryCreateForm
195
276
  storyOptionId={entry.storyOptionId}
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  ConsoleChangedFile,
3
+ ConsoleColor,
3
4
  ConsoleComment,
4
5
  ConsoleCommit,
5
6
  ConsoleIssueState,
@@ -418,6 +419,28 @@ export type ConsoleCreateIssueRequest = {
418
419
  nameWithOwner: string;
419
420
  };
420
421
 
422
+ export const STORY_COLOR_OPERATION_PATH = '/api/storycolor';
423
+
424
+ export type ConsoleStoryColorRequest = {
425
+ pjcode: string;
426
+ storyOptionId: string;
427
+ newColor: ConsoleColor;
428
+ nameWithOwner: string;
429
+ };
430
+
431
+ export const postConsoleStoryColor = async (
432
+ request: ConsoleStoryColorRequest,
433
+ ): Promise<void> => {
434
+ const response = await fetch(STORY_COLOR_OPERATION_PATH, {
435
+ method: 'POST',
436
+ headers: { 'Content-Type': 'application/json' },
437
+ body: JSON.stringify(request),
438
+ });
439
+ if (!response.ok) {
440
+ throw new Error(await readOperationErrorReason(response));
441
+ }
442
+ };
443
+
421
444
  export const postConsoleCreateIssue = async (
422
445
  request: ConsoleCreateIssueRequest,
423
446
  ): Promise<string> => {
@@ -24,6 +24,7 @@ import {
24
24
  postConsoleAddStory,
25
25
  postConsoleCreateIssue,
26
26
  postConsoleReorderStory,
27
+ postConsoleStoryColor,
27
28
  } from '../lib/consoleApi';
28
29
  import { navigateAssign, navigateReplace } from '../lib/navigation';
29
30
  import {
@@ -48,6 +49,7 @@ import type { ConsoleSwipeDirection } from '../logic/swipe';
48
49
  import { findNextNonEmptyTabToRight } from '../logic/tabAdvance';
49
50
  import { findNextPjcodeWithMinutes } from '../logic/timerSettings';
50
51
  import type {
52
+ ConsoleColor,
51
53
  ConsoleListItem,
52
54
  ConsoleOverlayStatus,
53
55
  ConsoleTabName,
@@ -386,6 +388,73 @@ export const ConsolePage = () => {
386
388
  [pjcode],
387
389
  );
388
390
 
391
+ const [storyOptimisticColors, setStoryOptimisticColors] = useState<
392
+ Record<string, ConsoleColor>
393
+ >({});
394
+ const [storyColorChangeInFlight, setStoryColorChangeInFlight] = useState<
395
+ string | null
396
+ >(null);
397
+ const [storyColorErrors, setStoryColorErrors] = useState<
398
+ Record<string, string>
399
+ >({});
400
+
401
+ const handleSelectColor = useCallback(
402
+ (storyOptionId: string, newColor: ConsoleColor): void => {
403
+ const originalEntry = storyEntries.find(
404
+ (e) => e.storyOptionId === storyOptionId,
405
+ );
406
+ const originalColor = originalEntry?.color;
407
+ setStoryColorChangeInFlight(storyOptionId);
408
+ setStoryOptimisticColors((prev) => ({
409
+ ...prev,
410
+ [storyOptionId]: newColor,
411
+ }));
412
+ setStoryColorErrors((prev) => {
413
+ const next = { ...prev };
414
+ delete next[storyOptionId];
415
+ return next;
416
+ });
417
+ if (pjcode === null || defaultNameWithOwner === null) {
418
+ setStoryOptimisticColors((prev) =>
419
+ originalColor !== undefined
420
+ ? { ...prev, [storyOptionId]: originalColor }
421
+ : prev,
422
+ );
423
+ setStoryColorErrors((prev) => ({
424
+ ...prev,
425
+ [storyOptionId]: 'No project or repository configured.',
426
+ }));
427
+ setStoryColorChangeInFlight((current) =>
428
+ current === storyOptionId ? null : current,
429
+ );
430
+ return;
431
+ }
432
+ postConsoleStoryColor({
433
+ pjcode,
434
+ storyOptionId,
435
+ newColor,
436
+ nameWithOwner: defaultNameWithOwner,
437
+ })
438
+ .catch((err: unknown) => {
439
+ setStoryOptimisticColors((prev) =>
440
+ originalColor !== undefined
441
+ ? { ...prev, [storyOptionId]: originalColor }
442
+ : prev,
443
+ );
444
+ setStoryColorErrors((prev) => ({
445
+ ...prev,
446
+ [storyOptionId]: err instanceof Error ? err.message : String(err),
447
+ }));
448
+ })
449
+ .finally(() => {
450
+ setStoryColorChangeInFlight((current) =>
451
+ current === storyOptionId ? null : current,
452
+ );
453
+ });
454
+ },
455
+ [pjcode, defaultNameWithOwner, storyEntries],
456
+ );
457
+
389
458
  return (
390
459
  <main className="console-app">
391
460
  {actionQueue.pending !== null && (
@@ -433,6 +502,10 @@ export const ConsolePage = () => {
433
502
  error={error}
434
503
  onCreateIssue={handleCreateIssue}
435
504
  onAddStory={handleStoryAdd}
505
+ onSelectColor={handleSelectColor}
506
+ optimisticColors={storyOptimisticColors}
507
+ colorChangeInFlight={storyColorChangeInFlight}
508
+ colorErrors={storyColorErrors}
436
509
  />
437
510
  ) : selectedItem === null ? (
438
511
  <>
@@ -297,6 +297,41 @@ body {
297
297
  font-size: 0.75rem;
298
298
  }
299
299
 
300
+ .console-story-color-palette {
301
+ display: flex;
302
+ flex-wrap: wrap;
303
+ gap: 4px;
304
+ padding: 6px 0;
305
+ }
306
+
307
+ .console-story-color-swatch {
308
+ width: 28px;
309
+ height: 28px;
310
+ border-radius: 6px;
311
+ border: 2px solid transparent;
312
+ cursor: pointer;
313
+ display: inline-flex;
314
+ align-items: center;
315
+ justify-content: center;
316
+ font-size: 0.625rem;
317
+ color: #e6edf3;
318
+ padding: 0;
319
+ }
320
+
321
+ .console-story-color-swatch:hover {
322
+ border-color: #e6edf3;
323
+ }
324
+
325
+ .console-story-color-swatch:disabled {
326
+ opacity: 0.4;
327
+ cursor: not-allowed;
328
+ }
329
+
330
+ .console-story-color-swatch-label {
331
+ font-size: 0.5rem;
332
+ line-height: 1;
333
+ }
334
+
300
335
  .console-item-row {
301
336
  display: flex;
302
337
  gap: 14px;