@peanut-admin/ui-vue 4.0.0-rc.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/dist/layout.js ADDED
@@ -0,0 +1,334 @@
1
+ /* eslint-disable vue/one-component-per-file */
2
+ import { ElButton, ElDrawer } from 'element-plus';
3
+ import { defineComponent, h, onBeforeUnmount, onMounted } from 'vue';
4
+ const shellProps = {
5
+ config: { type: Object, default: null },
6
+ identity: { type: Object, default: null },
7
+ navigation: {
8
+ type: Array,
9
+ default: () => [],
10
+ },
11
+ breadcrumbs: {
12
+ type: Array,
13
+ default: () => [],
14
+ },
15
+ activePath: { type: String, default: '' },
16
+ collapsed: { type: Boolean, default: false },
17
+ mobileOpen: { type: Boolean, default: false },
18
+ openNavigationLabel: { type: String, default: 'Open navigation' },
19
+ collapseNavigationLabel: { type: String, default: 'Collapse navigation' },
20
+ expandNavigationLabel: { type: String, default: 'Expand navigation' },
21
+ primaryNavigationLabel: { type: String, default: 'Primary navigation' },
22
+ mobileNavigationLabel: { type: String, default: 'Mobile navigation' },
23
+ breadcrumbLabel: { type: String, default: 'Breadcrumb' },
24
+ identityLabel: { type: String, default: 'Current identity' },
25
+ };
26
+ const shellEmits = {
27
+ 'navigate': (path) => typeof path === 'string',
28
+ 'update:collapsed': (collapsed) => typeof collapsed === 'boolean',
29
+ 'update:mobileOpen': (open) => typeof open === 'boolean',
30
+ 'switch-tenant': () => true,
31
+ 'logout': () => true,
32
+ };
33
+ const shellRouteOrigin = 'https://shell.invalid';
34
+ const trustedLocalPath = (path) => {
35
+ if (path === null ||
36
+ !path.startsWith('/') ||
37
+ path.startsWith('//') ||
38
+ /[\\\u0000-\u001f\u007f]/.test(path))
39
+ return false;
40
+ try {
41
+ return new URL(path, shellRouteOrigin).origin === shellRouteOrigin;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ };
47
+ const ShellFrame = defineComponent({
48
+ name: 'ShellFrame',
49
+ inheritAttrs: false,
50
+ props: {
51
+ audience: {
52
+ type: String,
53
+ required: true,
54
+ },
55
+ },
56
+ setup(props, { attrs, slots }) {
57
+ return () => h('div', {
58
+ ...attrs,
59
+ 'class': ['pa-shell', `pa-shell--${props.audience}`, attrs.class],
60
+ 'data-audience': props.audience,
61
+ }, [
62
+ slots.header?.(),
63
+ h('div', { class: 'pa-shell__workspace' }, [
64
+ slots.sidebar?.(),
65
+ h('div', { class: 'pa-shell__main' }, [
66
+ slots.breadcrumb?.(),
67
+ slots.tabs?.(),
68
+ slots.default?.(),
69
+ ]),
70
+ ]),
71
+ ]);
72
+ },
73
+ });
74
+ const WorkspaceShell = defineComponent({
75
+ name: 'WorkspaceShell',
76
+ inheritAttrs: false,
77
+ props: {
78
+ ...shellProps,
79
+ audience: {
80
+ type: String,
81
+ required: true,
82
+ },
83
+ },
84
+ emits: shellEmits,
85
+ setup(props, { attrs, emit, slots }) {
86
+ const closeMobile = () => emit('update:mobileOpen', false);
87
+ const onKeydown = (event) => {
88
+ if (event.key === 'Escape' && props.mobileOpen)
89
+ closeMobile();
90
+ };
91
+ onMounted(() => document.addEventListener('keydown', onKeydown));
92
+ onBeforeUnmount(() => document.removeEventListener('keydown', onKeydown));
93
+ const renderNavigation = (items, mobile) => items.flatMap((item) => {
94
+ const children = renderNavigation(item.children, mobile);
95
+ if (!trustedLocalPath(item.path)) {
96
+ return [
97
+ h('p', {
98
+ class: ['pa-shell-navigation__group', 'navigation-group'],
99
+ key: item.key,
100
+ }, item.label),
101
+ ...children,
102
+ ];
103
+ }
104
+ return [
105
+ h('a', {
106
+ 'key': item.key,
107
+ 'href': item.path,
108
+ 'class': [
109
+ 'pa-shell-navigation__link',
110
+ 'navigation-link',
111
+ { 'is-active': props.activePath === item.path },
112
+ ],
113
+ 'aria-current': props.activePath === item.path ? 'page' : undefined,
114
+ 'aria-label': item.label,
115
+ 'onClick': (event) => {
116
+ event.preventDefault();
117
+ emit('navigate', item.path);
118
+ if (mobile)
119
+ closeMobile();
120
+ },
121
+ }, [
122
+ h('span', {
123
+ 'class': 'navigation-marker',
124
+ 'aria-hidden': 'true',
125
+ }),
126
+ h('span', item.label),
127
+ ]),
128
+ ...children,
129
+ ];
130
+ });
131
+ return () => {
132
+ if (props.config === null) {
133
+ return h(ShellFrame, { ...attrs, audience: props.audience }, slots);
134
+ }
135
+ const audienceLabel = props.config.audiences[props.audience].label;
136
+ const identity = props.identity;
137
+ const commands = [
138
+ props.audience === 'tenant'
139
+ ? h(ElButton, {
140
+ text: true,
141
+ onClick: () => emit('switch-tenant'),
142
+ }, () => props.config?.commands.switchTenantLabel)
143
+ : null,
144
+ h(ElButton, {
145
+ text: true,
146
+ onClick: () => emit('logout'),
147
+ }, () => props.config?.commands.logoutLabel),
148
+ ];
149
+ const navigation = h('nav', {
150
+ 'class': ['pa-shell-navigation', 'workspace-navigation'],
151
+ 'aria-label': props.primaryNavigationLabel,
152
+ }, renderNavigation(props.navigation, false));
153
+ const mobileNavigation = h('div', { class: 'pa-shell-mobile-content' }, [
154
+ identity === null
155
+ ? null
156
+ : h('div', {
157
+ 'class': 'pa-shell-mobile-identity',
158
+ 'aria-label': props.identityLabel,
159
+ }, [
160
+ h('strong', identity.actorLabel),
161
+ h('span', identity.contextLabel),
162
+ h('small', identity.accountLabel),
163
+ ]),
164
+ h('nav', {
165
+ 'class': ['pa-shell-navigation', 'workspace-navigation'],
166
+ 'aria-label': props.mobileNavigationLabel,
167
+ }, renderNavigation(props.navigation, true)),
168
+ h('div', { class: ['pa-shell-mobile-commands', 'mobile-navigation-commands'] }, commands),
169
+ ]);
170
+ return h(ShellFrame, { ...attrs, audience: props.audience }, {
171
+ header: () => h(ShellHeader, {}, () => [
172
+ h('button', {
173
+ 'type': 'button',
174
+ 'class': 'mobile-nav-trigger',
175
+ 'aria-label': props.openNavigationLabel,
176
+ 'aria-expanded': String(props.mobileOpen),
177
+ 'onClick': () => emit('update:mobileOpen', true),
178
+ }, [
179
+ h('span', { 'aria-hidden': 'true' }),
180
+ h('span', { 'aria-hidden': 'true' }),
181
+ h('span', { 'aria-hidden': 'true' }),
182
+ ]),
183
+ h('div', { class: ['pa-shell-brand', 'shell-brand'] }, [
184
+ h('span', {
185
+ 'class': ['pa-shell-brand__mark', 'brand-mark'],
186
+ 'aria-hidden': 'true',
187
+ }, props.config?.brand.mark),
188
+ h('span', {}, [
189
+ h('strong', props.config?.brand.name),
190
+ h('small', audienceLabel),
191
+ ]),
192
+ ]),
193
+ identity === null
194
+ ? null
195
+ : h('div', {
196
+ 'class': ['pa-shell-identity', 'shell-context'],
197
+ 'aria-label': props.identityLabel,
198
+ }, [
199
+ h('span', identity.contextLabel),
200
+ h('strong', identity.actorLabel),
201
+ h('small', identity.accountLabel),
202
+ ]),
203
+ h('div', { class: ['pa-shell-commands', 'shell-commands'] }, commands),
204
+ ]),
205
+ sidebar: () => h(ShellSidebar, { collapsed: props.collapsed }, () => [
206
+ navigation,
207
+ h('button', {
208
+ 'type': 'button',
209
+ 'class': ['pa-shell__collapse', 'sidebar-collapse'],
210
+ 'aria-label': props.collapsed
211
+ ? props.expandNavigationLabel
212
+ : props.collapseNavigationLabel,
213
+ 'onClick': () => emit('update:collapsed', !props.collapsed),
214
+ }, props.collapsed
215
+ ? props.expandNavigationLabel
216
+ : props.collapseNavigationLabel),
217
+ ]),
218
+ breadcrumb: () => h(ShellBreadcrumb, { label: props.breadcrumbLabel }, () => props.breadcrumbs.map((item, index) => trustedLocalPath(item.path)
219
+ ? h('a', {
220
+ key: `${index}:${item.label}`,
221
+ href: item.path,
222
+ onClick: (event) => {
223
+ event.preventDefault();
224
+ emit('navigate', item.path);
225
+ },
226
+ }, item.label)
227
+ : h('span', {
228
+ 'key': `${index}:${item.label}`,
229
+ 'aria-current': 'page',
230
+ }, item.label))),
231
+ default: () => [
232
+ slots.default?.(),
233
+ h(ElDrawer, {
234
+ 'modelValue': props.mobileOpen,
235
+ 'onUpdate:modelValue': (open) => emit('update:mobileOpen', open),
236
+ 'title': props.config?.brand.name,
237
+ 'direction': 'ltr',
238
+ 'size': 'min(84vw, 320px)',
239
+ 'class': 'mobile-navigation-drawer',
240
+ 'closeOnPressEscape': true,
241
+ }, () => mobileNavigation),
242
+ ],
243
+ });
244
+ };
245
+ },
246
+ });
247
+ const createAudienceShell = (name, audience) => defineComponent({
248
+ name,
249
+ inheritAttrs: false,
250
+ props: shellProps,
251
+ emits: shellEmits,
252
+ setup(props, { attrs, emit, slots }) {
253
+ return () => h(WorkspaceShell, {
254
+ ...attrs,
255
+ ...props,
256
+ audience,
257
+ 'onNavigate': (path) => emit('navigate', path),
258
+ 'onUpdate:collapsed': (collapsed) => emit('update:collapsed', collapsed),
259
+ 'onUpdate:mobileOpen': (open) => emit('update:mobileOpen', open),
260
+ 'onSwitchTenant': () => emit('switch-tenant'),
261
+ 'onLogout': () => emit('logout'),
262
+ }, slots);
263
+ },
264
+ });
265
+ export const AdminShell = createAudienceShell('AdminShell', 'tenant');
266
+ export const PlatformShell = createAudienceShell('PlatformShell', 'platform');
267
+ export const ShellHeader = defineComponent({
268
+ name: 'ShellHeader',
269
+ setup(_, { slots }) {
270
+ return () => h('header', { class: 'pa-shell-header' }, slots.default?.());
271
+ },
272
+ });
273
+ export const ShellSidebar = defineComponent({
274
+ name: 'ShellSidebar',
275
+ props: {
276
+ label: { type: String, default: 'Primary navigation' },
277
+ collapsed: { type: Boolean, default: false },
278
+ },
279
+ setup(props, { slots }) {
280
+ return () => h('aside', {
281
+ 'class': ['pa-shell-sidebar', { 'is-collapsed': props.collapsed }],
282
+ 'aria-label': props.label,
283
+ }, slots.default?.());
284
+ },
285
+ });
286
+ export const ShellBreadcrumb = defineComponent({
287
+ name: 'ShellBreadcrumb',
288
+ props: {
289
+ label: { type: String, default: 'Breadcrumb' },
290
+ },
291
+ setup(props, { slots }) {
292
+ return () => h('nav', { 'class': 'pa-shell-breadcrumb', 'aria-label': props.label }, slots.default?.());
293
+ },
294
+ });
295
+ export const ShellTabs = defineComponent({
296
+ name: 'ShellTabs',
297
+ props: {
298
+ label: { type: String, default: 'Open pages' },
299
+ },
300
+ setup(props, { slots }) {
301
+ return () => h('nav', { 'class': 'pa-shell-tabs', 'aria-label': props.label }, slots.default?.());
302
+ },
303
+ });
304
+ export const PageHeader = defineComponent({
305
+ name: 'PageHeader',
306
+ setup(_, { slots }) {
307
+ return () => h('header', { class: 'pa-page-header' }, [
308
+ h('div', { class: 'pa-page-header__title' }, slots.default?.()),
309
+ slots.actions === undefined
310
+ ? null
311
+ : h('div', { class: 'pa-page-header__actions' }, slots.actions()),
312
+ ]);
313
+ },
314
+ });
315
+ export const PageToolbar = defineComponent({
316
+ name: 'PageToolbar',
317
+ props: {
318
+ label: { type: String, default: 'Page actions' },
319
+ },
320
+ setup(props, { slots }) {
321
+ return () => h('div', {
322
+ 'class': 'pa-page-toolbar',
323
+ 'role': 'toolbar',
324
+ 'aria-label': props.label,
325
+ }, slots.default?.());
326
+ },
327
+ });
328
+ export const PageContent = defineComponent({
329
+ name: 'PageContent',
330
+ setup(_, { slots }) {
331
+ return () => h('section', { class: 'pa-page-content' }, slots.default?.());
332
+ },
333
+ });
334
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AdminOverrideRegistry, ApiAudience } from '@peanut-admin/vue';
2
+ import type { Component } from 'vue';
3
+ export declare const WORKSPACE_SHELL_OVERRIDE_KEY: "peanut.shell.service.workspace-component";
4
+ export type WorkspaceShellResolver = (audience: ApiAudience) => Component;
5
+ export declare const ADMIN_SHELL_OVERRIDE_SLOTS: readonly [{
6
+ key: "peanut.shell.service.workspace-component";
7
+ kind: "service";
8
+ contractVersion: string;
9
+ defaultValue: WorkspaceShellResolver;
10
+ validate: (value: unknown) => value is WorkspaceShellResolver;
11
+ }];
12
+ export type AdminShellOverrideRegistry = AdminOverrideRegistry<typeof ADMIN_SHELL_OVERRIDE_SLOTS>;
13
+ export declare const resolveWorkspaceShell: (registry: AdminShellOverrideRegistry, audience: ApiAudience) => Component;
14
+ //# sourceMappingURL=overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../src/overrides.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAIrC,eAAO,MAAM,4BAA4B,EACvC,0CAAmD,CAAC;AAEtD,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,WAAW,KAAK,SAAS,CAAC;AAqB1E,eAAO,MAAM,0BAA0B;;;;;sBAf9B,OAAO,KACb,KAAK,IAAI,sBAAsB;EAsBxB,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,CAC5D,OAAO,0BAA0B,CAClC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,0BAA0B,EACpC,UAAU,WAAW,KACpB,SAKF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { defineAdminOverrideSlot } from '@peanut-admin/vue';
2
+ import { AdminShell, PlatformShell } from './layout.js';
3
+ export const WORKSPACE_SHELL_OVERRIDE_KEY = 'peanut.shell.service.workspace-component';
4
+ const defaultWorkspaceShell = (audience) => audience === 'tenant' ? AdminShell : PlatformShell;
5
+ const isWorkspaceShellResolver = (value) => typeof value === 'function';
6
+ const isVueComponent = (value) => {
7
+ if (typeof value === 'function')
8
+ return true;
9
+ if (typeof value !== 'object' || value === null)
10
+ return false;
11
+ const component = value;
12
+ return (typeof component.setup === 'function' ||
13
+ typeof component.render === 'function' ||
14
+ typeof component.template === 'string' ||
15
+ typeof component.__asyncLoader === 'function');
16
+ };
17
+ export const ADMIN_SHELL_OVERRIDE_SLOTS = [
18
+ defineAdminOverrideSlot({
19
+ key: WORKSPACE_SHELL_OVERRIDE_KEY,
20
+ kind: 'service',
21
+ contractVersion: '1.0.0',
22
+ defaultValue: defaultWorkspaceShell,
23
+ validate: isWorkspaceShellResolver,
24
+ }),
25
+ ];
26
+ export const resolveWorkspaceShell = (registry, audience) => {
27
+ const component = registry.get(WORKSPACE_SHELL_OVERRIDE_KEY)(audience);
28
+ if (!isVueComponent(component))
29
+ throw new Error('ADMIN_SHELL_OVERRIDE_RESULT_INVALID');
30
+ return component;
31
+ };
32
+ //# sourceMappingURL=overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,MAAM,4BAA4B,GACvC,0CAAmD,CAAC;AAItD,MAAM,qBAAqB,GAA2B,CAAC,QAAQ,EAAE,EAAE,CACjE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;AAErD,MAAM,wBAAwB,GAAG,CAC/B,KAAc,EACmB,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC;AAElE,MAAM,cAAc,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC5D,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,CACL,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;QACrC,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU;QACtC,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ;QACtC,OAAO,SAAS,CAAC,aAAa,KAAK,UAAU,CAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB,CAAC;QACtB,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE,qBAAqB;QACnC,QAAQ,EAAE,wBAAwB;KACnC,CAAC;CACM,CAAC;AAMX,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAoC,EACpC,QAAqB,EACV,EAAE;IACb,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}