@skillcdn/console 0.3.0 → 0.3.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.
- package/README.md +4 -4
- package/dist/api.d.ts +4 -4
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +4 -4
- package/dist/api.js.map +1 -1
- package/dist/cli/cli.d.ts +5 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +290 -46
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/credentials.d.ts +5 -0
- package/dist/cli/credentials.d.ts.map +1 -1
- package/dist/cli/credentials.js +2 -0
- package/dist/cli/credentials.js.map +1 -1
- package/dist/cli/directory.d.ts +7 -0
- package/dist/cli/directory.d.ts.map +1 -1
- package/dist/cli/directory.js +7 -0
- package/dist/cli/directory.js.map +1 -1
- package/dist/cli/format.d.ts +10 -1
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +76 -20
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +42 -23
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +1 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/client.d.ts +39 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -3
- package/dist/client.js.map +1 -1
- package/dist/compat.d.ts +28 -6
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +55 -14
- package/dist/compat.js.map +1 -1
- package/dist/components/board.d.ts.map +1 -1
- package/dist/components/board.js +6 -4
- package/dist/components/board.js.map +1 -1
- package/dist/components/calendar.d.ts +18 -8
- package/dist/components/calendar.d.ts.map +1 -1
- package/dist/components/calendar.js +39 -27
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/event-feed.d.ts.map +1 -1
- package/dist/components/event-feed.js +2 -0
- package/dist/components/event-feed.js.map +1 -1
- package/dist/components/pack-connect.d.ts +23 -0
- package/dist/components/pack-connect.d.ts.map +1 -0
- package/dist/components/pack-connect.js +86 -0
- package/dist/components/pack-connect.js.map +1 -0
- package/dist/components/pack-token.d.ts +27 -0
- package/dist/components/pack-token.d.ts.map +1 -0
- package/dist/components/pack-token.js +11 -0
- package/dist/components/pack-token.js.map +1 -0
- package/dist/components/picker.d.ts +39 -0
- package/dist/components/picker.d.ts.map +1 -0
- package/dist/components/picker.js +155 -0
- package/dist/components/picker.js.map +1 -0
- package/dist/components/projects.d.ts +13 -0
- package/dist/components/projects.d.ts.map +1 -1
- package/dist/components/projects.js +37 -5
- package/dist/components/projects.js.map +1 -1
- package/dist/components/task-form.d.ts +18 -4
- package/dist/components/task-form.d.ts.map +1 -1
- package/dist/components/task-form.js +56 -13
- package/dist/components/task-form.js.map +1 -1
- package/dist/components/task-list.js +2 -2
- package/dist/components/task-list.js.map +1 -1
- package/dist/components/task-view.d.ts +7 -1
- package/dist/components/task-view.d.ts.map +1 -1
- package/dist/components/task-view.js +6 -5
- package/dist/components/task-view.js.map +1 -1
- package/dist/components/ui.d.ts +7 -0
- package/dist/components/ui.d.ts.map +1 -1
- package/dist/components/ui.js +11 -0
- package/dist/components/ui.js.map +1 -1
- package/dist/components/work.d.ts +3 -1
- package/dist/components/work.d.ts.map +1 -1
- package/dist/components/work.js +6 -4
- package/dist/components/work.js.map +1 -1
- package/dist/components/workspace.d.ts +46 -0
- package/dist/components/workspace.d.ts.map +1 -0
- package/dist/components/workspace.js +124 -0
- package/dist/components/workspace.js.map +1 -0
- package/dist/console.css +319 -11
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +83 -24
- package/dist/console.js.map +1 -1
- package/dist/data.d.ts +26 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +59 -1
- package/dist/data.js.map +1 -1
- package/dist/dates.d.ts +12 -2
- package/dist/dates.d.ts.map +1 -1
- package/dist/dates.js +20 -2
- package/dist/dates.js.map +1 -1
- package/dist/i18n/en.d.ts +64 -3
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +81 -16
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +77 -16
- package/dist/i18n/ko.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/limits.d.ts +2 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +2 -0
- package/dist/limits.js.map +1 -1
- package/dist/router.d.ts +4 -4
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +11 -2
- package/dist/router.js.map +1 -1
- package/dist/routes.d.ts +4 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +4 -0
- package/dist/routes.js.map +1 -1
- package/dist/schemas.d.ts +194 -13
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +121 -21
- package/dist/schemas.js.map +1 -1
- package/dist/vocabulary.d.ts +21 -1
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +18 -0
- package/dist/vocabulary.js.map +1 -1
- package/docs/specs/cli.md +25 -20
- package/docs/specs/rest.md +42 -19
- package/package.json +2 -2
- package/skills/building-a-console/SKILL.md +6 -6
- package/skills/building-a-console/references/the-look-from-a-website.md +39 -0
- package/skills/deploying-a-console/SKILL.md +9 -8
- package/skills/deploying-a-console/references/resources.md +1 -1
- package/skills/working-the-board/SKILL.md +5 -5
- package/skills/working-the-board/references/setting-up.md +1 -1
- package/skills/working-the-board/references/terms.md +3 -1
- package/skills/working-the-board/references/the-sentence.md +1 -1
- package/src/api.ts +21 -0
- package/src/cli/cli.ts +384 -51
- package/src/cli/credentials.ts +7 -0
- package/src/cli/directory.ts +9 -0
- package/src/cli/format.ts +83 -20
- package/src/cli/help.ts +50 -23
- package/src/cli/main.ts +1 -0
- package/src/client.ts +107 -10
- package/src/compat.ts +63 -14
- package/src/components/board.tsx +10 -4
- package/src/components/calendar.tsx +76 -34
- package/src/components/event-feed.tsx +2 -0
- package/src/components/pack-connect.tsx +179 -0
- package/src/components/pack-token.tsx +74 -0
- package/src/components/picker.tsx +297 -0
- package/src/components/projects.tsx +108 -9
- package/src/components/task-form.tsx +149 -63
- package/src/components/task-list.tsx +2 -2
- package/src/components/task-view.tsx +23 -9
- package/src/components/ui.tsx +25 -0
- package/src/components/work.tsx +10 -5
- package/src/components/workspace.tsx +298 -0
- package/src/console.tsx +202 -32
- package/src/data.ts +101 -1
- package/src/dates.ts +23 -2
- package/src/i18n/en.ts +92 -16
- package/src/i18n/ko.ts +84 -16
- package/src/index.ts +32 -1
- package/src/limits.ts +2 -0
- package/src/router.ts +17 -5
- package/src/routes.ts +4 -0
- package/src/schemas.ts +140 -19
- package/src/styles/console.css +319 -11
- package/src/vocabulary.ts +28 -0
package/src/i18n/en.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type {
|
|
|
3
3
|
CategoryColor,
|
|
4
4
|
GoalState,
|
|
5
5
|
MembershipSource,
|
|
6
|
+
PackConnectEnding,
|
|
7
|
+
PeopleVisibility,
|
|
6
8
|
PersonRole,
|
|
7
9
|
PersonStatus,
|
|
8
10
|
ProjectRole,
|
|
@@ -12,6 +14,7 @@ import type {
|
|
|
12
14
|
SkillsStatus,
|
|
13
15
|
TaskPriority,
|
|
14
16
|
TaskState,
|
|
17
|
+
WeekStart,
|
|
15
18
|
} from "../vocabulary.js";
|
|
16
19
|
|
|
17
20
|
// Every word the default console shows, in English: the source of the keys every other pack
|
|
@@ -44,9 +47,18 @@ export const en = {
|
|
|
44
47
|
status: { active: "Active", deactivated: "Deactivated" } satisfies Record<PersonStatus, string>,
|
|
45
48
|
projectRole: { owner: "Owner", member: "Member" } satisfies Record<ProjectRole, string>,
|
|
46
49
|
visibility: {
|
|
47
|
-
workspace: "
|
|
48
|
-
private: "
|
|
50
|
+
workspace: "Open: everyone of the workspace",
|
|
51
|
+
private: "Private: only those listed",
|
|
49
52
|
} satisfies Record<ProjectVisibility, string>,
|
|
53
|
+
peopleVisibility: {
|
|
54
|
+
everyone: "Everyone of the workspace",
|
|
55
|
+
shared_projects: "Only the people one shares a project with",
|
|
56
|
+
} satisfies Record<PeopleVisibility, string>,
|
|
57
|
+
weekStart: {
|
|
58
|
+
auto: "System default",
|
|
59
|
+
monday: "Monday",
|
|
60
|
+
sunday: "Sunday",
|
|
61
|
+
} satisfies Record<WeekStart, string>,
|
|
50
62
|
runStatus: {
|
|
51
63
|
running: "Open",
|
|
52
64
|
waiting: "Waiting for a decision",
|
|
@@ -109,6 +121,11 @@ export const en = {
|
|
|
109
121
|
next: "Next page",
|
|
110
122
|
range: (from: number, to: number, of: number) => `${from}-${to} of ${of}`,
|
|
111
123
|
},
|
|
124
|
+
picker: {
|
|
125
|
+
nothingFound: "Nothing matches",
|
|
126
|
+
searching: "Searching",
|
|
127
|
+
more: "Show more",
|
|
128
|
+
},
|
|
112
129
|
},
|
|
113
130
|
|
|
114
131
|
nav: {
|
|
@@ -195,6 +212,13 @@ export const en = {
|
|
|
195
212
|
chooseSomeone: "Choose someone",
|
|
196
213
|
as: "As",
|
|
197
214
|
add: "Add",
|
|
215
|
+
open: "An open project: everyone of the workspace is a member. The owners configure it, and an owner is made from this list.",
|
|
216
|
+
addByLoginAria: "Add a member by login",
|
|
217
|
+
login: "Login",
|
|
218
|
+
addByLogin: "Add by login",
|
|
219
|
+
lookupHint:
|
|
220
|
+
"Someone the list does not show: their login at the git host, or their address, exactly.",
|
|
221
|
+
nobodyCalled: (login: string) => `Nobody of the workspace is called ${login}.`,
|
|
198
222
|
empty: {
|
|
199
223
|
title: "Nobody is listed",
|
|
200
224
|
workspace: "Everyone of the workspace is in; the administrators own it.",
|
|
@@ -202,11 +226,33 @@ export const en = {
|
|
|
202
226
|
},
|
|
203
227
|
},
|
|
204
228
|
packToken: {
|
|
205
|
-
aria: "The
|
|
229
|
+
aria: "The SkillCDN token",
|
|
230
|
+
intro:
|
|
231
|
+
"A private pack is read with a SkillCDN token for its repository; a public one needs none. Connect it with a code approved at SkillCDN, or paste a token made there by hand. The console keeps the token sealed and shows it to nobody. A project that reads the organization's pack may leave this to the workspace's token, on the Settings page.",
|
|
232
|
+
connectTitle: "With a code approved at SkillCDN",
|
|
233
|
+
pasteTitle: "With a token made by hand",
|
|
234
|
+
pasteAria: "Paste a token",
|
|
206
235
|
label: "Token",
|
|
207
|
-
hint: "
|
|
236
|
+
hint: "Made on the account page at SkillCDN, for the pack's repository.",
|
|
237
|
+
setSince: "A token has been set since",
|
|
208
238
|
placeholder: "scdn_repo_…",
|
|
239
|
+
connect: "Connect at SkillCDN",
|
|
240
|
+
connectHint:
|
|
241
|
+
"The console asks SkillCDN for a code. Open the page it gives, signed in there as someone who may open the repository, check the code and approve.",
|
|
242
|
+
connectCode: "Code",
|
|
243
|
+
connectOpen: "Open the page at SkillCDN",
|
|
244
|
+
connectWaiting: "Waiting for the approval at SkillCDN.",
|
|
245
|
+
connectExpires: "The code expires",
|
|
246
|
+
connectCancel: "Stop waiting",
|
|
247
|
+
connectDone: "Connected: the console reads the pack with the token from now on.",
|
|
248
|
+
connectEnded: {
|
|
249
|
+
expired: "The code expired before anyone approved it. Connect again for a new one.",
|
|
250
|
+
declined: "The request was declined at SkillCDN, or the code was spent.",
|
|
251
|
+
refused:
|
|
252
|
+
"SkillCDN refused the request: the repository is not one the person may open, the pack is public and needs no token, or they hold as many tokens as one may.",
|
|
253
|
+
} satisfies Record<PackConnectEnding, string>,
|
|
209
254
|
set: "Set the token",
|
|
255
|
+
replace: "Replace the token",
|
|
210
256
|
remove: "Remove the token",
|
|
211
257
|
},
|
|
212
258
|
settings: {
|
|
@@ -215,10 +261,11 @@ export const en = {
|
|
|
215
261
|
edit: "Edit the project",
|
|
216
262
|
organizationsSkills: (address: string) => `The organization's: ${address}`,
|
|
217
263
|
noSkills: "None: the console names no address for the organization's.",
|
|
218
|
-
packToken: "
|
|
219
|
-
packTokenNone: "None
|
|
264
|
+
packToken: "SkillCDN token",
|
|
265
|
+
packTokenNone: "None",
|
|
220
266
|
packTokenSet: "Set",
|
|
221
267
|
packTokenEdit: "Change it",
|
|
268
|
+
packTokenAdd: "Set one",
|
|
222
269
|
},
|
|
223
270
|
},
|
|
224
271
|
|
|
@@ -262,7 +309,7 @@ export const en = {
|
|
|
262
309
|
},
|
|
263
310
|
partOf: "Part of",
|
|
264
311
|
owner: "Owner",
|
|
265
|
-
|
|
312
|
+
workers: "Workers",
|
|
266
313
|
written: "Written",
|
|
267
314
|
changed: "Changed",
|
|
268
315
|
state: "State",
|
|
@@ -296,8 +343,11 @@ export const en = {
|
|
|
296
343
|
bodyPlaceholder: "What is to be done, in Markdown.",
|
|
297
344
|
state: "State",
|
|
298
345
|
priority: "Priority",
|
|
299
|
-
|
|
346
|
+
workers: "Workers",
|
|
347
|
+
addWorker: "Add a worker",
|
|
300
348
|
partOf: "Part of",
|
|
349
|
+
searchTasks: "Search by number or title",
|
|
350
|
+
searchGoals: "Search by title",
|
|
301
351
|
category: "Category",
|
|
302
352
|
noCategory: "No category",
|
|
303
353
|
goal: "Goal",
|
|
@@ -383,7 +433,7 @@ export const en = {
|
|
|
383
433
|
person: "Person",
|
|
384
434
|
open: "Open",
|
|
385
435
|
inProgress: "In progress",
|
|
386
|
-
|
|
436
|
+
dueThisWeek: "Due this week",
|
|
387
437
|
overdue: "Overdue",
|
|
388
438
|
unassigned: "Nobody's yet",
|
|
389
439
|
},
|
|
@@ -455,8 +505,8 @@ export const en = {
|
|
|
455
505
|
loading: "Loading your work",
|
|
456
506
|
couldNotLoad: "Your work could not be loaded.",
|
|
457
507
|
empty: {
|
|
458
|
-
title: "Nothing is
|
|
459
|
-
body: "A task
|
|
508
|
+
title: "Nothing is on your plate",
|
|
509
|
+
body: "A task you work on, in any project you may see, shows up here.",
|
|
460
510
|
},
|
|
461
511
|
overdue: "Overdue",
|
|
462
512
|
thisWeek: "Due this week",
|
|
@@ -498,6 +548,26 @@ export const en = {
|
|
|
498
548
|
noSkillsAddress: "No address: each project names its own, or has none.",
|
|
499
549
|
skillsFromConfiguration:
|
|
500
550
|
"Set by whoever runs the console, in its configuration: the deployment the skills are read through, and the organization's address.",
|
|
551
|
+
skillsToken: "SkillCDN token",
|
|
552
|
+
skillsTokenIntro:
|
|
553
|
+
"Every project that names no address of its own, and holds no token of its own, reads the organization's pack with this token; a public pack needs none. Connect it with a code approved at SkillCDN, or paste a token made there by hand. The console keeps the token sealed and shows it to nobody.",
|
|
554
|
+
workspace: {
|
|
555
|
+
title: "Workspace",
|
|
556
|
+
aria: "Workspace settings",
|
|
557
|
+
peopleVisibility: "Member visibility",
|
|
558
|
+
peopleVisibilityHint:
|
|
559
|
+
"Whom a member sees on the People page and in the pickers: everyone of the workspace, or only the people they share a project with. An administrator always sees everyone, and a project open to the workspace has everyone in it.",
|
|
560
|
+
weekStart: "The week begins on",
|
|
561
|
+
weekStartHint:
|
|
562
|
+
"On the calendars and on My work. System default follows the language and region set on each person's device; Monday or Sunday holds for everyone.",
|
|
563
|
+
timeZone: "Time zone",
|
|
564
|
+
timeZoneHint:
|
|
565
|
+
"The console command and the agents print moments in this zone. The pages show them in each device's own. None: the command prints them in UTC.",
|
|
566
|
+
timeZoneNone: "None",
|
|
567
|
+
timeZoneDevice: (zone: string) => `This device: ${zone}`,
|
|
568
|
+
timeZoneUseDevice: (zone: string) => `Use this device's: ${zone}`,
|
|
569
|
+
save: "Save the settings",
|
|
570
|
+
},
|
|
501
571
|
},
|
|
502
572
|
|
|
503
573
|
rules: {
|
|
@@ -547,7 +617,7 @@ export const en = {
|
|
|
547
617
|
title: "the title",
|
|
548
618
|
body: "the body",
|
|
549
619
|
priority: "the priority",
|
|
550
|
-
|
|
620
|
+
workers: "the workers",
|
|
551
621
|
parentId: "what it is part of",
|
|
552
622
|
links: "the links",
|
|
553
623
|
name: "the name",
|
|
@@ -561,9 +631,14 @@ export const en = {
|
|
|
561
631
|
dueOn: "the due date",
|
|
562
632
|
state: "the state",
|
|
563
633
|
color: "the colour",
|
|
634
|
+
peopleVisibility: "the member visibility",
|
|
635
|
+
weekStart: "the first day of the week",
|
|
636
|
+
timeZone: "the time zone",
|
|
637
|
+
packToken: "the SkillCDN token",
|
|
564
638
|
} as Readonly<Record<string, string>>,
|
|
565
639
|
event: {
|
|
566
640
|
personJoined: () => "joined the board",
|
|
641
|
+
workspaceUpdated: (fields: string) => `changed ${fields} of the workspace`,
|
|
567
642
|
roleChanged: (login: string, role: string) => `made ${login} ${role}`,
|
|
568
643
|
personListed: (login: string) => `added ${login}`,
|
|
569
644
|
personUnlisted: (login: string) => `took ${login} off the list`,
|
|
@@ -684,9 +759,9 @@ export const en = {
|
|
|
684
759
|
indexing: "SkillCDN is still indexing the repository. Look again in a moment.",
|
|
685
760
|
failed: "SkillCDN could not index the repository. What it found is on the address's page.",
|
|
686
761
|
not_found:
|
|
687
|
-
"SkillCDN does not serve this address to the console: there is nothing there, or the pack is private and the project
|
|
762
|
+
"SkillCDN does not serve this address to the console: there is nothing there, or the pack is private and no SkillCDN token reads it, the project's own or the workspace's. An owner connects one on the Settings page, with a code approved at SkillCDN.",
|
|
688
763
|
token_invalid:
|
|
689
|
-
"The
|
|
764
|
+
"The SkillCDN token the pack is read with no longer works at SkillCDN: it expired, was removed, or its maker lost the repository. An owner sets a new one on the Settings page.",
|
|
690
765
|
unavailable: "SkillCDN could not be reached. The skills are as they were; look again later.",
|
|
691
766
|
},
|
|
692
767
|
none: {
|
|
@@ -764,6 +839,7 @@ export const en = {
|
|
|
764
839
|
people: {
|
|
765
840
|
title: "People",
|
|
766
841
|
list: "People",
|
|
842
|
+
narrowed: "The people you share a project with, and the administrators.",
|
|
767
843
|
roleOf: (name: string) => `Role of ${name}`,
|
|
768
844
|
letIn: "Add a person",
|
|
769
845
|
letInAria: "Add a person",
|
|
@@ -793,8 +869,8 @@ export const en = {
|
|
|
793
869
|
loadingWork: "Loading the work",
|
|
794
870
|
couldNotLoadWork: "The work could not be loaded.",
|
|
795
871
|
noWork: {
|
|
796
|
-
title: (name: string) => `Nothing is
|
|
797
|
-
body: "An open task
|
|
872
|
+
title: (name: string) => `Nothing is on ${name}'s plate`,
|
|
873
|
+
body: "An open task they work on, in a project you may see, shows up here.",
|
|
798
874
|
},
|
|
799
875
|
notOverseen: {
|
|
800
876
|
title: "Not yours to see",
|
package/src/i18n/ko.ts
CHANGED
|
@@ -20,7 +20,12 @@ export const ko: Messages = {
|
|
|
20
20
|
role: { admin: "관리자", member: "멤버" },
|
|
21
21
|
status: { active: "활성", deactivated: "비활성화" },
|
|
22
22
|
projectRole: { owner: "소유자", member: "멤버" },
|
|
23
|
-
visibility: { workspace: "워크스페이스의 모두", private: "목록에 있는 사람만" },
|
|
23
|
+
visibility: { workspace: "공개: 워크스페이스의 모두", private: "비공개: 목록에 있는 사람만" },
|
|
24
|
+
peopleVisibility: {
|
|
25
|
+
everyone: "워크스페이스의 모두",
|
|
26
|
+
shared_projects: "같은 프로젝트에 속한 사람만",
|
|
27
|
+
},
|
|
28
|
+
weekStart: { auto: "시스템 기본", monday: "월요일", sunday: "일요일" },
|
|
24
29
|
runStatus: {
|
|
25
30
|
running: "열림",
|
|
26
31
|
waiting: "결정 대기 중",
|
|
@@ -78,6 +83,11 @@ export const ko: Messages = {
|
|
|
78
83
|
next: "다음",
|
|
79
84
|
range: (from, to, of) => `${of}건 중 ${from}-${to}`,
|
|
80
85
|
},
|
|
86
|
+
picker: {
|
|
87
|
+
nothingFound: "맞는 것이 없습니다",
|
|
88
|
+
searching: "검색 중",
|
|
89
|
+
more: "더 보기",
|
|
90
|
+
},
|
|
81
91
|
},
|
|
82
92
|
|
|
83
93
|
nav: {
|
|
@@ -163,6 +173,12 @@ export const ko: Messages = {
|
|
|
163
173
|
chooseSomeone: "선택하세요",
|
|
164
174
|
as: "역할",
|
|
165
175
|
add: "추가",
|
|
176
|
+
open: "공개 프로젝트입니다. 워크스페이스의 모든 구성원이 멤버이고, 소유자는 이 목록에서 지정합니다.",
|
|
177
|
+
addByLoginAria: "로그인으로 멤버 추가",
|
|
178
|
+
login: "로그인",
|
|
179
|
+
addByLogin: "로그인으로 추가",
|
|
180
|
+
lookupHint: "목록에 보이지 않는 사람: 깃 호스트의 로그인이나 주소를 정확히 적습니다.",
|
|
181
|
+
nobodyCalled: (login) => `워크스페이스에 ${login}이라는 사람이 없습니다.`,
|
|
166
182
|
empty: {
|
|
167
183
|
title: "목록에 아무도 없습니다",
|
|
168
184
|
workspace: "워크스페이스의 모두가 속해 있고, 관리자가 소유합니다.",
|
|
@@ -170,11 +186,33 @@ export const ko: Messages = {
|
|
|
170
186
|
},
|
|
171
187
|
},
|
|
172
188
|
packToken: {
|
|
173
|
-
aria: "
|
|
189
|
+
aria: "SkillCDN 토큰",
|
|
190
|
+
intro:
|
|
191
|
+
"비공개 팩은 저장소에 대한 SkillCDN 토큰으로 읽습니다. 공개 팩에는 필요 없습니다. SkillCDN에서 승인한 코드로 연결하거나, 거기서 직접 만든 토큰을 붙여 넣으세요. 콘솔은 토큰을 봉인해 보관하고 누구에게도 보여 주지 않습니다. 조직의 팩을 읽는 프로젝트는 워크스페이스 설정의 토큰을 그대로 쓸 수 있습니다.",
|
|
192
|
+
connectTitle: "SkillCDN에서 승인한 코드로",
|
|
193
|
+
pasteTitle: "직접 만든 토큰으로",
|
|
194
|
+
pasteAria: "토큰 붙여넣기",
|
|
174
195
|
label: "토큰",
|
|
175
|
-
hint: "
|
|
196
|
+
hint: "SkillCDN 계정 페이지에서 팩의 저장소에 대해 만든 토큰입니다.",
|
|
197
|
+
setSince: "토큰이 설정되어 있습니다:",
|
|
176
198
|
placeholder: "scdn_repo_…",
|
|
199
|
+
connect: "SkillCDN에서 연결",
|
|
200
|
+
connectHint:
|
|
201
|
+
"콘솔이 SkillCDN에 코드를 요청합니다. 안내된 페이지를 저장소를 볼 수 있는 계정으로 열어, 코드를 확인하고 승인하세요.",
|
|
202
|
+
connectCode: "코드",
|
|
203
|
+
connectOpen: "SkillCDN 페이지 열기",
|
|
204
|
+
connectWaiting: "SkillCDN에서 승인을 기다리는 중입니다.",
|
|
205
|
+
connectExpires: "코드 만료:",
|
|
206
|
+
connectCancel: "기다리기 중단",
|
|
207
|
+
connectDone: "연결되었습니다. 콘솔이 이제 이 토큰으로 팩을 읽습니다.",
|
|
208
|
+
connectEnded: {
|
|
209
|
+
expired: "승인되기 전에 코드가 만료되었습니다. 다시 연결해 새 코드를 받으세요.",
|
|
210
|
+
declined: "SkillCDN에서 요청이 거절되었거나 코드가 이미 쓰였습니다.",
|
|
211
|
+
refused:
|
|
212
|
+
"SkillCDN이 요청을 거부했습니다. 그 사람이 볼 수 없는 저장소이거나, 공개 팩이라 토큰이 필요 없거나, 토큰을 더 만들 수 없습니다.",
|
|
213
|
+
},
|
|
177
214
|
set: "토큰 넣기",
|
|
215
|
+
replace: "토큰 바꾸기",
|
|
178
216
|
remove: "토큰 빼기",
|
|
179
217
|
},
|
|
180
218
|
settings: {
|
|
@@ -183,10 +221,11 @@ export const ko: Messages = {
|
|
|
183
221
|
edit: "프로젝트 편집",
|
|
184
222
|
organizationsSkills: (address) => `조직의 스킬: ${address}`,
|
|
185
223
|
noSkills: "없음: 콘솔에 조직의 주소가 없습니다.",
|
|
186
|
-
packToken: "
|
|
187
|
-
packTokenNone: "
|
|
224
|
+
packToken: "SkillCDN 토큰",
|
|
225
|
+
packTokenNone: "없음",
|
|
188
226
|
packTokenSet: "설정됨",
|
|
189
227
|
packTokenEdit: "바꾸기",
|
|
228
|
+
packTokenAdd: "등록",
|
|
190
229
|
},
|
|
191
230
|
},
|
|
192
231
|
|
|
@@ -230,7 +269,7 @@ export const ko: Messages = {
|
|
|
230
269
|
},
|
|
231
270
|
partOf: "상위 작업:",
|
|
232
271
|
owner: "담당자",
|
|
233
|
-
|
|
272
|
+
workers: "작업자",
|
|
234
273
|
written: "작성",
|
|
235
274
|
changed: "변경",
|
|
236
275
|
state: "상태",
|
|
@@ -264,8 +303,11 @@ export const ko: Messages = {
|
|
|
264
303
|
bodyPlaceholder: "무엇을 할지, Markdown으로.",
|
|
265
304
|
state: "상태",
|
|
266
305
|
priority: "우선순위",
|
|
267
|
-
|
|
306
|
+
workers: "작업자",
|
|
307
|
+
addWorker: "작업자 추가",
|
|
268
308
|
partOf: "상위 작업",
|
|
309
|
+
searchTasks: "번호나 제목으로 검색",
|
|
310
|
+
searchGoals: "제목으로 검색",
|
|
269
311
|
category: "카테고리",
|
|
270
312
|
noCategory: "카테고리 없음",
|
|
271
313
|
goal: "목표",
|
|
@@ -351,9 +393,9 @@ export const ko: Messages = {
|
|
|
351
393
|
person: "사람",
|
|
352
394
|
open: "열림",
|
|
353
395
|
inProgress: "진행 중",
|
|
354
|
-
|
|
396
|
+
dueThisWeek: "이번 주 마감",
|
|
355
397
|
overdue: "기한 지남",
|
|
356
|
-
unassigned: "아직
|
|
398
|
+
unassigned: "아직 작업자 없음",
|
|
357
399
|
},
|
|
358
400
|
},
|
|
359
401
|
|
|
@@ -422,8 +464,8 @@ export const ko: Messages = {
|
|
|
422
464
|
loading: "내 작업을 불러오는 중",
|
|
423
465
|
couldNotLoad: "내 작업을 불러올 수 없습니다.",
|
|
424
466
|
empty: {
|
|
425
|
-
title: "
|
|
426
|
-
body: "볼 수 있는 어느 프로젝트에서든
|
|
467
|
+
title: "내가 맡은 작업이 없습니다",
|
|
468
|
+
body: "볼 수 있는 어느 프로젝트에서든 내가 작업자인 작업이 여기에 나타납니다.",
|
|
427
469
|
},
|
|
428
470
|
overdue: "기한 지남",
|
|
429
471
|
thisWeek: "이번 주 마감",
|
|
@@ -464,6 +506,26 @@ export const ko: Messages = {
|
|
|
464
506
|
noSkillsAddress: "주소 없음: 프로젝트마다 자기 주소를 두거나, 두지 않습니다.",
|
|
465
507
|
skillsFromConfiguration:
|
|
466
508
|
"콘솔을 운영하는 쪽이 설정으로 정합니다. 스킬을 읽어 오는 배포와 조직의 주소.",
|
|
509
|
+
skillsToken: "SkillCDN 토큰",
|
|
510
|
+
skillsTokenIntro:
|
|
511
|
+
"자기 주소도 자기 토큰도 없는 모든 프로젝트가 이 토큰으로 조직의 팩을 읽습니다. 공개 팩에는 필요 없습니다. SkillCDN에서 승인한 코드로 연결하거나, 거기서 직접 만든 토큰을 붙여 넣으세요. 콘솔은 토큰을 봉인해 보관하고 누구에게도 보여 주지 않습니다.",
|
|
512
|
+
workspace: {
|
|
513
|
+
title: "워크스페이스",
|
|
514
|
+
aria: "워크스페이스 설정",
|
|
515
|
+
peopleVisibility: "멤버 공개 범위",
|
|
516
|
+
peopleVisibilityHint:
|
|
517
|
+
"멤버가 사람들 페이지와 선택 목록에서 보는 범위: 워크스페이스의 모두, 또는 같은 프로젝트에 속한 사람만. 관리자는 언제나 모두를 보고, 워크스페이스에 공개된 프로젝트에는 모두가 속합니다.",
|
|
518
|
+
weekStart: "주의 시작 요일",
|
|
519
|
+
weekStartHint:
|
|
520
|
+
"캘린더와 내 작업에서. 시스템 기본은 각 사람의 기기에 설정된 언어와 지역을 따르고, 월요일이나 일요일은 모두에게 같게 적용됩니다.",
|
|
521
|
+
timeZone: "타임존",
|
|
522
|
+
timeZoneHint:
|
|
523
|
+
"콘솔 명령과 에이전트가 시각을 이 타임존으로 찍습니다. 페이지는 각 기기의 타임존으로 보여 줍니다. 없음이면 명령은 UTC로 찍습니다.",
|
|
524
|
+
timeZoneNone: "없음",
|
|
525
|
+
timeZoneDevice: (zone) => `이 기기: ${zone}`,
|
|
526
|
+
timeZoneUseDevice: (zone) => `이 기기의 타임존 쓰기: ${zone}`,
|
|
527
|
+
save: "설정 저장",
|
|
528
|
+
},
|
|
467
529
|
},
|
|
468
530
|
|
|
469
531
|
rules: {
|
|
@@ -513,7 +575,7 @@ export const ko: Messages = {
|
|
|
513
575
|
title: "제목",
|
|
514
576
|
body: "본문",
|
|
515
577
|
priority: "우선순위",
|
|
516
|
-
|
|
578
|
+
workers: "작업자",
|
|
517
579
|
parentId: "상위 작업",
|
|
518
580
|
links: "링크",
|
|
519
581
|
name: "이름",
|
|
@@ -527,9 +589,14 @@ export const ko: Messages = {
|
|
|
527
589
|
dueOn: "기한",
|
|
528
590
|
state: "상태",
|
|
529
591
|
color: "색",
|
|
592
|
+
peopleVisibility: "멤버 공개 범위",
|
|
593
|
+
weekStart: "주의 시작 요일",
|
|
594
|
+
timeZone: "타임존",
|
|
595
|
+
packToken: "SkillCDN 토큰",
|
|
530
596
|
},
|
|
531
597
|
event: {
|
|
532
598
|
personJoined: () => "보드에 들어왔습니다",
|
|
599
|
+
workspaceUpdated: (fields) => `워크스페이스의 ${fields}을(를) 바꿨습니다`,
|
|
533
600
|
roleChanged: (login, role) => `${login}을(를) ${role}(으)로 지정했습니다`,
|
|
534
601
|
personListed: (login) => `${login}을(를) 추가했습니다`,
|
|
535
602
|
personUnlisted: (login) => `${login}을(를) 목록에서 뺐습니다`,
|
|
@@ -647,9 +714,9 @@ export const ko: Messages = {
|
|
|
647
714
|
indexing: "SkillCDN이 아직 저장소를 색인하고 있습니다. 잠시 후 다시 보세요.",
|
|
648
715
|
failed: "SkillCDN이 저장소를 색인하지 못했습니다. 찾은 내용은 주소의 페이지에 있습니다.",
|
|
649
716
|
not_found:
|
|
650
|
-
"SkillCDN이 이 주소를 콘솔에 제공하지 않습니다. 그곳에 아무것도 없거나, 비공개 팩인데
|
|
717
|
+
"SkillCDN이 이 주소를 콘솔에 제공하지 않습니다. 그곳에 아무것도 없거나, 비공개 팩인데 읽을 SkillCDN 토큰이 프로젝트에도 워크스페이스에도 없습니다. 소유자가 설정 페이지에서 SkillCDN의 승인 코드로 연결합니다.",
|
|
651
718
|
token_invalid:
|
|
652
|
-
"
|
|
719
|
+
"이 팩을 읽는 SkillCDN 토큰이 SkillCDN에서 더 이상 통하지 않습니다. 만료되었거나 지워졌거나, 만든 사람이 저장소 권한을 잃었습니다. 소유자가 설정 페이지에서 새로 넣습니다.",
|
|
653
720
|
unavailable:
|
|
654
721
|
"SkillCDN에 연결할 수 없습니다. 스킬은 이전 상태 그대로입니다. 나중에 다시 보세요.",
|
|
655
722
|
},
|
|
@@ -727,6 +794,7 @@ export const ko: Messages = {
|
|
|
727
794
|
people: {
|
|
728
795
|
title: "사람들",
|
|
729
796
|
list: "사람들",
|
|
797
|
+
narrowed: "같은 프로젝트에 속한 사람들과 관리자입니다.",
|
|
730
798
|
roleOf: (name) => `${name}의 역할`,
|
|
731
799
|
letIn: "사람 추가",
|
|
732
800
|
letInAria: "사람 추가",
|
|
@@ -756,8 +824,8 @@ export const ko: Messages = {
|
|
|
756
824
|
loadingWork: "작업을 불러오는 중",
|
|
757
825
|
couldNotLoadWork: "작업을 불러올 수 없습니다.",
|
|
758
826
|
noWork: {
|
|
759
|
-
title: (name) => `${name}에게
|
|
760
|
-
body: "내가 볼 수 있는 프로젝트에서 그
|
|
827
|
+
title: (name) => `${name}에게 맡겨진 작업이 없습니다`,
|
|
828
|
+
body: "내가 볼 수 있는 프로젝트에서 그 사람이 작업자인 열린 작업이 여기에 나타납니다.",
|
|
761
829
|
},
|
|
762
830
|
notOverseen: {
|
|
763
831
|
title: "볼 수 없는 작업입니다",
|
package/src/index.ts
CHANGED
|
@@ -82,6 +82,12 @@ export {
|
|
|
82
82
|
goalMonth,
|
|
83
83
|
} from "./components/goals.js";
|
|
84
84
|
export { Markdown, type MarkdownProps } from "./components/markdown.js";
|
|
85
|
+
export {
|
|
86
|
+
PackConnect,
|
|
87
|
+
type PackConnectProps,
|
|
88
|
+
type PackConnectState,
|
|
89
|
+
} from "./components/pack-connect.js";
|
|
90
|
+
export { PackTokenWays, type PackTokenWaysProps } from "./components/pack-token.js";
|
|
85
91
|
export {
|
|
86
92
|
PAGE_SIZE,
|
|
87
93
|
Pager,
|
|
@@ -96,6 +102,13 @@ export {
|
|
|
96
102
|
PeopleList,
|
|
97
103
|
type PeopleListProps,
|
|
98
104
|
} from "./components/people.js";
|
|
105
|
+
export {
|
|
106
|
+
PICKER_PAGE_LIMIT,
|
|
107
|
+
Picker,
|
|
108
|
+
type PickerPage,
|
|
109
|
+
type PickerProps,
|
|
110
|
+
type PickerSearch,
|
|
111
|
+
} from "./components/picker.js";
|
|
99
112
|
export {
|
|
100
113
|
clampScale,
|
|
101
114
|
FITTED,
|
|
@@ -162,7 +175,14 @@ export {
|
|
|
162
175
|
} from "./components/shell.js";
|
|
163
176
|
export { SignIn, type SignInProps } from "./components/sign-in.js";
|
|
164
177
|
export { SkillList, type SkillListProps } from "./components/skills.js";
|
|
165
|
-
export {
|
|
178
|
+
export {
|
|
179
|
+
type GoalSearch,
|
|
180
|
+
goalLabel,
|
|
181
|
+
TaskForm,
|
|
182
|
+
type TaskFormProps,
|
|
183
|
+
type TaskSearch,
|
|
184
|
+
taskLabel,
|
|
185
|
+
} from "./components/task-form.js";
|
|
166
186
|
export { TaskList, type TaskListProps } from "./components/task-list.js";
|
|
167
187
|
export { TaskView, type TaskViewProps } from "./components/task-view.js";
|
|
168
188
|
export {
|
|
@@ -198,8 +218,19 @@ export {
|
|
|
198
218
|
STATE_LABELS,
|
|
199
219
|
StateBadge,
|
|
200
220
|
Time,
|
|
221
|
+
Workers,
|
|
201
222
|
} from "./components/ui.js";
|
|
202
223
|
export { WorkList, type WorkListProps } from "./components/work.js";
|
|
224
|
+
export {
|
|
225
|
+
DEFAULT_PEOPLE_VISIBILITY,
|
|
226
|
+
peopleVisibilityOf,
|
|
227
|
+
timeZoneOf,
|
|
228
|
+
WorkspaceSettingsForm,
|
|
229
|
+
type WorkspaceSettingsFormProps,
|
|
230
|
+
WorkspaceSettingsView,
|
|
231
|
+
type WorkspaceSettingsViewProps,
|
|
232
|
+
weekStartOf,
|
|
233
|
+
} from "./components/workspace.js";
|
|
203
234
|
export { ConnectPage, type ConnectPageProps } from "./connect-page.js";
|
|
204
235
|
export {
|
|
205
236
|
type ConsoleApp,
|
package/src/limits.ts
CHANGED
|
@@ -9,6 +9,8 @@ export const MAX_QUESTION_LENGTH = 500;
|
|
|
9
9
|
export const MAX_BODY_LENGTH = 20_000;
|
|
10
10
|
/** The links of a task: a repository, a pull request, a document. */
|
|
11
11
|
export const MAX_LINKS = 20;
|
|
12
|
+
/** How many people may be at work on one task at a time (ADR-0037): a crew, not a mailing list. */
|
|
13
|
+
export const MAX_WORKERS = 20;
|
|
12
14
|
export const MAX_LINK_LABEL_LENGTH = 120;
|
|
13
15
|
export const MAX_URL_LENGTH = 2048;
|
|
14
16
|
/** The options of a decision, and how a person words each. */
|
package/src/router.ts
CHANGED
|
@@ -83,8 +83,11 @@ export type Route =
|
|
|
83
83
|
readonly project: string;
|
|
84
84
|
readonly form: "edit" | "rules" | "pack-token" | undefined;
|
|
85
85
|
}
|
|
86
|
-
/** The workspace's settings: its rules, its categories, its skills; or the form the rules are written on. */
|
|
87
|
-
| {
|
|
86
|
+
/** The workspace's settings: its own, its rules, its categories, its skills; or the form the rules, or the settings (ADR-0035), are written on. */
|
|
87
|
+
| {
|
|
88
|
+
readonly name: "workspace-settings";
|
|
89
|
+
readonly form: "rules" | "workspace" | "pack-token" | undefined;
|
|
90
|
+
}
|
|
88
91
|
| { readonly name: "people" }
|
|
89
92
|
/** The form where an administrator lets someone in by login (ADR-0022). */
|
|
90
93
|
| { readonly name: "new-listing" }
|
|
@@ -252,7 +255,16 @@ export function matchRoute(pathname: string, search = ""): Route {
|
|
|
252
255
|
return { name: "categories" };
|
|
253
256
|
}
|
|
254
257
|
if (path === PATHS.settings) {
|
|
255
|
-
return {
|
|
258
|
+
return {
|
|
259
|
+
name: "workspace-settings",
|
|
260
|
+
form: params.has("workspace")
|
|
261
|
+
? "workspace"
|
|
262
|
+
: params.has("rules")
|
|
263
|
+
? "rules"
|
|
264
|
+
: params.has("pack-token")
|
|
265
|
+
? "pack-token"
|
|
266
|
+
: undefined,
|
|
267
|
+
};
|
|
256
268
|
}
|
|
257
269
|
if (path === PATHS.connect) {
|
|
258
270
|
return { name: "connect", code: undefined };
|
|
@@ -423,8 +435,8 @@ export function projectSettingsHref(key: string, form?: "edit" | "rules" | "pack
|
|
|
423
435
|
return form === undefined ? base : `${base}?${form}`;
|
|
424
436
|
}
|
|
425
437
|
|
|
426
|
-
/** Where the workspace's settings are, or the form its rules are written on. */
|
|
427
|
-
export function settingsHref(form?: "rules"): string {
|
|
438
|
+
/** Where the workspace's settings are, or the form its rules, or its own settings, are written on. */
|
|
439
|
+
export function settingsHref(form?: "rules" | "workspace" | "pack-token"): string {
|
|
428
440
|
return form === undefined ? PATHS.settings : `${PATHS.settings}?${form}`;
|
|
429
441
|
}
|
|
430
442
|
|
package/src/routes.ts
CHANGED
|
@@ -9,6 +9,10 @@ export const REST_ROUTES = {
|
|
|
9
9
|
me: "/api/v1/me",
|
|
10
10
|
/** The token a request is made with, for it to give itself up. */
|
|
11
11
|
meToken: "/api/v1/me/token",
|
|
12
|
+
/** The workspace's settings (ADR-0035), changed by an administrator; read through `me`. */
|
|
13
|
+
workspace: "/api/v1/workspace",
|
|
14
|
+
/** The SkillCDN token the organization's pack is read with (ADR-0036), an administrator's; `/connect` under it connects one with a code. */
|
|
15
|
+
workspacePackToken: "/api/v1/workspace/pack-token",
|
|
12
16
|
/** The people of the workspace: everyone who has signed in, and the logins let in that have not. */
|
|
13
17
|
people: "/api/v1/people",
|
|
14
18
|
/** The logins an administrator let in (ADR-0022), made and removed by one. */
|