@conduction/docusaurus-preset 3.21.0 → 3.22.0

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 (29) hide show
  1. package/MISSING_COMPONENTS.md +1 -1
  2. package/README.md +2 -2
  3. package/package.json +3 -3
  4. package/src/components/AppMock/AppMock.jsx +12 -10
  5. package/src/components/AppMock/AppMock.module.css +14 -14
  6. package/src/components/AppMock/variants/{MyDashBiMock.jsx → LaunchPadBiMock.jsx} +3 -3
  7. package/src/components/AppMock/variants/{MyDashMock.jsx → LaunchPadMock.jsx} +4 -4
  8. package/src/components/AppMock/variants/{MyDashTilesMock.jsx → LaunchPadTilesMock.jsx} +3 -3
  9. package/src/components/AppMock/variants/{MyDashWidgetsMock.jsx → LaunchPadWidgetsMock.jsx} +3 -3
  10. package/src/components/AppMock/variants/OpenBuildMock.jsx +105 -0
  11. package/src/components/DetailHero/DetailHero.jsx +5 -5
  12. package/src/components/MockScene/MockScene.module.css +2 -2
  13. package/src/components/PartnerCard/PartnerCard.jsx +1 -1
  14. package/src/components/Pipeline/Pipeline.jsx +2 -2
  15. package/src/components/PlatformOverview/PlatformOverview.module.css +1 -1
  16. package/src/components/Showcase/Showcase.jsx +1 -1
  17. package/src/components/WidgetMock/WidgetMock.jsx +2 -2
  18. package/src/components/WidgetMock/WidgetMock.module.css +1 -1
  19. package/src/components/WidgetShelf/WidgetShelf.jsx +1 -1
  20. package/src/components/primitives/Button.jsx +2 -2
  21. package/src/components/primitives/Button.module.css +1 -1
  22. package/src/data/apps-registry.js +3 -3
  23. package/src/diagrams/README.md +1 -1
  24. package/src/index.js +3 -3
  25. package/src/plugins/features-page.js +1 -1
  26. package/src/theme/Footer/index.jsx +3 -3
  27. package/src/theme/Navbar/index.jsx +1 -1
  28. package/static/lib/hex-rain.js +2 -2
  29. package/static/lib/platform-diagram.css +1 -1
@@ -57,7 +57,7 @@ Most consume one or more primitives.
57
57
  - **CookieCli** — `CookieCli/CookieCli.jsx`. Terminal-styled cookie consent banner with localStorage persistence.
58
58
  - **ComposeBlock** — `ComposeBlock/ComposeBlock.jsx`. Branded code block (cobalt-900 + Plex Mono + filename pill + copy button). For docker-compose, bash recipes, and any verbatim copy-paste content. Used on `/demo`.
59
59
  - **AgentTrace** — `AgentTrace/AgentTrace.jsx`. Terminal-styled agent execution trace with cursor + mode chrome. Specimen: `preview/components/agent-trace.html`.
60
- - **AppMock** — `AppMock/AppMock.jsx`. Selector that renders one of 16 app-specific UI mockups (DeciDesk, DocuDesk, LarpingApp, MyDash + variants, NLDesign, OpenCatalogi, OpenConnector, OpenRegister, OpenWoo, PipelinQ, Procest, SoftwareCatalog, ZaakAfhandelApp). Each variant lives under `AppMock/variants/`. Specimen: `preview/components/app-mock.html`.
60
+ - **AppMock** — `AppMock/AppMock.jsx`. Selector that renders one of 16 app-specific UI mockups (DeciDesk, DocuDesk, LarpingApp, LaunchPad + variants, NLDesign, OpenCatalogi, OpenConnector, OpenRegister, OpenWoo, PipelinQ, Procest, SoftwareCatalog, ZaakAfhandelApp). Each variant lives under `AppMock/variants/`. Specimen: `preview/components/app-mock.html`.
61
61
  - **ExternalAppShelf** — `ExternalAppShelf/ExternalAppShelf.jsx`. Third-party-app shelf (Outlook-style, Mattermost, Keycloak, etc.) used on `/connext`. Specimen: `preview/components/external-app-shelf.html`.
62
62
  - **WidgetShelf** — `WidgetShelf/WidgetShelf.jsx`. Widget showcase grid with eyebrow + title + lede + N-column widget cards. Specimen: `preview/components/widget-shelf.html`.
63
63
  - **Showcase** — `Showcase/Showcase.jsx`. Multi-item collapsible showcase with screenshot + body. Used on `/commonground` for the "5-lagen model". Specimen: `preview/components/showcase.html`.
package/README.md CHANGED
@@ -4,7 +4,7 @@ Brand-default Docusaurus 3 config for Conduction sites. Tokens, theme, navbar, f
4
4
 
5
5
  ## Status
6
6
 
7
- Source lives inside the [design-system monorepo](https://github.com/ConductionNL/design-system); published to npm under the `@conduction` scope as a single package. Install in any product site with `npm i @conduction/docusaurus-preset`. The diagram web-component runtime (`<cn-hex>`, `<cn-platform>`, etc.) ships inside this same package under `@conduction/docusaurus-preset/diagrams` — no separate install needed.
7
+ Source lives inside the [design-system monorepo](https://codeberg.org/Conduction/design-system); published to npm under the `@conduction` scope as a single package. Install in any product site with `npm i @conduction/docusaurus-preset`. The diagram web-component runtime (`<cn-hex>`, `<cn-platform>`, etc.) ships inside this same package under `@conduction/docusaurus-preset/diagrams` — no separate install needed.
8
8
 
9
9
  ## Brand rules
10
10
 
@@ -162,7 +162,7 @@ Then use `createConfig()` in your `docusaurus.config.js` as shown in [Usage](#us
162
162
  import '@conduction/docusaurus-preset/diagrams';
163
163
  ```
164
164
 
165
- This is how product sites such as `mydash.conduction.nl/docs/...` adopt the brand without copying CSS or theme code, and stay in sync as the design-system evolves.
165
+ This is how product sites such as `launchpad.conduction.nl/docs/...` adopt the brand without copying CSS or theme code, and stay in sync as the design-system evolves.
166
166
 
167
167
  ## AI-crawler baseline
168
168
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conduction/docusaurus-preset",
3
- "version": "3.21.0",
3
+ "version": "3.22.0",
4
4
  "scripts": {
5
5
  "prepack": "node scripts/prepack-bundle-css.js"
6
6
  },
@@ -60,10 +60,10 @@
60
60
  "homepage": "https://design-system.conduction.nl/",
61
61
  "repository": {
62
62
  "type": "git",
63
- "url": "https://github.com/ConductionNL/design-system.git",
63
+ "url": "https://codeberg.org/Conduction/design-system.git",
64
64
  "directory": "docusaurus-preset"
65
65
  },
66
66
  "bugs": {
67
- "url": "https://github.com/ConductionNL/design-system/issues"
67
+ "url": "https://codeberg.org/Conduction/design-system/issues"
68
68
  }
69
69
  }
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * Usage:
16
16
  *
17
- * <AppMock app="mydash" />
17
+ * <AppMock app="launchpad" />
18
18
  * <AppMock app="openregister" caption />
19
19
  * <AppMock app="decidesk" size="sm" />
20
20
  * <AppMock app="procest" sidebar={<SidebarMock kind="procest-xwiki" />} />
@@ -34,10 +34,11 @@
34
34
  import React from 'react';
35
35
  import styles from './AppMock.module.css';
36
36
 
37
- import MyDashMock from './variants/MyDashMock.jsx';
38
- import MyDashTilesMock from './variants/MyDashTilesMock.jsx';
39
- import MyDashBiMock from './variants/MyDashBiMock.jsx';
40
- import MyDashWidgetsMock from './variants/MyDashWidgetsMock.jsx';
37
+ import LaunchPadMock from './variants/LaunchPadMock.jsx';
38
+ import LaunchPadTilesMock from './variants/LaunchPadTilesMock.jsx';
39
+ import LaunchPadBiMock from './variants/LaunchPadBiMock.jsx';
40
+ import LaunchPadWidgetsMock from './variants/LaunchPadWidgetsMock.jsx';
41
+ import OpenBuildMock from './variants/OpenBuildMock.jsx';
41
42
  import OpenCatalogiMock from './variants/OpenCatalogiMock.jsx';
42
43
  import OpenConnectorMock from './variants/OpenConnectorMock.jsx';
43
44
  import OpenRegisterMock from './variants/OpenRegisterMock.jsx';
@@ -52,10 +53,11 @@ import SoftwareCatalogMock from './variants/SoftwareCatalogMock.jsx';
52
53
  import ZaakAfhandelAppMock from './variants/ZaakAfhandelAppMock.jsx';
53
54
 
54
55
  const VARIANTS = {
55
- mydash: {Component: MyDashMock, label: 'MyDash'},
56
- 'mydash-tiles': {Component: MyDashTilesMock, label: 'MyDash · Tiles & grids'},
57
- 'mydash-bi': {Component: MyDashBiMock, label: 'MyDash · BI on registers'},
58
- 'mydash-widgets': {Component: MyDashWidgetsMock, label: 'MyDash · Widgets'},
56
+ launchpad: {Component: LaunchPadMock, label: 'LaunchPad'},
57
+ 'launchpad-tiles': {Component: LaunchPadTilesMock, label: 'LaunchPad · Tiles & grids'},
58
+ 'launchpad-bi': {Component: LaunchPadBiMock, label: 'LaunchPad · BI on registers'},
59
+ 'launchpad-widgets': {Component: LaunchPadWidgetsMock, label: 'LaunchPad · Widgets'},
60
+ openbuild: {Component: OpenBuildMock, label: 'OpenBuild'},
59
61
  opencatalogi: {Component: OpenCatalogiMock, label: 'OpenCatalogi'},
60
62
  openconnector: {Component: OpenConnectorMock, label: 'OpenConnector'},
61
63
  openregister: {Component: OpenRegisterMock, label: 'OpenRegister'},
@@ -87,7 +89,7 @@ export default function AppMock({app, size = 'md', sidebar = null, caption = fal
87
89
  // `.body`, taking the `.detail` slot. SidebarMock children get
88
90
  // `embedded: true` so they drop their standalone .smFrame chrome
89
91
  // and render as the bare `.detail.rich` panel that slots into
90
- // .body. Variants that don't accept a sidebar prop (e.g. MyDash)
92
+ // .body. Variants that don't accept a sidebar prop (e.g. LaunchPad)
91
93
  // ignore it; this keeps the change additive.
92
94
  const renderedSidebar = React.isValidElement(sidebar)
93
95
  ? React.cloneElement(sidebar, { embedded: true })
@@ -70,7 +70,7 @@
70
70
  ====================================================================== */
71
71
 
72
72
  /* Top bar — Nextcloud-style row of small icons + spotlight + bell + avatar.
73
- Used by mydash + the three admin variants below. */
73
+ Used by launchpad + the three admin variants below. */
74
74
  .am .topbar {
75
75
  display: flex;
76
76
  align-items: center;
@@ -275,16 +275,16 @@
275
275
  .am .actions .btn.ghost { background: white; border: 1px solid var(--c-cobalt-200); }
276
276
 
277
277
  /* ======================================================================
278
- MyDash — full-bleed cobalt background with widget grid
278
+ LaunchPad — full-bleed cobalt background with widget grid
279
279
  ====================================================================== */
280
280
 
281
- .am .mydash {
281
+ .am .launchpad {
282
282
  background: linear-gradient(135deg, var(--c-blue-cobalt) 0%, var(--c-cobalt-700) 100%);
283
283
  position: relative;
284
284
  display: flex;
285
285
  flex-direction: column;
286
286
  }
287
- .am .mydash .grid {
287
+ .am .launchpad .grid {
288
288
  flex: 1;
289
289
  display: grid;
290
290
  grid-template-columns: 1fr 1.2fr 1fr 1fr;
@@ -292,8 +292,8 @@
292
292
  padding: 12px;
293
293
  min-height: 0;
294
294
  }
295
- .am .mydash .col { padding: 0; gap: 8px; }
296
- .am .mydash .tile {
295
+ .am .launchpad .col { padding: 0; gap: 8px; }
296
+ .am .launchpad .tile {
297
297
  background: rgba(255,255,255,0.94);
298
298
  border-radius: var(--radius-sm);
299
299
  padding: 8px 10px;
@@ -302,7 +302,7 @@
302
302
  gap: 4px;
303
303
  min-height: 0;
304
304
  }
305
- .am .mydash .tile.primary {
305
+ .am .launchpad .tile.primary {
306
306
  background: var(--c-blue-cobalt);
307
307
  align-items: center;
308
308
  justify-content: center;
@@ -310,22 +310,22 @@
310
310
  flex: 1;
311
311
  min-height: 50px;
312
312
  }
313
- .am .mydash .tile.primary .icon { width: 22px; height: 25px; clip-path: var(--hex-pointy-top); background: white; }
314
- .am .mydash .tile.primary .label { height: 5px; width: 50%; background: white; border-radius: 1px; }
315
- .am .mydash .tile.empty { background: rgba(255,255,255,0.55); flex: 0 0 26%; }
316
- .am .mydash .tileHead {
313
+ .am .launchpad .tile.primary .icon { width: 22px; height: 25px; clip-path: var(--hex-pointy-top); background: white; }
314
+ .am .launchpad .tile.primary .label { height: 5px; width: 50%; background: white; border-radius: 1px; }
315
+ .am .launchpad .tile.empty { background: rgba(255,255,255,0.55); flex: 0 0 26%; }
316
+ .am .launchpad .tileHead {
317
317
  display: flex; align-items: center; gap: 5px;
318
318
  margin-bottom: 2px;
319
319
  }
320
- .am .mydash .tileHead .h { width: 9px; height: 9px; border-radius: 1px; background: var(--c-cobalt-400); }
321
- .am .mydash .tileHead .t { flex: 1; height: 4px; background: var(--c-cobalt-700); border-radius: 1px; }
320
+ .am .launchpad .tileHead .h { width: 9px; height: 9px; border-radius: 1px; background: var(--c-cobalt-400); }
321
+ .am .launchpad .tileHead .t { flex: 1; height: 4px; background: var(--c-cobalt-700); border-radius: 1px; }
322
322
 
323
323
  /* ==========================================================
324
324
  Widget atoms — composable inside any AppMock dashboard
325
325
  variant. Each .w-* renders a different small visualisation.
326
326
  ========================================================== */
327
327
 
328
- /* Generic widget shell — same as .mydash .tile but reusable
328
+ /* Generic widget shell — same as .launchpad .tile but reusable
329
329
  under any dashboard variant. */
330
330
  .am .w {
331
331
  background: rgba(255, 255, 255, 0.94);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MyDash · BI on registers variant.
2
+ * LaunchPad · BI on registers variant.
3
3
  *
4
4
  * Demonstrates the BI-graph angle: any chart you want, drawn directly
5
5
  * on a register without ETL. The mock shows four graph cards in a
@@ -10,7 +10,7 @@
10
10
  import React from 'react';
11
11
  import styles from '../AppMock.module.css';
12
12
 
13
- export default function MyDashBiMock() {
13
+ export default function LaunchPadBiMock() {
14
14
  return (
15
15
  <>
16
16
  <div className={styles.topbar}>
@@ -20,7 +20,7 @@ export default function MyDashBiMock() {
20
20
  <div className={styles.bell}></div>
21
21
  <div className={styles.avatar}></div>
22
22
  </div>
23
- <div className={[styles.body, styles.mydash].filter(Boolean).join(' ')}>
23
+ <div className={[styles.body, styles.launchpad].filter(Boolean).join(' ')}>
24
24
  <div className={styles.grid}>
25
25
  {/* Column 1: Bar chart on top, line chart below */}
26
26
  <div className={styles.col}>
@@ -1,6 +1,6 @@
1
1
  /**
2
- * MyDash abstract — full-bleed cobalt background with widget grid.
3
- * Reference: live screenshot at http://localhost:8080/apps/mydash/.
2
+ * LaunchPad abstract — full-bleed cobalt background with widget grid.
3
+ * Reference: live screenshot at http://localhost:8080/apps/launchpad/.
4
4
  *
5
5
  * Layout: top app strip + 4-column grid where col 1 stacks small + big
6
6
  * primary tiles (Intranet / Calendar / Files), cols 2-4 hold info
@@ -10,7 +10,7 @@
10
10
  import React from 'react';
11
11
  import styles from '../AppMock.module.css';
12
12
 
13
- export default function MyDashMock() {
13
+ export default function LaunchPadMock() {
14
14
  return (
15
15
  <>
16
16
  <div className={styles.topbar}>
@@ -20,7 +20,7 @@ export default function MyDashMock() {
20
20
  <div className={styles.bell}></div>
21
21
  <div className={styles.avatar}></div>
22
22
  </div>
23
- <div className={[styles.body, styles.mydash].filter(Boolean).join(' ')}>
23
+ <div className={[styles.body, styles.launchpad].filter(Boolean).join(' ')}>
24
24
  <div className={styles.grid}>
25
25
  {/* Column 1: small + big primary tiles */}
26
26
  <div className={styles.col}>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MyDash · Tiles & Grids variant.
2
+ * LaunchPad · Tiles & Grids variant.
3
3
  *
4
4
  * Demonstrates the Nextcloud-integration angle: large hex-icon
5
5
  * launcher tiles that deeplink inside Nextcloud, link out to external
@@ -12,7 +12,7 @@
12
12
  import React from 'react';
13
13
  import styles from '../AppMock.module.css';
14
14
 
15
- export default function MyDashTilesMock() {
15
+ export default function LaunchPadTilesMock() {
16
16
  return (
17
17
  <>
18
18
  <div className={styles.topbar}>
@@ -22,7 +22,7 @@ export default function MyDashTilesMock() {
22
22
  <div className={styles.bell}></div>
23
23
  <div className={styles.avatar}></div>
24
24
  </div>
25
- <div className={[styles.body, styles.mydash].filter(Boolean).join(' ')}>
25
+ <div className={[styles.body, styles.launchpad].filter(Boolean).join(' ')}>
26
26
  <div className={styles.grid}>
27
27
  {/* Column 1: Launcher tiles in cobalt + KNVB */}
28
28
  <div className={styles.col}>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MyDash · Widget integration variant.
2
+ * LaunchPad · Widget integration variant.
3
3
  *
4
4
  * Demonstrates the cross-app widget angle: any Conduction app that
5
5
  * registers a Nextcloud dashboard widget shows up here. The mock
@@ -16,7 +16,7 @@
16
16
  import React from 'react';
17
17
  import styles from '../AppMock.module.css';
18
18
 
19
- export default function MyDashWidgetsMock() {
19
+ export default function LaunchPadWidgetsMock() {
20
20
  return (
21
21
  <>
22
22
  <div className={styles.topbar}>
@@ -26,7 +26,7 @@ export default function MyDashWidgetsMock() {
26
26
  <div className={styles.bell}></div>
27
27
  <div className={styles.avatar}></div>
28
28
  </div>
29
- <div className={[styles.body, styles.mydash].filter(Boolean).join(' ')}>
29
+ <div className={[styles.body, styles.launchpad].filter(Boolean).join(' ')}>
30
30
  <div className={styles.grid}>
31
31
  {/* Column 1: Procest werkvoorraad + DocuDesk upload */}
32
32
  <div className={styles.col}>
@@ -0,0 +1,105 @@
1
+ /**
2
+ * OpenBuild abstract — three-pane citizen-developer app builder: left
3
+ * builder nav + centre dashboard + right manifest/detail rail.
4
+ * Reference: live screenshot at http://localhost:8080/apps/openbuild/.
5
+ *
6
+ * Centre is the canonical "Dashboard" view: a KPI strip (Virtual apps /
7
+ * Published / Templates / Versions) over two panels — a virtual-app card
8
+ * list ("Virtual apps") and a template-catalogue list ("Templates").
9
+ * Right rail abstracts the per-app manifest/schema editor.
10
+ */
11
+
12
+ import React from 'react';
13
+ import styles from '../AppMock.module.css';
14
+
15
+ export default function OpenBuildMock({ sidebar = null }) {
16
+ return (
17
+ <>
18
+ <div className={styles.topbar}>
19
+ <div className={styles.logo}></div>
20
+ {Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
21
+ <div className={styles.spacer}></div>
22
+ <div className={styles.bell}></div>
23
+ <div className={styles.avatar}></div>
24
+ </div>
25
+ <div className={[styles.body, styles.openbuild].filter(Boolean).join(' ')}>
26
+ {/* Left builder nav: Dashboard · Virtual apps · Schemas · Templates · Exports */}
27
+ <div className={styles.nav}>
28
+ <div className={styles.navHead}>
29
+ <div className={styles.h}></div>
30
+ <div className={styles.l}></div>
31
+ </div>
32
+ {[true, false, false, false, false].map((active, i) => (
33
+ <div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
34
+ <div className={styles.ico}></div>
35
+ <div className={styles.l}></div>
36
+ </div>
37
+ ))}
38
+ </div>
39
+ {/* Centre: builder dashboard */}
40
+ <div className={styles.col}>
41
+ {/* KPI strip: Virtual apps / Published / Templates / Versions */}
42
+ <div className={styles.kpiRow}>
43
+ <div className={styles.kpi}>
44
+ <div className={styles.ico}></div>
45
+ <div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
46
+ </div>
47
+ <div className={[styles.kpi, styles.forest].join(' ')}>
48
+ <div className={styles.ico}></div>
49
+ <div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
50
+ </div>
51
+ <div className={[styles.kpi, styles.amber].join(' ')}>
52
+ <div className={styles.ico}></div>
53
+ <div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
54
+ </div>
55
+ <div className={[styles.kpi, styles.lavender].join(' ')}>
56
+ <div className={styles.ico}></div>
57
+ <div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
58
+ </div>
59
+ </div>
60
+ {/* Virtual-app card list + template catalogue */}
61
+ <div className={styles.panelRow}>
62
+ <div className={styles.panel}>
63
+ <div className={styles.head}><div className={styles.title}></div></div>
64
+ <div className={styles.stack}>
65
+ {['b','d','a','c'].map((cls, i) => (
66
+ <div key={i} className={styles.item}>
67
+ <div className={[styles.av, styles[cls]].join(' ')}></div>
68
+ <div className={styles.lines}><div className={styles.l1}></div><div className={styles.l2}></div></div>
69
+ </div>
70
+ ))}
71
+ </div>
72
+ </div>
73
+ <div className={styles.panel}>
74
+ <div className={styles.head}><div className={styles.title}></div></div>
75
+ <div className={styles.stack}>
76
+ {[0,1,2,3].map(i => (
77
+ <div key={i} className={styles.item}>
78
+ <div className={styles.lines}><div className={styles.l1}></div></div>
79
+ </div>
80
+ ))}
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ {/* Right rail: per-app manifest / schema editor. When AppMock passes
86
+ a `sidebar` prop it renders there instead of this placeholder. */}
87
+ {sidebar || (
88
+ <div className={styles.detail}>
89
+ <div className={styles.row + ' ' + styles.head}></div>
90
+ <div className={styles.row}></div>
91
+ <div className={styles.row + ' ' + styles.short}></div>
92
+ <div style={{height: 8}}></div>
93
+ <div className={styles.row + ' ' + styles.head}></div>
94
+ <div className={styles.row + ' ' + styles.dark}></div>
95
+ <div className={styles.row}></div>
96
+ <div className={styles.row}></div>
97
+ <div className={styles.row + ' ' + styles.short}></div>
98
+ <div className={styles.row + ' ' + styles.accent}></div>
99
+ <div className={styles.row + ' ' + styles.short}></div>
100
+ </div>
101
+ )}
102
+ </div>
103
+ </>
104
+ );
105
+ }
@@ -21,22 +21,22 @@
21
21
  * Usage:
22
22
  *
23
23
  * <DetailHero
24
- * appId="mydash"
25
- * crumb={[{label: 'Apps', href: '/apps'}, 'MyDash']}
24
+ * appId="launchpad"
25
+ * crumb={[{label: 'Apps', href: '/apps'}, 'LaunchPad']}
26
26
  * status={{label: 'Beta', color: 'var(--c-orange-knvb)'}}
27
27
  * version="v0.9"
28
28
  * locales="NL · EN"
29
- * title="MyDash"
29
+ * title="LaunchPad"
30
30
  * tagline="..."
31
31
  * primaryCta={{label: 'Install from app store', href: '/install'}}
32
32
  * icon={<svg>...</svg>}
33
33
  * iconColor="var(--c-blue-cobalt)"
34
- * illustration={<AppMock app="mydash" />}
34
+ * illustration={<AppMock app="launchpad" />}
35
35
  * />
36
36
  *
37
37
  * Each cta object also accepts `tone: "orange"` to flip the primary
38
38
  * (or secondary) variant to the KNVB-orange accent. Reserved for
39
- * product pages with an orange-leaning brand identity (mydash).
39
+ * product pages with an orange-leaning brand identity (launchpad).
40
40
  *
41
41
  * `background="cobalt"` paints the hero in a full-bleed cobalt panel
42
42
  * with white type — the product-page identity used on the
@@ -25,9 +25,9 @@
25
25
  component from the item's x/y/z values. */
26
26
  }
27
27
 
28
- /* Widgets inside a scene drop their MyDash-style cobalt-900 dashboard
28
+ /* Widgets inside a scene drop their LaunchPad-style cobalt-900 dashboard
29
29
  chrome. WidgetMock by default frames its tile in dark cobalt to
30
- simulate "this widget is sitting on a MyDash board"; that read is
30
+ simulate "this widget is sitting on a LaunchPad board"; that read is
31
31
  useful in widget-mock.html (the kit context) but inside a scene the
32
32
  surrounding card already provides context, and the dark frame just
33
33
  reads as a heavy border. So inside .sceneItem the .wmFrame becomes
@@ -32,7 +32,7 @@
32
32
  * name="YARD"
33
33
  * logo="/img/partners/yard.png"
34
34
  * summary={<>Digital design- en development-bureau uit Utrecht...</>}
35
- * apps={['MyDash', 'OpenCatalogi']}
35
+ * apps={['LaunchPad', 'OpenCatalogi']}
36
36
  * />
37
37
  * <BecomePartner href="/partners/become" />
38
38
  * </PartnerGrid>
@@ -13,7 +13,7 @@
13
13
  * mint integrate / connect (OpenConnector)
14
14
  * forest data / registers (OpenRegister)
15
15
  * terracotta documents / search (OpenCatalogi)
16
- * lavender process / views (MyDash)
16
+ * lavender process / views (LaunchPad)
17
17
  * workspace Nextcloud workspace (centre platform hex)
18
18
  *
19
19
  * Sources / consumers end-boxes use <IconList />, also exported on its
@@ -77,7 +77,7 @@ function inferFamily(name) {
77
77
  if (n.includes('connector')) return 'mint';
78
78
  if (n.includes('register')) return 'forest';
79
79
  if (n.includes('catalog')) return 'terracotta';
80
- if (n.includes('mydash') || n.includes('dashboard')) return 'lavender';
80
+ if (n.includes('launchpad') || n.includes('dashboard')) return 'lavender';
81
81
  if (n.includes('nextcloud') || n.includes('workspace') || n.includes('platform')) return 'workspace';
82
82
  return 'forest';
83
83
  }
@@ -6,7 +6,7 @@
6
6
  .section {
7
7
  background: white;
8
8
  /* Bottom padding deliberately lighter than top: the diagram's
9
- orange-dashed flow lines around OpenBuilt extend visually below
9
+ orange-dashed flow lines around OpenBuild extend visually below
10
10
  the last text label, so the section already has ~80px of optical
11
11
  trailing space from the diagram itself before any padding kicks
12
12
  in. Top stays at 96px to keep the rhythm coming in from the
@@ -30,7 +30,7 @@
30
30
  * id: 'open',
31
31
  * title: 'Open by default.',
32
32
  * summary: 'Every line is EUPL-1.2 on GitHub.',
33
- * cta: {label: 'Browse on GitHub', href: 'https://github.com/ConductionNL'},
33
+ * cta: {label: 'Browse on GitHub', href: 'https://codeberg.org/Conduction'},
34
34
  * panel: <AppMock app="opencatalogi" />,
35
35
  * },
36
36
  * ...
@@ -12,8 +12,8 @@
12
12
  * about a single integration point.
13
13
  *
14
14
  * Visual reference: every Conduction widget renders against a dashboard
15
- * background (cobalt-900 in MyDash, white in stock Nextcloud). The
16
- * WidgetMock chrome is cobalt to match MyDash since most Conduction
15
+ * background (cobalt-900 in LaunchPad, white in stock Nextcloud). The
16
+ * WidgetMock chrome is cobalt to match LaunchPad since most Conduction
17
17
  * widgets are built for that surface; the same widget atoms render
18
18
  * fine on white when reused there.
19
19
  *
@@ -5,7 +5,7 @@
5
5
  * .w-decks, .w-rss, .w-jira, .w-video, .w-upload, .w-werkvoorraad,
6
6
  * .w-launcher, .w-subgrid, .w-graph-bar / .w-graph-line / .w-graph-donut)
7
7
  * live in AppMock/AppMock.module.css under the `.am` parent scope.
8
- * They were authored there because MyDash variants render dashboard
8
+ * They were authored there because LaunchPad variants render dashboard
9
9
  * grids full of them. WidgetMock standalonises a single widget:
10
10
  * same atoms, new chrome.
11
11
  *
@@ -8,7 +8,7 @@
8
8
  * the moment this app is installed".
9
9
  *
10
10
  * Each Conduction app that registers a Nextcloud-dashboard widget
11
- * shows up automatically in MyDash; this section makes that promise
11
+ * shows up automatically in LaunchPad; this section makes that promise
12
12
  * concrete by drawing the widgets the app actually contributes.
13
13
  *
14
14
  * Usage in MDX:
@@ -19,7 +19,7 @@
19
19
  *
20
20
  * Tone (optional): override the primary/secondary fill colour. The
21
21
  * brand default is cobalt; product pages with an orange-accent identity
22
- * (e.g. mydash) pass `tone="orange"` to flip the primary CTA to
22
+ * (e.g. launchpad) pass `tone="orange"` to flip the primary CTA to
23
23
  * KNVB-orange while keeping the rest of the brand chrome intact.
24
24
  *
25
25
  * Icon (optional): pass a key from icons.jsx (e.g. `"github"`) or a
@@ -34,7 +34,7 @@
34
34
  * <Button
35
35
  * variant="on-dark-tertiary"
36
36
  * icon="github"
37
- * href="https://github.com/ConductionNL/shillinq"
37
+ * href="https://codeberg.org/Conduction/shillinq"
38
38
  * >View on GitHub</Button>
39
39
  */
40
40
 
@@ -123,7 +123,7 @@
123
123
 
124
124
  /* Tone modifier for the primary variant. The brand default is the
125
125
  cobalt fill above; product pages with an orange-accent identity
126
- (mydash is the first) opt in by passing tone="orange". The brand
126
+ (launchpad is the first) opt in by passing tone="orange". The brand
127
127
  rule "one orange accent per screen" still applies; this just lets
128
128
  the screen's single accent live on the primary CTA instead of
129
129
  elsewhere. */
@@ -31,7 +31,7 @@ export const APPS_REGISTRY = {
31
31
  openregister: {slug: 'openregister', name: 'OpenRegister', category: 'Data', productHref: '/apps/openregister', docsHref: 'https://docs.conduction.nl/openregister', academyHref: '/academy?app=openregister'},
32
32
  openconnector: {slug: 'openconnector', name: 'OpenConnector', category: 'Connectors', productHref: '/apps/openconnector', docsHref: 'https://docs.conduction.nl/openconnector', academyHref: '/academy?app=openconnector'},
33
33
  docudesk: {slug: 'docudesk', name: 'DocuDesk', category: 'Documents', productHref: '/apps/docudesk', docsHref: 'https://docs.conduction.nl/docudesk', academyHref: '/academy?app=docudesk'},
34
- mydash: {slug: 'mydash', name: 'MyDash', category: 'Dashboards', productHref: '/apps/mydash', docsHref: 'https://docs.conduction.nl/mydash', academyHref: '/academy?app=mydash'},
34
+ launchpad: {slug: 'launchpad', name: 'LaunchPad', category: 'Dashboards', productHref: '/apps/launchpad', docsHref: 'https://launchpad.conduction.nl', academyHref: '/academy?app=launchpad'},
35
35
  zaakafhandelapp: {slug: 'zaakafhandelapp', name: 'ZaakAfhandelApp', category: 'Processes', productHref: '/apps/zaakafhandelapp', docsHref: 'https://docs.conduction.nl/zaakafhandelapp', academyHref: '/academy?app=zaakafhandelapp'},
36
36
  pipelinq: {slug: 'pipelinq', name: 'PipelinQ', category: 'Processes', productHref: '/apps/pipelinq', docsHref: 'https://docs.conduction.nl/pipelinq', academyHref: '/academy?app=pipelinq'},
37
37
  procest: {slug: 'procest', name: 'Procest', category: 'Processes', productHref: '/apps/procest', docsHref: 'https://docs.conduction.nl/procest', academyHref: '/academy?app=procest'},
@@ -40,7 +40,7 @@ export const APPS_REGISTRY = {
40
40
  larpingapp: {slug: 'larpingapp', name: 'LarpingApp', category: 'Processes', productHref: '/apps/larpingapp', docsHref: 'https://docs.conduction.nl/larpingapp', academyHref: '/academy?app=larpingapp'},
41
41
  nldesign: {slug: 'nldesign', name: 'NLDesign', category: 'Documents', productHref: '/apps/nldesign', docsHref: 'https://docs.conduction.nl/nldesign', academyHref: '/academy?app=nldesign'},
42
42
  shillinq: {slug: 'shillinq', name: 'Shillinq', category: 'Processes', productHref: '/apps/shillinq', docsHref: 'https://docs.conduction.nl/shillinq', academyHref: '/academy?app=shillinq'},
43
- openbuilt: {slug: 'openbuilt', name: 'OpenBuilt', category: 'Processes', productHref: '/apps/openbuilt', docsHref: 'https://docs.conduction.nl/openbuilt', academyHref: '/academy?app=openbuilt'},
43
+ openbuild: {slug: 'openbuild', name: 'OpenBuild', category: 'Processes', productHref: '/apps/openbuild', docsHref: 'https://docs.conduction.nl/openbuild', academyHref: '/academy?app=openbuild'},
44
44
  doriath: {slug: 'doriath', name: 'Doriath', category: 'Connectors', productHref: '/apps/doriath', docsHref: 'https://docs.conduction.nl/doriath', academyHref: '/academy?app=doriath'},
45
45
  'app-versions': {slug: 'app-versions', name: 'App Versions', category: 'Data', productHref: '/apps/app-versions', docsHref: 'https://docs.conduction.nl/app-versions', academyHref: '/academy?app=app-versions'},
46
46
  };
@@ -87,7 +87,7 @@ export function getApps(slugs = []) {
87
87
  }
88
88
 
89
89
  /**
90
- * Resolve a display-name (e.g. "OpenCatalogi", "DocuDesk", "MyDash")
90
+ * Resolve a display-name (e.g. "OpenCatalogi", "DocuDesk", "LaunchPad")
91
91
  * to its product page href, or undefined when the name is not in the
92
92
  * registry. Used by partner cards / sidecards to turn the apps-shipped
93
93
  * chip row into a clickable link list. Names like "Nextcloud" that
@@ -4,7 +4,7 @@ Brand-strict diagram primitives for Conduction and ConNext, as framework-agnosti
4
4
 
5
5
  ## Status
6
6
 
7
- Pre-release, scaffolded inside the `design-system` repo. The future home is tracked in [design-system#2](https://github.com/ConductionNL/design-system/issues/2).
7
+ Pre-release, scaffolded inside the `design-system` repo. The future home is tracked in [design-system#2](https://codeberg.org/Conduction/design-system/issues/2).
8
8
 
9
9
  ## Why
10
10
 
package/src/index.js CHANGED
@@ -128,7 +128,7 @@ const BRAND_ORGANIZATION_JSONLD = {
128
128
  value: '76741850',
129
129
  },
130
130
  sameAs: [
131
- 'https://github.com/ConductionNL',
131
+ 'https://codeberg.org/Conduction',
132
132
  'https://www.linkedin.com/company/conduction/',
133
133
  ],
134
134
  };
@@ -362,7 +362,7 @@ const baseNavbar = (siteName, repoUrl) => ({
362
362
  items: [
363
363
  { type: 'custom-versionPill', position: 'right' },
364
364
  { type: 'custom-apiDocs', position: 'right' },
365
- { type: 'custom-github', href: repoUrl || 'https://github.com/ConductionNL', position: 'right' },
365
+ { type: 'custom-github', href: repoUrl || 'https://codeberg.org/Conduction', position: 'right' },
366
366
  { type: 'localeDropdown', position: 'right' },
367
367
  ],
368
368
  });
@@ -583,7 +583,7 @@ function createConfig(opts) {
583
583
  { wordmark: 'X' } -> single custom brand
584
584
  { brands: [{wordmark, logo, href}, ...] } -> dual-brand row,
585
585
  rendered side by side. Used by product pages
586
- built jointly with a partner (mydash + Sendent
586
+ built jointly with a partner (launchpad + Sendent
587
587
  is the first case). */
588
588
  footerBrand: opts.footerBrand || null,
589
589
  /* Legal-bar links (Privacy / Terms / ISO) plus the two ISO
@@ -4,7 +4,7 @@
4
4
  * Adds a `/features` route to every Conduction docs site, backed by the
5
5
  * `docs/features.json` artefact regenerated from `openspec/specs/` by the
6
6
  * org-wide Features Extract workflow stage
7
- * (https://github.com/ConductionNL/.github/blob/main/.github/workflows/quality.yml).
7
+ * (https://codeberg.org/Conduction/.github/src/branch/main/.github/workflows/quality.yml).
8
8
  *
9
9
  * The route renders the brand `<FeaturesPage />` component, which in turn
10
10
  * maps each entry to a `<FeatureItem>` inside `<FeatureGrid>`. Every entry
@@ -88,8 +88,8 @@ export default function Footer() {
88
88
  `themeConfig.footerBrand = { wordmark: '...' }`, or render a dual
89
89
  brand row via `{ brands: [{wordmark, logo, href}, ...] }` for
90
90
  product pages co-branded with a partner. The legacy fallback to
91
- `navbar.title` was misleading on product-page footers (mydash
92
- showing "MyDash" rather than "Conduction"); the company-anchor
91
+ `navbar.title` was misleading on product-page footers (launchpad
92
+ showing "LaunchPad" rather than "Conduction"); the company-anchor
93
93
  reading wins. */
94
94
  const brand = brandFor(location.pathname, navbar?.title);
95
95
  const defaultWordmark = footerBrand?.wordmark || 'Conduction';
@@ -389,7 +389,7 @@ export default function Footer() {
389
389
  </span>
390
390
  </div>
391
391
  <div className="socials">
392
- <a href="https://github.com/ConductionNL" aria-label="GitHub" target="_blank" rel="noopener noreferrer">
392
+ <a href="https://codeberg.org/Conduction" aria-label="GitHub" target="_blank" rel="noopener noreferrer">
393
393
  <svg viewBox="0 0 24 24" aria-hidden="true">
394
394
  <path className="filled" d="M12 2a10 10 0 0 0-3.16 19.49c.5.09.68-.22.68-.48v-1.7c-2.78.6-3.37-1.34-3.37-1.34-.45-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.61.07-.61 1 .07 1.53 1.04 1.53 1.04.9 1.53 2.36 1.09 2.93.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.65 0 0 .84-.27 2.75 1.02a9.6 9.6 0 0 1 5 0c1.91-1.29 2.75-1.02 2.75-1.02.55 1.38.2 2.4.1 2.65.64.7 1.03 1.59 1.03 2.68 0 3.84-2.34 4.69-4.57 4.93.36.31.68.92.68 1.86v2.76c0 .27.18.58.69.48A10 10 0 0 0 12 2z"/>
395
395
  </svg>
@@ -93,7 +93,7 @@ function NavItem({item, location, appVersion}) {
93
93
  if (typeIs(item, 'github')) {
94
94
  return (
95
95
  <a
96
- href={item.href || 'https://github.com/ConductionNL'}
96
+ href={item.href || 'https://codeberg.org/Conduction'}
97
97
  className={styles.iconLink}
98
98
  target="_blank"
99
99
  rel="noopener noreferrer"
@@ -11,7 +11,7 @@
11
11
  /* 1 Register */ '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M9 4v16"/>',
12
12
  /* 2 Connector */ '<circle cx="6" cy="12" r="3"/><circle cx="18" cy="6" r="3"/><circle cx="18" cy="18" r="3"/><path d="M9 12h9M9 12l9-6M9 12l9 6"/>',
13
13
  /* 3 DocuDesk */ '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/>',
14
- /* 4 MyDash */ '<rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/>',
14
+ /* 4 LaunchPad */ '<rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/>',
15
15
  /* 5 AI Bridge */ '<path d="M12 2a4 4 0 0 0-4 4v3"/><rect x="6" y="9" width="12" height="13" rx="2"/>',
16
16
  /* 6 Pipeline */ '<path d="M4 7h6l4 5h6"/><path d="M4 17h6l4-5"/>',
17
17
  /* 7 Calendar */ '<rect x="3" y="5" width="18" height="16" rx="2"/><path d="M3 10h18M8 3v4M16 3v4"/>',
@@ -22,7 +22,7 @@
22
22
  ];
23
23
  const APP_NAMES = [
24
24
  'OpenCatalogi', 'OpenRegister', 'OpenConnector', 'DocuDesk',
25
- 'MyDash', 'AI Bridge', 'PipelinQ', 'OpenCalendar',
25
+ 'LaunchPad', 'AI Bridge', 'PipelinQ', 'OpenCalendar',
26
26
  'OpenSAML', 'OpenMail', 'NextCloud', 'OpenZaak',
27
27
  ];
28
28
  const APP_COUNT = ICONS.length;
@@ -412,7 +412,7 @@ platform-diagram .box-wrap.app-builder {
412
412
 
413
413
  /* App Builder list: when a COMING SOON-style badge is attached we treat the
414
414
  cluster as a placeholder (dashed border, faded text). When no badge is
415
- set the cluster styles like every other list — OpenBuilt is a real app. */
415
+ set the cluster styles like every other list — OpenBuild is a real app. */
416
416
  platform-diagram .box-wrap.app-builder.has-badge .box {
417
417
  border-style: dashed;
418
418
  background: var(--c-cobalt-50);