@unif/react-native-design 0.24.0 → 0.25.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.
Files changed (37) hide show
  1. package/jest-preset.js +9 -1
  2. package/lib/module/components/ui/Confirm/ConfirmHost.js +7 -12
  3. package/lib/module/components/ui/Confirm/ConfirmHost.js.map +1 -1
  4. package/lib/module/components/ui/Confirm/confirm.js +3 -2
  5. package/lib/module/components/ui/Confirm/confirm.js.map +1 -1
  6. package/lib/module/components/ui/Confirm/store.js +58 -8
  7. package/lib/module/components/ui/Confirm/store.js.map +1 -1
  8. package/lib/module/components/ui/Toast/ToastHost.js +20 -2
  9. package/lib/module/components/ui/Toast/ToastHost.js.map +1 -1
  10. package/lib/module/components/ui/Toast/ToastHost.web.js +11 -1
  11. package/lib/module/components/ui/Toast/ToastHost.web.js.map +1 -1
  12. package/lib/module/components/ui/Toast/store.js +95 -12
  13. package/lib/module/components/ui/Toast/store.js.map +1 -1
  14. package/lib/module/components/ui/Toast/toast.js +3 -2
  15. package/lib/module/components/ui/Toast/toast.js.map +1 -1
  16. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts +7 -5
  17. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
  18. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts +4 -3
  19. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
  20. package/lib/typescript/src/components/ui/Confirm/store.d.ts +13 -4
  21. package/lib/typescript/src/components/ui/Confirm/store.d.ts.map +1 -1
  22. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts +5 -1
  23. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
  24. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts +1 -0
  25. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
  26. package/lib/typescript/src/components/ui/Toast/store.d.ts +25 -1
  27. package/lib/typescript/src/components/ui/Toast/store.d.ts.map +1 -1
  28. package/lib/typescript/src/components/ui/Toast/toast.d.ts +4 -3
  29. package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
  30. package/package.json +1 -1
  31. package/src/components/ui/Confirm/ConfirmHost.tsx +8 -14
  32. package/src/components/ui/Confirm/confirm.ts +3 -2
  33. package/src/components/ui/Confirm/store.ts +61 -13
  34. package/src/components/ui/Toast/ToastHost.tsx +20 -2
  35. package/src/components/ui/Toast/ToastHost.web.tsx +11 -1
  36. package/src/components/ui/Toast/store.ts +112 -16
  37. package/src/components/ui/Toast/toast.ts +3 -2
package/jest-preset.js CHANGED
@@ -29,7 +29,15 @@ let reactNativePreset;
29
29
  try {
30
30
  reactNativePreset = require('@react-native/jest-preset');
31
31
  } catch (error) {
32
- if (error && error.code === 'MODULE_NOT_FOUND') {
32
+ // 只认「@react-native/jest-preset 自己没装」这一种 MODULE_NOT_FOUND:它装了但内部
33
+ // 依赖断裂时抛的也是这个 code,那时报「需要自行安装」是误诊,会把人引向装了又装。
34
+ // Node 的 MODULE_NOT_FOUND 正文首行是 `Cannot find module '<说明符>'`,带引号的模块名
35
+ // 就是判据 —— 后面的 Require stack 只有裸路径,不会误命中。
36
+ if (
37
+ error &&
38
+ error.code === 'MODULE_NOT_FOUND' &&
39
+ String(error.message).includes("'@react-native/jest-preset'")
40
+ ) {
33
41
  throw new Error(
34
42
  '@unif/react-native-design/jest-preset 需要宿主工程自行安装 @react-native/jest-preset' +
35
43
  '(它不是本包的依赖):yarn add -D @react-native/jest-preset'
@@ -14,14 +14,16 @@ const SCRIM_IN_MS = 220;
14
14
  const SCRIM_OUT_MS = 260;
15
15
 
16
16
  /**
17
- * Confirm 对话框宿主 —— App 根挂**一次**,监听 `confirm()` 调用并渲染。
17
+ * Confirm 对话框宿主 —— App 根挂一个,监听 `confirm()` 调用并渲染。
18
18
  *
19
19
  * 原生 RN `Modal`(transparent + animationType slide)从底部滑入,backdrop 点击
20
20
  * 取消、内层 sheet 拦截点击不冒泡。**不依赖 @gorhom**。
21
21
  *
22
- * 唯一 owner:重复挂载的实例拿到 `null` lease,永久惰性、不渲染 —— 不会出现两个
23
- * Host 争抢同一个对话框。所有关闭路径统一走 `settleConfirm(entry, result)`,
24
- * 组件内不直接调用 entry resolver。
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","inert","setInert","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":[]}
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 卸载 → resolve(false)
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 挂载时注册唯一 owner;重复挂载得到 null。 */
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. **唯一 owner** —— 同一时间只有一个 `<ConfirmHost />` 持有订阅。重复挂载拿到 `null`
8
- * lease、永久惰性,不会出现两个 Host 争抢同一个 entry。
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 根附近挂一次 <ConfirmHost />。');
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
- function registerHost(subscriber) {
85
- if (owner) {
86
- log.warn('检测到多个 <ConfirmHost />。只有第一个生效,重复挂载的实例保持惰性 —— 请在 app 根只挂一次。');
87
- return null;
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":"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","ignoreList":[]}
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
- * 在根附近挂**一次**。监听 toast() 调用并渲染当前 toast。
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
- const lease = registerToastHost(subscriber);
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":"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","ignoreList":[]}
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
- const lease = registerToastHost(subscriber);
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":"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","ignoreList":[]}
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
- function registerHost(subscriber) {
61
- if (owner) {
62
- log.warn('检测到多个 <ToastHost />。只有第一个生效,重复挂载的实例保持惰性 —— 请在 app 根只挂一次。');
63
- return null;
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
- if (owner?.token !== token) return null;
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
- if (delivered?.ownerToken === token) {
81
- // 未完成的投递退回 pending,让下一个 Host 能补投;但更新的 pending 优先。
82
- if (!pending) pending = delivered.entry;
83
- delivered = null;
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","registerHost","warn","Symbol","self","release","complete","entryId","id","isCurrent","pendingEntry","currentDelivery"],"sourceRoot":"../../../../../src","sources":["components/ui/Toast/store.ts"],"mappings":"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","ignoreList":[]}
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 根附近挂一次 `<ToastHost />` 即可。
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 挂载时注册唯一 owner;重复挂载得到 null。 */
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":[]}