@skillcdn/console 0.4.1 → 0.4.3
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 +19 -2
- package/SKILLCDN.md +7 -5
- package/dist/api.d.ts +5 -4
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -4
- package/dist/api.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +569 -48
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/format.d.ts +34 -3
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +283 -7
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +44 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/plugin-check.d.ts +26 -0
- package/dist/cli/plugin-check.d.ts.map +1 -0
- package/dist/cli/plugin-check.js +396 -0
- package/dist/cli/plugin-check.js.map +1 -0
- package/dist/cli/plugin-cli.d.ts +20 -0
- package/dist/cli/plugin-cli.d.ts.map +1 -0
- package/dist/cli/plugin-cli.js +189 -0
- package/dist/cli/plugin-cli.js.map +1 -0
- package/dist/cli/plugin-init.d.ts +37 -0
- package/dist/cli/plugin-init.d.ts.map +1 -0
- package/dist/cli/plugin-init.js +206 -0
- package/dist/cli/plugin-init.js.map +1 -0
- package/dist/cli/plugin-main.d.ts +3 -0
- package/dist/cli/plugin-main.d.ts.map +1 -0
- package/dist/cli/plugin-main.js +28 -0
- package/dist/cli/plugin-main.js.map +1 -0
- package/dist/client.d.ts +100 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +79 -7
- package/dist/client.js.map +1 -1
- package/dist/compat.d.ts +1 -1
- package/dist/compat.js +2 -2
- package/dist/components/board.d.ts +8 -0
- package/dist/components/board.d.ts.map +1 -1
- package/dist/components/board.js +59 -15
- package/dist/components/board.js.map +1 -1
- package/dist/components/comments.d.ts.map +1 -1
- package/dist/components/comments.js +1 -1
- package/dist/components/comments.js.map +1 -1
- package/dist/components/decision-form.d.ts +2 -1
- package/dist/components/decision-form.d.ts.map +1 -1
- package/dist/components/decision-form.js +36 -4
- package/dist/components/decision-form.js.map +1 -1
- package/dist/components/decision-list.d.ts +4 -0
- package/dist/components/decision-list.d.ts.map +1 -1
- package/dist/components/decision-list.js +29 -3
- package/dist/components/decision-list.js.map +1 -1
- package/dist/components/event-feed.d.ts +1 -1
- package/dist/components/event-feed.d.ts.map +1 -1
- package/dist/components/event-feed.js +33 -1
- package/dist/components/event-feed.js.map +1 -1
- package/dist/components/my-decisions.d.ts +2 -0
- package/dist/components/my-decisions.d.ts.map +1 -1
- package/dist/components/my-decisions.js +2 -2
- package/dist/components/my-decisions.js.map +1 -1
- package/dist/components/plugin-frame.d.ts +52 -0
- package/dist/components/plugin-frame.d.ts.map +1 -0
- package/dist/components/plugin-frame.js +314 -0
- package/dist/components/plugin-frame.js.map +1 -0
- package/dist/components/plugin-settings.d.ts +38 -0
- package/dist/components/plugin-settings.d.ts.map +1 -0
- package/dist/components/plugin-settings.js +348 -0
- package/dist/components/plugin-settings.js.map +1 -0
- package/dist/components/shell.d.ts +2 -0
- package/dist/components/shell.d.ts.map +1 -1
- package/dist/components/shell.js +26 -1
- package/dist/components/shell.js.map +1 -1
- package/dist/components/task-view.d.ts +2 -1
- package/dist/components/task-view.d.ts.map +1 -1
- package/dist/components/task-view.js.map +1 -1
- package/dist/components/workspace.d.ts +7 -1
- package/dist/components/workspace.d.ts.map +1 -1
- package/dist/components/workspace.js +1 -1
- package/dist/components/workspace.js.map +1 -1
- package/dist/console.css +330 -1
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +152 -41
- package/dist/console.js.map +1 -1
- package/dist/data.d.ts +9 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +45 -9
- package/dist/data.js.map +1 -1
- package/dist/i18n/en.d.ts +155 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +166 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +150 -0
- package/dist/i18n/ko.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- 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/plugin/args.d.ts +148 -0
- package/dist/plugin/args.d.ts.map +1 -0
- package/dist/plugin/args.js +369 -0
- package/dist/plugin/args.js.map +1 -0
- package/dist/plugin/bridge.d.ts +146 -0
- package/dist/plugin/bridge.d.ts.map +1 -0
- package/dist/plugin/bridge.js +125 -0
- package/dist/plugin/bridge.js.map +1 -0
- package/dist/plugin/capabilities.d.ts +20 -0
- package/dist/plugin/capabilities.d.ts.map +1 -0
- package/dist/plugin/capabilities.js +133 -0
- package/dist/plugin/capabilities.js.map +1 -0
- package/dist/plugin/context.d.ts +380 -0
- package/dist/plugin/context.d.ts.map +1 -0
- package/dist/plugin/context.js +2 -0
- package/dist/plugin/context.js.map +1 -0
- package/dist/plugin/define.d.ts +208 -0
- package/dist/plugin/define.d.ts.map +1 -0
- package/dist/plugin/define.js +482 -0
- package/dist/plugin/define.js.map +1 -0
- package/dist/plugin/definition-error.d.ts +11 -0
- package/dist/plugin/definition-error.d.ts.map +1 -0
- package/dist/plugin/definition-error.js +17 -0
- package/dist/plugin/definition-error.js.map +1 -0
- package/dist/plugin/limits.d.ts +67 -0
- package/dist/plugin/limits.d.ts.map +1 -0
- package/dist/plugin/limits.js +70 -0
- package/dist/plugin/limits.js.map +1 -0
- package/dist/plugin/load-worker.d.ts +7 -0
- package/dist/plugin/load-worker.d.ts.map +1 -0
- package/dist/plugin/load-worker.js +41 -0
- package/dist/plugin/load-worker.js.map +1 -0
- package/dist/plugin/load.d.ts +18 -0
- package/dist/plugin/load.d.ts.map +1 -0
- package/dist/plugin/load.js +62 -0
- package/dist/plugin/load.js.map +1 -0
- package/dist/plugin/manifest.d.ts +237 -0
- package/dist/plugin/manifest.d.ts.map +1 -0
- package/dist/plugin/manifest.js +411 -0
- package/dist/plugin/manifest.js.map +1 -0
- package/dist/plugin/refusals.d.ts +49 -0
- package/dist/plugin/refusals.d.ts.map +1 -0
- package/dist/plugin/refusals.js +79 -0
- package/dist/plugin/refusals.js.map +1 -0
- package/dist/plugin/rest-schemas.d.ts +556 -0
- package/dist/plugin/rest-schemas.d.ts.map +1 -0
- package/dist/plugin/rest-schemas.js +262 -0
- package/dist/plugin/rest-schemas.js.map +1 -0
- package/dist/plugin/sandbox.d.ts +23 -0
- package/dist/plugin/sandbox.d.ts.map +1 -0
- package/dist/plugin/sandbox.js +99 -0
- package/dist/plugin/sandbox.js.map +1 -0
- package/dist/plugin/testing.d.ts +45 -0
- package/dist/plugin/testing.d.ts.map +1 -0
- package/dist/plugin/testing.js +420 -0
- package/dist/plugin/testing.js.map +1 -0
- package/dist/plugin/web-react.d.ts +11 -0
- package/dist/plugin/web-react.d.ts.map +1 -0
- package/dist/plugin/web-react.js +34 -0
- package/dist/plugin/web-react.js.map +1 -0
- package/dist/plugin/web.d.ts +95 -0
- package/dist/plugin/web.d.ts.map +1 -0
- package/dist/plugin/web.js +245 -0
- package/dist/plugin/web.js.map +1 -0
- package/dist/plugin-nav.d.ts +29 -0
- package/dist/plugin-nav.d.ts.map +1 -0
- package/dist/plugin-nav.js +92 -0
- package/dist/plugin-nav.js.map +1 -0
- package/dist/plugin-testing.d.ts +2 -0
- package/dist/plugin-testing.d.ts.map +1 -0
- package/dist/plugin-testing.js +4 -0
- package/dist/plugin-testing.js.map +1 -0
- package/dist/plugin-web-react.d.ts +3 -0
- package/dist/plugin-web-react.d.ts.map +1 -0
- package/dist/plugin-web-react.js +3 -0
- package/dist/plugin-web-react.js.map +1 -0
- package/dist/plugin-web.d.ts +4 -0
- package/dist/plugin-web.d.ts.map +1 -0
- package/dist/plugin-web.js +5 -0
- package/dist/plugin-web.js.map +1 -0
- package/dist/plugin.d.ts +11 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +15 -0
- package/dist/plugin.js.map +1 -0
- package/dist/router.d.ts +28 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +47 -0
- 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 +6 -0
- package/dist/routes.js.map +1 -1
- package/dist/schemas.d.ts +194 -9
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +98 -17
- package/dist/schemas.js.map +1 -1
- package/dist/tokens.d.ts +2 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +101 -0
- package/dist/tokens.js.map +1 -0
- package/dist/vocabulary.d.ts +11 -1
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +24 -0
- package/dist/vocabulary.js.map +1 -1
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +2 -0
- package/dist/web.js.map +1 -1
- package/docs/specs/cli.md +12 -5
- package/docs/specs/plugins.md +488 -0
- package/docs/specs/rest.md +11 -9
- package/package.json +26 -8
- package/skills/building-a-console/SKILL.md +25 -26
- package/skills/building-a-console/references/configuring.md +40 -0
- package/skills/building-a-console/references/the-default-console.md +1 -1
- package/skills/building-a-console/references/the-look-from-a-website.md +5 -5
- package/skills/building-a-plugin/SKILL.md +137 -0
- package/skills/deploying-a-console/SKILL.md +24 -26
- package/skills/deploying-a-console/references/access.md +13 -9
- package/skills/deploying-a-console/references/resources.md +25 -10
- package/skills/deploying-a-console/references/running-it-again.md +15 -0
- package/skills/deploying-a-console/references/sizing.md +2 -0
- package/skills/planning-the-board/SKILL.md +96 -0
- package/skills/planning-the-board/references/a-task.md +36 -0
- package/skills/planning-the-board/references/setting-up.md +44 -0
- package/skills/working-the-board/SKILL.md +43 -34
- package/skills/working-the-board/references/the-pack.md +19 -0
- package/src/api.ts +12 -0
- package/src/cli/cli.ts +737 -55
- package/src/cli/format.ts +368 -10
- package/src/cli/help.ts +50 -6
- package/src/cli/plugin-check.ts +497 -0
- package/src/cli/plugin-cli.ts +237 -0
- package/src/cli/plugin-init.ts +257 -0
- package/src/cli/plugin-main.ts +30 -0
- package/src/client.ts +322 -9
- package/src/compat.ts +2 -2
- package/src/components/board.tsx +62 -14
- package/src/components/comments.tsx +1 -0
- package/src/components/decision-form.tsx +92 -11
- package/src/components/decision-list.tsx +71 -2
- package/src/components/event-feed.tsx +42 -1
- package/src/components/my-decisions.tsx +4 -1
- package/src/components/plugin-frame.tsx +437 -0
- package/src/components/plugin-settings.tsx +1111 -0
- package/src/components/shell.tsx +82 -14
- package/src/components/task-view.tsx +2 -1
- package/src/components/workspace.tsx +18 -0
- package/src/console.tsx +304 -31
- package/src/data.ts +59 -11
- package/src/i18n/en.ts +175 -0
- package/src/i18n/ko.ts +155 -0
- package/src/index.ts +12 -0
- package/src/limits.ts +2 -0
- package/src/plugin/args.ts +526 -0
- package/src/plugin/bridge.ts +314 -0
- package/src/plugin/capabilities.ts +150 -0
- package/src/plugin/context.ts +421 -0
- package/src/plugin/define.ts +792 -0
- package/src/plugin/definition-error.ts +19 -0
- package/src/plugin/limits.ts +70 -0
- package/src/plugin/load-worker.ts +50 -0
- package/src/plugin/load.ts +82 -0
- package/src/plugin/manifest.ts +561 -0
- package/src/plugin/refusals.ts +94 -0
- package/src/plugin/rest-schemas.ts +354 -0
- package/src/plugin/sandbox.ts +123 -0
- package/src/plugin/testing.ts +612 -0
- package/src/plugin/web-react.ts +45 -0
- package/src/plugin/web.ts +403 -0
- package/src/plugin-nav.ts +132 -0
- package/src/plugin-testing.ts +10 -0
- package/src/plugin-web-react.ts +4 -0
- package/src/plugin-web.ts +35 -0
- package/src/plugin.ts +126 -0
- package/src/router.ts +73 -0
- package/src/routes.ts +7 -0
- package/src/schemas.ts +115 -18
- package/src/styles/console.css +330 -1
- package/src/tokens.ts +101 -0
- package/src/vocabulary.ts +30 -0
- package/src/web.ts +2 -0
- package/template/plugin/.gitignore +2 -0
- package/template/plugin/README.md +26 -0
- package/template/plugin/SKILLCDN.md +13 -0
- package/template/plugin/build.mjs +40 -0
- package/template/plugin/console-plugin.json +50 -0
- package/template/plugin/package.json +27 -0
- package/template/plugin/skills/__key__/SKILL.md +23 -0
- package/template/plugin/src/check.test.ts +34 -0
- package/template/plugin/src/server/index.test.ts +41 -0
- package/template/plugin/src/server/index.ts +72 -0
- package/template/plugin/src/web/index.css +51 -0
- package/template/plugin/src/web/index.ts +115 -0
- package/template/plugin/tsconfig.json +17 -0
- package/skills/working-the-board/references/setting-up.md +0 -3
- /package/skills/{working-the-board → planning-the-board}/references/project-rules.md +0 -0
package/src/components/shell.tsx
CHANGED
|
@@ -13,6 +13,8 @@ export interface NavItem {
|
|
|
13
13
|
readonly current: boolean;
|
|
14
14
|
/** A count beside the label: the decisions waiting, for example. */
|
|
15
15
|
readonly count?: number | undefined;
|
|
16
|
+
/** The pages the tab opens a list of, as a group of plugins does (ADR-0054); the tab itself leads to the first. */
|
|
17
|
+
readonly children?: readonly NavItem[] | undefined;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
/** The addresses of a brand's marks (ADR-0013): shown beside the workspace's name, and above it when signing in. */
|
|
@@ -67,6 +69,68 @@ export function isPlainClick(event: {
|
|
|
67
69
|
return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
|
|
68
70
|
}
|
|
69
71
|
|
|
72
|
+
/** A tab that opens a list of pages, as a group of several plugins does: a details, as the person's menu is. Closes once used. */
|
|
73
|
+
function TabGroup(props: { readonly item: NavItem; readonly onNavigate: (href: string) => void }) {
|
|
74
|
+
const details = useRef<HTMLDetailsElement>(null);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
const onClick = (event: MouseEvent) => {
|
|
77
|
+
const element = details.current;
|
|
78
|
+
if (
|
|
79
|
+
element?.open === true &&
|
|
80
|
+
!(event.target instanceof Node && element.contains(event.target))
|
|
81
|
+
) {
|
|
82
|
+
element.open = false;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
document.addEventListener("click", onClick);
|
|
86
|
+
return () => document.removeEventListener("click", onClick);
|
|
87
|
+
}, []);
|
|
88
|
+
const { item } = props;
|
|
89
|
+
return (
|
|
90
|
+
<details className="sc-tab-group" ref={details}>
|
|
91
|
+
<summary
|
|
92
|
+
className={cx("sc-tab", "sc-tab-summary", item.current && "sc-tab-current")}
|
|
93
|
+
aria-current={item.current ? "page" : undefined}
|
|
94
|
+
>
|
|
95
|
+
{item.label}
|
|
96
|
+
<svg className="sc-menu-caret" viewBox="0 0 16 16" aria-hidden="true">
|
|
97
|
+
<path
|
|
98
|
+
d="M4 6l4 4 4-4"
|
|
99
|
+
fill="none"
|
|
100
|
+
stroke="currentColor"
|
|
101
|
+
strokeWidth="1.5"
|
|
102
|
+
strokeLinecap="round"
|
|
103
|
+
strokeLinejoin="round"
|
|
104
|
+
/>
|
|
105
|
+
</svg>
|
|
106
|
+
</summary>
|
|
107
|
+
<div className="sc-menu-panel sc-tab-group-panel">
|
|
108
|
+
<div className="sc-menu-list">
|
|
109
|
+
{(item.children ?? []).map((child) => (
|
|
110
|
+
<a
|
|
111
|
+
key={child.href}
|
|
112
|
+
href={child.href}
|
|
113
|
+
className="sc-menu-link"
|
|
114
|
+
aria-current={child.current ? "page" : undefined}
|
|
115
|
+
onClick={(event) => {
|
|
116
|
+
if (isPlainClick(event)) {
|
|
117
|
+
event.preventDefault();
|
|
118
|
+
if (details.current !== null) {
|
|
119
|
+
details.current.open = false;
|
|
120
|
+
}
|
|
121
|
+
props.onNavigate(child.href);
|
|
122
|
+
}
|
|
123
|
+
}}
|
|
124
|
+
>
|
|
125
|
+
{child.label}
|
|
126
|
+
</a>
|
|
127
|
+
))}
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</details>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
70
134
|
/** The person's menu: who they are, the workspace's pages, the languages, and the way out. Closes once used. */
|
|
71
135
|
function PersonMenu(props: {
|
|
72
136
|
readonly person: RestPerson;
|
|
@@ -296,20 +360,24 @@ export function Shell(props: ShellProps) {
|
|
|
296
360
|
{props.nav.length > 0 && (
|
|
297
361
|
<nav ref={tabs} className="sc-tabs" aria-label={words.shell.pages}>
|
|
298
362
|
<div className="sc-tabs-inner">
|
|
299
|
-
{props.nav.map((item) =>
|
|
300
|
-
|
|
301
|
-
key={item.href}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
363
|
+
{props.nav.map((item) =>
|
|
364
|
+
item.children !== undefined && item.children.length > 0 ? (
|
|
365
|
+
<TabGroup key={item.href} item={item} onNavigate={props.onNavigate} />
|
|
366
|
+
) : (
|
|
367
|
+
<a
|
|
368
|
+
key={item.href}
|
|
369
|
+
href={item.href}
|
|
370
|
+
className={cx("sc-tab", item.current && "sc-tab-current")}
|
|
371
|
+
aria-current={item.current ? "page" : undefined}
|
|
372
|
+
onClick={follow(item.href)}
|
|
373
|
+
>
|
|
374
|
+
{item.label}
|
|
375
|
+
{item.count !== undefined && item.count > 0 && (
|
|
376
|
+
<span className="sc-nav-count">{item.count}</span>
|
|
377
|
+
)}
|
|
378
|
+
</a>
|
|
379
|
+
),
|
|
380
|
+
)}
|
|
313
381
|
</div>
|
|
314
382
|
</nav>
|
|
315
383
|
)}
|
|
@@ -83,7 +83,8 @@ export interface TaskViewProps {
|
|
|
83
83
|
readonly error?: string | undefined;
|
|
84
84
|
readonly onChange: (task: RestTask, patch: RestTaskInput) => void;
|
|
85
85
|
readonly onMove: (task: RestTask, state: TaskState) => void;
|
|
86
|
-
|
|
86
|
+
/** Called with a decision raised about the task, and the files put on it (ADR-0055). */
|
|
87
|
+
readonly onRaiseDecision: (input: RestDecisionInput, files: readonly File[]) => void;
|
|
87
88
|
readonly onAnswer: (decision: RestDecision, input: RestAnswerInput) => void;
|
|
88
89
|
/** Called to grow a decision's record with what followed. */
|
|
89
90
|
readonly onUpdateDecision?:
|
|
@@ -2,6 +2,7 @@ import { type FormEvent, useId, useMemo, useState } from "react";
|
|
|
2
2
|
import {
|
|
3
3
|
PEOPLE_VISIBILITIES,
|
|
4
4
|
type PeopleVisibility,
|
|
5
|
+
type RestMe,
|
|
5
6
|
type RestWorkspace,
|
|
6
7
|
type RestWorkspacePatch,
|
|
7
8
|
WEEK_STARTS,
|
|
@@ -117,6 +118,12 @@ const labelOf = (zone: TimeZoneOption): string =>
|
|
|
117
118
|
|
|
118
119
|
export interface WorkspaceSettingsViewProps {
|
|
119
120
|
readonly workspace: RestWorkspace;
|
|
121
|
+
/**
|
|
122
|
+
* The console's version with the range of command versions it takes, as `GET /api/v1/me`
|
|
123
|
+
* says them (ADR-0025): shown first, so that whoever keeps the agents' commands up to date
|
|
124
|
+
* reads here which console they must match. Left out, nothing is said.
|
|
125
|
+
*/
|
|
126
|
+
readonly console?: RestMe["console"];
|
|
120
127
|
}
|
|
121
128
|
|
|
122
129
|
/** The settings as they stand, one row each; where they are changed is the page's business. */
|
|
@@ -128,6 +135,17 @@ export function WorkspaceSettingsView(props: WorkspaceSettingsViewProps) {
|
|
|
128
135
|
const offset = zone === undefined ? undefined : offsetOf(zone, new Date());
|
|
129
136
|
return (
|
|
130
137
|
<dl className="sc-settings-list">
|
|
138
|
+
{props.console !== undefined && (
|
|
139
|
+
<div className="sc-settings-item">
|
|
140
|
+
<dt>{settings.consoleVersion}</dt>
|
|
141
|
+
<dd>
|
|
142
|
+
{props.console.version}
|
|
143
|
+
<span className="sc-settings-note">
|
|
144
|
+
{settings.consoleTakes(props.console.clientRange)}
|
|
145
|
+
</span>
|
|
146
|
+
</dd>
|
|
147
|
+
</div>
|
|
148
|
+
)}
|
|
131
149
|
<div className="sc-settings-item">
|
|
132
150
|
<dt>{settings.peopleVisibility}</dt>
|
|
133
151
|
<dd>{words.vocabulary.peopleVisibility[peopleVisibilityOf(props.workspace)]}</dd>
|