@skillcdn/console 0.1.19 → 0.1.21

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 (69) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/cli.d.ts.map +1 -1
  3. package/dist/cli/cli.js +6 -0
  4. package/dist/cli/cli.js.map +1 -1
  5. package/dist/cli/help.d.ts.map +1 -1
  6. package/dist/cli/help.js +6 -8
  7. package/dist/cli/help.js.map +1 -1
  8. package/dist/components/board.d.ts +19 -9
  9. package/dist/components/board.d.ts.map +1 -1
  10. package/dist/components/board.js +210 -28
  11. package/dist/components/board.js.map +1 -1
  12. package/dist/components/comments.d.ts +0 -2
  13. package/dist/components/comments.d.ts.map +1 -1
  14. package/dist/components/comments.js +4 -39
  15. package/dist/components/comments.js.map +1 -1
  16. package/dist/components/documents.d.ts +2 -0
  17. package/dist/components/documents.d.ts.map +1 -1
  18. package/dist/components/documents.js +51 -5
  19. package/dist/components/documents.js.map +1 -1
  20. package/dist/components/files.d.ts +11 -0
  21. package/dist/components/files.d.ts.map +1 -0
  22. package/dist/components/files.js +44 -0
  23. package/dist/components/files.js.map +1 -0
  24. package/dist/components/runs.d.ts.map +1 -1
  25. package/dist/components/runs.js +34 -7
  26. package/dist/components/runs.js.map +1 -1
  27. package/dist/components/task-view.d.ts.map +1 -1
  28. package/dist/components/task-view.js +2 -4
  29. package/dist/components/task-view.js.map +1 -1
  30. package/dist/console.css +144 -80
  31. package/dist/console.d.ts.map +1 -1
  32. package/dist/console.js +3 -3
  33. package/dist/console.js.map +1 -1
  34. package/dist/docs-page.d.ts.map +1 -1
  35. package/dist/docs-page.js +14 -1
  36. package/dist/docs-page.js.map +1 -1
  37. package/dist/i18n/en.d.ts +6 -3
  38. package/dist/i18n/en.d.ts.map +1 -1
  39. package/dist/i18n/en.js +7 -4
  40. package/dist/i18n/en.js.map +1 -1
  41. package/dist/i18n/ko.d.ts.map +1 -1
  42. package/dist/i18n/ko.js +7 -4
  43. package/dist/i18n/ko.js.map +1 -1
  44. package/dist/index.d.ts +2 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +2 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/rules.d.ts.map +1 -1
  49. package/dist/rules.js +2 -1
  50. package/dist/rules.js.map +1 -1
  51. package/docs/specs/cli.md +4 -4
  52. package/docs/specs/rest.md +3 -4
  53. package/package.json +1 -1
  54. package/skills/working-the-board/SKILL.md +4 -4
  55. package/src/cli/cli.ts +6 -0
  56. package/src/cli/help.ts +6 -8
  57. package/src/components/board.tsx +357 -77
  58. package/src/components/comments.tsx +10 -39
  59. package/src/components/documents.tsx +87 -4
  60. package/src/components/files.ts +49 -0
  61. package/src/components/runs.tsx +73 -15
  62. package/src/components/task-view.tsx +10 -12
  63. package/src/console.tsx +20 -8
  64. package/src/docs-page.tsx +18 -1
  65. package/src/i18n/en.ts +8 -4
  66. package/src/i18n/ko.ts +8 -4
  67. package/src/index.ts +1 -1
  68. package/src/rules.ts +2 -1
  69. package/src/styles/console.css +144 -80
package/dist/console.css CHANGED
@@ -710,6 +710,42 @@ 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
+
721
+ /* A page's name with a word about it beside: on one line where the window is wide, so that the
722
+ head stays low over the board; under the name where it is not. */
723
+ .sc-page-heading {
724
+ display: flex;
725
+ flex: 1 1 auto;
726
+ flex-wrap: wrap;
727
+ align-items: baseline;
728
+ min-width: 0;
729
+ column-gap: var(--sc-space-4);
730
+ row-gap: var(--sc-space-1);
731
+ }
732
+
733
+ .sc-page-lead {
734
+ flex: 1 1 16rem;
735
+ min-width: 0;
736
+ margin: 0;
737
+ color: var(--sc-color-text-muted);
738
+ font-size: var(--sc-text-sm);
739
+ }
740
+
741
+ @media (min-width: 60rem) {
742
+ .sc-page-lead {
743
+ overflow: hidden;
744
+ text-overflow: ellipsis;
745
+ white-space: nowrap;
746
+ }
747
+ }
748
+
713
749
  .sc-lead {
714
750
  max-width: var(--sc-width-prose);
715
751
  margin-bottom: var(--sc-space-5);
@@ -778,6 +814,12 @@ table {
778
814
  pointer-events: none;
779
815
  }
780
816
 
817
+ /* A column's frame stands in front of what scrolls within it: a card scrolling out goes under
818
+ the lit edge, never over it. The other panes do not scroll, and keep the rim under the content. */
819
+ .sc-column::before {
820
+ z-index: 1;
821
+ }
822
+
781
823
  .sc-panel {
782
824
  margin-bottom: var(--sc-space-5);
783
825
  padding: var(--sc-space-5);
@@ -1342,28 +1384,6 @@ table {
1342
1384
  flex: 1;
1343
1385
  }
1344
1386
 
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
1387
  /* One task, and a page of the documents: the text in a column for reading, the facts beside it
1368
1388
  where the window is wide enough, under it where it is not. */
1369
1389
 
@@ -2166,8 +2186,9 @@ table {
2166
2186
  font-size: var(--sc-text-sm);
2167
2187
  }
2168
2188
 
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. */
2189
+ /* A picture in a comment, or handed in on a run, is a thumbnail, no taller than a few lines, that
2190
+ opens large over the page; a picture that only comes over https, or one on a page of the
2191
+ documents, stays where it is, as the text has it. */
2171
2192
  .sc-picture-thumb {
2172
2193
  display: inline-block;
2173
2194
  padding: 0;
@@ -2279,7 +2300,8 @@ table {
2279
2300
  font-size: var(--sc-text-sm);
2280
2301
  }
2281
2302
 
2282
- .sc-comment-picture {
2303
+ .sc-comment-picture,
2304
+ .sc-artifact-picture {
2283
2305
  display: grid;
2284
2306
  gap: var(--sc-space-1);
2285
2307
  justify-items: start;
@@ -2290,7 +2312,8 @@ table {
2290
2312
  gap: var(--sc-space-2);
2291
2313
  }
2292
2314
 
2293
- .sc-comment-chosen {
2315
+ .sc-comment-chosen,
2316
+ .sc-chosen-files {
2294
2317
  display: flex;
2295
2318
  flex-wrap: wrap;
2296
2319
  gap: var(--sc-space-2);
@@ -2300,7 +2323,8 @@ table {
2300
2323
  font-size: var(--sc-text-sm);
2301
2324
  }
2302
2325
 
2303
- .sc-comment-chosen-file {
2326
+ .sc-comment-chosen-file,
2327
+ .sc-chosen-file {
2304
2328
  display: inline-flex;
2305
2329
  align-items: center;
2306
2330
  gap: var(--sc-space-1);
@@ -2318,13 +2342,15 @@ table {
2318
2342
  gap: var(--sc-space-2);
2319
2343
  }
2320
2344
 
2321
- .sc-comment-form-actions label {
2345
+ .sc-comment-form-actions label,
2346
+ .sc-file-choice {
2322
2347
  position: relative;
2323
2348
  cursor: pointer;
2324
2349
  }
2325
2350
 
2326
2351
  /* The file input is the label's: there for the keyboard and the screen reader, not seen. */
2327
- .sc-comment-file-input {
2352
+ .sc-comment-file-input,
2353
+ .sc-file-input {
2328
2354
  position: absolute;
2329
2355
  width: 1px;
2330
2356
  height: 1px;
@@ -2520,6 +2546,14 @@ table {
2520
2546
  opacity: 0.85;
2521
2547
  }
2522
2548
 
2549
+ /* The pictures for a page, under its body: the way to add one, and what becomes of it. */
2550
+ .sc-doc-form-pictures {
2551
+ display: flex;
2552
+ flex-wrap: wrap;
2553
+ align-items: center;
2554
+ gap: var(--sc-space-2);
2555
+ }
2556
+
2523
2557
  .sc-doc-attach {
2524
2558
  display: flex;
2525
2559
  flex-wrap: wrap;
@@ -2600,13 +2634,6 @@ table {
2600
2634
  }
2601
2635
  }
2602
2636
 
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
2637
  /* The schedule, the roadmap and the categories (ADR-0019). */
2611
2638
 
2612
2639
  /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
@@ -3775,14 +3802,40 @@ table {
3775
3802
  }
3776
3803
  }
3777
3804
 
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. */
3805
+ /* A card is dragged to another column from anywhere on it but its menu, its title included: with
3806
+ a mouse at once, under a finger once it has rested a moment, so that a finger that moves
3807
+ scrolls. The column under the dragged card says it would take it, and the card itself, whole,
3808
+ follows the pointer while a faded one keeps its place. */
3781
3809
  .sc-card {
3782
3810
  position: relative;
3783
3811
  }
3784
3812
 
3785
- .sc-card-grip {
3813
+ .sc-card-movable {
3814
+ cursor: grab;
3815
+ }
3816
+
3817
+ /* A finger resting on a card is neither selecting its words nor asking for the page's menu. */
3818
+ @media (pointer: coarse) {
3819
+ .sc-card-movable {
3820
+ -webkit-touch-callout: none;
3821
+ user-select: none;
3822
+ }
3823
+ }
3824
+
3825
+ .sc-card-dragging {
3826
+ opacity: 0.4;
3827
+ }
3828
+
3829
+ .sc-board-dragging,
3830
+ .sc-board-dragging .sc-card,
3831
+ .sc-board-dragging .sc-card * {
3832
+ cursor: grabbing;
3833
+ user-select: none;
3834
+ }
3835
+
3836
+ /* The card's menu: three dots in the corner, seen on the card under the pointer or with the
3837
+ focus, and always to a finger; the menu itself stands over the page, clipped by no column. */
3838
+ .sc-card-menu-button {
3786
3839
  position: absolute;
3787
3840
  top: var(--sc-space-1);
3788
3841
  right: var(--sc-space-1);
@@ -3796,36 +3849,66 @@ table {
3796
3849
  border-radius: var(--sc-radius-sm);
3797
3850
  background: none;
3798
3851
  color: var(--sc-color-text-faint);
3799
- font-size: var(--sc-text-sm);
3800
- letter-spacing: -0.15em;
3801
- cursor: grab;
3852
+ cursor: pointer;
3802
3853
  opacity: 0;
3803
- touch-action: none;
3804
- transition: opacity var(--sc-transition);
3854
+ transition:
3855
+ opacity var(--sc-transition),
3856
+ background var(--sc-transition),
3857
+ color var(--sc-transition);
3805
3858
  }
3806
3859
 
3807
- .sc-card:hover .sc-card-grip,
3808
- .sc-card:focus-within .sc-card-grip,
3809
- .sc-card.sc-card-dragging .sc-card-grip {
3860
+ .sc-card-menu-button svg {
3861
+ width: 1rem;
3862
+ height: 1rem;
3863
+ }
3864
+
3865
+ /* Shown on the card under the pointer or with the focus, while the menu is open, and on the card
3866
+ in hand, which is the card as it was hovered: its menu's dots, and the room they take. */
3867
+ .sc-drag-ghost .sc-card-menu-button,
3868
+ .sc-card:hover .sc-card-menu-button,
3869
+ .sc-card:focus-within .sc-card-menu-button,
3870
+ .sc-card-menu-button[aria-expanded="true"] {
3810
3871
  opacity: 1;
3811
3872
  }
3812
3873
 
3874
+ .sc-card-menu-button:hover,
3875
+ .sc-card-menu-button[aria-expanded="true"] {
3876
+ background: var(--sc-color-bg-inset);
3877
+ color: var(--sc-color-text);
3878
+ }
3879
+
3880
+ .sc-card-menu-button:focus-visible {
3881
+ outline: 2px solid var(--sc-color-accent);
3882
+ outline-offset: 1px;
3883
+ }
3884
+
3813
3885
  @media (pointer: coarse) {
3814
- .sc-card-grip {
3886
+ .sc-card-menu-button {
3815
3887
  opacity: 1;
3816
3888
  }
3817
3889
  }
3818
3890
 
3819
- .sc-card:has(.sc-card-grip) .sc-card-title {
3891
+ .sc-card:has(.sc-card-menu-button) .sc-card-title {
3820
3892
  padding-right: 1.75rem;
3821
3893
  }
3822
3894
 
3823
- .sc-card-dragging {
3824
- opacity: 0.5;
3895
+ .sc-card-menu {
3896
+ position: fixed;
3897
+ z-index: 60;
3898
+ display: flex;
3899
+ flex-direction: column;
3900
+ min-width: 8rem;
3901
+ padding: var(--sc-space-1);
3902
+ border: var(--sc-border);
3903
+ border-radius: var(--sc-radius-md);
3904
+ background: var(--sc-color-bg-inset);
3905
+ box-shadow: var(--sc-shadow-stage);
3906
+ font-size: var(--sc-text-sm);
3825
3907
  }
3826
3908
 
3827
- .sc-board-dragging {
3828
- user-select: none;
3909
+ .sc-card-menu .sc-menu-link {
3910
+ padding: calc(var(--sc-space-1) + 1px) var(--sc-space-2);
3911
+ border-radius: var(--sc-radius-sm);
3829
3912
  }
3830
3913
 
3831
3914
  .sc-column-over {
@@ -3838,17 +3921,16 @@ table {
3838
3921
  top: 0;
3839
3922
  left: 0;
3840
3923
  z-index: 50;
3841
- max-width: 18rem;
3842
- padding: var(--sc-space-2) var(--sc-space-3);
3843
- border: 1px solid var(--sc-color-accent);
3844
- border-radius: var(--sc-radius-lg);
3845
- background: var(--sc-color-bg-raised);
3846
- box-shadow: var(--sc-glow);
3847
- color: var(--sc-color-text);
3848
- font-size: var(--sc-text-sm);
3849
3924
  pointer-events: none;
3850
3925
  }
3851
3926
 
3927
+ .sc-drag-ghost .sc-card {
3928
+ border-color: var(--sc-color-accent);
3929
+ background: var(--sc-color-bg-raised);
3930
+ box-shadow: var(--sc-shadow-stage);
3931
+ transform: scale(1.02);
3932
+ }
3933
+
3852
3934
  /* A goal's page reads as the board does: the facts in a row at its head, then a switch between
3853
3935
  the views of its tasks, then the view, which takes the rest of the height as the board does. */
3854
3936
  .sc-goal-page {
@@ -3941,21 +4023,3 @@ table {
3941
4023
  .sc-goal-view-list {
3942
4024
  display: block;
3943
4025
  }
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":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,aAAa,EAYlB,KAAK,WAAW,EAajB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAuB,KAAK,UAAU,EAAsB,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAY,KAAK,aAAa,EAAY,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGlF,OAAO,EAA8B,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAsB,KAAK,aAAa,EAAuB,MAAM,uBAAuB,CAAC;AAEpG,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAEL,KAAK,eAAe,EAIpB,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,KAAK,KAAK,EAIV,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAW7F,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,WAAW,CAAC;AAG7D,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,QAAQ,EAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EASL,KAAK,UAAU,EASf,KAAK,KAAK,EAOX,MAAM,aAAa,CAAC;AAUrB,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAgBhC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,mGAAmG;IACnG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yHAAyH;IACzH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,SAAS,CAAC;CAC5D;AAED,wGAAwG;AACxG,MAAM,WAAW,iBAAiB;IAChC,mGAAmG;IACnG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,8IAA8I;AAC9I,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAYrE;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAC7D,4HAA4H;IAC5H,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IACzD,wGAAwG;IACxG,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC3E,mFAAmF;IACnF,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,IAAI,CAAC;CACvC;AA6HD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAOpD;AA4oDD,wBAAgB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CAmTpE"}
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: [_jsxs("div", { className: "sc-page-heading", children: [_jsx("h1", { className: "sc-page-title", children: project.name }), project.description.length > 0 && (_jsx("p", { className: "sc-page-lead", title: project.description, children: project.description }))] }), _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 })] })] }), 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 }));