@conduction/docusaurus-preset 3.34.0 → 3.36.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.
- package/ANIMATION_ROADMAP.md +129 -0
- package/MISSING_COMPONENTS.md +13 -4
- package/package.json +3 -2
- package/src/components/AppMock/AppMock.jsx +14 -14
- package/src/components/AppMock/AppMock.module.css +1270 -7
- package/src/components/AppMock/__tests__/AppMock.render.test.js +148 -0
- package/src/components/AppMock/variants/AppVersionsMock.jsx +1 -1
- package/src/components/AppMock/variants/DeciDeskMock.jsx +47 -6
- package/src/components/AppMock/variants/DocuDeskMock.jsx +40 -10
- package/src/components/AppMock/variants/DoriathMock.jsx +29 -14
- package/src/components/AppMock/variants/HermiqMock.jsx +35 -15
- package/src/components/AppMock/variants/HrmqMock.jsx +46 -28
- package/src/components/AppMock/variants/LarpingAppMock.jsx +14 -4
- package/src/components/AppMock/variants/LaunchPadWidgetsMock.jsx +3 -3
- package/src/components/AppMock/variants/NLDesignMock.jsx +1 -1
- package/src/components/AppMock/variants/OpenBuildMock.jsx +21 -6
- package/src/components/AppMock/variants/OpenCatalogiMock.jsx +23 -4
- package/src/components/AppMock/variants/OpenConnectorMock.jsx +26 -4
- package/src/components/AppMock/variants/OpenRegisterMock.jsx +13 -2
- package/src/components/AppMock/variants/PlanixMock.jsx +1 -1
- package/src/components/AppMock/variants/ProcestMock.jsx +36 -9
- package/src/components/AppMock/variants/ScholiqMock.jsx +1 -1
- package/src/components/AppMock/variants/ShillinqMock.jsx +33 -17
- package/src/components/AppMock/variants/SoftwareCatalogMock.jsx +16 -6
- package/src/components/AppMock/variants/ZaakAfhandelAppMock.jsx +19 -4
- package/src/components/BuildMock/BuildMock.jsx +3 -3
- package/src/components/FeaturesPage/FeaturesPage.jsx +3 -3
- package/src/components/IntegrationIcon/registry.js +3 -3
- package/src/components/LeafCard/LeafCard.jsx +2 -2
- package/src/components/NextSteps/NextSteps.jsx +1 -1
- package/src/components/PartnerDirectory/PartnerDirectory.jsx +1 -1
- package/src/components/Pipeline/Pipeline.jsx +2 -2
- package/src/components/PlatformOverview/PlatformOverview.module.css +1 -1
- package/src/components/SidebarMock/SidebarMock.jsx +38 -11
- package/src/components/SidebarMock/SidebarMock.module.css +1 -1
- package/src/components/SidebarMock/__tests__/SidebarMock.render.test.js +115 -0
- package/src/components/SidebarMock/variants/DeciDeskDecision.jsx +1 -1
- package/src/components/SidebarMock/variants/DocuDeskPiiMap.jsx +1 -1
- package/src/components/SidebarMock/variants/DocuDeskSignatures.jsx +1 -1
- package/src/components/SidebarMock/variants/OpenConnectorRunDetail.jsx +1 -1
- package/src/components/SidebarMock/variants/ProcestTimeline.jsx +1 -1
- package/src/components/SidebarMock/variants/ProcestXWiki.jsx +2 -2
- package/src/components/SolutionCard/SolutionCard.jsx +1 -1
- package/src/components/WidgetMock/WidgetMock.jsx +37 -16
- package/src/components/WidgetMock/__tests__/WidgetMock.render.test.js +125 -0
- package/src/components/WidgetMock/variants/DeciDeskActions.jsx +1 -1
- package/src/components/WidgetMock/variants/DocuDeskAnonymise.jsx +7 -2
- package/src/components/WidgetMock/variants/DocuDeskPendingSign.jsx +1 -1
- package/src/components/WidgetMock/variants/OpenConnectorRuns.jsx +1 -1
- package/src/components/WidgetMock/variants/ProcestDueToday.jsx +1 -1
- package/src/components/WidgetMock/variants/ProcestWerkvoorraad.jsx +1 -1
- package/src/components/WidgetShelf/WidgetShelf.jsx +1 -1
- package/src/data/apps-registry.js +15 -15
- package/src/diagrams/cn-pair.js +1 -1
- package/src/theme/brand.jsx +2 -2
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WidgetMock.render.test.js — renders the real <WidgetMock> JSX to
|
|
3
|
+
* static markup (the SSR path Docusaurus takes at build time) and
|
|
4
|
+
* asserts on the output: every kind renders, the wave-5 `running`
|
|
5
|
+
* plumbing puts `.static` on the frame, the ten list-shaped variants
|
|
6
|
+
* carry the shared list-refresh scope (`.wmLive`) + unread badge,
|
|
7
|
+
* the non-list variants opt out, and the anonymise dropzone exposes
|
|
8
|
+
* its marching-ants + file-drop hooks.
|
|
9
|
+
*
|
|
10
|
+
* Uses the same esbuild-bundle-then-renderToStaticMarkup technique
|
|
11
|
+
* as AppMock.render.test.js. CSS modules are stubbed with an identity
|
|
12
|
+
* proxy (styles.foo → 'foo').
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
const test = require('node:test');
|
|
18
|
+
const {before, after} = test;
|
|
19
|
+
const assert = require('node:assert/strict');
|
|
20
|
+
const path = require('node:path');
|
|
21
|
+
const fs = require('node:fs/promises');
|
|
22
|
+
const {build} = require('esbuild');
|
|
23
|
+
const React = require('react');
|
|
24
|
+
const {renderToStaticMarkup} = require('react-dom/server');
|
|
25
|
+
|
|
26
|
+
const COMPONENT = path.resolve(__dirname, '..', 'WidgetMock.jsx');
|
|
27
|
+
const PRESET_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
|
|
28
|
+
const SCRATCH = path.join(PRESET_ROOT, '.tmp-widget-mock-test');
|
|
29
|
+
|
|
30
|
+
/* Must stay in sync with the VARIANTS map in WidgetMock.jsx. */
|
|
31
|
+
const LIST_KINDS = [
|
|
32
|
+
'docudesk-pending-sign', 'procest-werkvoorraad', 'procest-due-today',
|
|
33
|
+
'opencatalogi-publications', 'openconnector-runs', 'decidesk-actions',
|
|
34
|
+
'pipelinq-deals', 'nextcloud-mail', 'nextcloud-files', 'nextcloud-rss',
|
|
35
|
+
];
|
|
36
|
+
const NON_LIST_KINDS = [
|
|
37
|
+
'docudesk-anonymise', 'openregister-activity', 'nextcloud-calendar',
|
|
38
|
+
'nextcloud-decks',
|
|
39
|
+
];
|
|
40
|
+
const KINDS = [...LIST_KINDS, ...NON_LIST_KINDS];
|
|
41
|
+
|
|
42
|
+
const cssModuleStub = {
|
|
43
|
+
name: 'css-module-stub',
|
|
44
|
+
setup(b) {
|
|
45
|
+
b.onResolve({filter: /\.module\.css$/}, (args) => ({path: args.path, namespace: 'css-stub'}));
|
|
46
|
+
b.onLoad({filter: /.*/, namespace: 'css-stub'}, () => ({
|
|
47
|
+
contents: 'export default new Proxy({}, {get: (_, p) => p});',
|
|
48
|
+
loader: 'js',
|
|
49
|
+
}));
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
let WidgetMock;
|
|
54
|
+
|
|
55
|
+
before(async () => {
|
|
56
|
+
await fs.mkdir(SCRATCH, {recursive: true});
|
|
57
|
+
const tmpDir = await fs.mkdtemp(path.join(SCRATCH, 'run-'));
|
|
58
|
+
const outFile = path.join(tmpDir, 'bundle.cjs');
|
|
59
|
+
await build({
|
|
60
|
+
entryPoints: [COMPONENT],
|
|
61
|
+
outfile: outFile,
|
|
62
|
+
bundle: true,
|
|
63
|
+
format: 'cjs',
|
|
64
|
+
jsx: 'automatic',
|
|
65
|
+
jsxImportSource: 'react',
|
|
66
|
+
tsconfigRaw: {compilerOptions: {jsx: 'react-jsx', jsxImportSource: 'react'}},
|
|
67
|
+
platform: 'node',
|
|
68
|
+
external: ['react'],
|
|
69
|
+
plugins: [cssModuleStub],
|
|
70
|
+
logLevel: 'warning',
|
|
71
|
+
});
|
|
72
|
+
delete require.cache[require.resolve(outFile)];
|
|
73
|
+
WidgetMock = require(outFile).default;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
after(async () => {
|
|
77
|
+
await fs.rm(SCRATCH, {recursive: true, force: true});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
function render(props) {
|
|
81
|
+
return renderToStaticMarkup(React.createElement(WidgetMock, props));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
test('SSR smoke: every kind renders a frame, none falls through to Unknown widget', () => {
|
|
85
|
+
for (const kind of KINDS) {
|
|
86
|
+
const html = render({kind});
|
|
87
|
+
assert.match(html, /wmFrame/, `${kind}: frame missing`);
|
|
88
|
+
assert.doesNotMatch(html, /Unknown widget/, `${kind}: fell through to the unknown branch`);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('running={false} adds the static class to the frame; default omits it', () => {
|
|
93
|
+
for (const kind of KINDS) {
|
|
94
|
+
assert.match(render({kind, running: false}), /wmFrame[^"]*static/, `${kind}: no static frame`);
|
|
95
|
+
assert.doesNotMatch(render({kind}), /\bstatic\b/, `${kind}: static leaked into a running frame`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('the ten list variants carry the wmLive refresh scope and the unread badge', () => {
|
|
100
|
+
for (const kind of LIST_KINDS) {
|
|
101
|
+
const html = render({kind});
|
|
102
|
+
assert.match(html, /wmFrame[^"]*wmLive/, `${kind}: missing wmLive scope`);
|
|
103
|
+
assert.match(html, /class="wmBadge"/, `${kind}: missing unread badge`);
|
|
104
|
+
assert.match(html, /class="list"/, `${kind}: wmLive on a variant without a .list`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test('non-list variants opt out of the refresh primitive', () => {
|
|
109
|
+
for (const kind of NON_LIST_KINDS) {
|
|
110
|
+
const html = render({kind});
|
|
111
|
+
assert.doesNotMatch(html, /wmLive/, `${kind}: wmLive on a non-list variant`);
|
|
112
|
+
assert.doesNotMatch(html, /wmBadge/, `${kind}: badge on a non-list variant`);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test('docudesk-anonymise: the dropzone carries the zoneLive scope and the dropping file hex', () => {
|
|
117
|
+
const html = render({kind: 'docudesk-anonymise'});
|
|
118
|
+
assert.match(html, /w w-upload zoneLive/);
|
|
119
|
+
assert.match(html, /class="zoneFile"/);
|
|
120
|
+
assert.match(html, /class="zone"/);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('caption renders the variant label', () => {
|
|
124
|
+
assert.match(render({kind: 'procest-werkvoorraad', caption: true}), /Dossiq · Werkvoorraad/);
|
|
125
|
+
});
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Filinq · Anonymise drop widget.
|
|
3
3
|
*
|
|
4
4
|
* Drop a document into the dashboard tile, get back a redacted copy.
|
|
5
5
|
* Visual: dashed cobalt drop-zone with a hex glyph. Status-pill is
|
|
6
6
|
* absent: this widget is action-first, not status-first.
|
|
7
|
+
*
|
|
8
|
+
* Animation (wave 5, `.zoneLive`): the dashed border marches, a file
|
|
9
|
+
* hex drops into the zone, and the zone flashes mint as the redacted
|
|
10
|
+
* copy is confirmed. Static frames show the resting dropzone.
|
|
7
11
|
*/
|
|
8
12
|
import React from 'react';
|
|
9
13
|
import styles from '../../AppMock/AppMock.module.css';
|
|
10
14
|
|
|
11
15
|
export default function DocuDeskAnonymise() {
|
|
12
16
|
return (
|
|
13
|
-
<div className={[styles.w, styles['w-upload']].join(' ')}>
|
|
17
|
+
<div className={[styles.w, styles['w-upload'], styles.zoneLive].join(' ')}>
|
|
14
18
|
<div className={styles.wHead}>
|
|
15
19
|
<div className={styles.h}></div>
|
|
16
20
|
<div className={styles.t}></div>
|
|
17
21
|
</div>
|
|
18
22
|
<div className={styles.zone}>
|
|
23
|
+
<div className={styles.zoneFile}></div>
|
|
19
24
|
<div className={styles.ico}></div>
|
|
20
25
|
<div className={styles.label}></div>
|
|
21
26
|
</div>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* <WidgetShelf
|
|
17
17
|
* eyebrow="Widgets we ship"
|
|
18
18
|
* title="On every Nextcloud dashboard."
|
|
19
|
-
* lede="Install
|
|
19
|
+
* lede="Install Dossiq and your team gets these widgets..."
|
|
20
20
|
* widgets={[
|
|
21
21
|
* {
|
|
22
22
|
* title: 'Werkvoorraad',
|
|
@@ -29,26 +29,26 @@
|
|
|
29
29
|
export const APPS_REGISTRY = {
|
|
30
30
|
opencatalogi: {slug: 'opencatalogi', name: 'OpenCatalogi', category: 'Data', productHref: '/apps/opencatalogi', docsHref: 'https://opencatalogi.conduction.nl', academyHref: '/academy?app=opencatalogi'},
|
|
31
31
|
openregister: {slug: 'openregister', name: 'OpenRegister', category: 'Data', productHref: '/apps/openregister', docsHref: 'https://openregister.conduction.nl', academyHref: '/academy?app=openregister'},
|
|
32
|
-
openconnector: {slug: 'openconnector', name: '
|
|
33
|
-
docudesk: {slug: 'docudesk', name: '
|
|
32
|
+
openconnector: {slug: 'openconnector', name: 'Integriq', category: 'Connectors', productHref: '/apps/openconnector', docsHref: 'https://openconnector.conduction.nl', academyHref: '/academy?app=openconnector'},
|
|
33
|
+
docudesk: {slug: 'docudesk', name: 'Filinq', category: 'Documents', productHref: '/apps/docudesk', docsHref: 'https://docudesk.conduction.nl', academyHref: '/academy?app=docudesk'},
|
|
34
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://zaakafhandelapp.conduction.nl', academyHref: '/academy?app=zaakafhandelapp'},
|
|
36
36
|
pipelinq: {slug: 'pipelinq', name: 'PipelinQ', category: 'Processes', productHref: '/apps/pipelinq', docsHref: 'https://pipelinq.conduction.nl', academyHref: '/academy?app=pipelinq'},
|
|
37
|
-
procest: {slug: 'procest', name: '
|
|
38
|
-
decidesk: {slug: 'decidesk', name: '
|
|
39
|
-
softwarecatalog: {slug: 'softwarecatalog', name: '
|
|
40
|
-
larpingapp: {slug: 'larpingapp', name: '
|
|
41
|
-
nldesign: {slug: 'nldesign', name: '
|
|
37
|
+
procest: {slug: 'procest', name: 'Dossiq', category: 'Processes', productHref: '/apps/procest', docsHref: 'https://procest.conduction.nl', academyHref: '/academy?app=procest'},
|
|
38
|
+
decidesk: {slug: 'decidesk', name: 'Decidiq', category: 'Processes', productHref: '/apps/decidesk', docsHref: 'https://decidesk.conduction.nl', academyHref: '/academy?app=decidesk'},
|
|
39
|
+
softwarecatalog: {slug: 'softwarecatalog', name: 'Stackiq', category: 'Data', productHref: '/apps/softwarecatalog', docsHref: 'https://softwarecatalog.conduction.nl', academyHref: '/academy?app=softwarecatalog'},
|
|
40
|
+
larpingapp: {slug: 'larpingapp', name: 'Larpinq', category: 'Processes', productHref: '/apps/larpingapp', docsHref: 'https://larpingapp.conduction.nl', academyHref: '/academy?app=larpingapp'},
|
|
41
|
+
nldesign: {slug: 'nldesign', name: 'Thematiq', category: 'Documents', productHref: '/apps/nldesign', docsHref: 'https://nldesign.conduction.nl', academyHref: '/academy?app=nldesign'},
|
|
42
42
|
shillinq: {slug: 'shillinq', name: 'Shillinq', category: 'Processes', productHref: '/apps/shillinq', docsHref: 'https://shillinq.conduction.nl', academyHref: '/academy?app=shillinq'},
|
|
43
|
-
openbuild: {slug: 'openbuild', name: '
|
|
44
|
-
doriath: {slug: 'doriath', name: '
|
|
45
|
-
'app-versions': {slug: 'app-versions', name: '
|
|
43
|
+
openbuild: {slug: 'openbuild', name: 'Buildiq', category: 'Processes', productHref: '/apps/openbuild', docsHref: 'https://openbuild.conduction.nl', academyHref: '/academy?app=openbuild'},
|
|
44
|
+
doriath: {slug: 'doriath', name: 'Keepiq', category: 'Connectors', productHref: '/apps/doriath', docsHref: 'https://doriath.conduction.nl', academyHref: '/academy?app=doriath'},
|
|
45
|
+
'app-versions': {slug: 'app-versions', name: 'Versioniq', category: 'Data', productHref: '/apps/app-versions', docsHref: 'https://app-versions.conduction.nl', academyHref: '/academy?app=app-versions'},
|
|
46
46
|
hermiq: {slug: 'hermiq', name: 'Hermiq', category: 'AI', productHref: '/apps/hermiq', docsHref: 'https://hermiq.conduction.nl', academyHref: '/academy?app=hermiq'},
|
|
47
|
-
hrmq: {slug: 'hrmq', name: '
|
|
48
|
-
openanonymiser: {slug: 'openanonymiser', name: '
|
|
49
|
-
planix: {slug: 'planix', name: '
|
|
47
|
+
hrmq: {slug: 'hrmq', name: 'Humaniq', category: 'Processes', productHref: '/apps/hrmq', docsHref: 'https://hrmq.conduction.nl', academyHref: '/academy?app=hrmq'},
|
|
48
|
+
openanonymiser: {slug: 'openanonymiser', name: 'Anonymiq', category: 'Documents', productHref: '/apps/openanonymiser', docsHref: 'https://openanonymiser.conduction.nl', academyHref: '/academy?app=openanonymiser'},
|
|
49
|
+
planix: {slug: 'planix', name: 'Planiq', category: 'Processes', productHref: '/apps/planix', docsHref: 'https://planix.conduction.nl', academyHref: '/academy?app=planix'},
|
|
50
50
|
portaliq: {slug: 'portaliq', name: 'Portaliq', category: 'Processes', productHref: '/apps/portaliq', docsHref: 'https://portaliq.conduction.nl', academyHref: '/academy?app=portaliq'},
|
|
51
|
-
scholiq: {slug: 'scholiq', name: '
|
|
51
|
+
scholiq: {slug: 'scholiq', name: 'Learniq', category: 'Processes', productHref: '/apps/scholiq', docsHref: 'https://scholiq.conduction.nl', academyHref: '/academy?app=scholiq'},
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -93,7 +93,7 @@ export function getApps(slugs = []) {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
|
-
* Resolve a display-name (e.g. "OpenCatalogi", "
|
|
96
|
+
* Resolve a display-name (e.g. "OpenCatalogi", "Filinq", "LaunchPad")
|
|
97
97
|
* to its product page href, or undefined when the name is not in the
|
|
98
98
|
* registry. Used by partner cards / sidecards to turn the apps-shipped
|
|
99
99
|
* chip row into a clickable link list. Names like "Nextcloud" that
|
package/src/diagrams/cn-pair.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* right-label="xWiki"
|
|
13
13
|
* right-caption="xwiki.example"
|
|
14
14
|
* right-color="cobalt-700"
|
|
15
|
-
* bridge-label="
|
|
15
|
+
* bridge-label="Integriq integration">
|
|
16
16
|
* <svg slot="left-icon" viewBox="0 0 24 24">...</svg>
|
|
17
17
|
* <svg slot="right-icon" viewBox="0 0 24 24">...</svg>
|
|
18
18
|
* </cn-pair>
|
package/src/theme/brand.jsx
CHANGED
|
@@ -68,12 +68,12 @@ export function brandFor(pathname, title) {
|
|
|
68
68
|
* cobalt-400 / regular weight and the rest in blue-cobalt / bold:
|
|
69
69
|
*
|
|
70
70
|
* <span class="light">Open</span>Register
|
|
71
|
-
* <span class="light">
|
|
71
|
+
* <span class="light">Pipe</span>linQ
|
|
72
72
|
* <span class="light">My</span>Dash
|
|
73
73
|
*
|
|
74
74
|
* This list covers the prefixes used across the Conduction fleet.
|
|
75
75
|
* Sites whose wordmark doesn't start with one of these (e.g. Shillinq,
|
|
76
|
-
*
|
|
76
|
+
* Hermiq) keep the whole wordmark in blue-cobalt unless they pass
|
|
77
77
|
* an explicit `navbar.brandPrefix` to override.
|
|
78
78
|
*/
|
|
79
79
|
const PRODUCT_PREFIXES = [
|