@skillcdn/console 0.1.19 → 0.1.20

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 (56) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/help.js +2 -2
  3. package/dist/cli/help.js.map +1 -1
  4. package/dist/components/board.d.ts +18 -8
  5. package/dist/components/board.d.ts.map +1 -1
  6. package/dist/components/board.js +180 -27
  7. package/dist/components/board.js.map +1 -1
  8. package/dist/components/comments.d.ts +0 -2
  9. package/dist/components/comments.d.ts.map +1 -1
  10. package/dist/components/comments.js +4 -39
  11. package/dist/components/comments.js.map +1 -1
  12. package/dist/components/documents.d.ts +2 -0
  13. package/dist/components/documents.d.ts.map +1 -1
  14. package/dist/components/documents.js +51 -5
  15. package/dist/components/documents.js.map +1 -1
  16. package/dist/components/files.d.ts +11 -0
  17. package/dist/components/files.d.ts.map +1 -0
  18. package/dist/components/files.js +44 -0
  19. package/dist/components/files.js.map +1 -0
  20. package/dist/components/runs.d.ts.map +1 -1
  21. package/dist/components/runs.js +34 -7
  22. package/dist/components/runs.js.map +1 -1
  23. package/dist/console.css +96 -74
  24. package/dist/console.d.ts.map +1 -1
  25. package/dist/console.js +3 -3
  26. package/dist/console.js.map +1 -1
  27. package/dist/docs-page.d.ts.map +1 -1
  28. package/dist/docs-page.js +14 -1
  29. package/dist/docs-page.js.map +1 -1
  30. package/dist/i18n/en.d.ts +6 -3
  31. package/dist/i18n/en.d.ts.map +1 -1
  32. package/dist/i18n/en.js +6 -3
  33. package/dist/i18n/en.js.map +1 -1
  34. package/dist/i18n/ko.d.ts.map +1 -1
  35. package/dist/i18n/ko.js +6 -3
  36. package/dist/i18n/ko.js.map +1 -1
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -1
  40. package/dist/index.js.map +1 -1
  41. package/docs/specs/cli.md +2 -2
  42. package/docs/specs/rest.md +2 -2
  43. package/package.json +1 -1
  44. package/skills/working-the-board/SKILL.md +3 -3
  45. package/src/cli/help.ts +2 -2
  46. package/src/components/board.tsx +300 -73
  47. package/src/components/comments.tsx +10 -39
  48. package/src/components/documents.tsx +87 -4
  49. package/src/components/files.ts +49 -0
  50. package/src/components/runs.tsx +73 -15
  51. package/src/console.tsx +12 -6
  52. package/src/docs-page.tsx +18 -1
  53. package/src/i18n/en.ts +7 -3
  54. package/src/i18n/ko.ts +7 -3
  55. package/src/index.ts +1 -1
  56. package/src/styles/console.css +96 -74
package/dist/console.css CHANGED
@@ -710,6 +710,14 @@ table {
710
710
  letter-spacing: -0.02em;
711
711
  }
712
712
 
713
+ /* The ways a page offers at its head, side by side. */
714
+ .sc-page-actions {
715
+ display: flex;
716
+ flex-wrap: wrap;
717
+ align-items: center;
718
+ gap: var(--sc-space-2);
719
+ }
720
+
713
721
  .sc-lead {
714
722
  max-width: var(--sc-width-prose);
715
723
  margin-bottom: var(--sc-space-5);
@@ -1342,28 +1350,6 @@ table {
1342
1350
  flex: 1;
1343
1351
  }
1344
1352
 
1345
- /* Moving a task from its card: a quiet control, as wide as the card. */
1346
- .sc-card-move select {
1347
- width: 100%;
1348
- min-height: 1.75rem;
1349
- padding: 0 var(--sc-space-2);
1350
- border: 1px solid transparent;
1351
- border-radius: var(--sc-radius-sm);
1352
- background: transparent;
1353
- color: var(--sc-color-text-faint);
1354
- font-size: var(--sc-text-xs);
1355
- transition:
1356
- border-color var(--sc-transition),
1357
- color var(--sc-transition);
1358
- }
1359
-
1360
- .sc-card-move select:hover,
1361
- .sc-card-move select:focus {
1362
- border-color: var(--sc-color-border-strong);
1363
- background: var(--sc-color-field);
1364
- color: var(--sc-color-text);
1365
- }
1366
-
1367
1353
  /* One task, and a page of the documents: the text in a column for reading, the facts beside it
1368
1354
  where the window is wide enough, under it where it is not. */
1369
1355
 
@@ -2166,8 +2152,9 @@ table {
2166
2152
  font-size: var(--sc-text-sm);
2167
2153
  }
2168
2154
 
2169
- /* A picture in a comment is a thumbnail, no taller than a few lines, that opens large over the
2170
- page; a picture that only comes over https stays where it is, as small. */
2155
+ /* A picture in a comment, or handed in on a run, is a thumbnail, no taller than a few lines, that
2156
+ opens large over the page; a picture that only comes over https, or one on a page of the
2157
+ documents, stays where it is, as the text has it. */
2171
2158
  .sc-picture-thumb {
2172
2159
  display: inline-block;
2173
2160
  padding: 0;
@@ -2279,7 +2266,8 @@ table {
2279
2266
  font-size: var(--sc-text-sm);
2280
2267
  }
2281
2268
 
2282
- .sc-comment-picture {
2269
+ .sc-comment-picture,
2270
+ .sc-artifact-picture {
2283
2271
  display: grid;
2284
2272
  gap: var(--sc-space-1);
2285
2273
  justify-items: start;
@@ -2290,7 +2278,8 @@ table {
2290
2278
  gap: var(--sc-space-2);
2291
2279
  }
2292
2280
 
2293
- .sc-comment-chosen {
2281
+ .sc-comment-chosen,
2282
+ .sc-chosen-files {
2294
2283
  display: flex;
2295
2284
  flex-wrap: wrap;
2296
2285
  gap: var(--sc-space-2);
@@ -2300,7 +2289,8 @@ table {
2300
2289
  font-size: var(--sc-text-sm);
2301
2290
  }
2302
2291
 
2303
- .sc-comment-chosen-file {
2292
+ .sc-comment-chosen-file,
2293
+ .sc-chosen-file {
2304
2294
  display: inline-flex;
2305
2295
  align-items: center;
2306
2296
  gap: var(--sc-space-1);
@@ -2318,13 +2308,15 @@ table {
2318
2308
  gap: var(--sc-space-2);
2319
2309
  }
2320
2310
 
2321
- .sc-comment-form-actions label {
2311
+ .sc-comment-form-actions label,
2312
+ .sc-file-choice {
2322
2313
  position: relative;
2323
2314
  cursor: pointer;
2324
2315
  }
2325
2316
 
2326
2317
  /* The file input is the label's: there for the keyboard and the screen reader, not seen. */
2327
- .sc-comment-file-input {
2318
+ .sc-comment-file-input,
2319
+ .sc-file-input {
2328
2320
  position: absolute;
2329
2321
  width: 1px;
2330
2322
  height: 1px;
@@ -2520,6 +2512,14 @@ table {
2520
2512
  opacity: 0.85;
2521
2513
  }
2522
2514
 
2515
+ /* The pictures for a page, under its body: the way to add one, and what becomes of it. */
2516
+ .sc-doc-form-pictures {
2517
+ display: flex;
2518
+ flex-wrap: wrap;
2519
+ align-items: center;
2520
+ gap: var(--sc-space-2);
2521
+ }
2522
+
2523
2523
  .sc-doc-attach {
2524
2524
  display: flex;
2525
2525
  flex-wrap: wrap;
@@ -2600,13 +2600,6 @@ table {
2600
2600
  }
2601
2601
  }
2602
2602
 
2603
- /* Where there is no pointer to hover with, the control on a card is as tall as a finger needs. */
2604
- @media (hover: none) {
2605
- .sc-card-move select {
2606
- min-height: 2rem;
2607
- }
2608
- }
2609
-
2610
2603
  /* The schedule, the roadmap and the categories (ADR-0019). */
2611
2604
 
2612
2605
  /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
@@ -3775,14 +3768,40 @@ table {
3775
3768
  }
3776
3769
  }
3777
3770
 
3778
- /* A card is dragged to another column by its grip, which shows on the card under the pointer
3779
- and always to a finger; the column under the dragged card says it would take it, and a ghost
3780
- of the card follows the pointer. The keyboard keeps the select. */
3771
+ /* A card is dragged to another column from anywhere on it but its title and its menu: with a
3772
+ mouse at once, under a finger once it has rested a moment, so that a finger that moves scrolls.
3773
+ The cursor is the standard `move`, which every platform draws itself; the column under the
3774
+ dragged card says it would take it, and a ghost of the card follows the pointer. */
3781
3775
  .sc-card {
3782
3776
  position: relative;
3783
3777
  }
3784
3778
 
3785
- .sc-card-grip {
3779
+ .sc-card-movable {
3780
+ cursor: move;
3781
+ }
3782
+
3783
+ /* A finger resting on a card is neither selecting its words nor asking for the page's menu. */
3784
+ @media (pointer: coarse) {
3785
+ .sc-card-movable {
3786
+ -webkit-touch-callout: none;
3787
+ user-select: none;
3788
+ }
3789
+ }
3790
+
3791
+ .sc-card-dragging {
3792
+ opacity: 0.5;
3793
+ }
3794
+
3795
+ .sc-board-dragging,
3796
+ .sc-board-dragging .sc-card,
3797
+ .sc-board-dragging .sc-card * {
3798
+ cursor: move;
3799
+ user-select: none;
3800
+ }
3801
+
3802
+ /* The card's menu: three dots in the corner, seen on the card under the pointer or with the
3803
+ focus, and always to a finger; the menu itself stands over the page, clipped by no column. */
3804
+ .sc-card-menu-button {
3786
3805
  position: absolute;
3787
3806
  top: var(--sc-space-1);
3788
3807
  right: var(--sc-space-1);
@@ -3796,36 +3815,57 @@ table {
3796
3815
  border-radius: var(--sc-radius-sm);
3797
3816
  background: none;
3798
3817
  color: var(--sc-color-text-faint);
3799
- font-size: var(--sc-text-sm);
3800
- letter-spacing: -0.15em;
3801
- cursor: grab;
3818
+ cursor: pointer;
3802
3819
  opacity: 0;
3803
- touch-action: none;
3804
- transition: opacity var(--sc-transition);
3820
+ transition:
3821
+ opacity var(--sc-transition),
3822
+ background var(--sc-transition),
3823
+ color var(--sc-transition);
3805
3824
  }
3806
3825
 
3807
- .sc-card:hover .sc-card-grip,
3808
- .sc-card:focus-within .sc-card-grip,
3809
- .sc-card.sc-card-dragging .sc-card-grip {
3826
+ .sc-card-menu-button svg {
3827
+ width: 1rem;
3828
+ height: 1rem;
3829
+ }
3830
+
3831
+ .sc-card:hover .sc-card-menu-button,
3832
+ .sc-card:focus-within .sc-card-menu-button,
3833
+ .sc-card-menu-button[aria-expanded="true"] {
3810
3834
  opacity: 1;
3811
3835
  }
3812
3836
 
3837
+ .sc-card-menu-button:hover,
3838
+ .sc-card-menu-button[aria-expanded="true"] {
3839
+ background: var(--sc-color-bg-inset);
3840
+ color: var(--sc-color-text);
3841
+ }
3842
+
3843
+ .sc-card-menu-button:focus-visible {
3844
+ outline: 2px solid var(--sc-color-accent);
3845
+ outline-offset: 1px;
3846
+ }
3847
+
3813
3848
  @media (pointer: coarse) {
3814
- .sc-card-grip {
3849
+ .sc-card-menu-button {
3815
3850
  opacity: 1;
3816
3851
  }
3817
3852
  }
3818
3853
 
3819
- .sc-card:has(.sc-card-grip) .sc-card-title {
3854
+ .sc-card:has(.sc-card-menu-button) .sc-card-title {
3820
3855
  padding-right: 1.75rem;
3821
3856
  }
3822
3857
 
3823
- .sc-card-dragging {
3824
- opacity: 0.5;
3825
- }
3826
-
3827
- .sc-board-dragging {
3828
- user-select: none;
3858
+ .sc-card-menu {
3859
+ position: fixed;
3860
+ z-index: 60;
3861
+ display: flex;
3862
+ flex-direction: column;
3863
+ min-width: 10rem;
3864
+ padding: var(--sc-space-1);
3865
+ border: var(--sc-border);
3866
+ border-radius: var(--sc-radius-lg);
3867
+ background: var(--sc-color-bg-inset);
3868
+ box-shadow: var(--sc-shadow-stage);
3829
3869
  }
3830
3870
 
3831
3871
  .sc-column-over {
@@ -3941,21 +3981,3 @@ table {
3941
3981
  .sc-goal-view-list {
3942
3982
  display: block;
3943
3983
  }
3944
-
3945
- /* The done and dropped columns lead to the archive (ADR-0029), beside their count. */
3946
- .sc-column-meta {
3947
- display: inline-flex;
3948
- align-items: center;
3949
- gap: var(--sc-space-2);
3950
- }
3951
-
3952
- .sc-column-archive {
3953
- color: var(--sc-color-text-muted);
3954
- font-size: var(--sc-text-xs);
3955
- text-decoration: none;
3956
- }
3957
-
3958
- .sc-column-archive:hover {
3959
- color: var(--sc-color-text);
3960
- text-decoration: underline;
3961
- }
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"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"}
package/dist/console.js CHANGED
@@ -236,7 +236,7 @@ function ArchivePage(props) {
236
236
  })
237
237
  .catch(() => undefined);
238
238
  const archive = words.archive;
239
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: archive.title }), _jsx(LinkButton, { href: projectHref(key), children: words.nav.board })] }), _jsx("p", { className: "sc-lead", children: archive.lead }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), !loaded ? (_jsx(Spinner, { label: archive.loading })) : items.length === 0 ? (_jsx(EmptyState, { title: archive.empty.title, body: archive.empty.body })) : (_jsxs(_Fragment, { children: [_jsx("ul", { className: "sc-task-rows", "aria-label": archive.title, children: items.map((task) => (_jsxs("li", { className: "sc-task-row", children: [_jsxs("a", { className: "sc-task-row-title", href: taskHref(key, task.number), children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("span", { className: "sc-task-row-meta", children: [_jsx(StateBadge, { state: task.state }), task.archivedAt !== null && (_jsxs("span", { className: "sc-muted", children: [archive.since, " ", _jsx(Time, { iso: task.archivedAt })] })), _jsx(Button, { size: "sm", variant: "ghost", disabled: busy, onClick: () => void act(async () => {
239
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: archive.title }), _jsx(LinkButton, { href: projectHref(key), children: words.nav.board })] }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), !loaded ? (_jsx(Spinner, { label: archive.loading })) : items.length === 0 ? (_jsx(EmptyState, { title: archive.empty.title, body: archive.empty.body })) : (_jsxs(_Fragment, { children: [_jsx("ul", { className: "sc-task-rows", "aria-label": archive.title, children: items.map((task) => (_jsxs("li", { className: "sc-task-row", children: [_jsxs("a", { className: "sc-task-row-title", href: taskHref(key, task.number), children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("span", { className: "sc-task-row-meta", children: [_jsx(StateBadge, { state: task.state }), task.archivedAt !== null && (_jsxs("span", { className: "sc-muted", children: [archive.since, " ", _jsx(Time, { iso: task.archivedAt })] })), _jsx(Button, { size: "sm", variant: "ghost", disabled: busy, onClick: () => void act(async () => {
240
240
  await data.actions.restoreTask(task.id);
241
241
  setItems((current) => current.filter((candidate) => candidate.id !== task.id));
242
242
  }), children: archive.restore })] })] }, task.id))) }), more && (_jsx("div", { className: "sc-show-more", children: _jsx(Button, { variant: "secondary", size: "sm", onClick: onMore, children: archive.more }) }))] }))] }));
@@ -359,7 +359,7 @@ function ProjectPage(props) {
359
359
  if (route.name === "board") {
360
360
  const me = data.me?.person ?? undefined;
361
361
  const shown = filterTasks(data.tasks, route.filter, me);
362
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: project.name }), _jsx(LinkButton, { href: newTaskHref(key), variant: "primary", children: words.board.writeTask })] }), project.description.length > 0 && _jsx("p", { className: "sc-lead", children: project.description }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), data.tasks.length > 0 && (_jsx(BoardFilters, { filter: route.filter, categories: data.categories, goals: data.goals, people: data.people.filter(inWorkspace), me: me, shown: shown.length, total: data.tasks.length, onChange: (filter) => navigation.replace(boardHref(key, filter)) })), _jsx(components.Board, { tasks: shown, taskHref: href, onOpen: (task) => navigation.go(href(task)), onMove: onMove, archiveHref: projectHref(key, "archive"), empty: data.tasks.length === 0 ? (_jsx(EmptyState, { title: words.board.empty.title, body: words.board.empty.body, action: _jsx(LinkButton, { href: newTaskHref(key), children: words.board.writeTask }) })) : undefined })] }));
362
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: project.name }), _jsxs("div", { className: "sc-page-actions", children: [_jsx(LinkButton, { href: projectHref(key, "archive"), children: words.board.archive }), _jsx(LinkButton, { href: newTaskHref(key), variant: "primary", children: words.board.writeTask })] })] }), project.description.length > 0 && _jsx("p", { className: "sc-lead", children: project.description }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), data.tasks.length > 0 && (_jsx(BoardFilters, { filter: route.filter, categories: data.categories, goals: data.goals, people: data.people.filter(inWorkspace), me: me, shown: shown.length, total: data.tasks.length, onChange: (filter) => navigation.replace(boardHref(key, filter)) })), _jsx(components.Board, { tasks: shown, taskHref: href, onOpen: (task) => navigation.go(href(task)), onMove: onMove, editHref: (task) => taskHref(key, task.number, "edit"), onEdit: (task) => navigation.go(taskHref(key, task.number, "edit")), onArchive: (task) => void act(() => data.actions.archiveTask(task.id)), empty: data.tasks.length === 0 ? (_jsx(EmptyState, { title: words.board.empty.title, body: words.board.empty.body, action: _jsx(LinkButton, { href: newTaskHref(key), children: words.board.writeTask }) })) : undefined })] }));
363
363
  }
364
364
  if (route.name === "new-task") {
365
365
  return (_jsxs(_Fragment, { children: [_jsx("div", { className: "sc-page-head", children: _jsx("h1", { className: "sc-page-title", children: words.task.newTitle }) }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), _jsx("section", { className: "sc-panel sc-panel-form", "aria-label": words.task.newAria, children: _jsx(TaskForm, { people: data.people.filter(inWorkspace), parents: data.tasks, categories: data.categories, goals: data.goals, busy: busy, onSubmit: (input) => void act(async () => {
@@ -425,7 +425,7 @@ function ProjectPage(props) {
425
425
  })
426
426
  : undefined, onArchiveTasks: owner && towards.some((task) => !OPEN_TASK_STATES.includes(task.state))
427
427
  ? () => void act(() => data.actions.archiveGoalTasks(goal.id))
428
- : undefined, busy: busy, view: route.view, viewHref: viewHref, board: _jsx(components.Board, { tasks: towards, taskHref: href, onOpen: (task) => navigation.go(href(task)), onMove: onMove, today: now, archiveHref: projectHref(key, "archive"), empty: towards.length === 0 ? _jsx("p", { className: "sc-muted", children: roadmap.noTasks }) : undefined }), calendar: _jsx(components.Calendar, { tasks: towards, month: month, today: now, categories: data.categories, goals: [goal], taskHref: href, goalHref: (target) => goalHref(key, target.id), monthHref: (wanted) => goalHref(key, goal.id, { view: "calendar", month: wanted }) }) })] }));
428
+ : undefined, busy: busy, view: route.view, viewHref: viewHref, board: _jsx(components.Board, { tasks: towards, taskHref: href, onOpen: (task) => navigation.go(href(task)), onMove: onMove, today: now, editHref: (task) => taskHref(key, task.number, "edit"), onEdit: (task) => navigation.go(taskHref(key, task.number, "edit")), onArchive: (task) => void act(() => data.actions.archiveTask(task.id)), empty: towards.length === 0 ? _jsx("p", { className: "sc-muted", children: roadmap.noTasks }) : undefined }), calendar: _jsx(components.Calendar, { tasks: towards, month: month, today: now, categories: data.categories, goals: [goal], taskHref: href, goalHref: (target) => goalHref(key, target.id), monthHref: (wanted) => goalHref(key, goal.id, { view: "calendar", month: wanted }) }) })] }));
429
429
  }
430
430
  if (route.name === "docs") {
431
431
  return (_jsx(DocsPage, { project: project, path: route.path, view: route.view, data: data, navigation: navigation }));