@hkyhy/marsun-components-core 0.1.60 → 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.
@@ -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,6 @@
1
+ export declare function useFullscreen(defaultFullscreen?: boolean): {
2
+ fullscreen: boolean;
3
+ setFullscreen: import('react').Dispatch<import('react').SetStateAction<boolean>>;
4
+ toggle: () => void;
5
+ exit: () => void;
6
+ };
@@ -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';