@lobehub/ui 5.0.1 → 5.1.1
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/es/Accordion/Accordion.d.mts +2 -2
- package/es/Accordion/AccordionItem.d.mts +2 -2
- package/es/ActionIcon/ActionIcon.d.mts +2 -2
- package/es/Alert/Alert.d.mts +2 -2
- package/es/AutoComplete/Select.d.mts +2 -2
- package/es/Avatar/AvatarGroup/index.d.mts +2 -2
- package/es/Burger/Burger.d.mts +2 -2
- package/es/CodeDiff/CodeDiff.d.mts +2 -2
- package/es/CodeDiff/PatchDiff.d.mts +2 -2
- package/es/CodeEditor/CodeEditor.d.mts +2 -2
- package/es/Collapse/Collapse.d.mts +2 -2
- package/es/ConfigProvider/index.d.mts +2 -2
- package/es/CopyButton/CopyButton.d.mts +2 -2
- package/es/DatePicker/DatePicker.d.mts +2 -2
- package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
- package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
- package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
- package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
- package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
- package/es/Drawer/Drawer.d.mts +2 -2
- package/es/Dropdown/Dropdown.d.mts +2 -2
- package/es/EditableText/EditableText.d.mts +2 -2
- package/es/EditorSlashMenu/atoms.d.mts +13 -13
- package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
- package/es/Flex/FlexBasic.d.mts +2 -2
- package/es/FontLoader/index.d.mts +2 -2
- package/es/Footer/Footer.d.mts +2 -2
- package/es/Form/components/FormGroup.d.mts +2 -2
- package/es/Form/components/FormItem.d.mts +2 -2
- package/es/Form/components/FormSubmitFooter.d.mts +2 -2
- package/es/FormModal/FormModal.d.mts +2 -2
- package/es/Freeze/Freeze.d.mts +2 -2
- package/es/GuideCard/GuideCard.d.mts +2 -2
- package/es/Header/Header.d.mts +2 -2
- package/es/Highlighter/Highlighter.d.mts +2 -2
- package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
- package/es/Hotkey/Hotkey.d.mts +2 -2
- package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
- package/es/Icon/Icon.d.mts +2 -2
- package/es/Icon/components/IconProvider.d.mts +3 -3
- package/es/Image/PreviewGroup.d.mts +2 -2
- package/es/ImageSelect/ImageSelect.d.mts +2 -2
- package/es/Input/Input.d.mts +2 -2
- package/es/Input/InputNumber.d.mts +2 -2
- package/es/Input/InputOPT.d.mts +2 -2
- package/es/Input/InputPassword.d.mts +2 -2
- package/es/Input/TextArea.d.mts +2 -2
- package/es/Layout/components/LayoutFooter.d.mts +2 -2
- package/es/Layout/components/LayoutHeader.d.mts +2 -2
- package/es/Layout/components/LayoutMain.d.mts +2 -2
- package/es/Layout/components/LayoutSidebar.d.mts +2 -2
- package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
- package/es/Layout/components/LayoutToc.d.mts +2 -2
- package/es/List/ListItem/index.d.mts +2 -2
- package/es/Markdown/Markdown.d.mts +2 -2
- package/es/Markdown/Typography.d.mts +2 -2
- package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
- package/es/MaskShadow/MaskShadow.d.mts +2 -2
- package/es/Menu/Menu.d.mts +2 -2
- package/es/Mermaid/Mermaid.d.mts +2 -2
- package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
- package/es/Modal/Modal.d.mts +2 -2
- package/es/Modal/ModalProvider.d.mts +2 -2
- package/es/Modal/imperative.d.mts +2 -2
- package/es/MotionProvider/index.d.mts +2 -2
- package/es/Popover/ArrowIcon.d.mts +2 -2
- package/es/Popover/atoms.d.mts +9 -9
- package/es/Popover/context.d.mts +2 -2
- package/es/SearchBar/SearchBar.d.mts +2 -2
- package/es/Segmented/Segmented.d.mts +2 -2
- package/es/Select/Select.d.mts +2 -2
- package/es/SideNav/SideNav.d.mts +2 -2
- package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
- package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
- package/es/Toc/Toc.d.mts +2 -2
- package/es/Video/index.d.mts +2 -2
- package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
- package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
- package/es/awesome/Features/Features.d.mts +2 -2
- package/es/awesome/Giscus/Giscus.d.mts +2 -2
- package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
- package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
- package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
- package/es/awesome/Hero/Hero.d.mts +2 -2
- package/es/awesome/Spline/Spine.d.mts +2 -2
- package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
- package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
- package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
- package/es/base-ui/ContextMenu/ContextMenuHost.d.mts +3 -3
- package/es/base-ui/DropdownMenu/DropdownMenu.d.mts +2 -2
- package/es/base-ui/Modal/Modal.d.mts +8 -0
- package/es/base-ui/Modal/Modal.mjs +230 -0
- package/es/base-ui/Modal/Modal.mjs.map +1 -0
- package/es/base-ui/Modal/atoms.d.mts +100 -0
- package/es/base-ui/Modal/atoms.mjs +187 -0
- package/es/base-ui/Modal/atoms.mjs.map +1 -0
- package/es/base-ui/Modal/constants.d.mts +10 -0
- package/es/base-ui/Modal/constants.mjs +27 -0
- package/es/base-ui/Modal/constants.mjs.map +1 -0
- package/es/base-ui/Modal/context.d.mts +9 -0
- package/es/base-ui/Modal/context.mjs +14 -0
- package/es/base-ui/Modal/context.mjs.map +1 -0
- package/es/base-ui/Modal/imperative.d.mts +25 -0
- package/es/base-ui/Modal/imperative.mjs +221 -0
- package/es/base-ui/Modal/imperative.mjs.map +1 -0
- package/es/base-ui/Modal/index.d.mts +6 -0
- package/es/base-ui/Modal/style.mjs +295 -0
- package/es/base-ui/Modal/style.mjs.map +1 -0
- package/es/base-ui/Modal/type.d.mts +110 -0
- package/es/base-ui/Select/Select.d.mts +2 -2
- package/es/base-ui/Select/atoms.d.mts +19 -19
- package/es/base-ui/Switch/Switch.d.mts +2 -2
- package/es/base-ui/Toast/imperative.d.mts +2 -2
- package/es/base-ui/index.d.mts +8 -1
- package/es/base-ui/index.mjs +6 -1
- package/es/brand/LobeChat/index.d.mts +2 -2
- package/es/brand/LobeHub/index.d.mts +2 -2
- package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
- package/es/brand/LogoThree/index.d.mts +2 -2
- package/es/chat/BackBottom/BackBottom.d.mts +2 -2
- package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
- package/es/chat/ChatItem/ChatItem.d.mts +2 -2
- package/es/chat/ChatList/ChatList.d.mts +2 -2
- package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
- package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
- package/es/chat/MessageInput/MessageInput.d.mts +2 -2
- package/es/chat/MessageModal/MessageModal.d.mts +2 -2
- package/es/color/ColorScales/index.d.mts +2 -2
- package/es/color/CssVar/index.d.mts +2 -2
- package/es/i18n/context.d.mts +2 -2
- package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
- package/es/icons/lucideExtra/CreateBotIcon.d.mts +2 -2
- package/es/icons/lucideExtra/DiscordIcon.d.mts +2 -2
- package/es/icons/lucideExtra/GlobeOffIcon.d.mts +2 -2
- package/es/icons/lucideExtra/GroupBotIcon.d.mts +2 -2
- package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +3 -3
- package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
- package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
- package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
- package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
- package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
- package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
- package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
- package/es/icons/lucideExtra/SkillsIcon.d.mts +2 -2
- package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +2 -2
- package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
- package/es/mdx/Mdx/index.d.mts +2 -2
- package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
- package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
- package/es/mobile/TabBar/TabBar.d.mts +2 -2
- package/es/storybook/StoryBook/index.d.mts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ModalContextValue } from "./type.mjs";
|
|
2
|
+
import * as react122 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/base-ui/Modal/context.d.ts
|
|
5
|
+
declare const ModalContext: react122.Context<ModalContextValue>;
|
|
6
|
+
declare const useModalContext: () => ModalContextValue;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { ModalContext, useModalContext };
|
|
9
|
+
//# sourceMappingURL=context.d.mts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { createContext, use } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/base-ui/Modal/context.ts
|
|
6
|
+
const ModalContext = createContext({
|
|
7
|
+
close: () => void 0,
|
|
8
|
+
setCanDismissByClickOutside: () => void 0
|
|
9
|
+
});
|
|
10
|
+
const useModalContext = () => use(ModalContext);
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { ModalContext, useModalContext };
|
|
14
|
+
//# sourceMappingURL=context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.mjs","names":[],"sources":["../../../src/base-ui/Modal/context.ts"],"sourcesContent":["'use client';\n\nimport { createContext, use } from 'react';\n\nimport type { ModalContextValue } from './type';\n\nexport const ModalContext = createContext<ModalContextValue>({\n close: () => undefined,\n setCanDismissByClickOutside: () => undefined,\n});\n\nexport const useModalContext = () => use(ModalContext);\n"],"mappings":";;;;;AAMA,MAAa,eAAe,cAAiC;CAC3D,aAAa;CACb,mCAAmC;CACpC,CAAC;AAEF,MAAa,wBAAwB,IAAI,aAAa"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ImperativeModalProps, ModalConfirmConfig, ModalInstance } from "./type.mjs";
|
|
2
|
+
import * as react123 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/base-ui/Modal/imperative.d.ts
|
|
5
|
+
interface ModalHostProps {
|
|
6
|
+
root?: HTMLElement | ShadowRoot | null;
|
|
7
|
+
}
|
|
8
|
+
interface ModalSystem {
|
|
9
|
+
confirmModal: (config: ModalConfirmConfig) => {
|
|
10
|
+
close: () => void;
|
|
11
|
+
destroy: () => void;
|
|
12
|
+
};
|
|
13
|
+
createModal: (props: ImperativeModalProps) => ModalInstance;
|
|
14
|
+
ModalHost: React.FC<ModalHostProps>;
|
|
15
|
+
}
|
|
16
|
+
declare function createModalSystem(): ModalSystem;
|
|
17
|
+
declare const ModalHost: react123.FC<ModalHostProps>;
|
|
18
|
+
declare const createModal: (props: ImperativeModalProps) => ModalInstance;
|
|
19
|
+
declare const confirmModal: (config: ModalConfirmConfig) => {
|
|
20
|
+
close: () => void;
|
|
21
|
+
destroy: () => void;
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { ModalHost, ModalHostProps, ModalSystem, confirmModal, createModal, createModalSystem };
|
|
25
|
+
//# sourceMappingURL=imperative.d.mts.map
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useIsClient } from "../../hooks/useIsClient.mjs";
|
|
4
|
+
import { useAppElement } from "../../ThemeProvider/AppElementContext.mjs";
|
|
5
|
+
import { registerDevSingleton } from "../../utils/devSingleton.mjs";
|
|
6
|
+
import { styles } from "./style.mjs";
|
|
7
|
+
import { ModalBackdrop, ModalClose, ModalContent, ModalFooter, ModalHeader, ModalPopup, ModalPortal, ModalRoot, ModalTitle } from "./atoms.mjs";
|
|
8
|
+
import { ModalContext, useModalContext } from "./context.mjs";
|
|
9
|
+
import { memo, useCallback, useEffect, useState, useSyncExternalStore } from "react";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { cx } from "antd-style";
|
|
12
|
+
import { createPortal } from "react-dom";
|
|
13
|
+
|
|
14
|
+
//#region src/base-ui/Modal/imperative.tsx
|
|
15
|
+
const ModalPortalWrapper = ({ children, root }) => {
|
|
16
|
+
const appElement = useAppElement();
|
|
17
|
+
return createPortal(children, root ?? appElement ?? document.body);
|
|
18
|
+
};
|
|
19
|
+
const ConfirmBody = ({ config }) => {
|
|
20
|
+
const { close } = useModalContext();
|
|
21
|
+
const [loading, setLoading] = useState(false);
|
|
22
|
+
const { cancelText = "Cancel", content, okButtonProps, okText = "OK", onCancel, onOk } = config;
|
|
23
|
+
const { danger, className: okUserCls, ...restOkProps } = okButtonProps ?? {};
|
|
24
|
+
const handleCancel = useCallback(() => {
|
|
25
|
+
close();
|
|
26
|
+
onCancel?.();
|
|
27
|
+
}, [close, onCancel]);
|
|
28
|
+
const handleOk = useCallback(async () => {
|
|
29
|
+
if (onOk) try {
|
|
30
|
+
const result = onOk();
|
|
31
|
+
if (result && typeof result.then === "function") {
|
|
32
|
+
setLoading(true);
|
|
33
|
+
await result;
|
|
34
|
+
setLoading(false);
|
|
35
|
+
}
|
|
36
|
+
} catch {
|
|
37
|
+
setLoading(false);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
close();
|
|
41
|
+
}, [close, onOk]);
|
|
42
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [content && /* @__PURE__ */ jsx("div", {
|
|
43
|
+
style: { padding: "16px 24px" },
|
|
44
|
+
children: content
|
|
45
|
+
}), /* @__PURE__ */ jsxs(ModalFooter, { children: [/* @__PURE__ */ jsx("button", {
|
|
46
|
+
className: cx(styles.buttonBase, styles.cancelButton),
|
|
47
|
+
type: "button",
|
|
48
|
+
onClick: handleCancel,
|
|
49
|
+
children: cancelText
|
|
50
|
+
}), /* @__PURE__ */ jsxs("button", {
|
|
51
|
+
...restOkProps,
|
|
52
|
+
disabled: loading,
|
|
53
|
+
type: "button",
|
|
54
|
+
className: cx(styles.buttonBase, danger ? styles.dangerOkButton : styles.okButton, okUserCls),
|
|
55
|
+
onClick: handleOk,
|
|
56
|
+
children: [loading && /* @__PURE__ */ jsx("span", { className: styles.loadingSpinner }), okText]
|
|
57
|
+
})] })] });
|
|
58
|
+
};
|
|
59
|
+
ConfirmBody.displayName = "ConfirmBody";
|
|
60
|
+
let systemSeed = 0;
|
|
61
|
+
function createModalSystem() {
|
|
62
|
+
const systemId = systemSeed++;
|
|
63
|
+
const singletonName = systemId === 0 ? "BaseModalHost" : `BaseModalHost-${systemId}`;
|
|
64
|
+
let modalStack = [];
|
|
65
|
+
let modalSeed = 0;
|
|
66
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
67
|
+
const notify = () => listeners.forEach((l) => l());
|
|
68
|
+
const subscribe = (l) => {
|
|
69
|
+
listeners.add(l);
|
|
70
|
+
return () => listeners.delete(l);
|
|
71
|
+
};
|
|
72
|
+
const EMPTY = [];
|
|
73
|
+
const getSnapshot = () => modalStack;
|
|
74
|
+
const getServerSnapshot = () => EMPTY;
|
|
75
|
+
const updateModal = (id, next) => {
|
|
76
|
+
let changed = false;
|
|
77
|
+
modalStack = modalStack.map((item) => {
|
|
78
|
+
if (item.id !== id) return item;
|
|
79
|
+
changed = true;
|
|
80
|
+
return {
|
|
81
|
+
...item,
|
|
82
|
+
props: {
|
|
83
|
+
...item.props,
|
|
84
|
+
...next
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
if (changed) notify();
|
|
89
|
+
};
|
|
90
|
+
const closeModal = (id) => {
|
|
91
|
+
updateModal(id, { open: false });
|
|
92
|
+
};
|
|
93
|
+
const destroyModal = (id) => {
|
|
94
|
+
const next = modalStack.filter((item) => item.id !== id);
|
|
95
|
+
if (next.length === modalStack.length) return;
|
|
96
|
+
modalStack = next;
|
|
97
|
+
notify();
|
|
98
|
+
};
|
|
99
|
+
const StackItem = memo(({ entry }) => {
|
|
100
|
+
const { id, props } = entry;
|
|
101
|
+
const { children, classNames, content, footer, maskClosable, onOpenChange, onOpenChangeComplete, open, styles: semanticStyles, title, width } = props;
|
|
102
|
+
const isOpen = open ?? true;
|
|
103
|
+
const handleOpenChange = useCallback((nextOpen, eventDetails) => {
|
|
104
|
+
if (!nextOpen && maskClosable === false && eventDetails?.reason === "outside-press") return;
|
|
105
|
+
if (!nextOpen) closeModal(id);
|
|
106
|
+
onOpenChange?.(nextOpen);
|
|
107
|
+
}, [
|
|
108
|
+
id,
|
|
109
|
+
maskClosable,
|
|
110
|
+
onOpenChange
|
|
111
|
+
]);
|
|
112
|
+
const handleExitComplete = useCallback(() => {
|
|
113
|
+
onOpenChangeComplete?.(false);
|
|
114
|
+
destroyModal(id);
|
|
115
|
+
}, [id, onOpenChangeComplete]);
|
|
116
|
+
const close = useCallback(() => closeModal(id), [id]);
|
|
117
|
+
const setCanDismissByClickOutside = useCallback((value) => updateModal(id, { maskClosable: value }), [id]);
|
|
118
|
+
const showTitle = title !== void 0 && title !== false && title !== null;
|
|
119
|
+
return /* @__PURE__ */ jsx(ModalContext, {
|
|
120
|
+
value: {
|
|
121
|
+
close,
|
|
122
|
+
setCanDismissByClickOutside
|
|
123
|
+
},
|
|
124
|
+
children: /* @__PURE__ */ jsx(ModalRoot, {
|
|
125
|
+
open: isOpen,
|
|
126
|
+
onExitComplete: handleExitComplete,
|
|
127
|
+
onOpenChange: handleOpenChange,
|
|
128
|
+
children: /* @__PURE__ */ jsxs(ModalPortal, { children: [/* @__PURE__ */ jsx(ModalBackdrop, {
|
|
129
|
+
className: classNames?.backdrop,
|
|
130
|
+
style: semanticStyles?.backdrop
|
|
131
|
+
}), /* @__PURE__ */ jsxs(ModalPopup, {
|
|
132
|
+
className: classNames?.popup,
|
|
133
|
+
popupStyle: semanticStyles?.popup,
|
|
134
|
+
width,
|
|
135
|
+
children: [
|
|
136
|
+
showTitle && /* @__PURE__ */ jsxs(ModalHeader, {
|
|
137
|
+
className: classNames?.header,
|
|
138
|
+
style: semanticStyles?.header,
|
|
139
|
+
children: [/* @__PURE__ */ jsx(ModalTitle, {
|
|
140
|
+
className: classNames?.title,
|
|
141
|
+
style: semanticStyles?.title,
|
|
142
|
+
children: title
|
|
143
|
+
}), /* @__PURE__ */ jsx(ModalClose, {
|
|
144
|
+
className: classNames?.close,
|
|
145
|
+
style: semanticStyles?.close
|
|
146
|
+
})]
|
|
147
|
+
}),
|
|
148
|
+
/* @__PURE__ */ jsx(ModalContent, {
|
|
149
|
+
className: classNames?.content,
|
|
150
|
+
style: semanticStyles?.content,
|
|
151
|
+
children: content ?? children
|
|
152
|
+
}),
|
|
153
|
+
footer
|
|
154
|
+
]
|
|
155
|
+
})] })
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
StackItem.displayName = "ModalStackItem";
|
|
160
|
+
const StackRenderer = memo(({ stack }) => {
|
|
161
|
+
if (!useIsClient()) return null;
|
|
162
|
+
return stack.map((entry) => /* @__PURE__ */ jsx(StackItem, { entry }, entry.id));
|
|
163
|
+
});
|
|
164
|
+
StackRenderer.displayName = "ModalStackRenderer";
|
|
165
|
+
const Host = ({ root }) => {
|
|
166
|
+
const stack = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
167
|
+
const isClient = useIsClient();
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (!isClient) return;
|
|
170
|
+
return registerDevSingleton(singletonName, root ?? document.body);
|
|
171
|
+
}, [isClient, root]);
|
|
172
|
+
if (!isClient) return null;
|
|
173
|
+
if (stack.length === 0) return null;
|
|
174
|
+
return /* @__PURE__ */ jsx(ModalPortalWrapper, {
|
|
175
|
+
root,
|
|
176
|
+
children: /* @__PURE__ */ jsx(StackRenderer, { stack })
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
const create = (props) => {
|
|
180
|
+
const id = `base-modal-${Date.now()}-${modalSeed++}`;
|
|
181
|
+
modalStack = [...modalStack, {
|
|
182
|
+
id,
|
|
183
|
+
props: {
|
|
184
|
+
...props,
|
|
185
|
+
open: props.open ?? true
|
|
186
|
+
}
|
|
187
|
+
}];
|
|
188
|
+
notify();
|
|
189
|
+
return {
|
|
190
|
+
close: () => closeModal(id),
|
|
191
|
+
destroy: () => destroyModal(id),
|
|
192
|
+
setCanDismissByClickOutside: (value) => updateModal(id, { maskClosable: value }),
|
|
193
|
+
update: (nextProps) => updateModal(id, nextProps)
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
const confirm = (config) => {
|
|
197
|
+
const instance = create({
|
|
198
|
+
content: /* @__PURE__ */ jsx(ConfirmBody, { config }),
|
|
199
|
+
styles: { content: { padding: 0 } },
|
|
200
|
+
title: config.title,
|
|
201
|
+
width: 420
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
close: instance.close,
|
|
205
|
+
destroy: instance.destroy
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
ModalHost: Host,
|
|
210
|
+
confirmModal: confirm,
|
|
211
|
+
createModal: create
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const defaultSystem = createModalSystem();
|
|
215
|
+
const ModalHost = defaultSystem.ModalHost;
|
|
216
|
+
const createModal = defaultSystem.createModal;
|
|
217
|
+
const confirmModal = defaultSystem.confirmModal;
|
|
218
|
+
|
|
219
|
+
//#endregion
|
|
220
|
+
export { ModalHost, confirmModal, createModal, createModalSystem };
|
|
221
|
+
//# sourceMappingURL=imperative.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imperative.mjs","names":["modalStack: ModalStackEntry[]","EMPTY: ModalStackEntry[]"],"sources":["../../../src/base-ui/Modal/imperative.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport type { ReactNode } from 'react';\nimport { memo, useCallback, useEffect, useState, useSyncExternalStore } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useAppElement } from '@/ThemeProvider';\nimport { registerDevSingleton } from '@/utils/devSingleton';\n\nimport {\n ModalBackdrop,\n ModalClose,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalPopup,\n ModalPortal,\n ModalRoot,\n ModalTitle,\n} from './atoms';\nimport { ModalContext, useModalContext } from './context';\nimport { styles } from './style';\nimport type { ImperativeModalProps, ModalConfirmConfig, ModalInstance } from './type';\n\n// --- Shared types ---\n\ntype ModalStackEntry = {\n id: string;\n props: ImperativeModalProps;\n};\n\n// --- Shared components (stack-independent) ---\n\nconst ModalPortalWrapper = ({\n children,\n root,\n}: {\n children: ReactNode;\n root?: HTMLElement | ShadowRoot | null;\n}) => {\n const appElement = useAppElement();\n const container = root ?? appElement ?? document.body;\n return createPortal(children, container);\n};\n\nconst ConfirmBody = ({ config }: { config: ModalConfirmConfig }) => {\n const { close } = useModalContext();\n const [loading, setLoading] = useState(false);\n\n const { cancelText = 'Cancel', content, okButtonProps, okText = 'OK', onCancel, onOk } = config;\n\n const { danger, className: okUserCls, ...restOkProps } = okButtonProps ?? {};\n\n const handleCancel = useCallback(() => {\n close();\n onCancel?.();\n }, [close, onCancel]);\n\n const handleOk = useCallback(async () => {\n if (onOk) {\n try {\n const result = onOk();\n if (result && typeof (result as any).then === 'function') {\n setLoading(true);\n await result;\n setLoading(false);\n }\n } catch {\n setLoading(false);\n return;\n }\n }\n close();\n }, [close, onOk]);\n\n return (\n <>\n {content && <div style={{ padding: '16px 24px' }}>{content}</div>}\n <ModalFooter>\n <button\n className={cx(styles.buttonBase, styles.cancelButton)}\n type=\"button\"\n onClick={handleCancel}\n >\n {cancelText}\n </button>\n <button\n {...restOkProps}\n disabled={loading}\n type=\"button\"\n className={cx(\n styles.buttonBase,\n danger ? styles.dangerOkButton : styles.okButton,\n okUserCls,\n )}\n onClick={handleOk}\n >\n {loading && <span className={styles.loadingSpinner} />}\n {okText}\n </button>\n </ModalFooter>\n </>\n );\n};\nConfirmBody.displayName = 'ConfirmBody';\n\n// --- Factory ---\n\nexport interface ModalHostProps {\n root?: HTMLElement | ShadowRoot | null;\n}\n\nexport interface ModalSystem {\n confirmModal: (config: ModalConfirmConfig) => { close: () => void; destroy: () => void };\n createModal: (props: ImperativeModalProps) => ModalInstance;\n ModalHost: React.FC<ModalHostProps>;\n}\n\nlet systemSeed = 0;\n\nexport function createModalSystem(): ModalSystem {\n const systemId = systemSeed++;\n const singletonName = systemId === 0 ? 'BaseModalHost' : `BaseModalHost-${systemId}`;\n\n // --- Stack state (isolated per system) ---\n let modalStack: ModalStackEntry[] = [];\n let modalSeed = 0;\n const listeners = new Set<() => void>();\n\n const notify = () => listeners.forEach((l) => l());\n const subscribe = (l: () => void) => {\n listeners.add(l);\n return () => listeners.delete(l);\n };\n const EMPTY: ModalStackEntry[] = [];\n const getSnapshot = () => modalStack;\n const getServerSnapshot = () => EMPTY;\n\n // --- Stack operations ---\n\n const updateModal = (id: string, next: Partial<ImperativeModalProps>) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n changed = true;\n return { ...item, props: { ...item.props, ...next } };\n });\n if (changed) notify();\n };\n\n const closeModal = (id: string) => {\n updateModal(id, { open: false });\n };\n\n const destroyModal = (id: string) => {\n const next = modalStack.filter((item) => item.id !== id);\n if (next.length === modalStack.length) return;\n modalStack = next;\n notify();\n };\n\n // --- Stack Item (captures operations via closure) ---\n\n const StackItem = memo(({ entry }: { entry: ModalStackEntry }) => {\n const { id, props } = entry;\n const {\n children,\n classNames,\n content,\n footer,\n maskClosable,\n onOpenChange,\n onOpenChangeComplete,\n open,\n styles: semanticStyles,\n title,\n width,\n } = props;\n\n const isOpen = open ?? true;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean, eventDetails?: { reason: string }) => {\n if (!nextOpen && maskClosable === false && eventDetails?.reason === 'outside-press') return;\n if (!nextOpen) closeModal(id);\n onOpenChange?.(nextOpen);\n },\n [id, maskClosable, onOpenChange],\n );\n\n const handleExitComplete = useCallback(() => {\n onOpenChangeComplete?.(false);\n destroyModal(id);\n }, [id, onOpenChangeComplete]);\n\n const close = useCallback(() => closeModal(id), [id]);\n const setCanDismissByClickOutside = useCallback(\n (value: boolean) => updateModal(id, { maskClosable: value }),\n [id],\n );\n\n const showTitle = title !== undefined && title !== false && title !== null;\n\n return (\n <ModalContext value={{ close, setCanDismissByClickOutside }}>\n <ModalRoot\n open={isOpen}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n >\n <ModalPortal>\n <ModalBackdrop className={classNames?.backdrop} style={semanticStyles?.backdrop} />\n <ModalPopup\n className={classNames?.popup}\n popupStyle={semanticStyles?.popup}\n width={width}\n >\n {showTitle && (\n <ModalHeader className={classNames?.header} style={semanticStyles?.header}>\n <ModalTitle className={classNames?.title} style={semanticStyles?.title}>\n {title}\n </ModalTitle>\n <ModalClose className={classNames?.close} style={semanticStyles?.close} />\n </ModalHeader>\n )}\n <ModalContent className={classNames?.content} style={semanticStyles?.content}>\n {content ?? children}\n </ModalContent>\n {footer}\n </ModalPopup>\n </ModalPortal>\n </ModalRoot>\n </ModalContext>\n );\n });\n StackItem.displayName = 'ModalStackItem';\n\n const StackRenderer = memo(({ stack }: { stack: ModalStackEntry[] }) => {\n const isClient = useIsClient();\n if (!isClient) return null;\n return stack.map((entry) => <StackItem entry={entry} key={entry.id} />);\n });\n StackRenderer.displayName = 'ModalStackRenderer';\n\n // --- ModalHost ---\n\n const Host = ({ root }: ModalHostProps) => {\n const stack = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const isClient = useIsClient();\n\n useEffect(() => {\n if (!isClient) return;\n const scope = root ?? document.body;\n return registerDevSingleton(singletonName, scope);\n }, [isClient, root]);\n\n if (!isClient) return null;\n if (stack.length === 0) return null;\n\n return (\n <ModalPortalWrapper root={root}>\n <StackRenderer stack={stack} />\n </ModalPortalWrapper>\n );\n };\n\n // --- createModal ---\n\n const create = (props: ImperativeModalProps): ModalInstance => {\n const id = `base-modal-${Date.now()}-${modalSeed++}`;\n modalStack = [...modalStack, { id, props: { ...props, open: props.open ?? true } }];\n notify();\n\n return {\n close: () => closeModal(id),\n destroy: () => destroyModal(id),\n setCanDismissByClickOutside: (value) => updateModal(id, { maskClosable: value }),\n update: (nextProps) => updateModal(id, nextProps),\n };\n };\n\n // --- confirmModal ---\n\n const confirm = (config: ModalConfirmConfig) => {\n const instance = create({\n content: <ConfirmBody config={config} />,\n styles: { content: { padding: 0 } },\n title: config.title,\n width: 420,\n });\n\n return {\n close: instance.close,\n destroy: instance.destroy,\n };\n };\n\n return { ModalHost: Host, confirmModal: confirm, createModal: create };\n}\n\n// --- Default global instance (backward compatible) ---\n\nconst defaultSystem = createModalSystem();\nexport const ModalHost = defaultSystem.ModalHost;\nexport const createModal = defaultSystem.createModal;\nexport const confirmModal = defaultSystem.confirmModal;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ModalBackdrop, ModalBackdropProps, ModalClose, ModalCloseProps, ModalContent, ModalContentProps, ModalDescription, ModalDescriptionProps, ModalFooter, ModalFooterProps, ModalHeader, ModalHeaderProps, ModalPopup, ModalPopupProps, ModalPortal, ModalPortalProps, ModalRoot, ModalRootProps, ModalTitle, ModalTitleProps, ModalTrigger, ModalTriggerProps, ModalViewport, ModalViewportProps, useModalActions, useModalOpen } from "./atoms.mjs";
|
|
2
|
+
import { backdropTransition, modalMotionConfig } from "./constants.mjs";
|
|
3
|
+
import { BaseModalProps, ImperativeModalProps, ModalComponentProps, ModalConfirmConfig, ModalContextValue, ModalInstance } from "./type.mjs";
|
|
4
|
+
import { ModalContext, useModalContext } from "./context.mjs";
|
|
5
|
+
import { ModalHost, ModalHostProps, ModalSystem, confirmModal, createModal, createModalSystem } from "./imperative.mjs";
|
|
6
|
+
import { Modal } from "./Modal.mjs";
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { createStaticStyles } from "antd-style";
|
|
2
|
+
|
|
3
|
+
//#region src/base-ui/Modal/style.ts
|
|
4
|
+
const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => ({
|
|
5
|
+
backdrop: css$1`
|
|
6
|
+
position: fixed;
|
|
7
|
+
z-index: 1000;
|
|
8
|
+
inset: 0;
|
|
9
|
+
|
|
10
|
+
background: color-mix(in srgb, ${cssVar$1.colorBgContainer} 60%, transparent);
|
|
11
|
+
|
|
12
|
+
transition: opacity 150ms ease-out;
|
|
13
|
+
|
|
14
|
+
&[data-starting-style],
|
|
15
|
+
&[data-ending-style] {
|
|
16
|
+
opacity: 0;
|
|
17
|
+
}
|
|
18
|
+
`,
|
|
19
|
+
close: css$1`
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
|
|
22
|
+
position: absolute;
|
|
23
|
+
inset-block-start: 12px;
|
|
24
|
+
inset-inline-end: 12px;
|
|
25
|
+
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
|
|
30
|
+
width: 32px;
|
|
31
|
+
height: 32px;
|
|
32
|
+
padding: 0;
|
|
33
|
+
border: none;
|
|
34
|
+
border-radius: ${cssVar$1.borderRadiusSM};
|
|
35
|
+
|
|
36
|
+
color: ${cssVar$1.colorTextTertiary};
|
|
37
|
+
|
|
38
|
+
background: transparent;
|
|
39
|
+
|
|
40
|
+
transition: all 150ms ease-out;
|
|
41
|
+
|
|
42
|
+
&:hover {
|
|
43
|
+
color: ${cssVar$1.colorText};
|
|
44
|
+
background: ${cssVar$1.colorFillSecondary};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&:focus-visible {
|
|
48
|
+
outline: 2px solid ${cssVar$1.colorPrimaryBorder};
|
|
49
|
+
outline-offset: 1px;
|
|
50
|
+
}
|
|
51
|
+
`,
|
|
52
|
+
closeInline: css$1`
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
|
|
59
|
+
width: 32px;
|
|
60
|
+
height: 32px;
|
|
61
|
+
padding: 0;
|
|
62
|
+
border: none;
|
|
63
|
+
border-radius: ${cssVar$1.borderRadiusSM};
|
|
64
|
+
|
|
65
|
+
color: ${cssVar$1.colorTextTertiary};
|
|
66
|
+
|
|
67
|
+
background: transparent;
|
|
68
|
+
|
|
69
|
+
transition: all 150ms ease-out;
|
|
70
|
+
|
|
71
|
+
&:hover {
|
|
72
|
+
color: ${cssVar$1.colorText};
|
|
73
|
+
background: ${cssVar$1.colorFillSecondary};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&:focus-visible {
|
|
77
|
+
outline: 2px solid ${cssVar$1.colorPrimaryBorder};
|
|
78
|
+
outline-offset: 1px;
|
|
79
|
+
}
|
|
80
|
+
`,
|
|
81
|
+
content: css$1`
|
|
82
|
+
overflow: hidden auto;
|
|
83
|
+
padding-block: 12px;
|
|
84
|
+
padding-inline: 16px;
|
|
85
|
+
`,
|
|
86
|
+
footer: css$1`
|
|
87
|
+
display: flex;
|
|
88
|
+
gap: 8px;
|
|
89
|
+
align-items: center;
|
|
90
|
+
justify-content: flex-end;
|
|
91
|
+
|
|
92
|
+
padding-block: 12px;
|
|
93
|
+
padding-inline: 16px;
|
|
94
|
+
border-block-start: 1px solid ${cssVar$1.colorBorderSecondary};
|
|
95
|
+
`,
|
|
96
|
+
header: css$1`
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: space-between;
|
|
100
|
+
|
|
101
|
+
padding-block: 12px;
|
|
102
|
+
padding-inline: 16px;
|
|
103
|
+
border-block-end: 1px solid ${cssVar$1.colorBorderSecondary};
|
|
104
|
+
`,
|
|
105
|
+
headerDraggable: css$1`
|
|
106
|
+
cursor: default;
|
|
107
|
+
user-select: none;
|
|
108
|
+
`,
|
|
109
|
+
popup: css$1`
|
|
110
|
+
pointer-events: none;
|
|
111
|
+
|
|
112
|
+
position: fixed;
|
|
113
|
+
z-index: 1001;
|
|
114
|
+
inset: 0;
|
|
115
|
+
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
justify-content: center;
|
|
119
|
+
`,
|
|
120
|
+
popupInner: css$1`
|
|
121
|
+
pointer-events: auto;
|
|
122
|
+
|
|
123
|
+
position: relative;
|
|
124
|
+
|
|
125
|
+
display: flex;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
|
|
128
|
+
box-sizing: border-box;
|
|
129
|
+
width: calc(100% - 32px);
|
|
130
|
+
max-width: 520px;
|
|
131
|
+
max-height: calc(100dvh - 64px);
|
|
132
|
+
border: 1px solid ${cssVar$1.colorBorderSecondary};
|
|
133
|
+
border-radius: 12px;
|
|
134
|
+
|
|
135
|
+
background: ${cssVar$1.colorBgContainer};
|
|
136
|
+
box-shadow: ${cssVar$1.boxShadow};
|
|
137
|
+
|
|
138
|
+
transition:
|
|
139
|
+
transform 150ms cubic-bezier(0.22, 1, 0.36, 1),
|
|
140
|
+
opacity 150ms ease-out;
|
|
141
|
+
|
|
142
|
+
&[data-starting-style],
|
|
143
|
+
&[data-ending-style] {
|
|
144
|
+
transform: scale(0.96) translateY(4px);
|
|
145
|
+
opacity: 0;
|
|
146
|
+
}
|
|
147
|
+
`,
|
|
148
|
+
title: css$1`
|
|
149
|
+
margin: 0;
|
|
150
|
+
|
|
151
|
+
font-size: 16px;
|
|
152
|
+
font-weight: 600;
|
|
153
|
+
line-height: 1.5;
|
|
154
|
+
color: ${cssVar$1.colorText};
|
|
155
|
+
`,
|
|
156
|
+
buttonBase: css$1`
|
|
157
|
+
cursor: pointer;
|
|
158
|
+
|
|
159
|
+
display: inline-flex;
|
|
160
|
+
gap: 6px;
|
|
161
|
+
align-items: center;
|
|
162
|
+
justify-content: center;
|
|
163
|
+
|
|
164
|
+
height: 36px;
|
|
165
|
+
padding-block: 0;
|
|
166
|
+
padding-inline: 16px;
|
|
167
|
+
border: 1px solid ${cssVar$1.colorBorder};
|
|
168
|
+
border-radius: ${cssVar$1.borderRadiusSM};
|
|
169
|
+
|
|
170
|
+
font-size: 14px;
|
|
171
|
+
font-weight: 500;
|
|
172
|
+
line-height: 1;
|
|
173
|
+
|
|
174
|
+
transition: all 150ms ease-out;
|
|
175
|
+
|
|
176
|
+
&:focus-visible {
|
|
177
|
+
outline: 2px solid ${cssVar$1.colorPrimaryBorder};
|
|
178
|
+
outline-offset: 1px;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
&:disabled {
|
|
182
|
+
cursor: not-allowed;
|
|
183
|
+
opacity: 0.5;
|
|
184
|
+
}
|
|
185
|
+
`,
|
|
186
|
+
cancelButton: css$1`
|
|
187
|
+
color: ${cssVar$1.colorText};
|
|
188
|
+
background: ${cssVar$1.colorBgContainer};
|
|
189
|
+
|
|
190
|
+
&:hover:not(:disabled) {
|
|
191
|
+
border-color: ${cssVar$1.colorPrimaryBorder};
|
|
192
|
+
color: ${cssVar$1.colorPrimaryText};
|
|
193
|
+
}
|
|
194
|
+
`,
|
|
195
|
+
loadingSpinner: css$1`
|
|
196
|
+
@keyframes modal-spin {
|
|
197
|
+
to {
|
|
198
|
+
transform: rotate(360deg);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
display: inline-block;
|
|
203
|
+
|
|
204
|
+
width: 14px;
|
|
205
|
+
height: 14px;
|
|
206
|
+
border: 2px solid currentcolor;
|
|
207
|
+
border-block-start-color: transparent;
|
|
208
|
+
border-radius: 50%;
|
|
209
|
+
|
|
210
|
+
animation: modal-spin 0.6s linear infinite;
|
|
211
|
+
`,
|
|
212
|
+
dangerOkButton: css$1`
|
|
213
|
+
border-color: ${cssVar$1.colorError};
|
|
214
|
+
color: #fff;
|
|
215
|
+
background: ${cssVar$1.colorError};
|
|
216
|
+
|
|
217
|
+
&:hover:not(:disabled) {
|
|
218
|
+
border-color: ${cssVar$1.colorErrorHover};
|
|
219
|
+
background: ${cssVar$1.colorErrorHover};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
&:active:not(:disabled) {
|
|
223
|
+
border-color: ${cssVar$1.colorErrorActive};
|
|
224
|
+
background: ${cssVar$1.colorErrorActive};
|
|
225
|
+
}
|
|
226
|
+
`,
|
|
227
|
+
fullscreenPopupInner: css$1`
|
|
228
|
+
width: 100% !important;
|
|
229
|
+
max-width: 100% !important;
|
|
230
|
+
height: 100dvh !important;
|
|
231
|
+
max-height: 100dvh !important;
|
|
232
|
+
border: none;
|
|
233
|
+
border-radius: 0;
|
|
234
|
+
`,
|
|
235
|
+
fullscreenToggle: css$1`
|
|
236
|
+
cursor: pointer;
|
|
237
|
+
|
|
238
|
+
display: flex;
|
|
239
|
+
align-items: center;
|
|
240
|
+
justify-content: center;
|
|
241
|
+
|
|
242
|
+
width: 28px;
|
|
243
|
+
height: 28px;
|
|
244
|
+
padding: 0;
|
|
245
|
+
border: none;
|
|
246
|
+
border-radius: ${cssVar$1.borderRadiusSM};
|
|
247
|
+
|
|
248
|
+
color: ${cssVar$1.colorTextTertiary};
|
|
249
|
+
|
|
250
|
+
background: transparent;
|
|
251
|
+
|
|
252
|
+
transition: all 150ms ease-out;
|
|
253
|
+
|
|
254
|
+
&:hover {
|
|
255
|
+
color: ${cssVar$1.colorText};
|
|
256
|
+
background: ${cssVar$1.colorFillSecondary};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
&:focus-visible {
|
|
260
|
+
outline: 2px solid ${cssVar$1.colorPrimaryBorder};
|
|
261
|
+
outline-offset: 1px;
|
|
262
|
+
}
|
|
263
|
+
`,
|
|
264
|
+
headerActions: css$1`
|
|
265
|
+
display: flex;
|
|
266
|
+
gap: 4px;
|
|
267
|
+
align-items: center;
|
|
268
|
+
margin-inline-end: -4px;
|
|
269
|
+
`,
|
|
270
|
+
okButton: css$1`
|
|
271
|
+
border-color: ${cssVar$1.colorPrimary};
|
|
272
|
+
color: #fff;
|
|
273
|
+
background: ${cssVar$1.colorPrimary};
|
|
274
|
+
|
|
275
|
+
&:hover:not(:disabled) {
|
|
276
|
+
border-color: ${cssVar$1.colorPrimaryHover};
|
|
277
|
+
background: ${cssVar$1.colorPrimaryHover};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
&:active:not(:disabled) {
|
|
281
|
+
border-color: ${cssVar$1.colorPrimaryActive};
|
|
282
|
+
background: ${cssVar$1.colorPrimaryActive};
|
|
283
|
+
}
|
|
284
|
+
`,
|
|
285
|
+
viewport: css$1`
|
|
286
|
+
position: fixed;
|
|
287
|
+
z-index: 1000;
|
|
288
|
+
inset: 0;
|
|
289
|
+
overflow: auto;
|
|
290
|
+
`
|
|
291
|
+
}));
|
|
292
|
+
|
|
293
|
+
//#endregion
|
|
294
|
+
export { styles };
|
|
295
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":["cssVar"],"sources":["../../../src/base-ui/Modal/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n backdrop: css`\n position: fixed;\n z-index: 1000;\n inset: 0;\n\n background: color-mix(in srgb, ${cssVar.colorBgContainer} 60%, transparent);\n\n transition: opacity 150ms ease-out;\n\n &[data-starting-style],\n &[data-ending-style] {\n opacity: 0;\n }\n `,\n\n close: css`\n cursor: pointer;\n\n position: absolute;\n inset-block-start: 12px;\n inset-inline-end: 12px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${cssVar.borderRadiusSM};\n\n color: ${cssVar.colorTextTertiary};\n\n background: transparent;\n\n transition: all 150ms ease-out;\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n }\n\n &:focus-visible {\n outline: 2px solid ${cssVar.colorPrimaryBorder};\n outline-offset: 1px;\n }\n `,\n\n closeInline: css`\n cursor: pointer;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${cssVar.borderRadiusSM};\n\n color: ${cssVar.colorTextTertiary};\n\n background: transparent;\n\n transition: all 150ms ease-out;\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n }\n\n &:focus-visible {\n outline: 2px solid ${cssVar.colorPrimaryBorder};\n outline-offset: 1px;\n }\n `,\n\n content: css`\n overflow: hidden auto;\n padding-block: 12px;\n padding-inline: 16px;\n `,\n\n footer: css`\n display: flex;\n gap: 8px;\n align-items: center;\n justify-content: flex-end;\n\n padding-block: 12px;\n padding-inline: 16px;\n border-block-start: 1px solid ${cssVar.colorBorderSecondary};\n `,\n\n header: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n padding-block: 12px;\n padding-inline: 16px;\n border-block-end: 1px solid ${cssVar.colorBorderSecondary};\n `,\n\n headerDraggable: css`\n cursor: default;\n user-select: none;\n `,\n\n popup: css`\n pointer-events: none;\n\n position: fixed;\n z-index: 1001;\n inset: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n\n popupInner: css`\n pointer-events: auto;\n\n position: relative;\n\n display: flex;\n flex-direction: column;\n\n box-sizing: border-box;\n width: calc(100% - 32px);\n max-width: 520px;\n max-height: calc(100dvh - 64px);\n border: 1px solid ${cssVar.colorBorderSecondary};\n border-radius: 12px;\n\n background: ${cssVar.colorBgContainer};\n box-shadow: ${cssVar.boxShadow};\n\n transition:\n transform 150ms cubic-bezier(0.22, 1, 0.36, 1),\n opacity 150ms ease-out;\n\n &[data-starting-style],\n &[data-ending-style] {\n transform: scale(0.96) translateY(4px);\n opacity: 0;\n }\n `,\n\n title: css`\n margin: 0;\n\n font-size: 16px;\n font-weight: 600;\n line-height: 1.5;\n color: ${cssVar.colorText};\n `,\n\n buttonBase: css`\n cursor: pointer;\n\n display: inline-flex;\n gap: 6px;\n align-items: center;\n justify-content: center;\n\n height: 36px;\n padding-block: 0;\n padding-inline: 16px;\n border: 1px solid ${cssVar.colorBorder};\n border-radius: ${cssVar.borderRadiusSM};\n\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n\n transition: all 150ms ease-out;\n\n &:focus-visible {\n outline: 2px solid ${cssVar.colorPrimaryBorder};\n outline-offset: 1px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n `,\n\n cancelButton: css`\n color: ${cssVar.colorText};\n background: ${cssVar.colorBgContainer};\n\n &:hover:not(:disabled) {\n border-color: ${cssVar.colorPrimaryBorder};\n color: ${cssVar.colorPrimaryText};\n }\n `,\n\n loadingSpinner: css`\n @keyframes modal-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n display: inline-block;\n\n width: 14px;\n height: 14px;\n border: 2px solid currentcolor;\n border-block-start-color: transparent;\n border-radius: 50%;\n\n animation: modal-spin 0.6s linear infinite;\n `,\n\n dangerOkButton: css`\n border-color: ${cssVar.colorError};\n color: #fff;\n background: ${cssVar.colorError};\n\n &:hover:not(:disabled) {\n border-color: ${cssVar.colorErrorHover};\n background: ${cssVar.colorErrorHover};\n }\n\n &:active:not(:disabled) {\n border-color: ${cssVar.colorErrorActive};\n background: ${cssVar.colorErrorActive};\n }\n `,\n\n fullscreenPopupInner: css`\n width: 100% !important;\n max-width: 100% !important;\n height: 100dvh !important;\n max-height: 100dvh !important;\n border: none;\n border-radius: 0;\n `,\n\n fullscreenToggle: css`\n cursor: pointer;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: ${cssVar.borderRadiusSM};\n\n color: ${cssVar.colorTextTertiary};\n\n background: transparent;\n\n transition: all 150ms ease-out;\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n }\n\n &:focus-visible {\n outline: 2px solid ${cssVar.colorPrimaryBorder};\n outline-offset: 1px;\n }\n `,\n\n headerActions: css`\n display: flex;\n gap: 4px;\n align-items: center;\n margin-inline-end: -4px;\n `,\n\n okButton: css`\n border-color: ${cssVar.colorPrimary};\n color: #fff;\n background: ${cssVar.colorPrimary};\n\n &:hover:not(:disabled) {\n border-color: ${cssVar.colorPrimaryHover};\n background: ${cssVar.colorPrimaryHover};\n }\n\n &:active:not(:disabled) {\n border-color: ${cssVar.colorPrimaryActive};\n background: ${cssVar.colorPrimaryActive};\n }\n `,\n\n viewport: css`\n position: fixed;\n z-index: 1000;\n inset: 0;\n overflow: auto;\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,UAAU,KAAG;;;;;qCAKsBA,SAAO,iBAAiB;;;;;;;;;CAU3D,OAAO,KAAG;;;;;;;;;;;;;;;qBAeSA,SAAO,eAAe;;aAE9BA,SAAO,kBAAkB;;;;;;;eAOvBA,SAAO,UAAU;oBACZA,SAAO,mBAAmB;;;;2BAInBA,SAAO,mBAAmB;;;;CAKnD,aAAa,KAAG;;;;;;;;;;;qBAWGA,SAAO,eAAe;;aAE9BA,SAAO,kBAAkB;;;;;;;eAOvBA,SAAO,UAAU;oBACZA,SAAO,mBAAmB;;;;2BAInBA,SAAO,mBAAmB;;;;CAKnD,SAAS,KAAG;;;;;CAMZ,QAAQ,KAAG;;;;;;;;oCAQuBA,SAAO,qBAAqB;;CAG9D,QAAQ,KAAG;;;;;;;kCAOqBA,SAAO,qBAAqB;;CAG5D,iBAAiB,KAAG;;;;CAKpB,OAAO,KAAG;;;;;;;;;;;CAYV,YAAY,KAAG;;;;;;;;;;;;wBAYOA,SAAO,qBAAqB;;;kBAGlCA,SAAO,iBAAiB;kBACxBA,SAAO,UAAU;;;;;;;;;;;;CAajC,OAAO,KAAG;;;;;;aAMCA,SAAO,UAAU;;CAG5B,YAAY,KAAG;;;;;;;;;;;wBAWOA,SAAO,YAAY;qBACtBA,SAAO,eAAe;;;;;;;;;2BAShBA,SAAO,mBAAmB;;;;;;;;;CAUnD,cAAc,KAAG;aACNA,SAAO,UAAU;kBACZA,SAAO,iBAAiB;;;sBAGpBA,SAAO,mBAAmB;eACjCA,SAAO,iBAAiB;;;CAIrC,gBAAgB,KAAG;;;;;;;;;;;;;;;;;CAkBnB,gBAAgB,KAAG;oBACDA,SAAO,WAAW;;kBAEpBA,SAAO,WAAW;;;sBAGdA,SAAO,gBAAgB;oBACzBA,SAAO,gBAAgB;;;;sBAIrBA,SAAO,iBAAiB;oBAC1BA,SAAO,iBAAiB;;;CAI1C,sBAAsB,KAAG;;;;;;;;CASzB,kBAAkB,KAAG;;;;;;;;;;;qBAWFA,SAAO,eAAe;;aAE9BA,SAAO,kBAAkB;;;;;;;eAOvBA,SAAO,UAAU;oBACZA,SAAO,mBAAmB;;;;2BAInBA,SAAO,mBAAmB;;;;CAKnD,eAAe,KAAG;;;;;;CAOlB,UAAU,KAAG;oBACKA,SAAO,aAAa;;kBAEtBA,SAAO,aAAa;;;sBAGhBA,SAAO,kBAAkB;oBAC3BA,SAAO,kBAAkB;;;;sBAIvBA,SAAO,mBAAmB;oBAC5BA,SAAO,mBAAmB;;;CAI5C,UAAU,KAAG;;;;;;CAMd,EAAE"}
|