@skillcdn/console 0.1.15 → 0.1.17

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 (113) hide show
  1. package/README.md +2 -1
  2. package/dist/api.d.ts +3 -3
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +2 -2
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts +2 -0
  7. package/dist/cli/cli.d.ts.map +1 -1
  8. package/dist/cli/cli.js +91 -9
  9. package/dist/cli/cli.js.map +1 -1
  10. package/dist/cli/format.d.ts +7 -2
  11. package/dist/cli/format.d.ts.map +1 -1
  12. package/dist/cli/format.js +23 -2
  13. package/dist/cli/format.js.map +1 -1
  14. package/dist/cli/help.d.ts.map +1 -1
  15. package/dist/cli/help.js +28 -4
  16. package/dist/cli/help.js.map +1 -1
  17. package/dist/cli/main.js +2 -1
  18. package/dist/cli/main.js.map +1 -1
  19. package/dist/cli/terminal.d.ts +5 -0
  20. package/dist/cli/terminal.d.ts.map +1 -1
  21. package/dist/cli/terminal.js +11 -1
  22. package/dist/cli/terminal.js.map +1 -1
  23. package/dist/client.d.ts +28 -3
  24. package/dist/client.d.ts.map +1 -1
  25. package/dist/client.js +62 -2
  26. package/dist/client.js.map +1 -1
  27. package/dist/components/calendar.d.ts +35 -2
  28. package/dist/components/calendar.d.ts.map +1 -1
  29. package/dist/components/calendar.js +58 -19
  30. package/dist/components/calendar.js.map +1 -1
  31. package/dist/components/comments.d.ts +59 -0
  32. package/dist/components/comments.d.ts.map +1 -0
  33. package/dist/components/comments.js +138 -0
  34. package/dist/components/comments.js.map +1 -0
  35. package/dist/components/event-feed.d.ts.map +1 -1
  36. package/dist/components/event-feed.js +2 -0
  37. package/dist/components/event-feed.js.map +1 -1
  38. package/dist/components/markdown.d.ts +6 -0
  39. package/dist/components/markdown.d.ts.map +1 -1
  40. package/dist/components/markdown.js +2 -1
  41. package/dist/components/markdown.js.map +1 -1
  42. package/dist/components/projects.d.ts +4 -1
  43. package/dist/components/projects.d.ts.map +1 -1
  44. package/dist/components/projects.js +10 -2
  45. package/dist/components/projects.js.map +1 -1
  46. package/dist/components/task-form.d.ts.map +1 -1
  47. package/dist/components/task-form.js +1 -1
  48. package/dist/components/task-form.js.map +1 -1
  49. package/dist/components/task-view.d.ts +8 -3
  50. package/dist/components/task-view.d.ts.map +1 -1
  51. package/dist/components/task-view.js +6 -4
  52. package/dist/components/task-view.js.map +1 -1
  53. package/dist/console.css +180 -32
  54. package/dist/console.d.ts.map +1 -1
  55. package/dist/console.js +23 -5
  56. package/dist/console.js.map +1 -1
  57. package/dist/data.d.ts +5 -1
  58. package/dist/data.d.ts.map +1 -1
  59. package/dist/data.js +2 -0
  60. package/dist/data.js.map +1 -1
  61. package/dist/i18n/en.d.ts +15 -2
  62. package/dist/i18n/en.d.ts.map +1 -1
  63. package/dist/i18n/en.js +17 -4
  64. package/dist/i18n/en.js.map +1 -1
  65. package/dist/i18n/ko.d.ts.map +1 -1
  66. package/dist/i18n/ko.js +17 -4
  67. package/dist/i18n/ko.js.map +1 -1
  68. package/dist/index.d.ts +1 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +1 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/limits.d.ts +3 -0
  73. package/dist/limits.d.ts.map +1 -1
  74. package/dist/limits.js +3 -0
  75. package/dist/limits.js.map +1 -1
  76. package/dist/rules.js +2 -2
  77. package/dist/rules.js.map +1 -1
  78. package/dist/schemas.d.ts +105 -0
  79. package/dist/schemas.d.ts.map +1 -1
  80. package/dist/schemas.js +32 -1
  81. package/dist/schemas.js.map +1 -1
  82. package/dist/vocabulary.d.ts +1 -1
  83. package/dist/vocabulary.d.ts.map +1 -1
  84. package/dist/vocabulary.js +1 -0
  85. package/dist/vocabulary.js.map +1 -1
  86. package/docs/specs/cli.md +8 -4
  87. package/docs/specs/rest.md +9 -2
  88. package/package.json +1 -1
  89. package/skills/working-the-board/SKILL.md +6 -4
  90. package/src/api.ts +12 -0
  91. package/src/cli/cli.ts +106 -9
  92. package/src/cli/format.ts +28 -1
  93. package/src/cli/help.ts +32 -3
  94. package/src/cli/main.ts +2 -1
  95. package/src/cli/terminal.ts +12 -1
  96. package/src/client.ts +112 -3
  97. package/src/components/calendar.tsx +216 -28
  98. package/src/components/comments.tsx +342 -0
  99. package/src/components/event-feed.tsx +2 -0
  100. package/src/components/markdown.tsx +9 -1
  101. package/src/components/projects.tsx +19 -6
  102. package/src/components/task-form.tsx +1 -0
  103. package/src/components/task-view.tsx +32 -33
  104. package/src/console.tsx +27 -3
  105. package/src/data.ts +8 -0
  106. package/src/i18n/en.ts +19 -4
  107. package/src/i18n/ko.ts +19 -4
  108. package/src/index.ts +12 -0
  109. package/src/limits.ts +3 -0
  110. package/src/rules.ts +2 -2
  111. package/src/schemas.ts +40 -1
  112. package/src/styles/console.css +180 -32
  113. package/src/vocabulary.ts +1 -0
@@ -295,6 +295,7 @@ table {
295
295
  .sc-answer-form > *,
296
296
  .sc-run > *,
297
297
  .sc-report > *,
298
+ .sc-comment > *,
298
299
  .sc-feed > *,
299
300
  .sc-card > *,
300
301
  .sc-form > *,
@@ -468,12 +469,15 @@ table {
468
469
 
469
470
  /* The tabs: the pages of the level the person is on, under the header's first row. */
470
471
 
472
+ /* The bar lies one pixel over the header's line, so that the current tab's underline sits on it;
473
+ the tabs scroll sideways where they do not fit, and nothing in the bar ever scrolls down. */
471
474
  .sc-tabs {
472
475
  width: 100%;
473
476
  max-width: var(--sc-width-page);
474
477
  margin-inline: auto;
478
+ margin-bottom: -1px;
475
479
  padding-inline: var(--sc-space-5);
476
- overflow-x: auto;
480
+ overflow: auto hidden;
477
481
  scrollbar-width: none;
478
482
  }
479
483
 
@@ -487,7 +491,6 @@ table {
487
491
  align-items: center;
488
492
  gap: var(--sc-space-2);
489
493
  padding: var(--sc-space-2) 0 var(--sc-space-3);
490
- margin-bottom: -1px;
491
494
  border-bottom: 2px solid transparent;
492
495
  color: var(--sc-color-text-muted);
493
496
  font-size: var(--sc-text-sm);
@@ -743,6 +746,7 @@ table {
743
746
  .sc-project,
744
747
  .sc-decision,
745
748
  .sc-run,
749
+ .sc-comment,
746
750
  .sc-sign-in,
747
751
  .sc-facts {
748
752
  position: relative;
@@ -758,6 +762,7 @@ table {
758
762
  .sc-project::before,
759
763
  .sc-decision::before,
760
764
  .sc-run::before,
765
+ .sc-comment::before,
761
766
  .sc-sign-in::before,
762
767
  .sc-facts::before {
763
768
  content: "";
@@ -1071,9 +1076,15 @@ table {
1071
1076
  border-radius: 50%;
1072
1077
  }
1073
1078
 
1074
- @media (prefers-reduced-motion: no-preference) {
1079
+ /* The ring turns whatever the motion preference: it says that the page still waits, and a ring
1080
+ that stands still reads as a page that stopped. Where motion is to be reduced it turns slowly. */
1081
+ .sc-spinner-ring {
1082
+ animation: sc-spin 700ms linear infinite;
1083
+ }
1084
+
1085
+ @media (prefers-reduced-motion: reduce) {
1075
1086
  .sc-spinner-ring {
1076
- animation: sc-spin 700ms linear infinite;
1087
+ animation-duration: 1.6s;
1077
1088
  }
1078
1089
  }
1079
1090
 
@@ -2129,6 +2140,109 @@ table {
2129
2140
  border-top: var(--sc-border);
2130
2141
  }
2131
2142
 
2143
+ /* The discussion on a task (ADR-0024): what was said, the runs and the decisions, one thread in
2144
+ the order they came, with the way to say something at its end. */
2145
+ .sc-thread {
2146
+ display: grid;
2147
+ gap: var(--sc-space-3);
2148
+ }
2149
+
2150
+ .sc-comment {
2151
+ display: grid;
2152
+ gap: var(--sc-space-3);
2153
+ padding: var(--sc-space-4) var(--sc-space-5);
2154
+ border-radius: var(--sc-radius-lg);
2155
+ }
2156
+
2157
+ .sc-comment-header {
2158
+ display: flex;
2159
+ flex-wrap: wrap;
2160
+ align-items: center;
2161
+ gap: var(--sc-space-2);
2162
+ }
2163
+
2164
+ .sc-comment-meta {
2165
+ color: var(--sc-color-text-muted);
2166
+ font-size: var(--sc-text-sm);
2167
+ }
2168
+
2169
+ /* A picture in a comment is seen where it is, no taller than a screen's worth. */
2170
+ .sc-comment-picture img,
2171
+ .sc-comment .sc-prose img {
2172
+ display: block;
2173
+ max-width: 100%;
2174
+ max-height: 24rem;
2175
+ border: var(--sc-border);
2176
+ border-radius: var(--sc-radius-md);
2177
+ }
2178
+
2179
+ .sc-comment-files {
2180
+ display: grid;
2181
+ gap: var(--sc-space-2);
2182
+ margin: 0;
2183
+ padding: 0;
2184
+ list-style: none;
2185
+ font-size: var(--sc-text-sm);
2186
+ }
2187
+
2188
+ .sc-comment-picture {
2189
+ display: grid;
2190
+ gap: var(--sc-space-1);
2191
+ justify-items: start;
2192
+ }
2193
+
2194
+ .sc-comment-form {
2195
+ display: grid;
2196
+ gap: var(--sc-space-2);
2197
+ }
2198
+
2199
+ .sc-comment-chosen {
2200
+ display: flex;
2201
+ flex-wrap: wrap;
2202
+ gap: var(--sc-space-2);
2203
+ margin: 0;
2204
+ padding: 0;
2205
+ list-style: none;
2206
+ font-size: var(--sc-text-sm);
2207
+ }
2208
+
2209
+ .sc-comment-chosen-file {
2210
+ display: inline-flex;
2211
+ align-items: center;
2212
+ gap: var(--sc-space-1);
2213
+ padding: var(--sc-space-1) var(--sc-space-2);
2214
+ border: var(--sc-border);
2215
+ border-radius: var(--sc-radius-md);
2216
+ background: var(--sc-color-sheet);
2217
+ }
2218
+
2219
+ .sc-comment-form-actions {
2220
+ display: flex;
2221
+ flex-wrap: wrap;
2222
+ align-items: center;
2223
+ justify-content: flex-end;
2224
+ gap: var(--sc-space-2);
2225
+ }
2226
+
2227
+ .sc-comment-form-actions label {
2228
+ position: relative;
2229
+ cursor: pointer;
2230
+ }
2231
+
2232
+ /* The file input is the label's: there for the keyboard and the screen reader, not seen. */
2233
+ .sc-comment-file-input {
2234
+ position: absolute;
2235
+ width: 1px;
2236
+ height: 1px;
2237
+ overflow: hidden;
2238
+ clip-path: inset(50%);
2239
+ opacity: 0;
2240
+ }
2241
+
2242
+ .sc-comment-form .sc-field-hint {
2243
+ margin-top: 0;
2244
+ }
2245
+
2132
2246
  .sc-connect {
2133
2247
  display: grid;
2134
2248
  gap: var(--sc-space-3);
@@ -2654,8 +2768,9 @@ table {
2654
2768
  white-space: nowrap;
2655
2769
  }
2656
2770
 
2771
+ /* Lit a little under the pointer by its colour, not by a filter, which would light the card within it too. */
2657
2772
  .sc-calendar-bar:hover {
2658
- filter: brightness(1.15);
2773
+ background: color-mix(in srgb, var(--sc-category-fill), white 12%);
2659
2774
  }
2660
2775
 
2661
2776
  .sc-calendar-bar-begins {
@@ -2712,6 +2827,7 @@ table {
2712
2827
 
2713
2828
  /* A project's mark: its symbol on its colour. */
2714
2829
  .sc-mark {
2830
+ position: relative;
2715
2831
  display: inline-flex;
2716
2832
  flex: none;
2717
2833
  align-items: center;
@@ -2749,7 +2865,7 @@ table {
2749
2865
  align-items: end;
2750
2866
  }
2751
2867
 
2752
- /* A project's own image, in place of the symbol, filling the mark. */
2868
+ /* A project's own image over the symbol, filling the mark; the symbol shows until the image is there. */
2753
2869
  .sc-mark-pictured {
2754
2870
  padding: 0;
2755
2871
  overflow: hidden;
@@ -2757,6 +2873,8 @@ table {
2757
2873
  }
2758
2874
 
2759
2875
  .sc-mark-image {
2876
+ position: absolute;
2877
+ inset: 0;
2760
2878
  display: block;
2761
2879
  width: 100%;
2762
2880
  height: 100%;
@@ -3009,54 +3127,84 @@ table {
3009
3127
  flex: 1 1 10rem;
3010
3128
  }
3011
3129
 
3012
- /* A tip of the console's own: what an item says in full, shown the moment the pointer is on it,
3013
- where its line cut the title short or shows none. The item carries the words in `data-tip`
3014
- and is marked `data-clipped` when the tip applies. */
3015
- .sc-tip {
3130
+ /* The task under the pointer in full: a card within its item with its title and the facts its page
3131
+ lists, above or below the item, whichever side has more room, and moved left where it would
3132
+ leave the window; the calendar measures that as the pointer arrives, since only the browser
3133
+ knows where the item is. The card lies out of the accessible tree and takes no pointer. */
3134
+ .sc-calendar-task,
3135
+ .sc-calendar-bar {
3016
3136
  position: relative;
3017
3137
  }
3018
3138
 
3019
- .sc-tip::after {
3020
- content: attr(data-tip);
3139
+ /* The item under the pointer rises above its neighbours, which would otherwise paint over its card. */
3140
+ .sc-calendar-task:hover,
3141
+ .sc-calendar-task:focus-visible,
3142
+ .sc-calendar-bar:hover,
3143
+ .sc-calendar-bar:focus-visible {
3144
+ z-index: 20;
3145
+ }
3146
+
3147
+ .sc-task-tip {
3021
3148
  position: absolute;
3022
- bottom: calc(100% + var(--sc-space-1));
3023
3149
  left: 0;
3024
3150
  z-index: 20;
3025
3151
  width: max-content;
3026
- max-width: 18rem;
3027
- padding: var(--sc-space-1) var(--sc-space-2);
3152
+ max-width: 20rem;
3153
+ padding: var(--sc-space-2) var(--sc-space-3);
3028
3154
  border: var(--sc-border);
3029
3155
  border-radius: var(--sc-radius-md);
3030
3156
  background: var(--sc-color-bg-inset);
3031
3157
  box-shadow: var(--sc-shadow-stage);
3032
3158
  color: var(--sc-color-text);
3033
3159
  font-size: var(--sc-text-xs);
3034
- font-weight: var(--sc-weight-medium);
3160
+ font-weight: var(--sc-weight-normal);
3035
3161
  line-height: 1.4;
3162
+ text-align: left;
3036
3163
  text-decoration: none;
3037
3164
  white-space: normal;
3038
3165
  overflow-wrap: anywhere;
3039
- opacity: 0;
3040
- visibility: hidden;
3041
3166
  pointer-events: none;
3167
+ animation: sc-task-tip-in 120ms ease-out 100ms backwards;
3042
3168
  }
3043
3169
 
3044
- /* The item under the pointer rises above its neighbours, which would otherwise paint over its tip. */
3045
- .sc-tip[data-clipped]:hover,
3046
- .sc-tip[data-clipped]:focus-visible {
3047
- z-index: 20;
3170
+ .sc-task-tip-above {
3171
+ bottom: calc(100% + var(--sc-space-1));
3048
3172
  }
3049
3173
 
3050
- .sc-tip[data-clipped]:hover::after,
3051
- .sc-tip[data-clipped]:focus-visible::after {
3052
- opacity: 1;
3053
- visibility: visible;
3174
+ .sc-task-tip-below {
3175
+ top: calc(100% + var(--sc-space-1));
3054
3176
  }
3055
3177
 
3056
- /* In the last columns the tip hangs from the item's right edge, so that it stays on the page. */
3057
- .sc-calendar-cell:nth-last-child(-n + 2) .sc-tip::after {
3058
- right: 0;
3059
- left: auto;
3178
+ .sc-task-tip-title {
3179
+ margin: 0 0 var(--sc-space-2);
3180
+ font-weight: var(--sc-weight-medium);
3181
+ }
3182
+
3183
+ .sc-task-tip-facts {
3184
+ display: grid;
3185
+ grid-template-columns: auto 1fr;
3186
+ gap: var(--sc-space-1) var(--sc-space-3);
3187
+ margin: 0;
3188
+ }
3189
+
3190
+ .sc-task-tip-facts > div {
3191
+ display: contents;
3192
+ }
3193
+
3194
+ .sc-task-tip-facts dt {
3195
+ color: var(--sc-color-text-faint);
3196
+ font-weight: var(--sc-weight-medium);
3197
+ }
3198
+
3199
+ .sc-task-tip-facts dd {
3200
+ margin: 0;
3201
+ }
3202
+
3203
+ /* The card arrives after a moment, so that a pointer passing over the days opens none. */
3204
+ @keyframes sc-task-tip-in {
3205
+ from {
3206
+ opacity: 0;
3207
+ }
3060
3208
  }
3061
3209
 
3062
3210
  /* One week on its own, the only row there is: its days are taller than a month's. */
@@ -3193,8 +3341,8 @@ table {
3193
3341
  margin: 0;
3194
3342
  }
3195
3343
 
3196
- /* No pointer rests on a phone's calendar; the lists below say the titles. */
3197
- .sc-tip::after {
3344
+ /* No pointer rests on a phone's calendar, and the lists below say the titles. */
3345
+ .sc-task-tip {
3198
3346
  display: none;
3199
3347
  }
3200
3348
 
package/src/vocabulary.ts CHANGED
@@ -165,6 +165,7 @@ export const EVENT_KINDS = [
165
165
  "task.created",
166
166
  "task.updated",
167
167
  "task.moved",
168
+ "task.commented",
168
169
  "decision.raised",
169
170
  "decision.answered",
170
171
  "decision.updated",