@zlooks.cn/ui 1.0.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/antd.css +385 -0
- package/dist/client-navigation.d.ts +10 -0
- package/dist/client-navigation.d.ts.map +1 -0
- package/dist/client-navigation.js +9 -0
- package/dist/client-navigation.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/navigation.d.ts +10 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +13 -0
- package/dist/navigation.js.map +1 -0
- package/dist/provider.d.ts +15 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +38 -0
- package/dist/provider.js.map +1 -0
- package/dist/request-runtime.d.ts +17 -0
- package/dist/request-runtime.d.ts.map +1 -0
- package/dist/request-runtime.js +69 -0
- package/dist/request-runtime.js.map +1 -0
- package/dist/request.d.ts +8 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +10 -0
- package/dist/request.js.map +1 -0
- package/dist/seo.d.ts +26 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +20 -0
- package/dist/seo.js.map +1 -0
- package/dist/shell-context.d.ts +19 -0
- package/dist/shell-context.d.ts.map +1 -0
- package/dist/shell-context.js +50 -0
- package/dist/shell-context.js.map +1 -0
- package/dist/shell.css +5 -0
- package/dist/shell.d.ts +30 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +221 -0
- package/dist/shell.js.map +1 -0
- package/dist/site-config.d.ts +9 -0
- package/dist/site-config.d.ts.map +1 -0
- package/dist/site-config.js +17 -0
- package/dist/site-config.js.map +1 -0
- package/dist/theme-internal.d.ts +7 -0
- package/dist/theme-internal.d.ts.map +1 -0
- package/dist/theme-internal.js +8 -0
- package/dist/theme-internal.js.map +1 -0
- package/dist/theme-preference.d.ts +8 -0
- package/dist/theme-preference.d.ts.map +1 -0
- package/dist/theme-preference.js +64 -0
- package/dist/theme-preference.js.map +1 -0
- package/dist/theme.d.ts +3 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +20 -0
- package/dist/theme.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ClientNavigationClick {
|
|
2
|
+
readonly altKey: boolean;
|
|
3
|
+
readonly button: number;
|
|
4
|
+
readonly ctrlKey: boolean;
|
|
5
|
+
readonly defaultPrevented: boolean;
|
|
6
|
+
readonly metaKey: boolean;
|
|
7
|
+
readonly shiftKey: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function shouldUseClientNavigation(event: ClientNavigationClick): boolean;
|
|
10
|
+
//# sourceMappingURL=client-navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-navigation.d.ts","sourceRoot":"","sources":["../src/client-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAO/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-navigation.js","sourceRoot":"","sources":["../src/client-navigation.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,yBAAyB,CAAC,KAA4B;IACpE,OAAO,CAAC,KAAK,CAAC,gBAAgB;WACzB,KAAK,CAAC,MAAM,KAAK,CAAC;WAClB,CAAC,KAAK,CAAC,MAAM;WACb,CAAC,KAAK,CAAC,OAAO;WACd,CAAC,KAAK,CAAC,OAAO;WACd,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACpF,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZlooksNavigationItem } from './shell-context.js';
|
|
2
|
+
export { shouldUseClientNavigation } from './client-navigation.js';
|
|
3
|
+
export interface ZlooksNavigationViewItem extends ZlooksNavigationItem {
|
|
4
|
+
readonly active: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function selectZlooksNavigation(input: {
|
|
7
|
+
readonly navigation: readonly ZlooksNavigationItem[];
|
|
8
|
+
readonly pathname: string;
|
|
9
|
+
}): readonly ZlooksNavigationViewItem[];
|
|
10
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,SAAS,wBAAwB,EAAE,CAUtC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { shouldUseClientNavigation } from './client-navigation.js';
|
|
2
|
+
export function selectZlooksNavigation(input) {
|
|
3
|
+
return [
|
|
4
|
+
{ key: 'gateway:home', label: '首页', href: '/', order: -1 },
|
|
5
|
+
...input.navigation,
|
|
6
|
+
].map((item) => ({
|
|
7
|
+
...item,
|
|
8
|
+
active: item.href === '/'
|
|
9
|
+
? input.pathname === '/'
|
|
10
|
+
: input.pathname === item.href || input.pathname.startsWith(`${item.href}/`),
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAMnE,MAAM,UAAU,sBAAsB,CAAC,KAGtC;IACC,OAAO;QACL,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;QAC1D,GAAG,KAAK,CAAC,UAAU;KACpB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG;YACvB,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,GAAG;YACxB,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;KAC/E,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ThemeConfig } from 'antd';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
import { type ZlooksThemeMode } from './theme-preference.js';
|
|
4
|
+
import './shell.css';
|
|
5
|
+
export type { ZlooksThemeMode } from './theme-preference.js';
|
|
6
|
+
export declare function ZlooksUiProvider({ children, theme, }: {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
theme?: ZlooksThemeMode;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
interface ZlooksThemeRuntime {
|
|
11
|
+
readonly resolvedMode: 'dark' | 'light';
|
|
12
|
+
readonly resolvedTheme: ThemeConfig;
|
|
13
|
+
}
|
|
14
|
+
export declare function useZlooksThemeRuntime(theme: ZlooksThemeMode): ZlooksThemeRuntime;
|
|
15
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA2C,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB,+BAaA;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAWhF"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { App, ConfigProvider, theme as antdTheme } from 'antd';
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { zlooksTheme } from './theme.js';
|
|
6
|
+
import { useZlooksTheme, } from './theme-preference.js';
|
|
7
|
+
import './shell.css';
|
|
8
|
+
export function ZlooksUiProvider({ children, theme, }) {
|
|
9
|
+
const preference = useZlooksTheme();
|
|
10
|
+
const { resolvedMode, resolvedTheme } = useZlooksThemeRuntime(theme ?? preference.mode);
|
|
11
|
+
return (_jsx(ConfigProvider, { button: { autoInsertSpace: false }, theme: resolvedTheme, children: _jsx(App, { children: _jsx("div", { className: "zlooks-ui-theme", "data-zlooks-theme": resolvedMode, children: children }) }) }));
|
|
12
|
+
}
|
|
13
|
+
export function useZlooksThemeRuntime(theme) {
|
|
14
|
+
const systemDark = useSystemDarkTheme(theme === 'default');
|
|
15
|
+
const resolvedMode = theme === 'default' ? (systemDark ? 'dark' : 'light') : theme;
|
|
16
|
+
const resolvedTheme = useMemo(() => ({
|
|
17
|
+
...zlooksTheme,
|
|
18
|
+
algorithm: resolvedMode === 'dark' ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
|
|
19
|
+
cssVar: { key: `zlooks-${resolvedMode}` },
|
|
20
|
+
hashed: false,
|
|
21
|
+
zeroRuntime: true,
|
|
22
|
+
}), [resolvedMode]);
|
|
23
|
+
return { resolvedMode, resolvedTheme };
|
|
24
|
+
}
|
|
25
|
+
function useSystemDarkTheme(enabled) {
|
|
26
|
+
const [dark, setDark] = useState(false);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!enabled)
|
|
29
|
+
return;
|
|
30
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
|
31
|
+
const update = () => setDark(media.matches);
|
|
32
|
+
update();
|
|
33
|
+
media.addEventListener('change', update);
|
|
34
|
+
return () => media.removeEventListener('change', update);
|
|
35
|
+
}, [enabled]);
|
|
36
|
+
return dark;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,IAAI,SAAS,EAAoB,MAAM,MAAM,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,cAAc,GAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,aAAa,CAAC;AAIrB,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAK,GAIN;IACC,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,qBAAqB,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAExF,OAAO,CACL,KAAC,cAAc,IAAC,MAAM,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,YACtE,KAAC,GAAG,cACF,cAAK,SAAS,EAAC,iBAAiB,uBAAoB,YAAY,YAC7D,QAAQ,GACL,GACF,GACS,CAClB,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,GAAG,WAAW;QACd,SAAS,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB;QACzF,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,YAAY,EAAE,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,IAAI;KAClB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAW,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC;QACT,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface RequestOptions<T> {
|
|
2
|
+
readonly errorMessage?: string;
|
|
3
|
+
readonly parse?: (data: unknown) => T | Promise<T>;
|
|
4
|
+
}
|
|
5
|
+
export interface RequestFeedback {
|
|
6
|
+
error(content: string): unknown;
|
|
7
|
+
}
|
|
8
|
+
export type RequestFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
9
|
+
export declare class RequestError extends Error {
|
|
10
|
+
readonly code: number;
|
|
11
|
+
readonly status?: number | undefined;
|
|
12
|
+
readonly reported = true;
|
|
13
|
+
constructor(code: number, message: string, status?: number | undefined, options?: ErrorOptions);
|
|
14
|
+
}
|
|
15
|
+
export declare function isRequestError(error: unknown): error is RequestError;
|
|
16
|
+
export declare function executeRequest<T = unknown>(feedback: RequestFeedback, fetcher: RequestFetch, input: RequestInfo | URL, init?: RequestInit, options?: RequestOptions<T>): Promise<T>;
|
|
17
|
+
//# sourceMappingURL=request-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-runtime.d.ts","sourceRoot":"","sources":["../src/request-runtime.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,qBAAa,YAAa,SAAQ,KAAK;aAInB,IAAI,EAAE,MAAM;aAEZ,MAAM,CAAC,EAAE,MAAM;IALjC,SAAgB,QAAQ,QAAQ;IAEhC,YACkB,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EAC/B,OAAO,CAAC,EAAE,YAAY,EAIvB;CACF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,GAAE,cAAc,CAAC,CAAC,CAAM,GAC9B,OAAO,CAAC,CAAC,CAAC,CAwDZ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isBrowserApiFailure, parseBrowserApiResponse, } from '@zlooks.cn/browser-api';
|
|
2
|
+
const DEFAULT_ERROR_MESSAGE = '请求失败,请稍后重试';
|
|
3
|
+
const CLIENT_REQUEST_ERROR_CODE = -1;
|
|
4
|
+
export class RequestError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
status;
|
|
7
|
+
reported = true;
|
|
8
|
+
constructor(code, message, status, options) {
|
|
9
|
+
super(message, options);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.status = status;
|
|
12
|
+
this.name = 'RequestError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function isRequestError(error) {
|
|
16
|
+
return error instanceof RequestError;
|
|
17
|
+
}
|
|
18
|
+
export async function executeRequest(feedback, fetcher, input, init, options = {}) {
|
|
19
|
+
const fallback = normalizeFallback(options.errorMessage);
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await fetcher(input, init);
|
|
23
|
+
}
|
|
24
|
+
catch (cause) {
|
|
25
|
+
if (isAbortError(cause))
|
|
26
|
+
throw cause;
|
|
27
|
+
return reportFailure(feedback, new RequestError(CLIENT_REQUEST_ERROR_CODE, fallback, undefined, { cause }));
|
|
28
|
+
}
|
|
29
|
+
let envelope;
|
|
30
|
+
try {
|
|
31
|
+
envelope = parseBrowserApiResponse(await response.json());
|
|
32
|
+
}
|
|
33
|
+
catch (cause) {
|
|
34
|
+
if (isAbortError(cause))
|
|
35
|
+
throw cause;
|
|
36
|
+
return reportFailure(feedback, new RequestError(CLIENT_REQUEST_ERROR_CODE, fallback, response.status, { cause }));
|
|
37
|
+
}
|
|
38
|
+
if (isBrowserApiFailure(envelope)) {
|
|
39
|
+
return reportFailure(feedback, new RequestError(envelope.code, envelope.error, response.status));
|
|
40
|
+
}
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
return reportFailure(feedback, new RequestError(CLIENT_REQUEST_ERROR_CODE, fallback, response.status));
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
return options.parse
|
|
46
|
+
? await options.parse(envelope.data)
|
|
47
|
+
: envelope.data;
|
|
48
|
+
}
|
|
49
|
+
catch (cause) {
|
|
50
|
+
if (isAbortError(cause))
|
|
51
|
+
throw cause;
|
|
52
|
+
return reportFailure(feedback, new RequestError(CLIENT_REQUEST_ERROR_CODE, fallback, response.status, { cause }));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function reportFailure(feedback, error) {
|
|
56
|
+
void feedback.error(error.message);
|
|
57
|
+
return Promise.reject(error);
|
|
58
|
+
}
|
|
59
|
+
function normalizeFallback(message) {
|
|
60
|
+
const normalized = message?.trim();
|
|
61
|
+
return normalized && normalized.length <= 500 ? normalized : DEFAULT_ERROR_MESSAGE;
|
|
62
|
+
}
|
|
63
|
+
function isAbortError(error) {
|
|
64
|
+
return error !== null
|
|
65
|
+
&& typeof error === 'object'
|
|
66
|
+
&& 'name' in error
|
|
67
|
+
&& error.name === 'AbortError';
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=request-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-runtime.js","sourceRoot":"","sources":["../src/request-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type RequestOptions } from './request-runtime.js';
|
|
2
|
+
export { isRequestError, RequestError } from './request-runtime.js';
|
|
3
|
+
export type { RequestOptions } from './request-runtime.js';
|
|
4
|
+
export interface ZlooksRequest {
|
|
5
|
+
<T = unknown>(input: RequestInfo | URL, init?: RequestInit, options?: RequestOptions<T>): Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare function useRequest(): ZlooksRequest;
|
|
8
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,GAAG,OAAO,EACV,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;CACf;AAED,wBAAgB,UAAU,IAAI,aAAa,CAO1C"}
|
package/dist/request.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { App } from 'antd';
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import { executeRequest, } from './request-runtime.js';
|
|
5
|
+
export { isRequestError, RequestError } from './request-runtime.js';
|
|
6
|
+
export function useRequest() {
|
|
7
|
+
const { message: messageApi } = App.useApp();
|
|
8
|
+
return useCallback((input, init, options) => executeRequest(messageApi, fetch, input, init, options), [messageApi]);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EACL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWpE,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IAC7C,OAAO,WAAW,CAAC,CACjB,KAAwB,EACxB,IAAkB,EAClB,OAA2B,EAC3B,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/seo.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ZlooksSeoOpenGraph {
|
|
2
|
+
readonly type: 'website' | 'article';
|
|
3
|
+
readonly imageUrl?: string;
|
|
4
|
+
readonly publishedTime?: string;
|
|
5
|
+
readonly modifiedTime?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ZlooksSeoModel {
|
|
8
|
+
readonly title: string;
|
|
9
|
+
readonly description: string;
|
|
10
|
+
readonly canonicalUrl: string;
|
|
11
|
+
readonly siteName: string;
|
|
12
|
+
readonly robots: 'index, follow' | 'noindex, nofollow';
|
|
13
|
+
readonly openGraph: ZlooksSeoOpenGraph;
|
|
14
|
+
}
|
|
15
|
+
export declare function createZlooksPageSeo(input: {
|
|
16
|
+
readonly title: string;
|
|
17
|
+
readonly description: string;
|
|
18
|
+
readonly origin: string;
|
|
19
|
+
readonly pathname: string;
|
|
20
|
+
readonly siteName: string;
|
|
21
|
+
readonly index: boolean;
|
|
22
|
+
}): ZlooksSeoModel;
|
|
23
|
+
export declare function ZlooksSeo({ seo }: {
|
|
24
|
+
readonly seo: ZlooksSeoModel;
|
|
25
|
+
}): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=seo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../src/seo.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;CACxC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,GAAG,cAAc,CASjB;AAED,wBAAgB,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;CAAE,+BA6BlE"}
|
package/dist/seo.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function createZlooksPageSeo(input) {
|
|
3
|
+
return {
|
|
4
|
+
title: input.title === input.siteName ? input.title : `${input.title} | ${input.siteName}`,
|
|
5
|
+
description: input.description,
|
|
6
|
+
canonicalUrl: new URL(input.pathname, input.origin).toString(),
|
|
7
|
+
siteName: input.siteName,
|
|
8
|
+
robots: input.index ? 'index, follow' : 'noindex, nofollow',
|
|
9
|
+
openGraph: { type: 'website' },
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function ZlooksSeo({ seo }) {
|
|
13
|
+
const imageUrl = seo.openGraph.imageUrl;
|
|
14
|
+
return (_jsxs(_Fragment, { children: [_jsx("title", { children: seo.title }), _jsx("meta", { name: "application-name", content: seo.siteName }), _jsx("meta", { name: "description", content: seo.description }), _jsx("meta", { name: "robots", content: seo.robots }), _jsx("meta", { name: "googlebot", content: seo.robots }), _jsx("link", { rel: "canonical", href: seo.canonicalUrl }), _jsx("meta", { property: "og:locale", content: "zh_CN" }), _jsx("meta", { property: "og:type", content: seo.openGraph.type }), _jsx("meta", { property: "og:site_name", content: seo.siteName }), _jsx("meta", { property: "og:title", content: seo.title }), _jsx("meta", { property: "og:description", content: seo.description }), _jsx("meta", { property: "og:url", content: seo.canonicalUrl }), imageUrl ? _jsx("meta", { property: "og:image", content: imageUrl }) : null, seo.openGraph.publishedTime
|
|
15
|
+
? _jsx("meta", { property: "article:published_time", content: seo.openGraph.publishedTime })
|
|
16
|
+
: null, seo.openGraph.modifiedTime
|
|
17
|
+
? _jsx("meta", { property: "article:modified_time", content: seo.openGraph.modifiedTime })
|
|
18
|
+
: null, _jsx("meta", { name: "twitter:card", content: imageUrl ? 'summary_large_image' : 'summary' }), _jsx("meta", { name: "twitter:title", content: seo.title }), _jsx("meta", { name: "twitter:description", content: seo.description }), imageUrl ? _jsx("meta", { name: "twitter:image", content: imageUrl }) : null] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=seo.js.map
|
package/dist/seo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../src/seo.tsx"],"names":[],"mappings":";AAgBA,MAAM,UAAU,mBAAmB,CAAC,KAOnC;IACC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,QAAQ,EAAE;QAC1F,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QAC9D,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB;QAC3D,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,GAAG,EAAoC;IACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;IACxC,OAAO,CACL,8BACE,0BAAQ,GAAG,CAAC,KAAK,GAAS,EAC1B,eAAM,IAAI,EAAC,kBAAkB,EAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAI,EACvD,eAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAE,GAAG,CAAC,WAAW,GAAI,EACrD,eAAM,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAI,EAC3C,eAAM,IAAI,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAI,EAC9C,eAAM,GAAG,EAAC,WAAW,EAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAI,EAChD,eAAM,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,OAAO,GAAG,EAC7C,eAAM,QAAQ,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,GAAI,EACxD,eAAM,QAAQ,EAAC,cAAc,EAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAI,EACvD,eAAM,QAAQ,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,CAAC,KAAK,GAAI,EAChD,eAAM,QAAQ,EAAC,gBAAgB,EAAC,OAAO,EAAE,GAAG,CAAC,WAAW,GAAI,EAC5D,eAAM,QAAQ,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,CAAC,YAAY,GAAI,EACpD,QAAQ,CAAC,CAAC,CAAC,eAAM,QAAQ,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,EACjE,GAAG,CAAC,SAAS,CAAC,aAAa;gBAC1B,CAAC,CAAC,eAAM,QAAQ,EAAC,wBAAwB,EAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,aAAa,GAAI;gBAClF,CAAC,CAAC,IAAI,EACP,GAAG,CAAC,SAAS,CAAC,YAAY;gBACzB,CAAC,CAAC,eAAM,QAAQ,EAAC,uBAAuB,EAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAI;gBAChF,CAAC,CAAC,IAAI,EACR,eAAM,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,GAAI,EACnF,eAAM,IAAI,EAAC,eAAe,EAAC,OAAO,EAAE,GAAG,CAAC,KAAK,GAAI,EACjD,eAAM,IAAI,EAAC,qBAAqB,EAAC,OAAO,EAAE,GAAG,CAAC,WAAW,GAAI,EAC5D,QAAQ,CAAC,CAAC,CAAC,eAAM,IAAI,EAAC,eAAe,EAAC,OAAO,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,IAClE,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type UserShellView } from '@zlooks.cn/user-shared';
|
|
2
|
+
export declare const ZLOOKS_RSC_SHELL_CONTEXT_PARAM = "__zlooks_shell_context";
|
|
3
|
+
export interface ZlooksNavigationItem {
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly href: string;
|
|
7
|
+
readonly order: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ZlooksRscShellContext {
|
|
10
|
+
readonly navigation: readonly ZlooksNavigationItem[];
|
|
11
|
+
readonly origin: string;
|
|
12
|
+
readonly pathname: string;
|
|
13
|
+
readonly user: UserShellView | Readonly<{
|
|
14
|
+
status: 'unavailable';
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export declare function serializeZlooksRscShellContext(context: ZlooksRscShellContext): string;
|
|
18
|
+
export declare function parseZlooksRscShellContext(input: string | string[] | undefined): ZlooksRscShellContext;
|
|
19
|
+
//# sourceMappingURL=shell-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-context.d.ts","sourceRoot":"","sources":["../src/shell-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGhF,eAAO,MAAM,8BAA8B,2BAA2B,CAAC;AA0BvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,CAAC;QAAE,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAErF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,qBAAqB,CAItG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { parseUserShellView } from '@zlooks.cn/user-shared';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const ZLOOKS_RSC_SHELL_CONTEXT_PARAM = '__zlooks_shell_context';
|
|
4
|
+
const absolutePath = z.string().min(1).max(2_048).regex(/^\/(?!\/)[^?#]*$/);
|
|
5
|
+
const publicOrigin = z.url().refine((value) => {
|
|
6
|
+
const url = new URL(value);
|
|
7
|
+
return (url.protocol === 'http:' || url.protocol === 'https:')
|
|
8
|
+
&& !url.username
|
|
9
|
+
&& !url.password
|
|
10
|
+
&& url.pathname === '/'
|
|
11
|
+
&& !url.search
|
|
12
|
+
&& !url.hash;
|
|
13
|
+
}, 'Public origin must be one canonical HTTP(S) origin');
|
|
14
|
+
const navigationItemSchema = z.strictObject({
|
|
15
|
+
key: z.string().min(1).max(256),
|
|
16
|
+
label: z.string().min(1).max(160),
|
|
17
|
+
href: absolutePath,
|
|
18
|
+
order: z.number().finite(),
|
|
19
|
+
});
|
|
20
|
+
const shellContextSchema = z.strictObject({
|
|
21
|
+
navigation: z.array(navigationItemSchema).max(256),
|
|
22
|
+
origin: publicOrigin,
|
|
23
|
+
pathname: absolutePath,
|
|
24
|
+
user: z.unknown(),
|
|
25
|
+
});
|
|
26
|
+
const unavailableUserShellViewSchema = z.strictObject({ status: z.literal('unavailable') });
|
|
27
|
+
export function serializeZlooksRscShellContext(context) {
|
|
28
|
+
return JSON.stringify(parseContext(context));
|
|
29
|
+
}
|
|
30
|
+
export function parseZlooksRscShellContext(input) {
|
|
31
|
+
if (typeof input !== 'string')
|
|
32
|
+
throw new TypeError('RSC shell context is required');
|
|
33
|
+
if (input.length > 65_536)
|
|
34
|
+
throw new TypeError('RSC shell context is too large');
|
|
35
|
+
return parseContext(JSON.parse(input));
|
|
36
|
+
}
|
|
37
|
+
function parseContext(input) {
|
|
38
|
+
const parsed = shellContextSchema.parse(input);
|
|
39
|
+
return {
|
|
40
|
+
navigation: parsed.navigation,
|
|
41
|
+
origin: parsed.origin,
|
|
42
|
+
pathname: parsed.pathname,
|
|
43
|
+
user: parseShellUserView(parsed.user),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function parseShellUserView(input) {
|
|
47
|
+
const unavailable = unavailableUserShellViewSchema.safeParse(input);
|
|
48
|
+
return unavailable.success ? unavailable.data : parseUserShellView(input);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=shell-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-context.js","sourceRoot":"","sources":["../src/shell-context.ts"],"names":[],"mappings":"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"}
|
package/dist/shell.css
ADDED
package/dist/shell.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ButtonProps } from 'antd';
|
|
2
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
3
|
+
import { type ZlooksNavigationViewItem } from './navigation.js';
|
|
4
|
+
import type { ZlooksRscShellContext } from './shell-context.js';
|
|
5
|
+
export declare function ZlooksShellProvider({ children, initialContext, }: {
|
|
6
|
+
readonly children: ReactNode;
|
|
7
|
+
readonly initialContext: ZlooksRscShellContext;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
export declare function useZlooksNavigation(): readonly ZlooksNavigationViewItem[];
|
|
10
|
+
export declare function useZlooksPathname(): string;
|
|
11
|
+
export type ZlooksUserAccessVariant = 'avatar' | 'compact';
|
|
12
|
+
export type ZlooksUserAccessShape = Exclude<NonNullable<ButtonProps['shape']>, 'circle'>;
|
|
13
|
+
export interface ZlooksUserAccessClassNames {
|
|
14
|
+
readonly trigger?: string;
|
|
15
|
+
readonly avatar?: string;
|
|
16
|
+
readonly label?: string;
|
|
17
|
+
readonly popup?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ZlooksUserAccessProps {
|
|
20
|
+
readonly className?: string;
|
|
21
|
+
readonly classNames?: ZlooksUserAccessClassNames;
|
|
22
|
+
readonly style?: CSSProperties;
|
|
23
|
+
readonly size?: ButtonProps['size'];
|
|
24
|
+
readonly shape?: ZlooksUserAccessShape;
|
|
25
|
+
readonly variant?: ZlooksUserAccessVariant;
|
|
26
|
+
readonly onNavigate?: (href: string) => void;
|
|
27
|
+
readonly onLogout: (href: string) => Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare function ZlooksUserAccess({ className, classNames, style, size, shape, variant, onNavigate, onLogout, }: ZlooksUserAccessProps): import("react").JSX.Element;
|
|
30
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,MAAM,CAAC;AACrD,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAExF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAOhE,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,cAAc,GACf,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;CAChD,+BAEA;AAED,wBAAgB,mBAAmB,IAAI,SAAS,wBAAwB,EAAE,CAGzE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC3D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEzF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,UAAe,EACf,KAAK,EACL,IAAe,EACf,KAAe,EACf,OAAmB,EACnB,UAAU,EACV,QAAQ,GACT,EAAE,qBAAqB,+BA4ZvB"}
|