@joshuan/design-system 0.0.0-stage → 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/README.md +34 -2
- package/dist/cjs/antd.js +152 -0
- package/dist/cjs/antd.js.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/media.js +23 -0
- package/dist/cjs/media.js.map +1 -0
- package/dist/cjs/navigation.js +50 -0
- package/dist/cjs/navigation.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/palette.js +50 -0
- package/dist/cjs/palette.js.map +1 -0
- package/dist/cjs/react.js +25 -0
- package/dist/cjs/react.js.map +1 -0
- package/dist/esm/antd.js +149 -0
- package/dist/esm/antd.js.map +1 -0
- package/dist/esm/index.js +19 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/media.js +18 -0
- package/dist/esm/media.js.map +1 -0
- package/dist/esm/navigation.js +46 -0
- package/dist/esm/navigation.js.map +1 -0
- package/dist/esm/palette.js +47 -0
- package/dist/esm/palette.js.map +1 -0
- package/dist/esm/react.js +18 -0
- package/dist/esm/react.js.map +1 -0
- package/dist/styles.css +209 -0
- package/dist/types/antd.d.ts +8 -0
- package/dist/types/antd.d.ts.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/media.d.ts +6 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/types/navigation.d.ts +23 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/palette.d.ts +20 -0
- package/dist/types/palette.d.ts.map +1 -0
- package/dist/types/react.d.ts +18 -0
- package/dist/types/react.d.ts.map +1 -0
- package/package.json +73 -4
package/README.md
CHANGED
|
@@ -1,3 +1,35 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @joshuan/design-system
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Shared UI foundations for Legere and Rent Manager, built for Ant Design 6 and React 19.
|
|
4
|
+
The source contract and extraction audit are in `docs/design-system.md` at the repository root.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
import { createAppTheme } from '@joshuan/design-system/antd';
|
|
8
|
+
import { PageHeader, useSystemAppearance } from '@joshuan/design-system/react';
|
|
9
|
+
import '@joshuan/design-system/styles.css';
|
|
10
|
+
|
|
11
|
+
// Inside your provider; locale, account preference and hydration policy remain local.
|
|
12
|
+
const { dark, reducedMotion } = useSystemAppearance();
|
|
13
|
+
const theme = createAppTheme({ dark, reducedMotion, accent: 'green' });
|
|
14
|
+
// Pass theme to Ant Design ConfigProvider. Render its App below it for CSS variables.
|
|
15
|
+
// Use accent: 'blue' for Rent Manager.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`PageHeader` receives title, description, back, actions and meta as React nodes. It renders one h1.
|
|
19
|
+
Pass a host Link as `back`; the package never owns routing or translations. Import the stylesheet
|
|
20
|
+
once in the root layout. Self-host IBM Plex Sans and Mono as `--font-sans` and `--font-mono`.
|
|
21
|
+
Root exports contain palettes, font declarations and dimensions; they have no React side effects.
|
|
22
|
+
`/react` preserves its client boundary. Components and Ant Design are peers, never bundled copies.
|
|
23
|
+
|
|
24
|
+
`NavigationFrame` supplies the same 240/64 px collapsible sidebar and 280 px phone drawer to
|
|
25
|
+
both products. It starts compact between 768 and 1023 px, uses the drawer below 768 px, and keeps
|
|
26
|
+
an explicit desktop collapse choice during client navigation. Supply `pathname`, localized
|
|
27
|
+
`labels`, product `navigation(collapsed)` content and a `brand` home link containing
|
|
28
|
+
`<AppBrand name={name} mark={mark} />`. Links, route changes, Escape and leaving the phone
|
|
29
|
+
breakpoint close the drawer. Routes, account controls and menu expansion remain host-owned.
|
|
30
|
+
The same AppBrand belongs in public authentication headers, always inside a home link.
|
|
31
|
+
|
|
32
|
+
Build with `npm run build --workspace @joshuan/design-system`. The build generates CSS dimensions
|
|
33
|
+
from the same source as TypeScript. Pack with `npm pack --workspace @joshuan/design-system`.
|
|
34
|
+
Do not copy styles or themes into applications. Product-specific viewer and apartment layouts stay
|
|
35
|
+
in the applications. Changes to colours, headings or dimensions require both consumer visual suites.
|
package/dist/cjs/antd.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAppTheme = createAppTheme;
|
|
4
|
+
const antd_1 = require("antd");
|
|
5
|
+
const palette_js_1 = require("./palette.js");
|
|
6
|
+
const index_js_1 = require("./index.js");
|
|
7
|
+
function createAppTheme({ dark, accent, reducedMotion = false, }) {
|
|
8
|
+
const c = (0, palette_js_1.paletteFor)(dark, accent);
|
|
9
|
+
return {
|
|
10
|
+
algorithm: dark ? antd_1.theme.darkAlgorithm : antd_1.theme.defaultAlgorithm,
|
|
11
|
+
cssVar: { prefix: 'ant' },
|
|
12
|
+
token: {
|
|
13
|
+
colorPrimary: c.primary,
|
|
14
|
+
colorPrimaryHover: c.primaryHover,
|
|
15
|
+
colorPrimaryActive: c.primaryActive,
|
|
16
|
+
colorPrimaryText: c.primary,
|
|
17
|
+
colorPrimaryTextHover: c.primaryHover,
|
|
18
|
+
colorPrimaryTextActive: c.primaryActive,
|
|
19
|
+
colorLink: c.primary,
|
|
20
|
+
colorLinkHover: c.primaryHover,
|
|
21
|
+
colorLinkActive: c.primaryActive,
|
|
22
|
+
colorInfo: c.info,
|
|
23
|
+
colorSuccess: c.success,
|
|
24
|
+
colorWarning: c.warning,
|
|
25
|
+
colorError: c.error,
|
|
26
|
+
colorErrorText: c.error,
|
|
27
|
+
colorErrorHover: dark ? '#F2ABB0' : '#9F3240',
|
|
28
|
+
colorErrorActive: dark ? '#DA7F87' : '#852936',
|
|
29
|
+
colorErrorTextHover: dark ? '#F2ABB0' : '#9F3240',
|
|
30
|
+
colorErrorTextActive: dark ? '#DA7F87' : '#852936',
|
|
31
|
+
colorSuccessText: c.success,
|
|
32
|
+
colorWarningText: c.warning,
|
|
33
|
+
colorInfoText: c.info,
|
|
34
|
+
colorBgBase: dark ? c.page : c.surface,
|
|
35
|
+
colorFillAlter: dark ? c.surfaceRaised : c.page,
|
|
36
|
+
motion: !reducedMotion,
|
|
37
|
+
// The default palette generator makes pale surfaces muddy when the seed is a dark,
|
|
38
|
+
// accessible accent. Keep light feedback surfaces quiet and their text readable.
|
|
39
|
+
...(!dark && {
|
|
40
|
+
colorPrimaryBg: accent === 'green' ? '#EAF4F0' : '#ECF2FD',
|
|
41
|
+
colorPrimaryBgHover: accent === 'green' ? '#DCEEE6' : '#DCE7FA',
|
|
42
|
+
colorPrimaryBorder: accent === 'green' ? '#AFCFC4' : '#B5C9EF',
|
|
43
|
+
colorPrimaryBorderHover: accent === 'green' ? '#87B8A8' : '#86A7E0',
|
|
44
|
+
colorInfoBg: accent === 'green' ? '#F2F9F6' : '#F2F6FD',
|
|
45
|
+
colorInfoBgHover: accent === 'green' ? '#E3F1EB' : '#E3EBFA',
|
|
46
|
+
colorInfoBorder: accent === 'green' ? '#B7D8CD' : '#B5C9EF',
|
|
47
|
+
colorSuccessBg: '#F1F9F3',
|
|
48
|
+
colorSuccessBgHover: '#E0EFE4',
|
|
49
|
+
colorSuccessBorder: '#BFDDC7',
|
|
50
|
+
colorWarningBg: '#FCF8EE',
|
|
51
|
+
colorWarningBgHover: '#F7EDD4',
|
|
52
|
+
colorWarningBorder: '#E7D6AE',
|
|
53
|
+
colorErrorBg: '#FDF5F6',
|
|
54
|
+
colorErrorBgHover: '#F6E1E5',
|
|
55
|
+
colorErrorBorder: '#ECC5CC',
|
|
56
|
+
}),
|
|
57
|
+
colorBgLayout: c.page,
|
|
58
|
+
colorBgContainer: c.surface,
|
|
59
|
+
colorBgElevated: c.surfaceRaised,
|
|
60
|
+
colorBorder: c.borderStrong,
|
|
61
|
+
colorBorderSecondary: c.border,
|
|
62
|
+
colorText: c.text,
|
|
63
|
+
colorTextSecondary: c.textSecondary,
|
|
64
|
+
colorTextDescription: c.textSecondary,
|
|
65
|
+
colorTextDisabled: c.textSecondary,
|
|
66
|
+
colorTextPlaceholder: c.textSecondary,
|
|
67
|
+
fontFamily: index_js_1.FONT_SANS,
|
|
68
|
+
fontFamilyCode: index_js_1.FONT_MONO,
|
|
69
|
+
fontSize: 14,
|
|
70
|
+
lineHeight: 1.5,
|
|
71
|
+
borderRadius: 6,
|
|
72
|
+
borderRadiusLG: 8,
|
|
73
|
+
borderRadiusSM: 4,
|
|
74
|
+
controlHeight: index_js_1.dimensions.control,
|
|
75
|
+
controlHeightSM: index_js_1.dimensions.controlSmall,
|
|
76
|
+
controlHeightLG: index_js_1.dimensions.touchTarget,
|
|
77
|
+
colorTextLightSolid: dark ? c.page : c.surface,
|
|
78
|
+
fontSizeHeading1: index_js_1.dimensions.pageTitle,
|
|
79
|
+
fontSizeHeading2: 22,
|
|
80
|
+
fontSizeHeading3: 18,
|
|
81
|
+
fontSizeHeading4: 16,
|
|
82
|
+
fontSizeHeading5: 14,
|
|
83
|
+
wireframe: false,
|
|
84
|
+
// Depth is an interaction, not a default: nothing floats at rest.
|
|
85
|
+
boxShadow: dark
|
|
86
|
+
? '0 1px 2px rgba(0, 0, 0, 0.5), 0 8px 24px -12px rgba(0, 0, 0, 0.7)'
|
|
87
|
+
: '0 1px 2px rgba(24, 45, 54, 0.06), 0 12px 32px -16px rgba(24, 45, 54, 0.20)',
|
|
88
|
+
boxShadowSecondary: dark
|
|
89
|
+
? '0 6px 20px -8px rgba(0, 0, 0, 0.7)'
|
|
90
|
+
: '0 6px 20px -10px rgba(24, 45, 54, 0.16)',
|
|
91
|
+
motionDurationMid: `${index_js_1.dimensions.motion}ms`,
|
|
92
|
+
},
|
|
93
|
+
components: {
|
|
94
|
+
Layout: {
|
|
95
|
+
bodyBg: c.page,
|
|
96
|
+
siderBg: c.surface,
|
|
97
|
+
},
|
|
98
|
+
Menu: {
|
|
99
|
+
itemBg: 'transparent',
|
|
100
|
+
subMenuItemBg: 'transparent',
|
|
101
|
+
itemSelectedBg: `${c.primary}${dark ? '1F' : '14'}`,
|
|
102
|
+
itemSelectedColor: c.primary,
|
|
103
|
+
itemHoverBg: dark ? 'rgba(231, 239, 242, 0.05)' : 'rgba(36, 50, 59, 0.04)',
|
|
104
|
+
itemHeight: index_js_1.dimensions.control,
|
|
105
|
+
itemMarginInline: 8,
|
|
106
|
+
itemBorderRadius: 6,
|
|
107
|
+
iconSize: 16,
|
|
108
|
+
},
|
|
109
|
+
Card: {
|
|
110
|
+
colorBorderSecondary: c.border,
|
|
111
|
+
bodyPadding: 20,
|
|
112
|
+
headerHeight: 48,
|
|
113
|
+
headerFontSize: 16,
|
|
114
|
+
},
|
|
115
|
+
Table: {
|
|
116
|
+
headerBg: c.page,
|
|
117
|
+
headerColor: c.textSecondary,
|
|
118
|
+
borderColor: c.border,
|
|
119
|
+
cellPaddingBlock: 12,
|
|
120
|
+
cellPaddingInline: 16,
|
|
121
|
+
cellPaddingBlockSM: 10,
|
|
122
|
+
cellPaddingInlineSM: 12,
|
|
123
|
+
rowHoverBg: `${c.primary}09`,
|
|
124
|
+
},
|
|
125
|
+
Tag: { borderRadiusSM: 4, defaultBg: c.page },
|
|
126
|
+
Button: {
|
|
127
|
+
fontWeight: 500,
|
|
128
|
+
primaryShadow: 'none',
|
|
129
|
+
defaultShadow: 'none',
|
|
130
|
+
dangerShadow: 'none',
|
|
131
|
+
primaryColor: dark ? c.page : c.surface,
|
|
132
|
+
dangerColor: dark ? c.page : c.surface,
|
|
133
|
+
},
|
|
134
|
+
Input: {
|
|
135
|
+
activeShadow: `0 0 0 3px ${c.primary}26`,
|
|
136
|
+
},
|
|
137
|
+
Statistic: { contentFontSize: 26 },
|
|
138
|
+
Segmented: { itemSelectedBg: c.surfaceRaised },
|
|
139
|
+
Tooltip: {
|
|
140
|
+
colorBgSpotlight: dark ? c.surfaceRaised : c.text,
|
|
141
|
+
colorTextLightSolid: dark ? c.text : c.surface,
|
|
142
|
+
},
|
|
143
|
+
Form: { itemMarginBottom: 20, verticalLabelPadding: '0 0 6px', labelColor: c.text },
|
|
144
|
+
Descriptions: { labelColor: c.textSecondary },
|
|
145
|
+
Tabs: { horizontalItemPadding: '12px 0', horizontalItemGutter: 24, titleFontSize: 14 },
|
|
146
|
+
Modal: { borderRadiusLG: 12, titleFontSize: 18 },
|
|
147
|
+
Drawer: { footerPaddingBlock: 16, footerPaddingInline: 20 },
|
|
148
|
+
DatePicker: { cellWidth: 32, cellHeight: 32 },
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=antd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antd.js","sourceRoot":"","sources":["../../src/antd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FONT_MONO = exports.FONT_SANS = exports.dimensions = exports.paletteFor = void 0;
|
|
4
|
+
var palette_js_1 = require("./palette.js");
|
|
5
|
+
Object.defineProperty(exports, "paletteFor", { enumerable: true, get: function () { return palette_js_1.paletteFor; } });
|
|
6
|
+
exports.dimensions = {
|
|
7
|
+
sidebar: 240,
|
|
8
|
+
sidebarCollapsed: 64,
|
|
9
|
+
navigationDrawer: 280,
|
|
10
|
+
formDialog: 640,
|
|
11
|
+
gutter: 24,
|
|
12
|
+
gutterTablet: 16,
|
|
13
|
+
gutterPhone: 12,
|
|
14
|
+
pageTitle: 24,
|
|
15
|
+
pageTitlePhone: 20,
|
|
16
|
+
control: 40,
|
|
17
|
+
controlSmall: 32,
|
|
18
|
+
touchTarget: 44,
|
|
19
|
+
motion: 140,
|
|
20
|
+
};
|
|
21
|
+
exports.FONT_SANS = 'var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif)';
|
|
22
|
+
exports.FONT_MONO = 'var(--font-mono, ui-monospace, monospace)';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAAqE;AAA5D,wGAAA,UAAU,OAAA;AACN,QAAA,UAAU,GAAG;IACxB,OAAO,EAAE,GAAG;IACZ,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,GAAG;IACrB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,GAAG;CACH,CAAC;AAEE,QAAA,SAAS,GACpB,6EAA6E,CAAC;AACnE,QAAA,SAAS,GAAG,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serverSnapshot = void 0;
|
|
4
|
+
exports.mediaStore = mediaStore;
|
|
5
|
+
function mediaStore(query) {
|
|
6
|
+
return {
|
|
7
|
+
subscribe(listener) {
|
|
8
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function')
|
|
9
|
+
return () => { };
|
|
10
|
+
const media = window.matchMedia(query);
|
|
11
|
+
media.addEventListener('change', listener);
|
|
12
|
+
return () => media.removeEventListener('change', listener);
|
|
13
|
+
},
|
|
14
|
+
snapshot() {
|
|
15
|
+
return typeof window !== 'undefined' && typeof window.matchMedia === 'function'
|
|
16
|
+
? window.matchMedia(query).matches
|
|
17
|
+
: false;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const serverSnapshot = () => false;
|
|
22
|
+
exports.serverSnapshot = serverSnapshot;
|
|
23
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/media.ts"],"names":[],"mappings":";;;AAAA,gCAcC;AAdD,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO;QACL,SAAS,CAAa,QAAoB;YACxC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,QAAQ;YACN,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;gBAC7E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO;gBAClC,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC;AAEM,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;AAA7B,QAAA,cAAc,kBAAe"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AppBrand = AppBrand;
|
|
5
|
+
exports.NavigationFrame = NavigationFrame;
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const antd_1 = require("antd");
|
|
9
|
+
const index_js_1 = require("./index.js");
|
|
10
|
+
const media_js_1 = require("./media.js");
|
|
11
|
+
const phone = (0, media_js_1.mediaStore)('(max-width: 767px)');
|
|
12
|
+
const tablet = (0, media_js_1.mediaStore)('(max-width: 1023px)');
|
|
13
|
+
function AppBrand({ name, mark }) {
|
|
14
|
+
return ((0, jsx_runtime_1.jsxs)("span", { className: "jui-brand", children: [(0, jsx_runtime_1.jsx)("span", { className: "jui-brand-mark", "aria-hidden": "true", children: mark }), (0, jsx_runtime_1.jsx)("span", { className: "jui-brand-name", children: name })] }));
|
|
15
|
+
}
|
|
16
|
+
function NavigationIcon({ kind }) {
|
|
17
|
+
const path = {
|
|
18
|
+
open: 'M3 5h18M3 12h18M3 19h18',
|
|
19
|
+
close: 'm6 6 12 12M6 18 18 6',
|
|
20
|
+
collapse: 'm14 6-6 6 6 6',
|
|
21
|
+
expand: 'm10 6 6 6-6 6',
|
|
22
|
+
}[kind];
|
|
23
|
+
return ((0, jsx_runtime_1.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: path }) }));
|
|
24
|
+
}
|
|
25
|
+
/** Shared navigation mechanics; menus, user controls and routes remain in the applications. */
|
|
26
|
+
function NavigationFrame({ brand, pathname, navigation, children, mobileActions, labels, }) {
|
|
27
|
+
const mobile = (0, react_1.useSyncExternalStore)(phone.subscribe, phone.snapshot, media_js_1.serverSnapshot);
|
|
28
|
+
const narrow = (0, react_1.useSyncExternalStore)(tablet.subscribe, tablet.snapshot, media_js_1.serverSnapshot);
|
|
29
|
+
const [preference, setPreference] = (0, react_1.useState)(null);
|
|
30
|
+
const collapsed = preference ?? narrow;
|
|
31
|
+
const [openedAt, setOpenedAt] = (0, react_1.useState)(null);
|
|
32
|
+
const open = mobile && openedAt === pathname;
|
|
33
|
+
if (openedAt !== null && (openedAt !== pathname || !mobile))
|
|
34
|
+
setOpenedAt(null);
|
|
35
|
+
const id = (0, react_1.useId)();
|
|
36
|
+
const { token } = antd_1.theme.useToken();
|
|
37
|
+
const close = () => setOpenedAt(null);
|
|
38
|
+
const content = (compact) => ((0, jsx_runtime_1.jsxs)("nav", { id: id, "aria-label": labels.navigation, className: "jui-navigation", "data-collapsed": compact, onClick: (event) => {
|
|
39
|
+
if (event.target instanceof Element && event.target.closest('a[href]'))
|
|
40
|
+
close();
|
|
41
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { className: "jui-navigation-brand", children: [brand, mobile && ((0, jsx_runtime_1.jsx)(antd_1.Button, { type: "text", "aria-label": labels.close, onClick: close, icon: (0, jsx_runtime_1.jsx)(NavigationIcon, { kind: "close" }) }))] }), (0, jsx_runtime_1.jsx)("div", { className: "jui-navigation-body", children: navigation(compact) }), !mobile && ((0, jsx_runtime_1.jsx)(antd_1.Button, { type: "text", className: "jui-navigation-toggle", "aria-label": compact ? labels.expand : labels.collapse, "aria-expanded": !compact, "aria-controls": id, onClick: () => setPreference(!compact), icon: (0, jsx_runtime_1.jsx)(NavigationIcon, { kind: compact ? 'expand' : 'collapse' }) }))] }));
|
|
42
|
+
return ((0, jsx_runtime_1.jsxs)(antd_1.Layout, { className: "jui-shell", children: [mobile ? ((0, jsx_runtime_1.jsx)(antd_1.Drawer, { className: "jui-navigation-drawer", placement: "left", size: index_js_1.dimensions.navigationDrawer, open: open, onClose: close, closable: false, title: null, destroyOnHidden: true, "aria-label": labels.navigation, styles: { body: { padding: 0 } }, children: content(false) })) : ((0, jsx_runtime_1.jsx)(antd_1.Layout.Sider, { className: "jui-sidebar", width: index_js_1.dimensions.sidebar, collapsedWidth: index_js_1.dimensions.sidebarCollapsed, collapsed: collapsed, trigger: null, style: {
|
|
43
|
+
position: 'sticky',
|
|
44
|
+
top: 0,
|
|
45
|
+
height: '100dvh',
|
|
46
|
+
background: token.colorBgContainer,
|
|
47
|
+
borderInlineEnd: `1px solid ${token.colorBorderSecondary}`,
|
|
48
|
+
}, children: content(collapsed) })), (0, jsx_runtime_1.jsxs)(antd_1.Layout, { className: "jui-shell-main", children: [mobile && ((0, jsx_runtime_1.jsxs)("div", { className: "jui-mobile-bar", children: [(0, jsx_runtime_1.jsx)(antd_1.Button, { type: "text", "aria-label": labels.open, "aria-expanded": open, "aria-controls": id, onClick: () => setOpenedAt(pathname), icon: (0, jsx_runtime_1.jsx)(NavigationIcon, { kind: "open" }) }), brand, mobileActions] })), children] })] }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/navigation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.paletteFor = paletteFor;
|
|
4
|
+
const LIGHT = {
|
|
5
|
+
page: '#F5F7F8',
|
|
6
|
+
surface: '#FFFFFF',
|
|
7
|
+
surfaceRaised: '#FFFFFF',
|
|
8
|
+
border: '#DEE5E8',
|
|
9
|
+
borderStrong: '#BCC9CF',
|
|
10
|
+
text: '#24323B',
|
|
11
|
+
textSecondary: '#5F7079',
|
|
12
|
+
primary: '#247463',
|
|
13
|
+
primaryHover: '#1E6657',
|
|
14
|
+
primaryActive: '#195A4D',
|
|
15
|
+
accent: '#936719',
|
|
16
|
+
success: '#34764A',
|
|
17
|
+
warning: '#936719',
|
|
18
|
+
error: '#B43F4D',
|
|
19
|
+
info: '#247463',
|
|
20
|
+
};
|
|
21
|
+
const DARK = {
|
|
22
|
+
page: '#121A1E',
|
|
23
|
+
surface: '#1A252B',
|
|
24
|
+
surfaceRaised: '#223139',
|
|
25
|
+
border: '#30434B',
|
|
26
|
+
borderStrong: '#58707B',
|
|
27
|
+
text: '#E7EFF2',
|
|
28
|
+
textSecondary: '#A2B3BA',
|
|
29
|
+
primary: '#73C4AF',
|
|
30
|
+
primaryHover: '#94D7C5',
|
|
31
|
+
primaryActive: '#56A68F',
|
|
32
|
+
accent: '#E0B56C',
|
|
33
|
+
success: '#88C89E',
|
|
34
|
+
warning: '#E0B56C',
|
|
35
|
+
error: '#FF9C9C',
|
|
36
|
+
info: '#73C4AF',
|
|
37
|
+
};
|
|
38
|
+
function paletteFor(dark, accent = 'green') {
|
|
39
|
+
const neutral = dark ? DARK : LIGHT;
|
|
40
|
+
if (accent === 'green')
|
|
41
|
+
return { ...neutral };
|
|
42
|
+
return {
|
|
43
|
+
...neutral,
|
|
44
|
+
primary: dark ? '#82ADFF' : '#245FC8',
|
|
45
|
+
primaryHover: dark ? '#ADCAFF' : '#1D54B5',
|
|
46
|
+
primaryActive: dark ? '#6A98EC' : '#164DA9',
|
|
47
|
+
info: dark ? '#82ADFF' : '#245FC8',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/palette.ts"],"names":[],"mappings":";;AAwDA,gCAUC;AAhDD,MAAM,KAAK,GAAY;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,IAAI,GAAY;IACpB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;CAChB,CAAC;AAIF,SAAgB,UAAU,CAAC,IAAa,EAAE,SAAiB,OAAO;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9C,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACrC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC1C,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC3C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NavigationFrame = exports.AppBrand = void 0;
|
|
5
|
+
exports.PageHeader = PageHeader;
|
|
6
|
+
exports.useSystemAppearance = useSystemAppearance;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const media_js_1 = require("./media.js");
|
|
10
|
+
var navigation_js_1 = require("./navigation.js");
|
|
11
|
+
Object.defineProperty(exports, "AppBrand", { enumerable: true, get: function () { return navigation_js_1.AppBrand; } });
|
|
12
|
+
Object.defineProperty(exports, "NavigationFrame", { enumerable: true, get: function () { return navigation_js_1.NavigationFrame; } });
|
|
13
|
+
/** Routing, translation and authorisation belong to the host application. */
|
|
14
|
+
function PageHeader({ title, description, back, actions, meta, className, }) {
|
|
15
|
+
return ((0, jsx_runtime_1.jsxs)("header", { className: `jui-page-header${className ? ` ${className}` : ''}`, children: [back != null && (0, jsx_runtime_1.jsx)("div", { className: "jui-page-back", children: back }), (0, jsx_runtime_1.jsxs)("div", { className: "jui-page-heading", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jui-page-copy", children: [(0, jsx_runtime_1.jsx)("h1", { className: "jui-page-title", children: title }), description != null && (0, jsx_runtime_1.jsx)("div", { className: "jui-page-description", children: description }), meta != null && (0, jsx_runtime_1.jsx)("div", { className: "jui-page-meta", children: meta })] }), actions != null && (0, jsx_runtime_1.jsx)("div", { className: "jui-page-actions", children: actions })] })] }));
|
|
16
|
+
}
|
|
17
|
+
const colorScheme = (0, media_js_1.mediaStore)('(prefers-color-scheme: dark)');
|
|
18
|
+
const motion = (0, media_js_1.mediaStore)('(prefers-reduced-motion: reduce)');
|
|
19
|
+
/** SSR starts in light mode; hydration and later OS changes use the live preference. */
|
|
20
|
+
function useSystemAppearance() {
|
|
21
|
+
const dark = (0, react_1.useSyncExternalStore)(colorScheme.subscribe, colorScheme.snapshot, media_js_1.serverSnapshot);
|
|
22
|
+
const reducedMotion = (0, react_1.useSyncExternalStore)(motion.subscribe, motion.snapshot, media_js_1.serverSnapshot);
|
|
23
|
+
return { dark, reducedMotion };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/react.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAgBb,gCAqBC;AAMD,kDAIC;;AA7CD,iCAA6D;AAC7D,yCAAwD;AACxD,iDAAuF;AAA9E,yGAAA,QAAQ,OAAA;AAAE,gHAAA,eAAe,OAAA;AAWlC,6EAA6E;AAC7E,SAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,GACO;IAChB,OAAO,CACL,oCAAQ,SAAS,EAAE,kBAAkB,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,aACpE,IAAI,IAAI,IAAI,IAAI,gCAAK,SAAS,EAAC,eAAe,YAAE,IAAI,GAAO,EAC5D,iCAAK,SAAS,EAAC,kBAAkB,aAC/B,iCAAK,SAAS,EAAC,eAAe,aAC5B,+BAAI,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAM,EAC1C,WAAW,IAAI,IAAI,IAAI,gCAAK,SAAS,EAAC,sBAAsB,YAAE,WAAW,GAAO,EAChF,IAAI,IAAI,IAAI,IAAI,gCAAK,SAAS,EAAC,eAAe,YAAE,IAAI,GAAO,IACxD,EACL,OAAO,IAAI,IAAI,IAAI,gCAAK,SAAS,EAAC,kBAAkB,YAAE,OAAO,GAAO,IACjE,IACC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,IAAA,qBAAU,EAAC,8BAA8B,CAAC,CAAC;AAC/D,MAAM,MAAM,GAAG,IAAA,qBAAU,EAAC,kCAAkC,CAAC,CAAC;AAE9D,wFAAwF;AACxF,SAAgB,mBAAmB;IACjC,MAAM,IAAI,GAAG,IAAA,4BAAoB,EAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,yBAAc,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,IAAA,4BAAoB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,yBAAc,CAAC,CAAC;IAC9F,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/esm/antd.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { theme as antdTheme } from 'antd';
|
|
2
|
+
import { paletteFor } from './palette.js';
|
|
3
|
+
import { dimensions, FONT_SANS, FONT_MONO } from './index.js';
|
|
4
|
+
export function createAppTheme({ dark, accent, reducedMotion = false, }) {
|
|
5
|
+
const c = paletteFor(dark, accent);
|
|
6
|
+
return {
|
|
7
|
+
algorithm: dark ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
|
|
8
|
+
cssVar: { prefix: 'ant' },
|
|
9
|
+
token: {
|
|
10
|
+
colorPrimary: c.primary,
|
|
11
|
+
colorPrimaryHover: c.primaryHover,
|
|
12
|
+
colorPrimaryActive: c.primaryActive,
|
|
13
|
+
colorPrimaryText: c.primary,
|
|
14
|
+
colorPrimaryTextHover: c.primaryHover,
|
|
15
|
+
colorPrimaryTextActive: c.primaryActive,
|
|
16
|
+
colorLink: c.primary,
|
|
17
|
+
colorLinkHover: c.primaryHover,
|
|
18
|
+
colorLinkActive: c.primaryActive,
|
|
19
|
+
colorInfo: c.info,
|
|
20
|
+
colorSuccess: c.success,
|
|
21
|
+
colorWarning: c.warning,
|
|
22
|
+
colorError: c.error,
|
|
23
|
+
colorErrorText: c.error,
|
|
24
|
+
colorErrorHover: dark ? '#F2ABB0' : '#9F3240',
|
|
25
|
+
colorErrorActive: dark ? '#DA7F87' : '#852936',
|
|
26
|
+
colorErrorTextHover: dark ? '#F2ABB0' : '#9F3240',
|
|
27
|
+
colorErrorTextActive: dark ? '#DA7F87' : '#852936',
|
|
28
|
+
colorSuccessText: c.success,
|
|
29
|
+
colorWarningText: c.warning,
|
|
30
|
+
colorInfoText: c.info,
|
|
31
|
+
colorBgBase: dark ? c.page : c.surface,
|
|
32
|
+
colorFillAlter: dark ? c.surfaceRaised : c.page,
|
|
33
|
+
motion: !reducedMotion,
|
|
34
|
+
// The default palette generator makes pale surfaces muddy when the seed is a dark,
|
|
35
|
+
// accessible accent. Keep light feedback surfaces quiet and their text readable.
|
|
36
|
+
...(!dark && {
|
|
37
|
+
colorPrimaryBg: accent === 'green' ? '#EAF4F0' : '#ECF2FD',
|
|
38
|
+
colorPrimaryBgHover: accent === 'green' ? '#DCEEE6' : '#DCE7FA',
|
|
39
|
+
colorPrimaryBorder: accent === 'green' ? '#AFCFC4' : '#B5C9EF',
|
|
40
|
+
colorPrimaryBorderHover: accent === 'green' ? '#87B8A8' : '#86A7E0',
|
|
41
|
+
colorInfoBg: accent === 'green' ? '#F2F9F6' : '#F2F6FD',
|
|
42
|
+
colorInfoBgHover: accent === 'green' ? '#E3F1EB' : '#E3EBFA',
|
|
43
|
+
colorInfoBorder: accent === 'green' ? '#B7D8CD' : '#B5C9EF',
|
|
44
|
+
colorSuccessBg: '#F1F9F3',
|
|
45
|
+
colorSuccessBgHover: '#E0EFE4',
|
|
46
|
+
colorSuccessBorder: '#BFDDC7',
|
|
47
|
+
colorWarningBg: '#FCF8EE',
|
|
48
|
+
colorWarningBgHover: '#F7EDD4',
|
|
49
|
+
colorWarningBorder: '#E7D6AE',
|
|
50
|
+
colorErrorBg: '#FDF5F6',
|
|
51
|
+
colorErrorBgHover: '#F6E1E5',
|
|
52
|
+
colorErrorBorder: '#ECC5CC',
|
|
53
|
+
}),
|
|
54
|
+
colorBgLayout: c.page,
|
|
55
|
+
colorBgContainer: c.surface,
|
|
56
|
+
colorBgElevated: c.surfaceRaised,
|
|
57
|
+
colorBorder: c.borderStrong,
|
|
58
|
+
colorBorderSecondary: c.border,
|
|
59
|
+
colorText: c.text,
|
|
60
|
+
colorTextSecondary: c.textSecondary,
|
|
61
|
+
colorTextDescription: c.textSecondary,
|
|
62
|
+
colorTextDisabled: c.textSecondary,
|
|
63
|
+
colorTextPlaceholder: c.textSecondary,
|
|
64
|
+
fontFamily: FONT_SANS,
|
|
65
|
+
fontFamilyCode: FONT_MONO,
|
|
66
|
+
fontSize: 14,
|
|
67
|
+
lineHeight: 1.5,
|
|
68
|
+
borderRadius: 6,
|
|
69
|
+
borderRadiusLG: 8,
|
|
70
|
+
borderRadiusSM: 4,
|
|
71
|
+
controlHeight: dimensions.control,
|
|
72
|
+
controlHeightSM: dimensions.controlSmall,
|
|
73
|
+
controlHeightLG: dimensions.touchTarget,
|
|
74
|
+
colorTextLightSolid: dark ? c.page : c.surface,
|
|
75
|
+
fontSizeHeading1: dimensions.pageTitle,
|
|
76
|
+
fontSizeHeading2: 22,
|
|
77
|
+
fontSizeHeading3: 18,
|
|
78
|
+
fontSizeHeading4: 16,
|
|
79
|
+
fontSizeHeading5: 14,
|
|
80
|
+
wireframe: false,
|
|
81
|
+
// Depth is an interaction, not a default: nothing floats at rest.
|
|
82
|
+
boxShadow: dark
|
|
83
|
+
? '0 1px 2px rgba(0, 0, 0, 0.5), 0 8px 24px -12px rgba(0, 0, 0, 0.7)'
|
|
84
|
+
: '0 1px 2px rgba(24, 45, 54, 0.06), 0 12px 32px -16px rgba(24, 45, 54, 0.20)',
|
|
85
|
+
boxShadowSecondary: dark
|
|
86
|
+
? '0 6px 20px -8px rgba(0, 0, 0, 0.7)'
|
|
87
|
+
: '0 6px 20px -10px rgba(24, 45, 54, 0.16)',
|
|
88
|
+
motionDurationMid: `${dimensions.motion}ms`,
|
|
89
|
+
},
|
|
90
|
+
components: {
|
|
91
|
+
Layout: {
|
|
92
|
+
bodyBg: c.page,
|
|
93
|
+
siderBg: c.surface,
|
|
94
|
+
},
|
|
95
|
+
Menu: {
|
|
96
|
+
itemBg: 'transparent',
|
|
97
|
+
subMenuItemBg: 'transparent',
|
|
98
|
+
itemSelectedBg: `${c.primary}${dark ? '1F' : '14'}`,
|
|
99
|
+
itemSelectedColor: c.primary,
|
|
100
|
+
itemHoverBg: dark ? 'rgba(231, 239, 242, 0.05)' : 'rgba(36, 50, 59, 0.04)',
|
|
101
|
+
itemHeight: dimensions.control,
|
|
102
|
+
itemMarginInline: 8,
|
|
103
|
+
itemBorderRadius: 6,
|
|
104
|
+
iconSize: 16,
|
|
105
|
+
},
|
|
106
|
+
Card: {
|
|
107
|
+
colorBorderSecondary: c.border,
|
|
108
|
+
bodyPadding: 20,
|
|
109
|
+
headerHeight: 48,
|
|
110
|
+
headerFontSize: 16,
|
|
111
|
+
},
|
|
112
|
+
Table: {
|
|
113
|
+
headerBg: c.page,
|
|
114
|
+
headerColor: c.textSecondary,
|
|
115
|
+
borderColor: c.border,
|
|
116
|
+
cellPaddingBlock: 12,
|
|
117
|
+
cellPaddingInline: 16,
|
|
118
|
+
cellPaddingBlockSM: 10,
|
|
119
|
+
cellPaddingInlineSM: 12,
|
|
120
|
+
rowHoverBg: `${c.primary}09`,
|
|
121
|
+
},
|
|
122
|
+
Tag: { borderRadiusSM: 4, defaultBg: c.page },
|
|
123
|
+
Button: {
|
|
124
|
+
fontWeight: 500,
|
|
125
|
+
primaryShadow: 'none',
|
|
126
|
+
defaultShadow: 'none',
|
|
127
|
+
dangerShadow: 'none',
|
|
128
|
+
primaryColor: dark ? c.page : c.surface,
|
|
129
|
+
dangerColor: dark ? c.page : c.surface,
|
|
130
|
+
},
|
|
131
|
+
Input: {
|
|
132
|
+
activeShadow: `0 0 0 3px ${c.primary}26`,
|
|
133
|
+
},
|
|
134
|
+
Statistic: { contentFontSize: 26 },
|
|
135
|
+
Segmented: { itemSelectedBg: c.surfaceRaised },
|
|
136
|
+
Tooltip: {
|
|
137
|
+
colorBgSpotlight: dark ? c.surfaceRaised : c.text,
|
|
138
|
+
colorTextLightSolid: dark ? c.text : c.surface,
|
|
139
|
+
},
|
|
140
|
+
Form: { itemMarginBottom: 20, verticalLabelPadding: '0 0 6px', labelColor: c.text },
|
|
141
|
+
Descriptions: { labelColor: c.textSecondary },
|
|
142
|
+
Tabs: { horizontalItemPadding: '12px 0', horizontalItemGutter: 24, titleFontSize: 14 },
|
|
143
|
+
Modal: { borderRadiusLG: 12, titleFontSize: 18 },
|
|
144
|
+
Drawer: { footerPaddingBlock: 16, footerPaddingInline: 20 },
|
|
145
|
+
DatePicker: { cellWidth: 32, cellHeight: 32 },
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=antd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antd.js","sourceRoot":"","sources":["../../src/antd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { paletteFor } from './palette.js';
|
|
2
|
+
export const dimensions = {
|
|
3
|
+
sidebar: 240,
|
|
4
|
+
sidebarCollapsed: 64,
|
|
5
|
+
navigationDrawer: 280,
|
|
6
|
+
formDialog: 640,
|
|
7
|
+
gutter: 24,
|
|
8
|
+
gutterTablet: 16,
|
|
9
|
+
gutterPhone: 12,
|
|
10
|
+
pageTitle: 24,
|
|
11
|
+
pageTitlePhone: 20,
|
|
12
|
+
control: 40,
|
|
13
|
+
controlSmall: 32,
|
|
14
|
+
touchTarget: 44,
|
|
15
|
+
motion: 140,
|
|
16
|
+
};
|
|
17
|
+
export const FONT_SANS = 'var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif)';
|
|
18
|
+
export const FONT_MONO = 'var(--font-mono, ui-monospace, monospace)';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA6B,MAAM,cAAc,CAAC;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,GAAG;IACZ,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,GAAG;IACrB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,GAAG;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GACpB,6EAA6E,CAAC;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function mediaStore(query) {
|
|
2
|
+
return {
|
|
3
|
+
subscribe(listener) {
|
|
4
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function')
|
|
5
|
+
return () => { };
|
|
6
|
+
const media = window.matchMedia(query);
|
|
7
|
+
media.addEventListener('change', listener);
|
|
8
|
+
return () => media.removeEventListener('change', listener);
|
|
9
|
+
},
|
|
10
|
+
snapshot() {
|
|
11
|
+
return typeof window !== 'undefined' && typeof window.matchMedia === 'function'
|
|
12
|
+
? window.matchMedia(query).matches
|
|
13
|
+
: false;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export const serverSnapshot = () => false;
|
|
18
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/media.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO;QACL,SAAS,CAAa,QAAoB;YACxC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,QAAQ;YACN,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;gBAC7E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO;gBAClC,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useState, useSyncExternalStore } from 'react';
|
|
4
|
+
import { Button, Drawer, Layout, theme } from 'antd';
|
|
5
|
+
import { dimensions } from './index.js';
|
|
6
|
+
import { mediaStore, serverSnapshot } from './media.js';
|
|
7
|
+
const phone = mediaStore('(max-width: 767px)');
|
|
8
|
+
const tablet = mediaStore('(max-width: 1023px)');
|
|
9
|
+
export function AppBrand({ name, mark }) {
|
|
10
|
+
return (_jsxs("span", { className: "jui-brand", children: [_jsx("span", { className: "jui-brand-mark", "aria-hidden": "true", children: mark }), _jsx("span", { className: "jui-brand-name", children: name })] }));
|
|
11
|
+
}
|
|
12
|
+
function NavigationIcon({ kind }) {
|
|
13
|
+
const path = {
|
|
14
|
+
open: 'M3 5h18M3 12h18M3 19h18',
|
|
15
|
+
close: 'm6 6 12 12M6 18 18 6',
|
|
16
|
+
collapse: 'm14 6-6 6 6 6',
|
|
17
|
+
expand: 'm10 6 6 6-6 6',
|
|
18
|
+
}[kind];
|
|
19
|
+
return (_jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: path }) }));
|
|
20
|
+
}
|
|
21
|
+
/** Shared navigation mechanics; menus, user controls and routes remain in the applications. */
|
|
22
|
+
export function NavigationFrame({ brand, pathname, navigation, children, mobileActions, labels, }) {
|
|
23
|
+
const mobile = useSyncExternalStore(phone.subscribe, phone.snapshot, serverSnapshot);
|
|
24
|
+
const narrow = useSyncExternalStore(tablet.subscribe, tablet.snapshot, serverSnapshot);
|
|
25
|
+
const [preference, setPreference] = useState(null);
|
|
26
|
+
const collapsed = preference ?? narrow;
|
|
27
|
+
const [openedAt, setOpenedAt] = useState(null);
|
|
28
|
+
const open = mobile && openedAt === pathname;
|
|
29
|
+
if (openedAt !== null && (openedAt !== pathname || !mobile))
|
|
30
|
+
setOpenedAt(null);
|
|
31
|
+
const id = useId();
|
|
32
|
+
const { token } = theme.useToken();
|
|
33
|
+
const close = () => setOpenedAt(null);
|
|
34
|
+
const content = (compact) => (_jsxs("nav", { id: id, "aria-label": labels.navigation, className: "jui-navigation", "data-collapsed": compact, onClick: (event) => {
|
|
35
|
+
if (event.target instanceof Element && event.target.closest('a[href]'))
|
|
36
|
+
close();
|
|
37
|
+
}, children: [_jsxs("div", { className: "jui-navigation-brand", children: [brand, mobile && (_jsx(Button, { type: "text", "aria-label": labels.close, onClick: close, icon: _jsx(NavigationIcon, { kind: "close" }) }))] }), _jsx("div", { className: "jui-navigation-body", children: navigation(compact) }), !mobile && (_jsx(Button, { type: "text", className: "jui-navigation-toggle", "aria-label": compact ? labels.expand : labels.collapse, "aria-expanded": !compact, "aria-controls": id, onClick: () => setPreference(!compact), icon: _jsx(NavigationIcon, { kind: compact ? 'expand' : 'collapse' }) }))] }));
|
|
38
|
+
return (_jsxs(Layout, { className: "jui-shell", children: [mobile ? (_jsx(Drawer, { className: "jui-navigation-drawer", placement: "left", size: dimensions.navigationDrawer, open: open, onClose: close, closable: false, title: null, destroyOnHidden: true, "aria-label": labels.navigation, styles: { body: { padding: 0 } }, children: content(false) })) : (_jsx(Layout.Sider, { className: "jui-sidebar", width: dimensions.sidebar, collapsedWidth: dimensions.sidebarCollapsed, collapsed: collapsed, trigger: null, style: {
|
|
39
|
+
position: 'sticky',
|
|
40
|
+
top: 0,
|
|
41
|
+
height: '100dvh',
|
|
42
|
+
background: token.colorBgContainer,
|
|
43
|
+
borderInlineEnd: `1px solid ${token.colorBorderSecondary}`,
|
|
44
|
+
}, children: content(collapsed) })), _jsxs(Layout, { className: "jui-shell-main", children: [mobile && (_jsxs("div", { className: "jui-mobile-bar", children: [_jsx(Button, { type: "text", "aria-label": labels.open, "aria-expanded": open, "aria-controls": id, onClick: () => setOpenedAt(pathname), icon: _jsx(NavigationIcon, { kind: "open" }) }), brand, mobileActions] })), children] })] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/navigation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const LIGHT = {
|
|
2
|
+
page: '#F5F7F8',
|
|
3
|
+
surface: '#FFFFFF',
|
|
4
|
+
surfaceRaised: '#FFFFFF',
|
|
5
|
+
border: '#DEE5E8',
|
|
6
|
+
borderStrong: '#BCC9CF',
|
|
7
|
+
text: '#24323B',
|
|
8
|
+
textSecondary: '#5F7079',
|
|
9
|
+
primary: '#247463',
|
|
10
|
+
primaryHover: '#1E6657',
|
|
11
|
+
primaryActive: '#195A4D',
|
|
12
|
+
accent: '#936719',
|
|
13
|
+
success: '#34764A',
|
|
14
|
+
warning: '#936719',
|
|
15
|
+
error: '#B43F4D',
|
|
16
|
+
info: '#247463',
|
|
17
|
+
};
|
|
18
|
+
const DARK = {
|
|
19
|
+
page: '#121A1E',
|
|
20
|
+
surface: '#1A252B',
|
|
21
|
+
surfaceRaised: '#223139',
|
|
22
|
+
border: '#30434B',
|
|
23
|
+
borderStrong: '#58707B',
|
|
24
|
+
text: '#E7EFF2',
|
|
25
|
+
textSecondary: '#A2B3BA',
|
|
26
|
+
primary: '#73C4AF',
|
|
27
|
+
primaryHover: '#94D7C5',
|
|
28
|
+
primaryActive: '#56A68F',
|
|
29
|
+
accent: '#E0B56C',
|
|
30
|
+
success: '#88C89E',
|
|
31
|
+
warning: '#E0B56C',
|
|
32
|
+
error: '#FF9C9C',
|
|
33
|
+
info: '#73C4AF',
|
|
34
|
+
};
|
|
35
|
+
export function paletteFor(dark, accent = 'green') {
|
|
36
|
+
const neutral = dark ? DARK : LIGHT;
|
|
37
|
+
if (accent === 'green')
|
|
38
|
+
return { ...neutral };
|
|
39
|
+
return {
|
|
40
|
+
...neutral,
|
|
41
|
+
primary: dark ? '#82ADFF' : '#245FC8',
|
|
42
|
+
primaryHover: dark ? '#ADCAFF' : '#1D54B5',
|
|
43
|
+
primaryActive: dark ? '#6A98EC' : '#164DA9',
|
|
44
|
+
info: dark ? '#82ADFF' : '#245FC8',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/palette.ts"],"names":[],"mappings":"AAkBA,MAAM,KAAK,GAAY;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,IAAI,GAAY;IACpB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;CAChB,CAAC;AAIF,MAAM,UAAU,UAAU,CAAC,IAAa,EAAE,SAAiB,OAAO;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9C,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACrC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC1C,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC3C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useSyncExternalStore } from 'react';
|
|
4
|
+
import { mediaStore, serverSnapshot } from './media.js';
|
|
5
|
+
export { AppBrand, NavigationFrame } from './navigation.js';
|
|
6
|
+
/** Routing, translation and authorisation belong to the host application. */
|
|
7
|
+
export function PageHeader({ title, description, back, actions, meta, className, }) {
|
|
8
|
+
return (_jsxs("header", { className: `jui-page-header${className ? ` ${className}` : ''}`, children: [back != null && _jsx("div", { className: "jui-page-back", children: back }), _jsxs("div", { className: "jui-page-heading", children: [_jsxs("div", { className: "jui-page-copy", children: [_jsx("h1", { className: "jui-page-title", children: title }), description != null && _jsx("div", { className: "jui-page-description", children: description }), meta != null && _jsx("div", { className: "jui-page-meta", children: meta })] }), actions != null && _jsx("div", { className: "jui-page-actions", children: actions })] })] }));
|
|
9
|
+
}
|
|
10
|
+
const colorScheme = mediaStore('(prefers-color-scheme: dark)');
|
|
11
|
+
const motion = mediaStore('(prefers-reduced-motion: reduce)');
|
|
12
|
+
/** SSR starts in light mode; hydration and later OS changes use the live preference. */
|
|
13
|
+
export function useSystemAppearance() {
|
|
14
|
+
const dark = useSyncExternalStore(colorScheme.subscribe, colorScheme.snapshot, serverSnapshot);
|
|
15
|
+
const reducedMotion = useSyncExternalStore(motion.subscribe, motion.snapshot, serverSnapshot);
|
|
16
|
+
return { dark, reducedMotion };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/react.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,oBAAoB,EAAkB,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAA6B,MAAM,iBAAiB,CAAC;AAWvF,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,GACO;IAChB,OAAO,CACL,kBAAQ,SAAS,EAAE,kBAAkB,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,aACpE,IAAI,IAAI,IAAI,IAAI,cAAK,SAAS,EAAC,eAAe,YAAE,IAAI,GAAO,EAC5D,eAAK,SAAS,EAAC,kBAAkB,aAC/B,eAAK,SAAS,EAAC,eAAe,aAC5B,aAAI,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAM,EAC1C,WAAW,IAAI,IAAI,IAAI,cAAK,SAAS,EAAC,sBAAsB,YAAE,WAAW,GAAO,EAChF,IAAI,IAAI,IAAI,IAAI,cAAK,SAAS,EAAC,eAAe,YAAE,IAAI,GAAO,IACxD,EACL,OAAO,IAAI,IAAI,IAAI,cAAK,SAAS,EAAC,kBAAkB,YAAE,OAAO,GAAO,IACjE,IACC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,UAAU,CAAC,8BAA8B,CAAC,CAAC;AAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,kCAAkC,CAAC,CAAC;AAE9D,wFAAwF;AACxF,MAAM,UAAU,mBAAmB;IACjC,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC9F,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--jui-sidebar: 240px;
|
|
3
|
+
--jui-sidebar-collapsed: 64px;
|
|
4
|
+
--jui-navigation-drawer: 280px;
|
|
5
|
+
--jui-form-dialog: 640px;
|
|
6
|
+
--jui-gutter: 24px;
|
|
7
|
+
--jui-gutter-tablet: 16px;
|
|
8
|
+
--jui-gutter-phone: 12px;
|
|
9
|
+
--jui-page-title: 24px;
|
|
10
|
+
--jui-page-title-phone: 20px;
|
|
11
|
+
--jui-control: 40px;
|
|
12
|
+
--jui-control-small: 32px;
|
|
13
|
+
--jui-touch-target: 44px;
|
|
14
|
+
--jui-motion: 140ms;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Palette values come from ConfigProvider, including nested themes and overlays. */
|
|
18
|
+
.jui-page-header {
|
|
19
|
+
min-width: 0;
|
|
20
|
+
}
|
|
21
|
+
.jui-page-heading {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-wrap: wrap;
|
|
24
|
+
align-items: flex-start;
|
|
25
|
+
justify-content: space-between;
|
|
26
|
+
gap: 12px 24px;
|
|
27
|
+
}
|
|
28
|
+
.jui-page-copy {
|
|
29
|
+
min-width: 0;
|
|
30
|
+
flex: 1 1 200px;
|
|
31
|
+
}
|
|
32
|
+
.jui-page-title {
|
|
33
|
+
margin: 0;
|
|
34
|
+
font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
|
|
35
|
+
font-size: var(--jui-page-title);
|
|
36
|
+
font-weight: 600;
|
|
37
|
+
line-height: 1.3;
|
|
38
|
+
letter-spacing: -0.015em;
|
|
39
|
+
color: var(--ant-color-text);
|
|
40
|
+
overflow-wrap: anywhere;
|
|
41
|
+
}
|
|
42
|
+
.jui-page-description {
|
|
43
|
+
margin-top: 6px;
|
|
44
|
+
max-width: 72ch;
|
|
45
|
+
color: var(--ant-color-text-secondary);
|
|
46
|
+
}
|
|
47
|
+
.jui-page-meta {
|
|
48
|
+
margin-top: 12px;
|
|
49
|
+
}
|
|
50
|
+
.jui-page-back {
|
|
51
|
+
margin-bottom: 16px;
|
|
52
|
+
}
|
|
53
|
+
.jui-page-back a {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
gap: 8px;
|
|
57
|
+
min-height: 32px;
|
|
58
|
+
font-size: 13px;
|
|
59
|
+
}
|
|
60
|
+
.jui-page-actions {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-wrap: wrap;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 8px;
|
|
65
|
+
min-width: 0;
|
|
66
|
+
max-width: 100%;
|
|
67
|
+
}
|
|
68
|
+
.jui-page-actions > * {
|
|
69
|
+
max-width: 100%;
|
|
70
|
+
}
|
|
71
|
+
.jui-page-header :focus-visible {
|
|
72
|
+
outline: 2px solid var(--ant-color-primary);
|
|
73
|
+
outline-offset: 2px;
|
|
74
|
+
}
|
|
75
|
+
@media (max-width: 767.98px) {
|
|
76
|
+
.jui-page-title {
|
|
77
|
+
font-size: var(--jui-page-title-phone);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
@media (max-width: 479.98px) {
|
|
81
|
+
.jui-page-heading {
|
|
82
|
+
flex-direction: column;
|
|
83
|
+
}
|
|
84
|
+
.jui-page-copy {
|
|
85
|
+
flex-basis: auto;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
@media (pointer: coarse) {
|
|
89
|
+
.jui-page-actions .ant-btn,
|
|
90
|
+
.jui-page-back a {
|
|
91
|
+
min-height: var(--jui-touch-target);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* One navigation frame for both applications; only its content is product-specific. */
|
|
96
|
+
.jui-shell.ant-layout {
|
|
97
|
+
min-height: 100dvh;
|
|
98
|
+
flex-direction: row;
|
|
99
|
+
}
|
|
100
|
+
.jui-shell-main {
|
|
101
|
+
min-width: 0;
|
|
102
|
+
}
|
|
103
|
+
.jui-sidebar .ant-layout-sider-children,
|
|
104
|
+
.jui-navigation {
|
|
105
|
+
height: 100%;
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
}
|
|
110
|
+
.jui-navigation-body {
|
|
111
|
+
display: flex;
|
|
112
|
+
flex-direction: column;
|
|
113
|
+
flex: 1;
|
|
114
|
+
min-height: 0;
|
|
115
|
+
}
|
|
116
|
+
.jui-navigation-brand {
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
justify-content: space-between;
|
|
121
|
+
flex-shrink: 0;
|
|
122
|
+
min-height: 64px;
|
|
123
|
+
padding: 8px 16px;
|
|
124
|
+
margin-bottom: 8px;
|
|
125
|
+
border-bottom: 1px solid var(--ant-color-border-secondary);
|
|
126
|
+
}
|
|
127
|
+
.jui-navigation-brand > a,
|
|
128
|
+
.jui-mobile-bar > a {
|
|
129
|
+
display: flex;
|
|
130
|
+
align-items: center;
|
|
131
|
+
min-width: 0;
|
|
132
|
+
min-height: var(--jui-touch-target);
|
|
133
|
+
color: var(--ant-color-text);
|
|
134
|
+
text-decoration: none;
|
|
135
|
+
}
|
|
136
|
+
.jui-brand {
|
|
137
|
+
color: var(--ant-color-text);
|
|
138
|
+
display: inline-flex;
|
|
139
|
+
align-items: center;
|
|
140
|
+
gap: 10px;
|
|
141
|
+
min-width: 0;
|
|
142
|
+
font-size: 18px;
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
letter-spacing: -0.02em;
|
|
145
|
+
white-space: nowrap;
|
|
146
|
+
}
|
|
147
|
+
.jui-brand-mark {
|
|
148
|
+
display: flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
justify-content: center;
|
|
151
|
+
width: 28px;
|
|
152
|
+
height: 28px;
|
|
153
|
+
flex-shrink: 0;
|
|
154
|
+
}
|
|
155
|
+
.jui-brand-mark > svg {
|
|
156
|
+
width: 100%;
|
|
157
|
+
height: 100%;
|
|
158
|
+
}
|
|
159
|
+
.jui-navigation[data-collapsed='true'] .jui-brand-name {
|
|
160
|
+
display: none;
|
|
161
|
+
}
|
|
162
|
+
.jui-navigation[data-collapsed='true'] .jui-navigation-brand {
|
|
163
|
+
padding-inline: 0;
|
|
164
|
+
justify-content: center;
|
|
165
|
+
}
|
|
166
|
+
.jui-navigation[data-collapsed='true'] .jui-navigation-brand > a {
|
|
167
|
+
width: var(--jui-touch-target);
|
|
168
|
+
justify-content: center;
|
|
169
|
+
}
|
|
170
|
+
.jui-navigation > .jui-navigation-toggle.ant-btn {
|
|
171
|
+
flex-shrink: 0;
|
|
172
|
+
width: 100%;
|
|
173
|
+
height: var(--jui-touch-target);
|
|
174
|
+
margin-top: 8px;
|
|
175
|
+
border-radius: 0;
|
|
176
|
+
border-top: 1px solid var(--ant-color-border-secondary);
|
|
177
|
+
color: var(--ant-color-text-secondary);
|
|
178
|
+
}
|
|
179
|
+
.jui-mobile-bar {
|
|
180
|
+
box-sizing: border-box;
|
|
181
|
+
position: sticky;
|
|
182
|
+
top: 0;
|
|
183
|
+
z-index: 100;
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
gap: 8px;
|
|
187
|
+
min-height: 64px;
|
|
188
|
+
padding: 8px;
|
|
189
|
+
background: var(--ant-color-bg-container);
|
|
190
|
+
border-bottom: 1px solid var(--ant-color-border-secondary);
|
|
191
|
+
}
|
|
192
|
+
.jui-mobile-bar > a {
|
|
193
|
+
flex: 1;
|
|
194
|
+
}
|
|
195
|
+
.jui-mobile-bar .ant-btn.ant-btn-icon-only,
|
|
196
|
+
.jui-navigation-brand .ant-btn.ant-btn-icon-only {
|
|
197
|
+
flex-shrink: 0;
|
|
198
|
+
width: var(--jui-touch-target);
|
|
199
|
+
height: var(--jui-touch-target);
|
|
200
|
+
}
|
|
201
|
+
:is(.jui-navigation-brand, .jui-mobile-bar) a:focus-visible {
|
|
202
|
+
outline: 2px solid var(--ant-color-primary);
|
|
203
|
+
outline-offset: 2px;
|
|
204
|
+
border-radius: 4px;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.jui-navigation .ant-menu-root {
|
|
208
|
+
border-inline-end: 0;
|
|
209
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ThemeConfig } from 'antd';
|
|
2
|
+
import { type Accent } from './palette.js';
|
|
3
|
+
export declare function createAppTheme({ dark, accent, reducedMotion, }: {
|
|
4
|
+
dark: boolean;
|
|
5
|
+
accent: Accent;
|
|
6
|
+
reducedMotion?: boolean;
|
|
7
|
+
}): ThemeConfig;
|
|
8
|
+
//# sourceMappingURL=antd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antd.d.ts","sourceRoot":"","sources":["../../src/antd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,MAAM,EACN,aAAqB,GACtB,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,WAAW,CAuJd"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { paletteFor, type Palette, type Accent } from './palette.js';
|
|
2
|
+
export declare const dimensions: {
|
|
3
|
+
readonly sidebar: 240;
|
|
4
|
+
readonly sidebarCollapsed: 64;
|
|
5
|
+
readonly navigationDrawer: 280;
|
|
6
|
+
readonly formDialog: 640;
|
|
7
|
+
readonly gutter: 24;
|
|
8
|
+
readonly gutterTablet: 16;
|
|
9
|
+
readonly gutterPhone: 12;
|
|
10
|
+
readonly pageTitle: 24;
|
|
11
|
+
readonly pageTitlePhone: 20;
|
|
12
|
+
readonly control: 40;
|
|
13
|
+
readonly controlSmall: 32;
|
|
14
|
+
readonly touchTarget: 44;
|
|
15
|
+
readonly motion: 140;
|
|
16
|
+
};
|
|
17
|
+
export declare const FONT_SANS = "var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif)";
|
|
18
|
+
export declare const FONT_MONO = "var(--font-mono, ui-monospace, monospace)";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACrE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAcb,CAAC;AAEX,eAAO,MAAM,SAAS,kFACyD,CAAC;AAChF,eAAO,MAAM,SAAS,8CAA8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/media.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM;oBAEpB,IAAI,YAAY,MAAM,IAAI,GAAG,MAAM,IAAI;mBAMxC,IAAI,GAAG,OAAO;EAMhC;AAED,eAAO,MAAM,cAAc,eAAc,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export declare function AppBrand({ name, mark }: {
|
|
3
|
+
name: string;
|
|
4
|
+
mark: ReactNode;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
export interface NavigationFrameProps {
|
|
7
|
+
/** A host-owned home link containing AppBrand. */
|
|
8
|
+
brand: ReactNode;
|
|
9
|
+
pathname: string;
|
|
10
|
+
navigation: (collapsed: boolean) => ReactNode;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
mobileActions?: ReactNode;
|
|
13
|
+
labels: {
|
|
14
|
+
navigation: string;
|
|
15
|
+
open: string;
|
|
16
|
+
close: string;
|
|
17
|
+
collapse: string;
|
|
18
|
+
expand: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Shared navigation mechanics; menus, user controls and routes remain in the applications. */
|
|
22
|
+
export declare function NavigationFrame({ brand, pathname, navigation, children, mobileActions, labels, }: NavigationFrameProps): import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/navigation.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ9E,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,+BASzE;AA0BD,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC;IAC9C,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/F;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,MAAM,GACP,EAAE,oBAAoB,+BAsGtB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Palette = {
|
|
2
|
+
page: string;
|
|
3
|
+
surface: string;
|
|
4
|
+
surfaceRaised: string;
|
|
5
|
+
border: string;
|
|
6
|
+
borderStrong: string;
|
|
7
|
+
text: string;
|
|
8
|
+
textSecondary: string;
|
|
9
|
+
primary: string;
|
|
10
|
+
primaryHover: string;
|
|
11
|
+
primaryActive: string;
|
|
12
|
+
accent: string;
|
|
13
|
+
success: string;
|
|
14
|
+
warning: string;
|
|
15
|
+
error: string;
|
|
16
|
+
info: string;
|
|
17
|
+
};
|
|
18
|
+
export type Accent = 'green' | 'blue';
|
|
19
|
+
export declare function paletteFor(dark: boolean, accent?: Accent): Palette;
|
|
20
|
+
//# sourceMappingURL=palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/palette.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAsCF,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtC,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAgB,GAAG,OAAO,CAU3E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export { AppBrand, NavigationFrame, type NavigationFrameProps } from './navigation.js';
|
|
3
|
+
export interface PageHeaderProps {
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
description?: ReactNode;
|
|
6
|
+
back?: ReactNode;
|
|
7
|
+
actions?: ReactNode;
|
|
8
|
+
meta?: ReactNode;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Routing, translation and authorisation belong to the host application. */
|
|
12
|
+
export declare function PageHeader({ title, description, back, actions, meta, className, }: PageHeaderProps): import("react").JSX.Element;
|
|
13
|
+
/** SSR starts in light mode; hydration and later OS changes use the live preference. */
|
|
14
|
+
export declare function useSystemAppearance(): {
|
|
15
|
+
dark: boolean;
|
|
16
|
+
reducedMotion: boolean;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/react.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,GACV,EAAE,eAAe,+BAcjB;AAKD,wFAAwF;AACxF,wBAAgB,mBAAmB;;;EAIlC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,75 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joshuan/design-system",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Shared design for the Joshuan applications: Ant Design theme, page layout and appearance",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"types": "./dist/types/index.d.ts",
|
|
7
|
+
"main": "./dist/cjs/index.js",
|
|
8
|
+
"module": "./dist/esm/index.js",
|
|
9
|
+
"sideEffects": [
|
|
10
|
+
"**/*.css"
|
|
11
|
+
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=24"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/types/index.d.ts",
|
|
22
|
+
"import": "./dist/esm/index.js",
|
|
23
|
+
"require": "./dist/cjs/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./antd": {
|
|
26
|
+
"types": "./dist/types/antd.d.ts",
|
|
27
|
+
"import": "./dist/esm/antd.js",
|
|
28
|
+
"require": "./dist/cjs/antd.js"
|
|
29
|
+
},
|
|
30
|
+
"./react": {
|
|
31
|
+
"types": "./dist/types/react.d.ts",
|
|
32
|
+
"import": "./dist/esm/react.js",
|
|
33
|
+
"require": "./dist/cjs/react.js"
|
|
34
|
+
},
|
|
35
|
+
"./styles.css": "./dist/styles.css"
|
|
36
|
+
},
|
|
37
|
+
"typesVersions": {
|
|
38
|
+
"*": {
|
|
39
|
+
"antd": [
|
|
40
|
+
"dist/types/antd.d.ts"
|
|
41
|
+
],
|
|
42
|
+
"react": [
|
|
43
|
+
"dist/types/react.d.ts"
|
|
44
|
+
],
|
|
45
|
+
"*": [
|
|
46
|
+
"dist/types/index.d.ts"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "node ../../scripts/clean-dist.mjs && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node ../../scripts/mark-cjs.mjs && node build-css.mjs",
|
|
52
|
+
"typecheck": "tsc --noEmit -p tsconfig.esm.json"
|
|
53
|
+
},
|
|
54
|
+
"peerDependencies": {
|
|
55
|
+
"antd": "^6.5.0",
|
|
56
|
+
"react": "^19.2.0",
|
|
57
|
+
"react-dom": "^19.2.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"antd": "6.5.0",
|
|
61
|
+
"react": "19.2.7",
|
|
62
|
+
"react-dom": "19.2.7",
|
|
63
|
+
"@types/react": "19.2.17",
|
|
64
|
+
"@types/react-dom": "19.2.3"
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
},
|
|
69
|
+
"repository": {
|
|
70
|
+
"type": "git",
|
|
71
|
+
"url": "git+https://github.com/joshuan/js-lib.git",
|
|
72
|
+
"directory": "packages/design-system"
|
|
73
|
+
},
|
|
74
|
+
"license": "UNLICENSED"
|
|
75
|
+
}
|