@unif/react-native-design 0.24.1 → 0.26.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/lib/module/components/ui/Confirm/ConfirmHost.js +7 -12
- package/lib/module/components/ui/Confirm/ConfirmHost.js.map +1 -1
- package/lib/module/components/ui/Confirm/confirm.js +3 -2
- package/lib/module/components/ui/Confirm/confirm.js.map +1 -1
- package/lib/module/components/ui/Confirm/store.js +58 -8
- package/lib/module/components/ui/Confirm/store.js.map +1 -1
- package/lib/module/components/ui/Toast/ToastHost.js +20 -2
- package/lib/module/components/ui/Toast/ToastHost.js.map +1 -1
- package/lib/module/components/ui/Toast/ToastHost.web.js +11 -1
- package/lib/module/components/ui/Toast/ToastHost.web.js.map +1 -1
- package/lib/module/components/ui/Toast/store.js +95 -12
- package/lib/module/components/ui/Toast/store.js.map +1 -1
- package/lib/module/components/ui/Toast/toast.js +3 -2
- package/lib/module/components/ui/Toast/toast.js.map +1 -1
- package/lib/module/icons/data.js +8 -1
- package/lib/module/icons/data.js.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts +7 -5
- package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/confirm.d.ts +4 -3
- package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/store.d.ts +13 -4
- package/lib/typescript/src/components/ui/Confirm/store.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts +5 -1
- package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts +1 -0
- package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/store.d.ts +25 -1
- package/lib/typescript/src/components/ui/Toast/store.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/toast.d.ts +4 -3
- package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
- package/lib/typescript/src/icons/data.d.ts +1 -1
- package/lib/typescript/src/icons/data.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/ui/Confirm/ConfirmHost.tsx +8 -14
- package/src/components/ui/Confirm/confirm.ts +3 -2
- package/src/components/ui/Confirm/store.ts +61 -13
- package/src/components/ui/Toast/ToastHost.tsx +20 -2
- package/src/components/ui/Toast/ToastHost.web.tsx +11 -1
- package/src/components/ui/Toast/store.ts +112 -16
- package/src/components/ui/Toast/toast.ts +3 -2
- package/src/icons/data.ts +11 -0
|
@@ -14,14 +14,16 @@ const SCRIM_IN_MS = 220;
|
|
|
14
14
|
const SCRIM_OUT_MS = 260;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Confirm 对话框宿主 —— App
|
|
17
|
+
* Confirm 对话框宿主 —— App 根挂一个,监听 `confirm()` 调用并渲染。
|
|
18
18
|
*
|
|
19
19
|
* 原生 RN `Modal`(transparent + animationType slide)从底部滑入,backdrop 点击
|
|
20
20
|
* 取消、内层 sheet 拦截点击不冒泡。**不依赖 @gorhom**。
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* 栈式 owner:后挂载的实例接管事件,前任入栈挂起并收到 `clear`(对话框就地关闭、
|
|
23
|
+
* Promise resolve(false));接管者卸载后自动归还。因此**允许**在自己的 `Modal` 里再挂
|
|
24
|
+
* 一个 —— RN `Modal` 是独立 native window,根 Host 的对话框会被它物理盖住,内层
|
|
25
|
+
* 自挂才能显示。所有关闭路径统一走 `settleConfirm(entry, result)`,组件内不直接调用
|
|
26
|
+
* entry 的 resolver。
|
|
25
27
|
*/
|
|
26
28
|
export function ConfirmHost() {
|
|
27
29
|
const styles = useThemedStyles(makeStyles);
|
|
@@ -34,9 +36,6 @@ export function ConfirmHost() {
|
|
|
34
36
|
// 同步权威副本:effect cleanup 与迟到回调都读它,不受 React state 批处理延迟影响。
|
|
35
37
|
const pendingRef = useRef(null);
|
|
36
38
|
|
|
37
|
-
// 注册失败(已有 owner)时保持惰性:不订阅、不渲染。
|
|
38
|
-
const [inert, setInert] = useState(false);
|
|
39
|
-
|
|
40
39
|
// 保留最后一次显示的 entry:关闭时 entry 立即置 null,但 slide 退场动画期 Modal 仍可见,
|
|
41
40
|
// 渲染 lastEntry 才不会滑出一个只剩 padding 的空 sheet([M-17])。
|
|
42
41
|
const lastEntryRef = useRef(null);
|
|
@@ -60,13 +59,10 @@ export function ConfirmHost() {
|
|
|
60
59
|
}
|
|
61
60
|
};
|
|
62
61
|
const lease = registerConfirmHost(subscriber);
|
|
63
|
-
if (!lease) {
|
|
64
|
-
setInert(true);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
62
|
return () => {
|
|
68
63
|
// 卸载时若对话框仍未决(error boundary 重置 / 根 re-key 切语言主题等),
|
|
69
64
|
// Store 把它 settle(false) —— 否则 confirm() 的 Promise 永久悬挂并锁死单例([H-5])。
|
|
65
|
+
// 若本实例是接管者,release 顺带把 owner 归还给挂起中的前任。
|
|
70
66
|
const held = pendingRef.current;
|
|
71
67
|
pendingRef.current = null;
|
|
72
68
|
lease.release(held);
|
|
@@ -90,7 +86,6 @@ export function ConfirmHost() {
|
|
|
90
86
|
useNativeDriver: true
|
|
91
87
|
}).start();
|
|
92
88
|
}, [entry, scrimOpacity]);
|
|
93
|
-
if (inert) return null;
|
|
94
89
|
return /*#__PURE__*/_jsx(Modal, {
|
|
95
90
|
visible: !!entry,
|
|
96
91
|
transparent: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","Animated","Easing","Modal","Pressable","Text","View","useWindowDimensions","useSafeAreaInsets","space","useThemedStyles","Button","registerConfirmHost","settleConfirm","resolveConfirmLabels","makeStyles","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SCRIM_IN_MS","SCRIM_OUT_MS","ConfirmHost","styles","insets","height","screenH","entry","setEntry","pendingRef","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","Animated","Easing","Modal","Pressable","Text","View","useWindowDimensions","useSafeAreaInsets","space","useThemedStyles","Button","registerConfirmHost","settleConfirm","resolveConfirmLabels","makeStyles","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SCRIM_IN_MS","SCRIM_OUT_MS","ConfirmHost","styles","insets","height","screenH","entry","setEntry","pendingRef","lastEntryRef","current","display","labels","confirmLabel","options","cancelLabel","subscriber","event","type","id","lease","held","release","handleConfirm","handleCancel","scrimOpacity","Value","timing","toValue","duration","easing","out","quad","useNativeDriver","start","visible","transparent","animationType","statusBarTranslucent","onRequestClose","children","style","backdrop","onPress","accessible","pointerEvents","scrim","top","opacity","testID","sheet","paddingBottom","bottom","body","title","accessibilityRole","message","actions","label","variant","action","destructive"],"sourceRoot":"../../../../../src","sources":["components/ui/Confirm/ConfirmHost.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,7 +18,8 @@ const store = createConfirmStore(log);
|
|
|
18
18
|
* 弹出确认对话框,返回 Promise<boolean>。
|
|
19
19
|
* - 用户点确认 → resolve(true)
|
|
20
20
|
* - 用户点取消 / 点 backdrop / 系统返回 → resolve(false)
|
|
21
|
-
* - 未挂 `<ConfirmHost />`、已有对话框在显示、Host 渲染抛错、Host
|
|
21
|
+
* - 未挂 `<ConfirmHost />`、已有对话框在显示、Host 渲染抛错、Host 卸载、
|
|
22
|
+
* 被后挂载的 Host 接管 → resolve(false)
|
|
22
23
|
*
|
|
23
24
|
* 任何路径都必然 settle,不会悬挂。
|
|
24
25
|
*
|
|
@@ -35,7 +36,7 @@ const store = createConfirmStore(log);
|
|
|
35
36
|
*/
|
|
36
37
|
export const confirm = options => store.request(options);
|
|
37
38
|
|
|
38
|
-
/** 内部:ConfirmHost
|
|
39
|
+
/** 内部:ConfirmHost 挂载时接管 owner;前任入栈挂起,本 lease 释放时归还。 */
|
|
39
40
|
export const registerConfirmHost = store.registerHost;
|
|
40
41
|
|
|
41
42
|
/** 内部:所有关闭路径的唯一出口(identity-guarded + 幂等)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createLogger","createConfirmStore","log","store","confirm","options","request","registerConfirmHost","registerHost","settleConfirm","settle"],"sourceRoot":"../../../../../src","sources":["components/ui/Confirm/confirm.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,gCAAuB;AACpD,SAASC,kBAAkB,QAAQ,YAAS;AAG5C,MAAMC,GAAG,GAAGF,YAAY,CAAC,SAAS,CAAC;AAEnC,MAAMG,KAAK,GAAGF,kBAAkB,CAACC,GAAG,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,OAAO,GAAIC,OAAuB,IAC7CF,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;;AAExB;AACA,OAAO,MAAME,mBAAmB,GAAGJ,KAAK,CAACK,YAAY;;AAErD;AACA,OAAO,MAAMC,aAAa,GAAGN,KAAK,CAACO,MAAM","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createLogger","createConfirmStore","log","store","confirm","options","request","registerConfirmHost","registerHost","settleConfirm","settle"],"sourceRoot":"../../../../../src","sources":["components/ui/Confirm/confirm.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,gCAAuB;AACpD,SAASC,kBAAkB,QAAQ,YAAS;AAG5C,MAAMC,GAAG,GAAGF,YAAY,CAAC,SAAS,CAAC;AAEnC,MAAMG,KAAK,GAAGF,kBAAkB,CAACC,GAAG,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,OAAO,GAAIC,OAAuB,IAC7CF,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;;AAExB;AACA,OAAO,MAAME,mBAAmB,GAAGJ,KAAK,CAACK,YAAY;;AAErD;AACA,OAAO,MAAMC,aAAa,GAAGN,KAAK,CAACO,MAAM","ignoreList":[]}
|
|
@@ -4,10 +4,17 @@
|
|
|
4
4
|
* Confirm 的纯状态机 —— 不含任何 React / 渲染依赖,可直接单测。
|
|
5
5
|
*
|
|
6
6
|
* 两条不变量:
|
|
7
|
-
* 1.
|
|
8
|
-
*
|
|
7
|
+
* 1. **单一活跃 owner + 栈式接管** —— 同一时间只有一个 `<ConfirmHost />` 收事件,但
|
|
8
|
+
* 后挂载者**接管**、前任入栈挂起,卸载时自动归还。RN `Modal` 是独立 native window,
|
|
9
|
+
* 根 Host 渲染的对话框会被 Modal 物理盖住(iOS 兄弟 Modal 更是不叠放),所以
|
|
10
|
+
* 「Modal 内自挂一个 Host」是唯一正解、必须是合法用法 —— 旧的 first-wins 把它判成
|
|
11
|
+
* 恒惰性死码,才是要修的东西。
|
|
9
12
|
* 2. **唯一 active entry** —— 同一时间只有一个未决对话框。所有关闭路径(确认 / 取消 /
|
|
10
|
-
* backdrop / 系统返回 / Host 卸载 / subscriber 抛错)都汇聚到 `settle()`。
|
|
13
|
+
* backdrop / 系统返回 / Host 卸载 / owner 切换 / subscriber 抛错)都汇聚到 `settle()`。
|
|
14
|
+
*
|
|
15
|
+
* 由 1 派生出一条关键不变量:**active entry 永远属于当前 owner**。owner 每次切换
|
|
16
|
+
* (接管或归还)前都把 active 排空为 `false`,因此挂起中的 owner 手里不可能有未决
|
|
17
|
+
* 对话框,恢复时也不会继承一个自己没见过 `show` 的槽位。
|
|
11
18
|
*
|
|
12
19
|
* `settle()` 用 **identity guard**(`active !== entry` 直接返回 false)而非 id 比较:
|
|
13
20
|
* 旧 entry 的迟到回调拿着的是旧对象引用,永远匹配不上新 active,因此不可能误关新对话框。
|
|
@@ -17,6 +24,8 @@ export function createConfirmStore(log) {
|
|
|
17
24
|
let nextId = 0;
|
|
18
25
|
let active = null;
|
|
19
26
|
let owner = null;
|
|
27
|
+
/** 被接管而挂起的前任,栈顶 = 最近一个。当前 owner 卸载时从这里恢复。 */
|
|
28
|
+
const suspended = [];
|
|
20
29
|
function settle(entry, result) {
|
|
21
30
|
if (entry.settled || active !== entry) return false;
|
|
22
31
|
// 先翻状态、再断开 active,最后才 resolve —— resolve 的 then 回调可能同步重入
|
|
@@ -54,7 +63,7 @@ export function createConfirmStore(log) {
|
|
|
54
63
|
// 立即 resolve(false) 且不占 active(否则后续 confirm 全被重入分支锁死)。
|
|
55
64
|
const current = owner;
|
|
56
65
|
if (!current?.subscriber) {
|
|
57
|
-
log.warn('confirm() 调用时未挂载 <ConfirmHost />,对话框无法显示,已 resolve(false)。请在 app
|
|
66
|
+
log.warn('confirm() 调用时未挂载 <ConfirmHost />,对话框无法显示,已 resolve(false)。请在 app 根附近挂一个 <ConfirmHost />。');
|
|
58
67
|
return Promise.resolve(false);
|
|
59
68
|
}
|
|
60
69
|
return new Promise(resolve => {
|
|
@@ -81,25 +90,66 @@ export function createConfirmStore(log) {
|
|
|
81
90
|
}
|
|
82
91
|
});
|
|
83
92
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* owner 切换前把 active 排空为 `false` —— Promise 不悬挂、单例槽不被带走。
|
|
96
|
+
*
|
|
97
|
+
* 每轮 settle 成功即 `active = null`,只有 clear 回调同步再 `request()` 时才会多转
|
|
98
|
+
* 一轮;settle 返回 false(排不动)立即退出,不给死循环留口子。
|
|
99
|
+
*/
|
|
100
|
+
function drainActive() {
|
|
101
|
+
while (active) {
|
|
102
|
+
if (!settle(active, false)) break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** 弹出最近一个仍可用的挂起 owner;抛错被作废的(subscriber 已置空)直接丢弃。 */
|
|
107
|
+
function popSuspended() {
|
|
108
|
+
while (suspended.length > 0) {
|
|
109
|
+
const next = suspended.pop();
|
|
110
|
+
if (next?.subscriber) return next;
|
|
88
111
|
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
function registerHost(subscriber) {
|
|
89
115
|
const token = Symbol('ConfirmHostOwner');
|
|
90
116
|
const self = {
|
|
91
117
|
token,
|
|
92
118
|
subscriber
|
|
93
119
|
};
|
|
120
|
+
if (owner) {
|
|
121
|
+
// 先排空再换人:此刻前任仍是 owner,clear 事件正好发给它,它的对话框就地关闭。
|
|
122
|
+
// 顺序反过来(先换 owner 再 settle)clear 会误投给刚接管的新 Host。
|
|
123
|
+
drainActive();
|
|
124
|
+
// 排空期间 clear 回调若抛错,settle 已把前任作废(owner 置 null)—— 作废的不入栈,
|
|
125
|
+
// 免得恢复出一个死订阅;若回调期间又有人注册,入栈的就是那位,同样不丢。
|
|
126
|
+
const outgoing = owner;
|
|
127
|
+
if (outgoing) suspended.push(outgoing);
|
|
128
|
+
}
|
|
94
129
|
owner = self;
|
|
95
130
|
return {
|
|
96
131
|
ownerToken: token,
|
|
97
132
|
release(heldEntry) {
|
|
133
|
+
const index = suspended.indexOf(self);
|
|
134
|
+
if (index >= 0) {
|
|
135
|
+
// 乱序卸载(父 Modal 先于内层 Host 卸载):挂起者的 active 在被接管时已结算,
|
|
136
|
+
// 这里只把它摘出栈,绝不能碰当前 owner。
|
|
137
|
+
suspended.splice(index, 1);
|
|
138
|
+
self.subscriber = null;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
98
141
|
if (owner?.token !== token) return;
|
|
99
142
|
// 先摘订阅,再结算:settle 内部发的 clear 事件不应再回到正在卸载的 Host。
|
|
100
143
|
self.subscriber = null;
|
|
101
144
|
owner = null;
|
|
102
145
|
if (heldEntry) settle(heldEntry, false);
|
|
146
|
+
const successor = popSuspended();
|
|
147
|
+
if (successor) {
|
|
148
|
+
// 归还前再排空一次:前任没见过残留 entry 的 show,不能让它继承一个锁死的槽。
|
|
149
|
+
// 此刻 owner 为 null,排空不会发出任何 clear。
|
|
150
|
+
drainActive();
|
|
151
|
+
owner = successor;
|
|
152
|
+
}
|
|
103
153
|
}
|
|
104
154
|
};
|
|
105
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createConfirmStore","log","nextId","active","owner","settle","entry","result","settled","resolve","current","subscriber","type","id","error","token","reentrant","request","options","warn","Promise","registerHost","Symbol","self","ownerToken","release","heldEntry","activeEntry"],"sourceRoot":"../../../../../src","sources":["components/ui/Confirm/store.ts"],"mappings":";;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["createConfirmStore","log","nextId","active","owner","suspended","settle","entry","result","settled","resolve","current","subscriber","type","id","error","token","reentrant","request","options","warn","Promise","drainActive","popSuspended","length","next","pop","registerHost","Symbol","self","outgoing","push","ownerToken","release","heldEntry","index","indexOf","splice","successor","activeEntry"],"sourceRoot":"../../../../../src","sources":["components/ui/Confirm/store.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,9 +12,13 @@ import { completeToast, isCurrentToastDelivery, registerToastHost } from "./toas
|
|
|
12
12
|
/** Host 侧的同步身份副本 —— 迟到回调据此在动 UI 前自证「我还是当前那一次投递」。 */
|
|
13
13
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 在根附近挂一个。监听 toast() 调用并渲染当前 toast。
|
|
16
16
|
* 同一时间只显示一条 —— 新的会替换旧的(latest-wins)。
|
|
17
17
|
*
|
|
18
|
+
* 栈式 owner:后挂载的实例接管投递,前任挂起并收起当前 toast;接管者卸载后自动归还。
|
|
19
|
+
* 因此**允许**在自己的 `Modal` 里再挂一个 —— RN `Modal` 是独立 native window,根 Host
|
|
20
|
+
* 的 toast 会被它物理盖住,内层自挂才看得见。
|
|
21
|
+
*
|
|
18
22
|
* 位置由 `entry.position`('top' / 'bottom' / 'center')决定,top/bottom 自动避让
|
|
19
23
|
* safe-area;进入动画方向随位置(top 从上滑、bottom/center 从下滑)。
|
|
20
24
|
*
|
|
@@ -50,7 +54,21 @@ export function ToastHost({
|
|
|
50
54
|
};
|
|
51
55
|
setDelivery(next);
|
|
52
56
|
};
|
|
53
|
-
|
|
57
|
+
// 被后挂载的 Host 接管:立刻收起当前 toast。store 已丢弃这次投递,自身的退场
|
|
58
|
+
// timer 从此过不了 CAS —— 不主动清,这条 toast 会冻在屏幕上直到本 Host 卸载。
|
|
59
|
+
const clearOnSuspend = () => {
|
|
60
|
+
currentDeliveryRef.current = null;
|
|
61
|
+
if (dismissTimer.current) {
|
|
62
|
+
clearTimeout(dismissTimer.current);
|
|
63
|
+
dismissTimer.current = null;
|
|
64
|
+
}
|
|
65
|
+
cancelAnimation(op);
|
|
66
|
+
cancelAnimation(ty);
|
|
67
|
+
setDelivery(null);
|
|
68
|
+
};
|
|
69
|
+
const lease = registerToastHost(subscriber, clearOnSuspend);
|
|
70
|
+
// null lease 只剩一种成因:补投 pending 时 subscriber 抛错,本 owner 当场被作废
|
|
71
|
+
//(不再是「重复挂载」—— 那条现在走接管)。惰性到卸载为止。
|
|
54
72
|
if (!lease) {
|
|
55
73
|
setInert(true);
|
|
56
74
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","AccessibilityInfo","Text","View","useSafeAreaInsets","Animated","cancelAnimation","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useColors","useThemedStyles","motion","space","childTestID","dotColorFor","makeStyles","completeToast","isCurrentToastDelivery","registerToastHost","jsx","_jsx","jsxs","_jsxs","ToastHost","testID","c","styles","insets","delivery","setDelivery","inert","setInert","op","ty","dismissTimer","currentDeliveryRef","subscriber","next","current","clearTimeout","ownerToken","leaseId","entryId","entry","id","lease","release","finishIfCurrent","finished","identity","announceForAccessibility","message","from","position","value","duration","base","setTimeout","done","animatedStyle","opacity","transform","translateY","posStyle","top","bottom","justifyContent","dotColor","kind","style","host","pointerEvents","children","toast","dot","backgroundColor","text"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/ToastHost.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACvE,SAASC,iBAAiB,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAC5D,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,OAAOC,QAAQ,IACbC,eAAe,EACfC,OAAO,EACPC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,QACL,yBAAyB;AAChC,SAASC,SAAS,EAAEC,eAAe,EAAEC,MAAM,EAAEC,KAAK,QAAQ,yBAAgB;AAC1E,SAASC,WAAW,QAAQ,gCAAuB;AACnD,SAASC,WAAW,EAAEC,UAAU,QAAQ,aAAU;AAClD,SACEC,aAAa,EACbC,sBAAsB,EACtBC,iBAAiB,QACZ,YAAS;;AAIhB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAC;EACxBC;AACc,CAAC,GAAG,CAAC,CAAC,EAA4B;EAChD,MAAMC,CAAC,GAAGhB,SAAS,CAAC,CAAC;EACrB,MAAMiB,MAAM,GAAGhB,eAAe,CAACK,UAAU,CAAC;EAC1C,MAAMY,MAAM,GAAGzB,iBAAiB,CAAC,CAAC;EAClC,MAAM,CAAC0B,QAAQ,EAAEC,WAAW,CAAC,GAAG/B,QAAQ,CAAuB,IAAI,CAAC;EACpE,MAAM,CAACgC,KAAK,EAAEC,QAAQ,CAAC,GAAGjC,QAAQ,CAAC,KAAK,CAAC;EACzC,MAAMkC,EAAE,GAAGzB,cAAc,CAAC,CAAC,CAAC;EAC5B,MAAM0B,EAAE,GAAG1B,cAAc,CAAC,CAAC,CAAC;EAC5B,MAAM2B,YAAY,GAAGrC,MAAM,CAAuC,IAAI,CAAC;EACvE,MAAMsC,kBAAkB,GAAGtC,MAAM,CAA0B,IAAI,CAAC;EAEhED,SAAS,CAAC,MAAM;IACd,MAAMwC,UAAU,GAAIC,IAAmB,IAAK;MAC1C;MACA,IAAIH,YAAY,CAACI,OAAO,EAAE;QACxBC,YAAY,CAACL,YAAY,CAACI,OAAO,CAAC;QAClCJ,YAAY,CAACI,OAAO,GAAG,IAAI;MAC7B;MACAlC,eAAe,CAAC4B,EAAE,CAAC;MACnB5B,eAAe,CAAC6B,EAAE,CAAC;MACnBE,kBAAkB,CAACG,OAAO,GAAG;QAC3BE,UAAU,EAAEH,IAAI,CAACG,UAAU;QAC3BC,OAAO,EAAEJ,IAAI,CAACI,OAAO;QACrBC,OAAO,EAAEL,IAAI,CAACM,KAAK,CAACC;MACtB,CAAC;MACDf,WAAW,CAACQ,IAAI,CAAC;IACnB,CAAC;IACD,MAAMQ,KAAK,
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","AccessibilityInfo","Text","View","useSafeAreaInsets","Animated","cancelAnimation","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useColors","useThemedStyles","motion","space","childTestID","dotColorFor","makeStyles","completeToast","isCurrentToastDelivery","registerToastHost","jsx","_jsx","jsxs","_jsxs","ToastHost","testID","c","styles","insets","delivery","setDelivery","inert","setInert","op","ty","dismissTimer","currentDeliveryRef","subscriber","next","current","clearTimeout","ownerToken","leaseId","entryId","entry","id","clearOnSuspend","lease","release","finishIfCurrent","finished","identity","announceForAccessibility","message","from","position","value","duration","base","setTimeout","done","animatedStyle","opacity","transform","translateY","posStyle","top","bottom","justifyContent","dotColor","kind","style","host","pointerEvents","children","toast","dot","backgroundColor","text"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/ToastHost.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,6 +19,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
* - opacity 0→1 + translateY 8→0 入场(motion.base ms)
|
|
20
20
|
* - 停留 entry.duration ms
|
|
21
21
|
* - opacity 1→0 + translateY 0→8 退场后 unmount
|
|
22
|
+
* - 栈式 owner:后挂载者接管、前任挂起并收起 toast,接管者卸载后自动归还
|
|
22
23
|
*
|
|
23
24
|
* 竞态纪律与 native 版一致:timer / RAF 在改 UI 或上报完成前,都要同时通过同步 ref
|
|
24
25
|
* 与 `isCurrentToastDelivery(delivery)` 两道校验。
|
|
@@ -62,7 +63,16 @@ export function ToastHost({
|
|
|
62
63
|
};
|
|
63
64
|
setDelivery(next);
|
|
64
65
|
};
|
|
65
|
-
|
|
66
|
+
// 被后挂载的 Host 接管:立刻收起当前 toast。store 已丢弃这次投递,自身的退场
|
|
67
|
+
// timer/RAF 从此过不了 CAS —— 不主动清,这条 toast 会冻在屏幕上直到本 Host 卸载。
|
|
68
|
+
const clearOnSuspend = () => {
|
|
69
|
+
currentDeliveryRef.current = null;
|
|
70
|
+
cancelCallbacks();
|
|
71
|
+
setDelivery(null);
|
|
72
|
+
};
|
|
73
|
+
const lease = registerToastHost(subscriber, clearOnSuspend);
|
|
74
|
+
// null lease 只剩一种成因:补投 pending 时 subscriber 抛错,本 owner 当场被作废
|
|
75
|
+
//(不再是「重复挂载」—— 那条现在走接管)。惰性到卸载为止。
|
|
66
76
|
if (!lease) {
|
|
67
77
|
setInert(true);
|
|
68
78
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","AccessibilityInfo","Text","View","useSafeAreaInsets","motion","space","useColors","usePrefersReducedMotion","useThemedStyles","childTestID","dotColorFor","makeStyles","completeToast","isCurrentToastDelivery","registerToastHost","jsx","_jsx","jsxs","_jsxs","ToastHost","testID","c","styles","insets","reduced","delivery","setDelivery","inert","setInert","visible","setVisible","dismissTimerRef","exitTimerRef","enterRafRef","currentDeliveryRef","cancelCallbacks","current","clearTimeout","cancelAnimationFrame","subscriber","next","ownerToken","leaseId","entryId","entry","id","lease","release","finishIfCurrent","finished","identity","announceForAccessibility","message","cancelled","requestAnimationFrame","setTimeout","base","duration","posStyle","position","top","bottom","justifyContent","dotColor","kind","animatedWebStyle","opacity","transform","transition","style","host","pointerEvents","children","toast","dot","backgroundColor","text"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/ToastHost.web.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACvE,SAASC,iBAAiB,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAC5D,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,SACEC,MAAM,EACNC,KAAK,EACLC,SAAS,EACTC,uBAAuB,EACvBC,eAAe,QACV,yBAAgB;AACvB,SAASC,WAAW,QAAQ,gCAAuB;AACnD,SAASC,WAAW,EAAEC,UAAU,QAAQ,aAAU;AAClD,SACEC,aAAa,EACbC,sBAAsB,EACtBC,iBAAiB,QACZ,YAAS;;AAIhB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAC;EACxBC;AACc,CAAC,GAAG,CAAC,CAAC,EAA4B;EAChD,MAAMC,CAAC,GAAGf,SAAS,CAAC,CAAC;EACrB,MAAMgB,MAAM,GAAGd,eAAe,CAACG,UAAU,CAAC;EAC1C,MAAMY,MAAM,GAAGpB,iBAAiB,CAAC,CAAC;EAClC,MAAMqB,OAAO,GAAGjB,uBAAuB,CAAC,CAAC;EACzC,MAAM,CAACkB,QAAQ,EAAEC,WAAW,CAAC,GAAG3B,QAAQ,CAAuB,IAAI,CAAC;EACpE,MAAM,CAAC4B,KAAK,EAAEC,QAAQ,CAAC,GAAG7B,QAAQ,CAAC,KAAK,CAAC;EACzC,MAAM,CAAC8B,OAAO,EAAEC,UAAU,CAAC,GAAG/B,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAMgC,eAAe,GAAGjC,MAAM,CAAuC,IAAI,CAAC;EAC1E,MAAMkC,YAAY,GAAGlC,MAAM,CAAuC,IAAI,CAAC;EACvE,MAAMmC,WAAW,GAAGnC,MAAM,CAAgB,IAAI,CAAC;EAC/C,MAAMoC,kBAAkB,GAAGpC,MAAM,CAA0B,IAAI,CAAC;EAEhE,MAAMqC,eAAe,GAAGvC,WAAW,CAAC,MAAM;IACxC,IAAImC,eAAe,CAACK,OAAO,EAAE;MAC3BC,YAAY,CAACN,eAAe,CAACK,OAAO,CAAC;MACrCL,eAAe,CAACK,OAAO,GAAG,IAAI;IAChC;IACA,IAAIJ,YAAY,CAACI,OAAO,EAAE;MACxBC,YAAY,CAACL,YAAY,CAACI,OAAO,CAAC;MAClCJ,YAAY,CAACI,OAAO,GAAG,IAAI;IAC7B;IACA,IAAIH,WAAW,CAACG,OAAO,IAAI,IAAI,EAAE;MAC/BE,oBAAoB,CAACL,WAAW,CAACG,OAAO,CAAC;MACzCH,WAAW,CAACG,OAAO,GAAG,IAAI;IAC5B;EACF,CAAC,EAAE,EAAE,CAAC;EAENvC,SAAS,CAAC,MAAM;IACd,MAAM0C,UAAU,GAAIC,IAAmB,IAAK;MAC1C;MACAL,eAAe,CAAC,CAAC;MACjBD,kBAAkB,CAACE,OAAO,GAAG;QAC3BK,UAAU,EAAED,IAAI,CAACC,UAAU;QAC3BC,OAAO,EAAEF,IAAI,CAACE,OAAO;QACrBC,OAAO,EAAEH,IAAI,CAACI,KAAK,CAACC;MACtB,CAAC;MACDnB,WAAW,CAACc,IAAI,CAAC;IACnB,CAAC;IACD,MAAMM,KAAK,
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useRef","useState","AccessibilityInfo","Text","View","useSafeAreaInsets","motion","space","useColors","usePrefersReducedMotion","useThemedStyles","childTestID","dotColorFor","makeStyles","completeToast","isCurrentToastDelivery","registerToastHost","jsx","_jsx","jsxs","_jsxs","ToastHost","testID","c","styles","insets","reduced","delivery","setDelivery","inert","setInert","visible","setVisible","dismissTimerRef","exitTimerRef","enterRafRef","currentDeliveryRef","cancelCallbacks","current","clearTimeout","cancelAnimationFrame","subscriber","next","ownerToken","leaseId","entryId","entry","id","clearOnSuspend","lease","release","finishIfCurrent","finished","identity","announceForAccessibility","message","cancelled","requestAnimationFrame","setTimeout","base","duration","posStyle","position","top","bottom","justifyContent","dotColor","kind","animatedWebStyle","opacity","transform","transition","style","host","pointerEvents","children","toast","dot","backgroundColor","text"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/ToastHost.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,6 +16,25 @@
|
|
|
16
16
|
*
|
|
17
17
|
* `leaseId` 单调递增,同一 entry 被重新投递(Host 重挂)也会拿到新的 leaseId ——
|
|
18
18
|
* 仅比较 entry.id 不足以区分「同一条消息的两次投递」。
|
|
19
|
+
*
|
|
20
|
+
* **栈式 owner**(与 Confirm 同构):后挂载的 Host 接管投递,前任入栈挂起并收到 clear,
|
|
21
|
+
* 接管者卸载后自动归还。RN `Modal` 是独立 native window,根 Host 渲染的 toast 会被
|
|
22
|
+
* Modal 物理盖住,只有「Modal 内自挂一个 Host」能显示 —— 旧的 first-wins 把这条唯一
|
|
23
|
+
* 正解判成恒惰性死码。
|
|
24
|
+
*
|
|
25
|
+
* 两个方向对在途 toast 的处理**刻意不同**:
|
|
26
|
+
* - **接管**(有人挂到我上面)→ 在途 toast **丢弃**。它属于「已经被盖住的过去」,
|
|
27
|
+
* 搬到接管者身上重放没有意义。
|
|
28
|
+
* - **归还**(接管者卸载、我恢复)→ 在途 toast **整条交回、立即重投**。
|
|
29
|
+
* 「Modal 内操作成功 → toast → 关窗」是最常见的一条路径,那条 toast 刚发出、用户
|
|
30
|
+
* 一眼都还没看到;丢掉的话比不挂内层 Host 还糟。不追剩余时长,重投 = 完整重播一遍。
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* owner 被接管 / 归还时的撤回通知 —— 对应 Confirm 的 `clear` 事件。
|
|
35
|
+
*
|
|
36
|
+
* 没有它,挂起中的 Host 会把最后一条 toast **冻在屏幕上**:store 已丢弃那次投递,
|
|
37
|
+
* Host 自己的退场 timer 过不了 `isCurrent` CAS,永远走不到清 UI 那一步。
|
|
19
38
|
*/
|
|
20
39
|
|
|
21
40
|
export function createToastStore(log) {
|
|
@@ -23,6 +42,8 @@ export function createToastStore(log) {
|
|
|
23
42
|
let delivered = null;
|
|
24
43
|
let owner = null;
|
|
25
44
|
let leaseCounter = 0;
|
|
45
|
+
/** 被接管而挂起的前任,栈顶 = 最近一个。当前 owner 卸载时从这里恢复。 */
|
|
46
|
+
const suspended = [];
|
|
26
47
|
function beginDelivery(entry, capturedOwner) {
|
|
27
48
|
const delivery = {
|
|
28
49
|
entry,
|
|
@@ -57,31 +78,93 @@ export function createToastStore(log) {
|
|
|
57
78
|
}
|
|
58
79
|
beginDelivery(entry, current);
|
|
59
80
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
81
|
+
|
|
82
|
+
/** 把前任降为挂起态:丢弃它的在途投递,并通知它收起屏幕上那条 toast。 */
|
|
83
|
+
function suspendOwner(target) {
|
|
84
|
+
// 不回退到 pending —— 否则接管者一挂上就把前任那条补投一遍(跨 owner 重放)。
|
|
85
|
+
if (delivered?.ownerToken === target.token) delivered = null;
|
|
86
|
+
const notify = target.onClear;
|
|
87
|
+
if (!notify) return;
|
|
88
|
+
try {
|
|
89
|
+
notify();
|
|
90
|
+
} catch (error) {
|
|
91
|
+
log.error('ToastHost clear 回调抛错', error);
|
|
92
|
+
// 坏 Host 就地作废:留在栈里也只会在恢复时接着抛。
|
|
93
|
+
target.subscriber = null;
|
|
94
|
+
target.onClear = null;
|
|
64
95
|
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** 弹出最近一个仍可用的挂起 owner;抛错被作废的(subscriber 已置空)直接丢弃。 */
|
|
99
|
+
function popSuspended() {
|
|
100
|
+
while (suspended.length > 0) {
|
|
101
|
+
const next = suspended.pop();
|
|
102
|
+
if (next?.subscriber) return next;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** 刚上任的 owner 在首投里抛错被作废:继续往下弹,别把栈里剩下的人一起埋掉。 */
|
|
108
|
+
function resumeAfterFailedInstall() {
|
|
109
|
+
const fallback = popSuspended();
|
|
110
|
+
if (fallback) owner = fallback;
|
|
111
|
+
}
|
|
112
|
+
function registerHost(subscriber, onClear) {
|
|
65
113
|
const token = Symbol('ToastHostOwner');
|
|
66
114
|
const self = {
|
|
67
115
|
token,
|
|
68
|
-
subscriber
|
|
116
|
+
subscriber,
|
|
117
|
+
onClear: onClear ?? null
|
|
69
118
|
};
|
|
119
|
+
const previous = owner;
|
|
120
|
+
// 先换 owner 再通知前任:clear 回调里同步 publish() 的那条应当投给**接管者**,
|
|
121
|
+
// 投给正在退场的前任会立刻变成一条冻在屏幕上的孤儿 toast。
|
|
122
|
+
//(Confirm 那侧顺序相反 —— 它的 clear 由 settle 发给当时的 owner,必须先排空。)
|
|
70
123
|
owner = self;
|
|
124
|
+
if (previous) {
|
|
125
|
+
suspendOwner(previous);
|
|
126
|
+
// clear 回调抛错作废的前任不入栈,免得恢复出一个死订阅。
|
|
127
|
+
if (previous.subscriber) suspended.push(previous);
|
|
128
|
+
}
|
|
71
129
|
if (pending) beginDelivery(pending, self);
|
|
72
|
-
// 首投期间 subscriber 抛错会把 owner 作废 —— 此时不能发出可用的 lease
|
|
73
|
-
|
|
130
|
+
// 首投期间 subscriber 抛错会把 owner 作废 —— 此时不能发出可用的 lease,
|
|
131
|
+
// 并且要立刻把刚挂起的前任放回 owner,否则栈里的人再也醒不过来。
|
|
132
|
+
if (owner?.token !== token) {
|
|
133
|
+
resumeAfterFailedInstall();
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
74
136
|
return {
|
|
75
137
|
ownerToken: token,
|
|
76
138
|
release() {
|
|
139
|
+
const index = suspended.indexOf(self);
|
|
140
|
+
if (index >= 0) {
|
|
141
|
+
// 乱序卸载(父 Modal 先于内层 Host 卸载):挂起者的在途投递在被接管时已丢弃,
|
|
142
|
+
// 这里只把它摘出栈,绝不能碰当前 owner。
|
|
143
|
+
suspended.splice(index, 1);
|
|
144
|
+
self.subscriber = null;
|
|
145
|
+
self.onClear = null;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
77
148
|
if (owner?.token !== token) return;
|
|
78
149
|
self.subscriber = null;
|
|
150
|
+
self.onClear = null;
|
|
79
151
|
owner = null;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
152
|
+
const mine = delivered?.ownerToken === token ? delivered : null;
|
|
153
|
+
if (mine) delivered = null;
|
|
154
|
+
// 归还方向**不丢**在途 toast —— 与接管方向相反,这条区分是有实证的:
|
|
155
|
+
// 「Modal 内操作成功 → toast → setVisible(false)」是最常见的一条路径,
|
|
156
|
+
// 内层 Host 跟着 Modal 一起卸载,这条 toast 刚发出、用户一眼都没看到。
|
|
157
|
+
// 接管方向丢弃是因为前任那条属于「已经被盖住的过去」;归还方向是把刚发生的
|
|
158
|
+
// 事情**交回上一层**,不是跨 owner 重放。整条交回、不追剩余时长 —— 这正是
|
|
159
|
+
// 既有的「owner A 卸载后 B 拿到同一 entry、新 leaseId」形态。
|
|
160
|
+
if (mine && !pending) pending = mine.entry;
|
|
161
|
+
const successor = popSuspended();
|
|
162
|
+
if (!successor) return;
|
|
163
|
+
owner = successor;
|
|
164
|
+
// 有人接手就当场重投(新 ownerToken + 新 leaseId,前任的迟到回调仍认不出它);
|
|
165
|
+
// 没人接手时它就停在 pending,等下一个挂上来的 Host 补投 —— 既有语义不变。
|
|
166
|
+
if (pending) beginDelivery(pending, successor);
|
|
167
|
+
if (owner?.token !== successor.token) resumeAfterFailedInstall();
|
|
85
168
|
}
|
|
86
169
|
};
|
|
87
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createToastStore","log","pending","delivered","owner","leaseCounter","beginDelivery","entry","capturedOwner","delivery","ownerToken","token","leaseId","subscriber","error","publish","current","
|
|
1
|
+
{"version":3,"names":["createToastStore","log","pending","delivered","owner","leaseCounter","suspended","beginDelivery","entry","capturedOwner","delivery","ownerToken","token","leaseId","subscriber","error","publish","current","suspendOwner","target","notify","onClear","popSuspended","length","next","pop","resumeAfterFailedInstall","fallback","registerHost","Symbol","self","previous","push","release","index","indexOf","splice","mine","successor","complete","entryId","id","isCurrent","pendingEntry","currentDelivery"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/store.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -47,7 +47,8 @@ function emit(input, kind = 'info') {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
-
* 命令式 toast API。在 app
|
|
50
|
+
* 命令式 toast API。在 app 根附近挂一个 `<ToastHost />` 即可;需要在 `Modal` 里显示
|
|
51
|
+
* 时可在 Modal 内再挂一个,它会接管、关闭后自动归还。
|
|
51
52
|
*
|
|
52
53
|
* toast('已切换到日报');
|
|
53
54
|
* toast.success('订单提交成功');
|
|
@@ -60,7 +61,7 @@ export const toast = Object.assign(input => emit(input, 'info'), {
|
|
|
60
61
|
error: input => emit(input, 'error')
|
|
61
62
|
});
|
|
62
63
|
|
|
63
|
-
/** 内部:ToastHost
|
|
64
|
+
/** 内部:ToastHost 挂载时接管 owner;前任入栈挂起,本 lease 释放时归还。 */
|
|
64
65
|
export const registerToastHost = store.registerHost;
|
|
65
66
|
|
|
66
67
|
/** 内部:三重身份 CAS —— owner token + leaseId + entry id 全对才算完成。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createLogger","createToastStore","log","store","_id","DEFAULT_DURATION","MAX_DURATION","clampDuration","raw","Number","isFinite","warn","Math","trunc","emit","input","kind","entry","id","message","duration","position","publish","toast","Object","assign","info","success","error","registerToastHost","registerHost","completeToast","complete","isCurrentToastDelivery","isCurrent"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/toast.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,gCAAuB;AACpD,SAASC,gBAAgB,QAAQ,YAAS;AAG1C,MAAMC,GAAG,GAAGF,YAAY,CAAC,OAAO,CAAC;AAEjC,MAAMG,KAAK,GAAGF,gBAAgB,CAACC,GAAG,CAAC;AAEnC,IAAIE,GAAG,GAAG,CAAC;AAEX,MAAMC,gBAAgB,GAAG,IAAI;AAC7B;AACA;AACA,MAAMC,YAAY,GAAG,UAAU;;AAE/B;AACA,SAASC,aAAaA,CAACC,GAAuB,EAAU;EACtD,IAAIA,GAAG,IAAI,IAAI,EAAE,OAAOH,gBAAgB;EACxC,IAAI,CAACI,MAAM,CAACC,QAAQ,CAACF,GAAG,CAAC,IAAIA,GAAG,GAAG,CAAC,IAAIA,GAAG,IAAIF,YAAY,EAAE;IAC3DJ,GAAG,CAACS,IAAI,CACN,kBAAkBH,GAAG,yBAAyBH,gBAAgB,KAChE,CAAC;IACD,OAAOA,gBAAgB;EACzB;EACA,OAAOO,IAAI,CAACC,KAAK,CAACL,GAAG,CAAC;AACxB;AAEA,SAASM,IAAIA,CAACC,KAAiB,EAAEC,IAAe,GAAG,MAAM,EAAE;EACzD,MAAMC,KAAiB,GACrB,OAAOF,KAAK,KAAK,QAAQ,GACrB;IACEG,EAAE,EAAE,EAAEd,GAAG;IACTe,OAAO,EAAEJ,KAAK;IACdC,IAAI;IACJI,QAAQ,EAAEf,gBAAgB;IAC1BgB,QAAQ,EAAE;EACZ,CAAC,GACD;IACEH,EAAE,EAAE,EAAEd,GAAG;IACTe,OAAO,EAAEJ,KAAK,CAACI,OAAO;IACtBH,IAAI,EAAED,KAAK,CAACC,IAAI,IAAIA,IAAI;IACxBI,QAAQ,EAAEb,aAAa,CAACQ,KAAK,CAACK,QAAQ,CAAC;IACvCC,QAAQ,EAAEN,KAAK,CAACM,QAAQ,IAAI;EAC9B,CAAC;EACP;EACA;EACAlB,KAAK,CAACmB,OAAO,CAACL,KAAK,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,KAAK,GAAGC,MAAM,CAACC,MAAM,CAAEV,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,MAAM,CAAC,EAAE;EAC7EW,IAAI,EAAGX,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,MAAM,CAAC;EAChDY,OAAO,EAAGZ,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,SAAS,CAAC;EACtDa,KAAK,EAAGb,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,OAAO;AACnD,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMc,iBAAiB,GAAG1B,KAAK,CAAC2B,YAAY;;AAEnD;AACA,OAAO,MAAMC,aAAa,GAAG5B,KAAK,CAAC6B,QAAQ;;AAE3C;AACA,OAAO,MAAMC,sBAAsB,GAAG9B,KAAK,CAAC+B,SAAS","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createLogger","createToastStore","log","store","_id","DEFAULT_DURATION","MAX_DURATION","clampDuration","raw","Number","isFinite","warn","Math","trunc","emit","input","kind","entry","id","message","duration","position","publish","toast","Object","assign","info","success","error","registerToastHost","registerHost","completeToast","complete","isCurrentToastDelivery","isCurrent"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/toast.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,gCAAuB;AACpD,SAASC,gBAAgB,QAAQ,YAAS;AAG1C,MAAMC,GAAG,GAAGF,YAAY,CAAC,OAAO,CAAC;AAEjC,MAAMG,KAAK,GAAGF,gBAAgB,CAACC,GAAG,CAAC;AAEnC,IAAIE,GAAG,GAAG,CAAC;AAEX,MAAMC,gBAAgB,GAAG,IAAI;AAC7B;AACA;AACA,MAAMC,YAAY,GAAG,UAAU;;AAE/B;AACA,SAASC,aAAaA,CAACC,GAAuB,EAAU;EACtD,IAAIA,GAAG,IAAI,IAAI,EAAE,OAAOH,gBAAgB;EACxC,IAAI,CAACI,MAAM,CAACC,QAAQ,CAACF,GAAG,CAAC,IAAIA,GAAG,GAAG,CAAC,IAAIA,GAAG,IAAIF,YAAY,EAAE;IAC3DJ,GAAG,CAACS,IAAI,CACN,kBAAkBH,GAAG,yBAAyBH,gBAAgB,KAChE,CAAC;IACD,OAAOA,gBAAgB;EACzB;EACA,OAAOO,IAAI,CAACC,KAAK,CAACL,GAAG,CAAC;AACxB;AAEA,SAASM,IAAIA,CAACC,KAAiB,EAAEC,IAAe,GAAG,MAAM,EAAE;EACzD,MAAMC,KAAiB,GACrB,OAAOF,KAAK,KAAK,QAAQ,GACrB;IACEG,EAAE,EAAE,EAAEd,GAAG;IACTe,OAAO,EAAEJ,KAAK;IACdC,IAAI;IACJI,QAAQ,EAAEf,gBAAgB;IAC1BgB,QAAQ,EAAE;EACZ,CAAC,GACD;IACEH,EAAE,EAAE,EAAEd,GAAG;IACTe,OAAO,EAAEJ,KAAK,CAACI,OAAO;IACtBH,IAAI,EAAED,KAAK,CAACC,IAAI,IAAIA,IAAI;IACxBI,QAAQ,EAAEb,aAAa,CAACQ,KAAK,CAACK,QAAQ,CAAC;IACvCC,QAAQ,EAAEN,KAAK,CAACM,QAAQ,IAAI;EAC9B,CAAC;EACP;EACA;EACAlB,KAAK,CAACmB,OAAO,CAACL,KAAK,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,KAAK,GAAGC,MAAM,CAACC,MAAM,CAAEV,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,MAAM,CAAC,EAAE;EAC7EW,IAAI,EAAGX,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,MAAM,CAAC;EAChDY,OAAO,EAAGZ,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,SAAS,CAAC;EACtDa,KAAK,EAAGb,KAAiB,IAAKD,IAAI,CAACC,KAAK,EAAE,OAAO;AACnD,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMc,iBAAiB,GAAG1B,KAAK,CAAC2B,YAAY;;AAEnD;AACA,OAAO,MAAMC,aAAa,GAAG5B,KAAK,CAAC6B,QAAQ;;AAE3C;AACA,OAAO,MAAMC,sBAAsB,GAAG9B,KAAK,CAAC+B,SAAS","ignoreList":[]}
|