@hkyhy/marsun-components-core 0.1.59 → 0.1.61
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 +4 -0
- package/dist/components/Layout/FullscreenBox/index.d.ts +28 -0
- package/dist/components/Layout/FullscreenBox/index.js +75 -0
- package/dist/components/Layout/FullscreenBox/index.js.map +1 -0
- package/dist/components/Layout/FullscreenBox/style.module.scss.js +10 -0
- package/dist/components/Layout/FullscreenBox/style.module.scss.js.map +1 -0
- package/dist/components/Layout/FullscreenBox/useFullscreen.d.ts +6 -0
- package/dist/components/Layout/FullscreenBox/useFullscreen.js +9 -0
- package/dist/components/Layout/FullscreenBox/useFullscreen.js.map +1 -0
- package/dist/components/Layout/index.d.ts +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +638 -632
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/utils/createMarsunRequest.d.ts +2 -0
- package/dist/utils/createMarsunRequest.js +63 -43
- package/dist/utils/createMarsunRequest.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -76,6 +76,10 @@ AgentHub / File 预览 / Llm 走子路径,避免无相关产品首包拖入重
|
|
|
76
76
|
|
|
77
77
|
> 0.1.54/0.1.55 因 typecheck 未发布;0.1.56 修 showcase;**0.1.57** PermissionBindPanel 勾选性能。
|
|
78
78
|
|
|
79
|
+
### HTTP(v0.1.58+)
|
|
80
|
+
|
|
81
|
+
`createMarsunRequest`:Marsun 信封 / 扁平 JSON 透传 / blob;`getResponseError`;`passThroughEnvelopeError`。**0.1.60** `isMarsunEnvelope`(拒绝 `{code:200,results}` 误判)+ FormData 不写死 JSON Content-Type。
|
|
82
|
+
|
|
79
83
|
项目可在 `src/styles/tokens.css` 扩展领域变量,详见 showcase 内 `frontend-dev-spec` → `theme.md`。
|
|
80
84
|
|
|
81
85
|
## 设计原则
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export type FullscreenBoxProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
className?: string;
|
|
5
|
+
/** 全屏时附加 class(如加大 padding) */
|
|
6
|
+
fullscreenClassName?: string;
|
|
7
|
+
fullscreen: boolean;
|
|
8
|
+
onFullscreenChange?: (fullscreen: boolean) => void;
|
|
9
|
+
/** Esc 退出,默认 true */
|
|
10
|
+
exitOnEsc?: boolean;
|
|
11
|
+
/** 全屏时锁定 body 滚动,默认 true */
|
|
12
|
+
lockScroll?: boolean;
|
|
13
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
|
|
14
|
+
/**
|
|
15
|
+
* CSS 铺满视口(非浏览器 Fullscreen API)。Esc 退出;z-index 1100 对齐业务浮层。
|
|
16
|
+
* 弹层(Modal / FormModal)须高于 1100(core `zIndexPopupBase` = 1200)。
|
|
17
|
+
*/
|
|
18
|
+
declare const FullscreenBox: React.FC<FullscreenBoxProps>;
|
|
19
|
+
export type FullscreenToggleProps = {
|
|
20
|
+
fullscreen: boolean;
|
|
21
|
+
onToggle: () => void;
|
|
22
|
+
className?: string;
|
|
23
|
+
/** 图标旁标题(如对比矩阵:点标题也可全屏) */
|
|
24
|
+
children?: ReactNode;
|
|
25
|
+
};
|
|
26
|
+
export declare const FullscreenToggle: React.FC<FullscreenToggleProps>;
|
|
27
|
+
export default FullscreenBox;
|
|
28
|
+
export { useFullscreen } from './useFullscreen';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip as c, Button as y } from "antd";
|
|
3
|
+
import n from "classnames";
|
|
4
|
+
import { useEffect as v } from "react";
|
|
5
|
+
import m from "./style.module.scss.js";
|
|
6
|
+
import { Minimize2 as b } from "../../Icons/Minimize2.js";
|
|
7
|
+
import { Maximize2 as w } from "../../Icons/Maximize2.js";
|
|
8
|
+
const B = ({
|
|
9
|
+
children: t,
|
|
10
|
+
className: s,
|
|
11
|
+
fullscreenClassName: i,
|
|
12
|
+
fullscreen: e,
|
|
13
|
+
onFullscreenChange: r,
|
|
14
|
+
exitOnEsc: l = !0,
|
|
15
|
+
lockScroll: a = !0,
|
|
16
|
+
...d
|
|
17
|
+
}) => (v(() => {
|
|
18
|
+
if (!e) return;
|
|
19
|
+
const u = (p) => {
|
|
20
|
+
!l || p.key !== "Escape" || document.querySelector(".ant-modal-wrap") || r == null || r(!1);
|
|
21
|
+
}, f = document.body.style.overflow;
|
|
22
|
+
return a && (document.body.style.overflow = "hidden"), document.addEventListener("keydown", u), () => {
|
|
23
|
+
a && (document.body.style.overflow = f), document.removeEventListener("keydown", u);
|
|
24
|
+
};
|
|
25
|
+
}, [l, e, a, r]), /* @__PURE__ */ o(
|
|
26
|
+
"div",
|
|
27
|
+
{
|
|
28
|
+
...d,
|
|
29
|
+
className: n(
|
|
30
|
+
"marsun-fullscreen-box",
|
|
31
|
+
m["marsun-fullscreen-box"],
|
|
32
|
+
e && m["marsun-fullscreen-box--open"],
|
|
33
|
+
s,
|
|
34
|
+
e && i
|
|
35
|
+
),
|
|
36
|
+
"data-fullscreen": e ? "1" : void 0,
|
|
37
|
+
children: t
|
|
38
|
+
}
|
|
39
|
+
)), L = ({
|
|
40
|
+
fullscreen: t,
|
|
41
|
+
onToggle: s,
|
|
42
|
+
className: i,
|
|
43
|
+
children: e
|
|
44
|
+
}) => /* @__PURE__ */ o(c, { title: t ? "退出全屏(Esc)" : "铺满全屏", children: /* @__PURE__ */ o(
|
|
45
|
+
y,
|
|
46
|
+
{
|
|
47
|
+
type: "text",
|
|
48
|
+
size: "small",
|
|
49
|
+
htmlType: "button",
|
|
50
|
+
className: n(
|
|
51
|
+
"marsun-fullscreen-toggle",
|
|
52
|
+
m["marsun-fullscreen-toggle"],
|
|
53
|
+
i
|
|
54
|
+
),
|
|
55
|
+
icon: t ? /* @__PURE__ */ o(b, { size: 16 }) : /* @__PURE__ */ o(w, { size: 16 }),
|
|
56
|
+
"aria-label": t ? "退出全屏" : "铺满全屏",
|
|
57
|
+
"aria-pressed": t,
|
|
58
|
+
onClick: s,
|
|
59
|
+
children: e ? /* @__PURE__ */ o(
|
|
60
|
+
"span",
|
|
61
|
+
{
|
|
62
|
+
className: n(
|
|
63
|
+
"marsun-fullscreen-toggle-title",
|
|
64
|
+
m["marsun-fullscreen-toggle-title"]
|
|
65
|
+
),
|
|
66
|
+
children: e
|
|
67
|
+
}
|
|
68
|
+
) : null
|
|
69
|
+
}
|
|
70
|
+
) });
|
|
71
|
+
export {
|
|
72
|
+
L as FullscreenToggle,
|
|
73
|
+
B as default
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Layout/FullscreenBox/index.tsx"],"sourcesContent":["import { Maximize2, Minimize2 } from '@/components/Icons';\nimport { Button, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport { useEffect, type HTMLAttributes, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type FullscreenBoxProps = {\n children: ReactNode;\n className?: string;\n /** 全屏时附加 class(如加大 padding) */\n fullscreenClassName?: string;\n fullscreen: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n /** Esc 退出,默认 true */\n exitOnEsc?: boolean;\n /** 全屏时锁定 body 滚动,默认 true */\n lockScroll?: boolean;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;\n\n/**\n * CSS 铺满视口(非浏览器 Fullscreen API)。Esc 退出;z-index 1100 对齐业务浮层。\n * 弹层(Modal / FormModal)须高于 1100(core `zIndexPopupBase` = 1200)。\n */\nconst FullscreenBox: React.FC<FullscreenBoxProps> = ({\n children,\n className,\n fullscreenClassName,\n fullscreen,\n onFullscreenChange,\n exitOnEsc = true,\n lockScroll = true,\n ...rest\n}) => {\n useEffect(() => {\n if (!fullscreen) return undefined;\n\n const onKey = (e: KeyboardEvent) => {\n if (!exitOnEsc || e.key !== 'Escape') return;\n if (document.querySelector('.ant-modal-wrap')) return;\n onFullscreenChange?.(false);\n };\n const prevOverflow = document.body.style.overflow;\n if (lockScroll) document.body.style.overflow = 'hidden';\n document.addEventListener('keydown', onKey);\n return () => {\n if (lockScroll) document.body.style.overflow = prevOverflow;\n document.removeEventListener('keydown', onKey);\n };\n }, [exitOnEsc, fullscreen, lockScroll, onFullscreenChange]);\n\n return (\n <div\n {...rest}\n className={classNames(\n 'marsun-fullscreen-box',\n styles['marsun-fullscreen-box'],\n fullscreen && styles['marsun-fullscreen-box--open'],\n className,\n fullscreen && fullscreenClassName,\n )}\n data-fullscreen={fullscreen ? '1' : undefined}\n >\n {children}\n </div>\n );\n};\n\nexport type FullscreenToggleProps = {\n fullscreen: boolean;\n onToggle: () => void;\n className?: string;\n /** 图标旁标题(如对比矩阵:点标题也可全屏) */\n children?: ReactNode;\n};\n\nexport const FullscreenToggle: React.FC<FullscreenToggleProps> = ({\n fullscreen,\n onToggle,\n className,\n children,\n}) => (\n <Tooltip title={fullscreen ? '退出全屏(Esc)' : '铺满全屏'}>\n <Button\n type=\"text\"\n size=\"small\"\n htmlType=\"button\"\n className={classNames(\n 'marsun-fullscreen-toggle',\n styles['marsun-fullscreen-toggle'],\n className,\n )}\n icon={fullscreen ? <Minimize2 size={16} /> : <Maximize2 size={16} />}\n aria-label={fullscreen ? '退出全屏' : '铺满全屏'}\n aria-pressed={fullscreen}\n onClick={onToggle}\n >\n {children ? (\n <span\n className={classNames(\n 'marsun-fullscreen-toggle-title',\n styles['marsun-fullscreen-toggle-title'],\n )}\n >\n {children}\n </span>\n ) : null}\n </Button>\n </Tooltip>\n);\n\nexport default FullscreenBox;\nexport { useFullscreen } from './useFullscreen';\n"],"names":["FullscreenBox","children","className","fullscreenClassName","fullscreen","onFullscreenChange","exitOnEsc","lockScroll","rest","useEffect","onKey","e","prevOverflow","jsx","classNames","styles","FullscreenToggle","onToggle","Tooltip","Button","Minimize2","Maximize2"],"mappings":";;;;;;;AAuBA,MAAMA,IAA8C,CAAC;AAAA,EACnD,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,GAAGC;AACL,OACEC,EAAU,MAAM;AACd,MAAI,CAACL,EAAY;AAEjB,QAAMM,IAAQ,CAACC,MAAqB;AAClC,IAAI,CAACL,KAAaK,EAAE,QAAQ,YACxB,SAAS,cAAc,iBAAiB,KAC5CN,KAAA,QAAAA,EAAqB;AAAA,EACvB,GACMO,IAAe,SAAS,KAAK,MAAM;AACzC,SAAIL,MAAY,SAAS,KAAK,MAAM,WAAW,WAC/C,SAAS,iBAAiB,WAAWG,CAAK,GACnC,MAAM;AACX,IAAIH,MAAY,SAAS,KAAK,MAAM,WAAWK,IAC/C,SAAS,oBAAoB,WAAWF,CAAK;AAAA,EAC/C;AACF,GAAG,CAACJ,GAAWF,GAAYG,GAAYF,CAAkB,CAAC,GAGxD,gBAAAQ;AAAA,EAAC;AAAA,EAAA;AAAA,IACE,GAAGL;AAAA,IACJ,WAAWM;AAAA,MACT;AAAA,MACAC,EAAO,uBAAuB;AAAA,MAC9BX,KAAcW,EAAO,6BAA6B;AAAA,MAClDb;AAAA,MACAE,KAAcD;AAAA,IAAA;AAAA,IAEhB,mBAAiBC,IAAa,MAAM;AAAA,IAEnC,UAAAH;AAAA,EAAA;AAAA,IAaMe,IAAoD,CAAC;AAAA,EAChE,YAAAZ;AAAA,EACA,UAAAa;AAAA,EACA,WAAAf;AAAA,EACA,UAAAD;AACF,MACE,gBAAAY,EAACK,GAAA,EAAQ,OAAOd,IAAa,cAAc,QACzC,UAAA,gBAAAS;AAAA,EAACM;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,MAAK;AAAA,IACL,UAAS;AAAA,IACT,WAAWL;AAAA,MACT;AAAA,MACAC,EAAO,0BAA0B;AAAA,MACjCb;AAAA,IAAA;AAAA,IAEF,MAAME,IAAa,gBAAAS,EAACO,GAAA,EAAU,MAAM,IAAI,IAAK,gBAAAP,EAACQ,GAAA,EAAU,MAAM,GAAA,CAAI;AAAA,IAClE,cAAYjB,IAAa,SAAS;AAAA,IAClC,gBAAcA;AAAA,IACd,SAASa;AAAA,IAER,UAAAhB,IACC,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC;AAAA,UACT;AAAA,UACAC,EAAO,gCAAgC;AAAA,QAAA;AAAA,QAGxC,UAAAd;AAAA,MAAA;AAAA,IAAA,IAED;AAAA,EAAA;AACN,EAAA,CACF;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"marsun-fullscreen-box": "_marsun-fullscreen-box_14tsc_1",
|
|
3
|
+
"marsun-fullscreen-box--open": "_marsun-fullscreen-box--open_14tsc_7",
|
|
4
|
+
"marsun-fullscreen-toggle": "_marsun-fullscreen-toggle_14tsc_21",
|
|
5
|
+
"marsun-fullscreen-toggle-title": "_marsun-fullscreen-toggle-title_14tsc_38"
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
e as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useState as r, useCallback as s } from "react";
|
|
2
|
+
function a(t = !1) {
|
|
3
|
+
const [l, e] = r(t), n = s(() => e((o) => !o), []), c = s(() => e(!1), []);
|
|
4
|
+
return { fullscreen: l, setFullscreen: e, toggle: n, exit: c };
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
a as useFullscreen
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useFullscreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFullscreen.js","sources":["../../../../src/components/Layout/FullscreenBox/useFullscreen.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport function useFullscreen(defaultFullscreen = false) {\n const [fullscreen, setFullscreen] = useState(defaultFullscreen);\n const toggle = useCallback(() => setFullscreen((v) => !v), []);\n const exit = useCallback(() => setFullscreen(false), []);\n return { fullscreen, setFullscreen, toggle, exit };\n}\n"],"names":["useFullscreen","defaultFullscreen","fullscreen","setFullscreen","useState","toggle","useCallback","v","exit"],"mappings":";AAEO,SAASA,EAAcC,IAAoB,IAAO;AACvD,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAASH,CAAiB,GACxDI,IAASC,EAAY,MAAMH,EAAc,CAACI,MAAM,CAACA,CAAC,GAAG,EAAE,GACvDC,IAAOF,EAAY,MAAMH,EAAc,EAAK,GAAG,CAAA,CAAE;AACvD,SAAO,EAAE,YAAAD,GAAY,eAAAC,GAAe,QAAAE,GAAQ,MAAAG,EAAA;AAC9C;"}
|
|
@@ -10,3 +10,5 @@ export { AgentAppShell } from './AgentAppShell';
|
|
|
10
10
|
export type { AgentAppShellProps } from './AgentAppShell';
|
|
11
11
|
export { default as ContentCard } from './ContentCard';
|
|
12
12
|
export type { ContentCardProps } from './ContentCard';
|
|
13
|
+
export { default as FullscreenBox, FullscreenToggle, useFullscreen } from './FullscreenBox';
|
|
14
|
+
export type { FullscreenBoxProps, FullscreenToggleProps } from './FullscreenBox';
|
package/dist/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export { REDIRECT_URL_PARAM, resolveRedirectUrl, buildLocationRedirectUrl, build
|
|
|
11
11
|
export type { BuildLoginPathOptions } from './utils/authRedirect';
|
|
12
12
|
export { DEFAULT_LAST_ACTIVITY_STORAGE_KEY, getLastActivityTime, touchLastActivity, clearLastActivity, } from './utils/sessionActivity';
|
|
13
13
|
export { USER_ROLE_PERMISSIONS_KEY, PERMISSION_DEFINITIONS_KEY, PERMISSIONS_STORAGE_KEY, loadUserRolePermissions, saveUserRolePermissions, loadPermissionDefinitions, savePermissionDefinitions, getStoredUserPermissions, getStoredPermissionMap, } from './utils/permissionStorage';
|
|
14
|
-
export { createMarsunRequest } from './utils/createMarsunRequest';
|
|
14
|
+
export { createMarsunRequest, isMarsunEnvelope } from './utils/createMarsunRequest';
|
|
15
15
|
export type { MarsunApiResponse, CreateMarsunRequestOptions, MarsunRequestClient, MarsunRequestErrorResponse, } from './utils/createMarsunRequest';
|
|
16
16
|
export type { UserRolePermissions, PermissionDefinition, PermissionDefinitionsResponse, } from './types/auth';
|
|
17
17
|
export { buildDepartmentPathMapFromTree, buildDepartmentPathMapFromFlat, getDepartmentPath, buildLeafDepartmentPathMap, buildDepartmentPathMaps, mergeDepartmentPathMaps, toDepartmentPathMaps, } from './utils/department/departmentPath';
|