@conduction/docusaurus-preset 0.1.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/MISSING_COMPONENTS.md +109 -0
- package/README.md +171 -0
- package/package.json +59 -0
- package/src/components/AgentTrace/AgentTrace.jsx +128 -0
- package/src/components/AgentTrace/AgentTrace.module.css +115 -0
- package/src/components/AppMock/AppMock.jsx +86 -0
- package/src/components/AppMock/AppMock.module.css +629 -0
- package/src/components/AppMock/variants/DeciDeskMock.jsx +71 -0
- package/src/components/AppMock/variants/DocuDeskMock.jsx +69 -0
- package/src/components/AppMock/variants/LarpingAppMock.jsx +59 -0
- package/src/components/AppMock/variants/MyDashBiMock.jsx +135 -0
- package/src/components/AppMock/variants/MyDashMock.jsx +96 -0
- package/src/components/AppMock/variants/MyDashTilesMock.jsx +103 -0
- package/src/components/AppMock/variants/MyDashWidgetsMock.jsx +123 -0
- package/src/components/AppMock/variants/NLDesignMock.jsx +70 -0
- package/src/components/AppMock/variants/OpenCatalogiMock.jsx +61 -0
- package/src/components/AppMock/variants/OpenConnectorMock.jsx +83 -0
- package/src/components/AppMock/variants/OpenRegisterMock.jsx +100 -0
- package/src/components/AppMock/variants/OpenWooMock.jsx +61 -0
- package/src/components/AppMock/variants/PipelinQMock.jsx +88 -0
- package/src/components/AppMock/variants/ProcestMock.jsx +87 -0
- package/src/components/AppMock/variants/SoftwareCatalogMock.jsx +71 -0
- package/src/components/AppMock/variants/ZaakAfhandelAppMock.jsx +71 -0
- package/src/components/AppsGrid/AppsGrid.jsx +84 -0
- package/src/components/AppsGrid/AppsGrid.module.css +46 -0
- package/src/components/AppsPreview/AppsPreview.jsx +85 -0
- package/src/components/AppsPreview/AppsPreview.module.css +128 -0
- package/src/components/Clients/Clients.jsx +205 -0
- package/src/components/Clients/Clients.module.css +166 -0
- package/src/components/ComposeBlock/ComposeBlock.jsx +70 -0
- package/src/components/ComposeBlock/ComposeBlock.module.css +74 -0
- package/src/components/ConductionBg/ConductionBg.jsx +150 -0
- package/src/components/ConductionBg/ConductionBg.module.css +41 -0
- package/src/components/ContentCard/ContentCard.jsx +126 -0
- package/src/components/ContentCard/ContentCard.module.css +84 -0
- package/src/components/ContentDetailHero/ContentDetailHero.jsx +136 -0
- package/src/components/ContentDetailHero/ContentDetailHero.module.css +96 -0
- package/src/components/ContentTypeFilter/ContentTypeFilter.jsx +103 -0
- package/src/components/ContentTypeFilter/ContentTypeFilter.module.css +60 -0
- package/src/components/ContentTypeFilter/contentTypes.js +58 -0
- package/src/components/CookieCli/CookieCli.jsx +223 -0
- package/src/components/CookieCli/CookieCli.module.css +166 -0
- package/src/components/CtaBanner/CtaBanner.jsx +61 -0
- package/src/components/CtaBanner/CtaBanner.module.css +65 -0
- package/src/components/DetailHero/DetailHero.jsx +143 -0
- package/src/components/DetailHero/DetailHero.module.css +154 -0
- package/src/components/Diagrams/Diagrams.jsx +148 -0
- package/src/components/EmployeeCard/EmployeeCard.jsx +127 -0
- package/src/components/EmployeeCard/EmployeeCard.module.css +144 -0
- package/src/components/ExternalAppShelf/ExternalAppShelf.jsx +61 -0
- package/src/components/ExternalAppShelf/ExternalAppShelf.module.css +90 -0
- package/src/components/FAQ/FAQ.jsx +42 -0
- package/src/components/FAQ/FAQ.module.css +74 -0
- package/src/components/FacetedFilters/FacetedFilters.jsx +125 -0
- package/src/components/FacetedFilters/FacetedFilters.module.css +133 -0
- package/src/components/FeatureGrid/FeatureGrid.jsx +94 -0
- package/src/components/FeatureGrid/FeatureGrid.module.css +114 -0
- package/src/components/FeatureList/FeatureList.jsx +54 -0
- package/src/components/FeatureList/FeatureList.module.css +52 -0
- package/src/components/FeaturedCard/FeaturedCard.jsx +101 -0
- package/src/components/FeaturedCard/FeaturedCard.module.css +98 -0
- package/src/components/GameModal/GameModal.jsx +197 -0
- package/src/components/GameModal/GameModal.module.css +184 -0
- package/src/components/Hero/Hero.jsx +101 -0
- package/src/components/Hero/Hero.module.css +95 -0
- package/src/components/HexBackground/HexBackground.jsx +56 -0
- package/src/components/HexBackground/HexBackground.module.css +73 -0
- package/src/components/HexNetwork/HexNetwork.jsx +141 -0
- package/src/components/HexNetwork/HexNetwork.module.css +187 -0
- package/src/components/HexRain/HexRain.jsx +81 -0
- package/src/components/HowSteps/HowSteps.jsx +57 -0
- package/src/components/HowSteps/HowSteps.module.css +52 -0
- package/src/components/ManagedCommonGround/ManagedCommonGround.jsx +78 -0
- package/src/components/ManagedCommonGround/ManagedCommonGround.module.css +16 -0
- package/src/components/NewsletterCta/NewsletterCta.jsx +83 -0
- package/src/components/NewsletterCta/NewsletterCta.module.css +103 -0
- package/src/components/PairCard/PairCard.jsx +58 -0
- package/src/components/PairCard/PairCard.module.css +54 -0
- package/src/components/PartnerCard/PartnerCard.jsx +130 -0
- package/src/components/PartnerCard/PartnerCard.module.css +198 -0
- package/src/components/PartnerDirectory/PartnerDirectory.jsx +122 -0
- package/src/components/PartnerDirectory/PartnerDirectory.module.css +25 -0
- package/src/components/PartnerSidecard/PartnerSidecard.jsx +116 -0
- package/src/components/PartnerSidecard/PartnerSidecard.module.css +185 -0
- package/src/components/Pipeline/Pipeline.jsx +198 -0
- package/src/components/Pipeline/Pipeline.module.css +206 -0
- package/src/components/PlatformDiagram/PlatformDiagram.jsx +110 -0
- package/src/components/PlatformOverview/PlatformOverview.jsx +68 -0
- package/src/components/PlatformOverview/PlatformOverview.module.css +71 -0
- package/src/components/ReferenceCard/ReferenceCard.jsx +44 -0
- package/src/components/ReferenceCard/ReferenceCard.module.css +57 -0
- package/src/components/RelatedPosts/RelatedPosts.jsx +58 -0
- package/src/components/RelatedPosts/RelatedPosts.module.css +51 -0
- package/src/components/RotatingCards/RotatingCards.jsx +98 -0
- package/src/components/RotatingCards/RotatingCards.module.css +153 -0
- package/src/components/Showcase/Showcase.jsx +129 -0
- package/src/components/Showcase/Showcase.module.css +168 -0
- package/src/components/SolutionCard/SolutionCard.jsx +83 -0
- package/src/components/SolutionCard/SolutionCard.module.css +99 -0
- package/src/components/StatsStrip/StatsStrip.jsx +38 -0
- package/src/components/StatsStrip/StatsStrip.module.css +53 -0
- package/src/components/WidgetShelf/WidgetShelf.jsx +67 -0
- package/src/components/WidgetShelf/WidgetShelf.module.css +73 -0
- package/src/components/index.js +96 -0
- package/src/components/primitives/AuthorByline.jsx +85 -0
- package/src/components/primitives/AuthorByline.module.css +57 -0
- package/src/components/primitives/BrandCitation.jsx +71 -0
- package/src/components/primitives/Button.jsx +46 -0
- package/src/components/primitives/Button.module.css +88 -0
- package/src/components/primitives/Card.jsx +42 -0
- package/src/components/primitives/Card.module.css +42 -0
- package/src/components/primitives/Eyebrow.jsx +37 -0
- package/src/components/primitives/Eyebrow.module.css +19 -0
- package/src/components/primitives/HexBullet.jsx +37 -0
- package/src/components/primitives/HexBullet.module.css +16 -0
- package/src/components/primitives/HexThumbnail.jsx +70 -0
- package/src/components/primitives/HexThumbnail.module.css +45 -0
- package/src/components/primitives/Pill.jsx +42 -0
- package/src/components/primitives/Pill.module.css +30 -0
- package/src/components/primitives/Section.jsx +51 -0
- package/src/components/primitives/Section.module.css +31 -0
- package/src/components/primitives/SectionHead.jsx +36 -0
- package/src/components/primitives/SectionHead.module.css +43 -0
- package/src/components/primitives/index.js +22 -0
- package/src/css/brand.css +158 -0
- package/src/css/tokens.css +12 -0
- package/src/data/app-downloads.js +42 -0
- package/src/diagrams/README.md +74 -0
- package/src/diagrams/cn-domain-tree.js +105 -0
- package/src/diagrams/cn-hex-prism.js +163 -0
- package/src/diagrams/cn-hex.js +181 -0
- package/src/diagrams/cn-honeycomb-bg.js +135 -0
- package/src/diagrams/cn-pipeline.js +150 -0
- package/src/diagrams/cn-platform.js +156 -0
- package/src/diagrams/cn-side-box.js +104 -0
- package/src/diagrams/index.js +28 -0
- package/src/index.js +183 -0
- package/src/theme/Footer/index.jsx +516 -0
- package/src/theme/MDXPage/index.jsx +134 -0
- package/src/theme/Navbar/index.jsx +120 -0
- package/src/theme/Navbar/styles.module.css +114 -0
- package/src/theme/brand.jsx +63 -0
- package/src/theme.js +45 -0
- package/src/utils/lazyScript.js +37 -0
- package/static/img/favicon.svg +14 -0
- package/static/img/honeycomb-scatter.svg +23 -0
- package/static/img/honeycomb-watermark.svg +108 -0
- package/static/img/logo-dark.svg +11 -0
- package/static/img/logo.svg +14 -0
- package/static/img/nextcloud-logo.svg +5 -0
- package/static/lib/canal-footer.css +418 -0
- package/static/lib/canal-footer.js +499 -0
- package/static/lib/clients-flow.js +317 -0
- package/static/lib/conduction-bg.css +50 -0
- package/static/lib/conduction-bg.js +122 -0
- package/static/lib/hex-rain.css +128 -0
- package/static/lib/hex-rain.js +284 -0
- package/static/lib/kade-cyclist.css +264 -0
- package/static/lib/kade-cyclist.js +420 -0
- package/static/lib/logo-memory.css +219 -0
- package/static/lib/logo-memory.js +540 -0
- package/static/lib/platform-diagram.css +458 -0
- package/static/lib/platform-diagram.js +414 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NLDesign abstract — theme settings panel.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app role (NL Design System theme for Nextcloud):
|
|
5
|
+
* centre shows a settings layout with a colour-swatch row, a type
|
|
6
|
+
* specimen, and a component preview block. Left nav for theme /
|
|
7
|
+
* colours / typography / spacing / components / overrides.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import styles from '../AppMock.module.css';
|
|
12
|
+
|
|
13
|
+
export default function NLDesignMock() {
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<div className={styles.topbar}>
|
|
17
|
+
<div className={styles.logo}></div>
|
|
18
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
19
|
+
<div className={styles.spacer}></div>
|
|
20
|
+
<div className={styles.bell}></div>
|
|
21
|
+
<div className={styles.avatar}></div>
|
|
22
|
+
</div>
|
|
23
|
+
<div className={[styles.body, styles.openregister].filter(Boolean).join(' ')}>
|
|
24
|
+
<div className={styles.nav}>
|
|
25
|
+
<div className={styles.navHead}><div className={styles.h}></div><div className={styles.l}></div></div>
|
|
26
|
+
{[true, false, false, false, false, false].map((active, i) => (
|
|
27
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
28
|
+
<div className={styles.ico}></div>
|
|
29
|
+
<div className={styles.l}></div>
|
|
30
|
+
</div>
|
|
31
|
+
))}
|
|
32
|
+
</div>
|
|
33
|
+
<div className={styles.col}>
|
|
34
|
+
{/* Colour-swatch panel */}
|
|
35
|
+
<div className={styles.panel}>
|
|
36
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
37
|
+
<div style={{display: 'flex', gap: 6, flexWrap: 'wrap'}}>
|
|
38
|
+
{['var(--c-blue-cobalt)','var(--c-orange-knvb)','var(--c-mint-500)','var(--c-lavender-500)','var(--c-forest-500)','var(--c-terracotta-500)','var(--c-cobalt-300)','var(--c-cobalt-100)'].map((bg, i) => (
|
|
39
|
+
<span key={i} style={{width: 22, height: 22, borderRadius: 4, background: bg}}></span>
|
|
40
|
+
))}
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
{/* Type specimen */}
|
|
44
|
+
<div className={styles.panel}>
|
|
45
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
46
|
+
<div style={{display: 'flex', alignItems: 'baseline', gap: 8}}>
|
|
47
|
+
<div style={{height: 14, width: 18, background: 'var(--c-cobalt-900)', borderRadius: 1}}></div>
|
|
48
|
+
<div style={{height: 11, width: 14, background: 'var(--c-cobalt-700)', borderRadius: 1}}></div>
|
|
49
|
+
<div style={{height: 8, width: 12, background: 'var(--c-cobalt-400)', borderRadius: 1}}></div>
|
|
50
|
+
<div style={{height: 6, width: 10, background: 'var(--c-cobalt-300)', borderRadius: 1}}></div>
|
|
51
|
+
<div style={{height: 4, width: 8, background: 'var(--c-cobalt-200)', borderRadius: 1}}></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div className={styles.row}></div>
|
|
54
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
55
|
+
</div>
|
|
56
|
+
{/* Component preview */}
|
|
57
|
+
<div className={styles.panel}>
|
|
58
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
59
|
+
<div style={{display: 'flex', gap: 6, flexWrap: 'wrap'}}>
|
|
60
|
+
<div className={styles.btn}></div>
|
|
61
|
+
<div className={styles.btn + ' ' + styles.ghost}></div>
|
|
62
|
+
<div className={styles.statusPill}><div className={styles.h}></div><div className={styles.t}></div></div>
|
|
63
|
+
<div className={[styles.statusPill, styles.beta].join(' ')}><div className={styles.h}></div><div className={styles.t}></div></div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCatalogi abstract — federated catalogue grid.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app description ("publication catalogue, federated
|
|
5
|
+
* search across registers"): centre is a 3×2 grid of catalogue cards,
|
|
6
|
+
* each with a hex glyph in a different family colour to signal the
|
|
7
|
+
* categorical mix. Left nav for catalogues / publications / sources.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import styles from '../AppMock.module.css';
|
|
12
|
+
|
|
13
|
+
export default function OpenCatalogiMock() {
|
|
14
|
+
const cards = ['', 'b', 'c', 'd', 'e', ''];
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<div className={styles.topbar}>
|
|
18
|
+
<div className={styles.logo}></div>
|
|
19
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
20
|
+
<div className={styles.spacer}></div>
|
|
21
|
+
<div className={styles.bell}></div>
|
|
22
|
+
<div className={styles.avatar}></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div className={[styles.body, styles.opencatalogi].filter(Boolean).join(' ')}>
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}>
|
|
27
|
+
<div className={styles.h}></div><div className={styles.l}></div>
|
|
28
|
+
</div>
|
|
29
|
+
{[true, false, false, false, false].map((active, i) => (
|
|
30
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
31
|
+
<div className={styles.ico}></div>
|
|
32
|
+
<div className={styles.l}></div>
|
|
33
|
+
</div>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
<div className={styles.col}>
|
|
37
|
+
<div className={styles.head}>
|
|
38
|
+
<div className={styles.row + ' ' + styles.head} style={{width: 30}}></div>
|
|
39
|
+
<div className={styles.actions}>
|
|
40
|
+
<div className={styles.btn + ' ' + styles.ghost}></div>
|
|
41
|
+
<div className={styles.btn}></div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div className={styles.grid}>
|
|
45
|
+
{cards.map((cls, i) => (
|
|
46
|
+
<div key={i} className={[styles.card, cls && styles[cls]].filter(Boolean).join(' ')}>
|
|
47
|
+
<div className={styles.ico}></div>
|
|
48
|
+
<div className={styles.row + ' ' + styles.head}></div>
|
|
49
|
+
<div className={styles.row}></div>
|
|
50
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
51
|
+
<div className={styles.statusPill}>
|
|
52
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
))}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenConnector abstract — source-connector-target pipeline view.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app's role ("integration plane between Conduction
|
|
5
|
+
* apps and external APIs"): the centre stage shows a single canonical
|
|
6
|
+
* pipeline (lavender source → cobalt connector → forest target), with
|
|
7
|
+
* a status table below for recent runs. Left nav for sources, jobs,
|
|
8
|
+
* mappings, sync logs, schedules.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import styles from '../AppMock.module.css';
|
|
13
|
+
|
|
14
|
+
export default function OpenConnectorMock() {
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<div className={styles.topbar}>
|
|
18
|
+
<div className={styles.logo}></div>
|
|
19
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
20
|
+
<div className={styles.spacer}></div>
|
|
21
|
+
<div className={styles.bell}></div>
|
|
22
|
+
<div className={styles.avatar}></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div className={[styles.body, styles.openconnector].filter(Boolean).join(' ')}>
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}>
|
|
27
|
+
<div className={styles.h}></div><div className={styles.l}></div>
|
|
28
|
+
</div>
|
|
29
|
+
{[false, true, false, false, false, false].map((active, i) => (
|
|
30
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
31
|
+
<div className={styles.ico}></div>
|
|
32
|
+
<div className={styles.l}></div>
|
|
33
|
+
</div>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
<div className={styles.col}>
|
|
37
|
+
<div className={styles.head}>
|
|
38
|
+
<div className={styles.row + ' ' + styles.head} style={{width: 30}}></div>
|
|
39
|
+
<div className={styles.actions}>
|
|
40
|
+
<div className={styles.btn}></div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div className={styles.stage}>
|
|
44
|
+
<div className={styles.source}>
|
|
45
|
+
<div className={styles.ico}></div>
|
|
46
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
47
|
+
</div>
|
|
48
|
+
<div className={styles.arrow}></div>
|
|
49
|
+
<div className={styles.conn}>
|
|
50
|
+
<div className={styles.ico}></div>
|
|
51
|
+
<div className={styles.label}></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div className={styles.arrow}></div>
|
|
54
|
+
<div className={styles.target}>
|
|
55
|
+
<div className={styles.ico}></div>
|
|
56
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
<div className={styles.panel}>
|
|
60
|
+
<div className={styles.head}>
|
|
61
|
+
<div className={styles.title}></div>
|
|
62
|
+
<div className={styles.statusPill}>
|
|
63
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div className={styles.stack}>
|
|
67
|
+
{['a','d','b','c'].map((cls, i) => (
|
|
68
|
+
<div key={i} className={styles.item}>
|
|
69
|
+
<div className={[styles.av, styles[cls]].join(' ')}></div>
|
|
70
|
+
<div className={styles.lines}>
|
|
71
|
+
<div className={styles.l1}></div>
|
|
72
|
+
<div className={styles.l2}></div>
|
|
73
|
+
</div>
|
|
74
|
+
<div className={styles.row + ' ' + styles.short} style={{width: 24}}></div>
|
|
75
|
+
</div>
|
|
76
|
+
))}
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRegister abstract — three-pane admin: left nav + centre dashboard
|
|
3
|
+
* + right detail rail. Reference: localhost:8080/apps/openregister.
|
|
4
|
+
*
|
|
5
|
+
* Centre is the canonical "Dashboard" view: KPI strip top, two
|
|
6
|
+
* side-by-side tables ("Popular Search Terms" / "Objects by Register"),
|
|
7
|
+
* second row of two more. Right rail shows Filter Statistics + Totals.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import styles from '../AppMock.module.css';
|
|
12
|
+
|
|
13
|
+
export default function OpenRegisterMock() {
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<div className={styles.topbar}>
|
|
17
|
+
<div className={styles.logo}></div>
|
|
18
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
19
|
+
<div className={styles.spacer}></div>
|
|
20
|
+
<div className={styles.bell}></div>
|
|
21
|
+
<div className={styles.avatar}></div>
|
|
22
|
+
</div>
|
|
23
|
+
<div className={[styles.body, styles.openregister].filter(Boolean).join(' ')}>
|
|
24
|
+
{/* Left nav */}
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}>
|
|
27
|
+
<div className={styles.h}></div>
|
|
28
|
+
<div className={styles.l}></div>
|
|
29
|
+
</div>
|
|
30
|
+
{[true, false, false, false, false, false, false, false].map((active, i) => (
|
|
31
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
32
|
+
<div className={styles.ico}></div>
|
|
33
|
+
<div className={styles.l}></div>
|
|
34
|
+
</div>
|
|
35
|
+
))}
|
|
36
|
+
</div>
|
|
37
|
+
{/* Centre */}
|
|
38
|
+
<div className={styles.col}>
|
|
39
|
+
{/* KPI strip */}
|
|
40
|
+
<div className={styles.kpiRow}>
|
|
41
|
+
<div className={styles.kpi}>
|
|
42
|
+
<div className={styles.ico}></div>
|
|
43
|
+
<div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
|
|
44
|
+
</div>
|
|
45
|
+
<div className={[styles.kpi, styles.forest].join(' ')}>
|
|
46
|
+
<div className={styles.ico}></div>
|
|
47
|
+
<div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
|
|
48
|
+
</div>
|
|
49
|
+
<div className={[styles.kpi, styles.amber].join(' ')}>
|
|
50
|
+
<div className={styles.ico}></div>
|
|
51
|
+
<div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div className={[styles.kpi, styles.lavender].join(' ')}>
|
|
54
|
+
<div className={styles.ico}></div>
|
|
55
|
+
<div className={styles.meta}><div className={styles.num}></div><div className={styles.label}></div></div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
{/* Two rows × two tables */}
|
|
59
|
+
<div className={styles.panelRow}>
|
|
60
|
+
<div className={styles.panel}>
|
|
61
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
62
|
+
<div className={styles.stack}>
|
|
63
|
+
{[0,1,2].map(i => (
|
|
64
|
+
<div key={i} className={styles.item}>
|
|
65
|
+
<div className={styles.lines}><div className={styles.l1}></div></div>
|
|
66
|
+
</div>
|
|
67
|
+
))}
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div className={styles.panel}>
|
|
71
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
72
|
+
<div className={styles.stack}>
|
|
73
|
+
{['b','d','c','a'].map((cls, i) => (
|
|
74
|
+
<div key={i} className={styles.item}>
|
|
75
|
+
<div className={[styles.av, styles[cls]].join(' ')}></div>
|
|
76
|
+
<div className={styles.lines}><div className={styles.l1}></div></div>
|
|
77
|
+
</div>
|
|
78
|
+
))}
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
{/* Right detail rail */}
|
|
84
|
+
<div className={styles.detail}>
|
|
85
|
+
<div className={styles.row + ' ' + styles.head}></div>
|
|
86
|
+
<div className={styles.row}></div>
|
|
87
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
88
|
+
<div style={{height: 8}}></div>
|
|
89
|
+
<div className={styles.row + ' ' + styles.head}></div>
|
|
90
|
+
<div className={styles.row + ' ' + styles.dark}></div>
|
|
91
|
+
<div className={styles.row}></div>
|
|
92
|
+
<div className={styles.row}></div>
|
|
93
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
94
|
+
<div className={styles.row + ' ' + styles.accent}></div>
|
|
95
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenWoo abstract — Woo publication catalogue.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app role (eleven Woo categories, citizen-search,
|
|
5
|
+
* audit log, federation to data.overheid.nl): centre shows a 3×2 grid
|
|
6
|
+
* of category cards (each in a different family colour because the
|
|
7
|
+
* eleven categories are categorical, not ranked) with publish counts
|
|
8
|
+
* and status pills. Left nav for categories / publication queue /
|
|
9
|
+
* archive / audit / federation.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import styles from '../AppMock.module.css';
|
|
14
|
+
|
|
15
|
+
export default function OpenWooMock() {
|
|
16
|
+
const cards = ['', 'b', 'c', 'd', 'e', 'b'];
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
<div className={styles.topbar}>
|
|
20
|
+
<div className={styles.logo}></div>
|
|
21
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
22
|
+
<div className={styles.spacer}></div>
|
|
23
|
+
<div className={styles.bell}></div>
|
|
24
|
+
<div className={styles.avatar}></div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className={[styles.body, styles.opencatalogi].filter(Boolean).join(' ')}>
|
|
27
|
+
<div className={styles.nav}>
|
|
28
|
+
<div className={styles.navHead}><div className={styles.h}></div><div className={styles.l}></div></div>
|
|
29
|
+
{[true, false, false, false, false, false].map((active, i) => (
|
|
30
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
31
|
+
<div className={styles.ico}></div>
|
|
32
|
+
<div className={styles.l}></div>
|
|
33
|
+
</div>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
<div className={styles.col}>
|
|
37
|
+
<div className={styles.head}>
|
|
38
|
+
<div className={styles.row + ' ' + styles.head} style={{width: '30%'}}></div>
|
|
39
|
+
<div className={styles.actions}>
|
|
40
|
+
<div className={styles.btn + ' ' + styles.ghost}></div>
|
|
41
|
+
<div className={styles.btn}></div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div className={styles.grid}>
|
|
45
|
+
{cards.map((cls, i) => (
|
|
46
|
+
<div key={i} className={[styles.card, cls && styles[cls]].filter(Boolean).join(' ')}>
|
|
47
|
+
<div className={styles.ico}></div>
|
|
48
|
+
<div className={styles.row + ' ' + styles.head}></div>
|
|
49
|
+
<div className={styles.row}></div>
|
|
50
|
+
<div className={styles.row + ' ' + styles.short}></div>
|
|
51
|
+
<div className={styles.statusPill}>
|
|
52
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
))}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PipelinQ abstract — sales kanban + KPI strip.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app role (CRM with kanban deal-flow, customers,
|
|
5
|
+
* deals, quotes): centre shows the kanban board with five columns
|
|
6
|
+
* (lead, qualified, proposal, won, lost) plus a KPI strip on top
|
|
7
|
+
* (pipeline value, win rate, deals this week). Left nav for kanban /
|
|
8
|
+
* customers / contacts / deals / quotes.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import styles from '../AppMock.module.css';
|
|
13
|
+
|
|
14
|
+
export default function PipelinQMock() {
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<div className={styles.topbar}>
|
|
18
|
+
<div className={styles.logo}></div>
|
|
19
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
20
|
+
<div className={styles.spacer}></div>
|
|
21
|
+
<div className={styles.bell}></div>
|
|
22
|
+
<div className={styles.avatar}></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div className={[styles.body, styles.decidesk].filter(Boolean).join(' ')}>
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}><div className={styles.h}></div><div className={styles.l}></div></div>
|
|
27
|
+
{[true, false, false, false, false].map((active, i) => (
|
|
28
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
29
|
+
<div className={styles.ico}></div>
|
|
30
|
+
<div className={styles.l}></div>
|
|
31
|
+
</div>
|
|
32
|
+
))}
|
|
33
|
+
</div>
|
|
34
|
+
<div className={styles.col}>
|
|
35
|
+
<div className={styles.head}>
|
|
36
|
+
<div className={styles.row + ' ' + styles.head} style={{width: '30%'}}></div>
|
|
37
|
+
<div className={styles.actions}>
|
|
38
|
+
<div className={styles.btn + ' ' + styles.ghost}></div>
|
|
39
|
+
<div className={styles.btn}></div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div className={styles.kpiRow}>
|
|
43
|
+
<div className={[styles.kpi, styles.lavender].join(' ')}>
|
|
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}>
|
|
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>
|
|
56
|
+
{/* Kanban board (5 columns) */}
|
|
57
|
+
<div className={[styles.w, styles['w-decks']].join(' ')} style={{flex: 1}}>
|
|
58
|
+
<div className={styles.wHead}>
|
|
59
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
60
|
+
</div>
|
|
61
|
+
<div className={styles.columns} style={{gridTemplateColumns: 'repeat(5, 1fr)'}}>
|
|
62
|
+
<div className={styles.col}>
|
|
63
|
+
<div className={styles.card}></div>
|
|
64
|
+
<div className={styles.card}></div>
|
|
65
|
+
<div className={styles.card}></div>
|
|
66
|
+
</div>
|
|
67
|
+
<div className={styles.col}>
|
|
68
|
+
<div className={[styles.card, styles.b].join(' ')}></div>
|
|
69
|
+
<div className={styles.card}></div>
|
|
70
|
+
</div>
|
|
71
|
+
<div className={styles.col}>
|
|
72
|
+
<div className={[styles.card, styles.c].join(' ')}></div>
|
|
73
|
+
<div className={styles.card}></div>
|
|
74
|
+
<div className={styles.card}></div>
|
|
75
|
+
</div>
|
|
76
|
+
<div className={styles.col}>
|
|
77
|
+
<div className={[styles.card, styles.c].join(' ')}></div>
|
|
78
|
+
</div>
|
|
79
|
+
<div className={styles.col}>
|
|
80
|
+
<div className={styles.card}></div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procest abstract — case management with process timeline.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from app role (ZGW case-management for VTH and citizen
|
|
5
|
+
* processes): centre shows a canonical case detail with the timeline
|
|
6
|
+
* of stages running across the top (one done, one active, three to-do)
|
|
7
|
+
* plus a list of recent cases below. Left nav for cases, types,
|
|
8
|
+
* roles, decisions, archive.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import styles from '../AppMock.module.css';
|
|
13
|
+
|
|
14
|
+
export default function ProcestMock() {
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<div className={styles.topbar}>
|
|
18
|
+
<div className={styles.logo}></div>
|
|
19
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
20
|
+
<div className={styles.spacer}></div>
|
|
21
|
+
<div className={styles.bell}></div>
|
|
22
|
+
<div className={styles.avatar}></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div className={[styles.body, styles.procest].filter(Boolean).join(' ')}>
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}>
|
|
27
|
+
<div className={styles.h}></div><div className={styles.l}></div>
|
|
28
|
+
</div>
|
|
29
|
+
{[true, false, false, false, false, false].map((active, i) => (
|
|
30
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
31
|
+
<div className={styles.ico}></div>
|
|
32
|
+
<div className={styles.l}></div>
|
|
33
|
+
</div>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
<div className={styles.col}>
|
|
37
|
+
<div className={styles.head}>
|
|
38
|
+
<div className={styles.row + ' ' + styles.head} style={{width: 35}}></div>
|
|
39
|
+
<div className={styles.actions}>
|
|
40
|
+
<div className={styles.btn + ' ' + styles.ghost}></div>
|
|
41
|
+
<div className={styles.btn}></div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div className={styles.timeline}>
|
|
45
|
+
<div className={styles.step}>
|
|
46
|
+
<div className={styles.h}></div>
|
|
47
|
+
<div className={styles.label}></div>
|
|
48
|
+
</div>
|
|
49
|
+
<div className={[styles.step, styles.now].join(' ')}>
|
|
50
|
+
<div className={styles.h}></div>
|
|
51
|
+
<div className={styles.label}></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div className={[styles.step, styles.todo].join(' ')}>
|
|
54
|
+
<div className={styles.h}></div>
|
|
55
|
+
<div className={styles.label}></div>
|
|
56
|
+
</div>
|
|
57
|
+
<div className={[styles.step, styles.todo].join(' ')}>
|
|
58
|
+
<div className={styles.h}></div>
|
|
59
|
+
<div className={styles.label}></div>
|
|
60
|
+
</div>
|
|
61
|
+
<div className={[styles.step, styles.todo].join(' ')}>
|
|
62
|
+
<div className={styles.h}></div>
|
|
63
|
+
<div className={styles.label}></div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div className={styles.panel}>
|
|
67
|
+
<div className={styles.head}><div className={styles.title}></div></div>
|
|
68
|
+
<div className={styles.stack}>
|
|
69
|
+
{['a','b','d','c','a'].map((cls, i) => (
|
|
70
|
+
<div key={i} className={styles.item}>
|
|
71
|
+
<div className={[styles.av, styles[cls]].join(' ')}></div>
|
|
72
|
+
<div className={styles.lines}>
|
|
73
|
+
<div className={styles.l1}></div>
|
|
74
|
+
<div className={styles.l2}></div>
|
|
75
|
+
</div>
|
|
76
|
+
<div className={[styles.statusPill, i === 1 && styles.beta].filter(Boolean).join(' ')}>
|
|
77
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
))}
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SoftwareCatalog abstract — IT-asset inventory list.
|
|
3
|
+
*
|
|
4
|
+
* Inferred from the app role (software inventory, licences, contracts,
|
|
5
|
+
* dependencies): centre shows a tabular app list with status pips
|
|
6
|
+
* (mint = stable, orange = update available, red = end-of-life) plus
|
|
7
|
+
* a graph card on top showing licence-renewal timeline. Left nav for
|
|
8
|
+
* apps / licences / contracts / dependencies / discovery / archive.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import styles from '../AppMock.module.css';
|
|
13
|
+
|
|
14
|
+
export default function SoftwareCatalogMock() {
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<div className={styles.topbar}>
|
|
18
|
+
<div className={styles.logo}></div>
|
|
19
|
+
{Array.from({length: 14}).map((_, i) => <div key={i} className={styles.icon}></div>)}
|
|
20
|
+
<div className={styles.spacer}></div>
|
|
21
|
+
<div className={styles.bell}></div>
|
|
22
|
+
<div className={styles.avatar}></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div className={[styles.body, styles.openregister].filter(Boolean).join(' ')}>
|
|
25
|
+
<div className={styles.nav}>
|
|
26
|
+
<div className={styles.navHead}><div className={styles.h}></div><div className={styles.l}></div></div>
|
|
27
|
+
{[true, false, false, false, false, false].map((active, i) => (
|
|
28
|
+
<div key={i} className={[styles.item, active && styles.active].filter(Boolean).join(' ')}>
|
|
29
|
+
<div className={styles.ico}></div>
|
|
30
|
+
<div className={styles.l}></div>
|
|
31
|
+
</div>
|
|
32
|
+
))}
|
|
33
|
+
</div>
|
|
34
|
+
<div className={styles.col}>
|
|
35
|
+
{/* Licence-renewal timeline (bar chart with one accent) */}
|
|
36
|
+
<div className={[styles.w, styles['w-graph-bar']].join(' ')}>
|
|
37
|
+
<div className={styles.wHead}>
|
|
38
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
39
|
+
</div>
|
|
40
|
+
<div className={styles.bars}>
|
|
41
|
+
<div className={styles.bar} style={{height: '30%'}}></div>
|
|
42
|
+
<div className={styles.bar} style={{height: '50%'}}></div>
|
|
43
|
+
<div className={styles.bar} style={{height: '40%'}}></div>
|
|
44
|
+
<div className={styles.bar} style={{height: '70%'}}></div>
|
|
45
|
+
<div className={[styles.bar, styles.accent].join(' ')} style={{height: '88%'}}></div>
|
|
46
|
+
<div className={styles.bar} style={{height: '60%'}}></div>
|
|
47
|
+
<div className={styles.bar} style={{height: '45%'}}></div>
|
|
48
|
+
<div className={styles.bar} style={{height: '38%'}}></div>
|
|
49
|
+
</div>
|
|
50
|
+
<div className={styles.axis}></div>
|
|
51
|
+
</div>
|
|
52
|
+
{/* App list with status pips */}
|
|
53
|
+
<div className={[styles.w, styles['w-jira']].join(' ')}>
|
|
54
|
+
<div className={styles.wHead}>
|
|
55
|
+
<div className={styles.h}></div><div className={styles.t}></div>
|
|
56
|
+
</div>
|
|
57
|
+
<div className={styles.list}>
|
|
58
|
+
<div className={styles.item}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
59
|
+
<div className={[styles.item, styles.review].join(' ')}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
60
|
+
<div className={styles.item}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
61
|
+
<div className={[styles.item, styles.blocked].join(' ')}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
62
|
+
<div className={styles.item}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
63
|
+
<div className={styles.item}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
64
|
+
<div className={[styles.item, styles.todo].join(' ')}><div className={styles.id}></div><div className={styles.l}></div><div className={styles.pip}></div></div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</>
|
|
70
|
+
);
|
|
71
|
+
}
|