@rainbow-oh/yee-c 0.8.2 → 0.8.4

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 (123) hide show
  1. package/dist/cjs/Form/form-store.js +3 -0
  2. package/dist/cjs/Input/style/index.less +1 -0
  3. package/dist/cjs/Select/interface.d.ts +1 -1
  4. package/dist/cjs/Selector/style/index.less +1 -0
  5. package/dist/cjs/Table/icon/arrow-icon.js +1 -1
  6. package/dist/cjs/Table/theader/cell.js +6 -3
  7. package/dist/cjs/TextArea/style/index.less +1 -0
  8. package/dist/cjs/VerificationCode/style/index.less +1 -0
  9. package/dist/cjs/hooks/useCountdown.d.ts +2 -1
  10. package/dist/cjs/hooks/useCountdown.js +46 -23
  11. package/dist/cjs/locale/interface.d.ts +3 -0
  12. package/dist/cjs/locale/lang/en_US.js +4 -1
  13. package/dist/cjs/locale/lang/ja_JP.js +4 -1
  14. package/dist/cjs/locale/lang/zh_CN.js +4 -1
  15. package/dist/cjs/locale/lang/zh_TW.js +4 -1
  16. package/dist/cjs/message/demo/base.js +1 -1
  17. package/dist/cjs/message/index.d.ts +1 -1
  18. package/dist/cjs/message/interface.d.ts +16 -7
  19. package/dist/cjs/message/message-provider.d.ts +2 -1
  20. package/dist/cjs/message/message-provider.js +1 -1
  21. package/dist/cjs/message/message.js +14 -9
  22. package/dist/cjs/message/style/index.less +3 -1
  23. package/dist/cjs/message/use-message.d.ts +3 -12
  24. package/dist/cjs/message/use-message.js +103 -45
  25. package/dist/cjs/message/wrapper.d.ts +21 -27
  26. package/dist/cjs/message/wrapper.js +49 -19
  27. package/dist/cjs/notice/index.d.ts +1 -1
  28. package/dist/cjs/notice/interface.d.ts +17 -7
  29. package/dist/cjs/notice/notice-list.d.ts +3 -3
  30. package/dist/cjs/notice/notice-provider.d.ts +2 -1
  31. package/dist/cjs/notice/notice-provider.js +1 -1
  32. package/dist/cjs/notice/notice.js +63 -20
  33. package/dist/cjs/notice/style/index.less +13 -1
  34. package/dist/cjs/notice/use-notice.d.ts +2 -11
  35. package/dist/cjs/notice/use-notice.js +156 -71
  36. package/dist/cjs/notice/wrapper.d.ts +19 -15
  37. package/dist/cjs/notice/wrapper.js +122 -52
  38. package/dist/cjs/style/size.css +3 -3
  39. package/dist/cjs/style/themes.css +1 -1
  40. package/dist/cjs/style/variables.css +4 -4
  41. package/dist/cjs/version.d.ts +1 -1
  42. package/dist/cjs/version.js +1 -1
  43. package/dist/esm/Form/form-store.js +25 -17
  44. package/dist/esm/Input/style/index.less +1 -0
  45. package/dist/esm/Select/interface.d.ts +1 -1
  46. package/dist/esm/Selector/style/index.less +1 -0
  47. package/dist/esm/Table/icon/arrow-icon.js +1 -1
  48. package/dist/esm/Table/theader/cell.js +7 -3
  49. package/dist/esm/TextArea/style/index.less +1 -0
  50. package/dist/esm/VerificationCode/style/index.less +1 -0
  51. package/dist/esm/hooks/useCountdown.d.ts +2 -1
  52. package/dist/esm/hooks/useCountdown.js +44 -14
  53. package/dist/esm/locale/interface.d.ts +3 -0
  54. package/dist/esm/locale/lang/en_US.js +4 -1
  55. package/dist/esm/locale/lang/ja_JP.js +4 -1
  56. package/dist/esm/locale/lang/zh_CN.js +4 -1
  57. package/dist/esm/locale/lang/zh_TW.js +4 -1
  58. package/dist/esm/message/demo/base.js +4 -1
  59. package/dist/esm/message/index.d.ts +1 -1
  60. package/dist/esm/message/interface.d.ts +16 -7
  61. package/dist/esm/message/message-provider.d.ts +2 -1
  62. package/dist/esm/message/message-provider.js +1 -1
  63. package/dist/esm/message/message.js +22 -9
  64. package/dist/esm/message/style/index.less +3 -1
  65. package/dist/esm/message/use-message.d.ts +3 -12
  66. package/dist/esm/message/use-message.js +129 -79
  67. package/dist/esm/message/wrapper.d.ts +21 -27
  68. package/dist/esm/message/wrapper.js +60 -18
  69. package/dist/esm/notice/index.d.ts +1 -1
  70. package/dist/esm/notice/interface.d.ts +17 -7
  71. package/dist/esm/notice/notice-list.d.ts +3 -3
  72. package/dist/esm/notice/notice-provider.d.ts +2 -1
  73. package/dist/esm/notice/notice-provider.js +1 -1
  74. package/dist/esm/notice/notice.js +73 -21
  75. package/dist/esm/notice/style/index.less +13 -1
  76. package/dist/esm/notice/use-notice.d.ts +2 -11
  77. package/dist/esm/notice/use-notice.js +180 -100
  78. package/dist/esm/notice/wrapper.d.ts +19 -15
  79. package/dist/esm/notice/wrapper.js +144 -62
  80. package/dist/esm/style/size.css +3 -3
  81. package/dist/esm/style/themes.css +1 -1
  82. package/dist/esm/style/variables.css +4 -4
  83. package/dist/esm/version.d.ts +1 -1
  84. package/dist/esm/version.js +1 -1
  85. package/dist/umd/yee-c.min.css +2 -2
  86. package/dist/umd/yee-c.min.js +1 -1
  87. package/package.json +1 -1
  88. package/src/Form/form-store.ts +5 -0
  89. package/src/Input/style/index.less +1 -0
  90. package/src/Select/interface.ts +1 -1
  91. package/src/Selector/style/index.less +1 -0
  92. package/src/Table/icon/arrow-icon.tsx +1 -1
  93. package/src/Table/theader/cell.tsx +6 -3
  94. package/src/TextArea/style/index.less +1 -0
  95. package/src/VerificationCode/style/index.less +1 -0
  96. package/src/hooks/useCountdown.ts +52 -21
  97. package/src/locale/interface.ts +3 -0
  98. package/src/locale/lang/en_US.ts +3 -0
  99. package/src/locale/lang/ja_JP.ts +3 -0
  100. package/src/locale/lang/zh_CN.ts +3 -0
  101. package/src/locale/lang/zh_TW.ts +3 -0
  102. package/src/message/demo/base.tsx +1 -1
  103. package/src/message/index.ts +1 -1
  104. package/src/message/interface.ts +22 -7
  105. package/src/message/message-provider.tsx +3 -2
  106. package/src/message/message.test.tsx +283 -0
  107. package/src/message/message.tsx +14 -9
  108. package/src/message/style/index.less +3 -1
  109. package/src/message/use-message.tsx +144 -67
  110. package/src/message/wrapper.tsx +62 -20
  111. package/src/notice/index.en-US.md +76 -75
  112. package/src/notice/index.ts +6 -1
  113. package/src/notice/index.zh-CN.md +3 -2
  114. package/src/notice/interface.ts +31 -14
  115. package/src/notice/notice-list.tsx +3 -9
  116. package/src/notice/notice-provider.tsx +3 -2
  117. package/src/notice/notice.test.tsx +450 -0
  118. package/src/notice/notice.tsx +69 -21
  119. package/src/notice/style/index.less +13 -1
  120. package/src/notice/use-notice.tsx +210 -94
  121. package/src/notice/wrapper.tsx +159 -71
  122. package/src/style/size.css +3 -3
  123. package/src/version.ts +1 -1
@@ -52,85 +52,170 @@ module.exports = __toCommonJS(use_notice_exports);
52
52
  var import_react = __toESM(require("react"));
53
53
  var import_react_dom = require("react-dom");
54
54
  var import_notice_list = __toESM(require("./notice-list"));
55
+ var invokeOnClose = (notices) => {
56
+ const errors = [];
57
+ notices.forEach((notice) => {
58
+ var _a;
59
+ try {
60
+ (_a = notice.onClose) == null ? void 0 : _a.call(notice);
61
+ } catch (error) {
62
+ errors.push(error);
63
+ }
64
+ });
65
+ errors.forEach((error) => {
66
+ const reportError = globalThis.reportError;
67
+ if (reportError) {
68
+ reportError(error);
69
+ } else {
70
+ console.error(error);
71
+ }
72
+ });
73
+ };
55
74
  var useNotice = () => {
56
75
  const [noticesByPlacement, setNoticesByPlacement] = (0, import_react.useState)(/* @__PURE__ */ new Map());
57
- const count = (0, import_react.useRef)(0);
58
- const add = (0, import_react.useCallback)((props) => {
59
- const placement = props.placement || "topRight";
60
- const id = count.current++;
61
- setNoticesByPlacement((prev) => {
62
- const newMap = new Map(prev);
63
- const notices = newMap.get(placement) || [];
64
- newMap.set(placement, [...notices, __spreadValues({ key: id }, props)]);
65
- return newMap;
66
- });
76
+ const [portalContainer, setPortalContainer] = (0, import_react.useState)(
77
+ null
78
+ );
79
+ const noticesRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
80
+ const generationByKey = (0, import_react.useRef)(/* @__PURE__ */ new Map());
81
+ const generation = (0, import_react.useRef)(0);
82
+ const timerGeneration = (0, import_react.useRef)(0);
83
+ const autoKey = (0, import_react.useRef)(0);
84
+ (0, import_react.useEffect)(() => {
85
+ setPortalContainer(document.body);
67
86
  }, []);
68
- const onDestroy = (key, placement) => {
69
- setNoticesByPlacement((prev) => {
70
- const newMap = new Map(prev);
71
- const notices = newMap.get(placement) || [];
72
- const filtered = notices.filter((notice) => notice.key !== key);
73
- if (filtered.length === 0) {
74
- newMap.delete(placement);
75
- } else {
76
- newMap.set(placement, filtered);
77
- }
78
- return newMap;
79
- });
80
- };
81
- const noticeApi = {
82
- open: (props) => {
83
- add(
84
- typeof props === "string" ? { content: props, status: "info" } : __spreadValues({ status: "info" }, props)
85
- );
87
+ const updateNotices = (0, import_react.useCallback)(
88
+ (updater) => {
89
+ const nextNotices = updater(noticesRef.current);
90
+ noticesRef.current = nextNotices;
91
+ setNoticesByPlacement(nextNotices);
86
92
  },
87
- success: (props) => {
88
- add(
89
- typeof props === "string" ? { content: props, status: "success" } : __spreadProps(__spreadValues({}, props), { status: "success" })
90
- );
91
- },
92
- error: (props) => {
93
- add(
94
- typeof props === "string" ? { content: props, status: "error" } : __spreadProps(__spreadValues({}, props), { status: "error" })
95
- );
96
- },
97
- warning: (props) => {
98
- add(
99
- typeof props === "string" ? { content: props, status: "warning" } : __spreadProps(__spreadValues({}, props), { status: "warning" })
100
- );
101
- },
102
- info: (props) => {
103
- add(
104
- typeof props === "string" ? { content: props, status: "info" } : __spreadProps(__spreadValues({}, props), { status: "info" })
105
- );
106
- },
107
- destroy: (key) => {
108
- setNoticesByPlacement((prev) => {
109
- const newMap = new Map(prev);
110
- newMap.forEach((notices, placement) => {
111
- const filtered = notices.filter((notice) => notice.key !== key);
93
+ []
94
+ );
95
+ const onDestroy = (0, import_react.useCallback)(
96
+ (key, expectedTimerGeneration) => {
97
+ var _a;
98
+ let target;
99
+ noticesRef.current.forEach((items) => {
100
+ target != null ? target : target = items.find((item) => item.key === key);
101
+ });
102
+ if (!target || expectedTimerGeneration !== void 0 && target.timerGeneration !== expectedTimerGeneration) {
103
+ return;
104
+ }
105
+ generationByKey.current.delete(key);
106
+ updateNotices((current) => {
107
+ const next = new Map(current);
108
+ next.forEach((items, placement) => {
109
+ const filtered = items.filter((item) => item.key !== key);
112
110
  if (filtered.length === 0) {
113
- newMap.delete(placement);
114
- } else if (filtered.length !== notices.length) {
115
- newMap.set(placement, filtered);
111
+ next.delete(placement);
112
+ } else if (filtered.length !== items.length) {
113
+ next.set(placement, filtered);
116
114
  }
117
115
  });
118
- return newMap;
116
+ return next;
119
117
  });
118
+ (_a = target.onClose) == null ? void 0 : _a.call(target);
120
119
  },
121
- clear: (placement) => {
122
- if (placement) {
123
- setNoticesByPlacement((prev) => {
124
- const newMap = new Map(prev);
125
- newMap.delete(placement);
126
- return newMap;
127
- });
128
- } else {
129
- setNoticesByPlacement(/* @__PURE__ */ new Map());
120
+ [updateNotices]
121
+ );
122
+ const add = (0, import_react.useCallback)(
123
+ (props) => {
124
+ var _a, _b;
125
+ const placement = (_a = props.placement) != null ? _a : "topRight";
126
+ let key = props.key;
127
+ if (key === void 0 || key === null) {
128
+ do {
129
+ key = `__yee_notice_auto_${autoKey.current++}`;
130
+ } while (generationByKey.current.has(key));
130
131
  }
132
+ const keyGeneration = (_b = generationByKey.current.get(key)) != null ? _b : generation.current++;
133
+ generationByKey.current.set(key, keyGeneration);
134
+ const nextNotice = __spreadProps(__spreadValues({}, props), {
135
+ key,
136
+ placement,
137
+ timerGeneration: timerGeneration.current++
138
+ });
139
+ updateNotices((current) => {
140
+ const next = new Map(current);
141
+ let existingIndex = -1;
142
+ next.forEach((items, currentPlacement) => {
143
+ const index = items.findIndex((item) => item.key === key);
144
+ if (index < 0) {
145
+ return;
146
+ }
147
+ if (currentPlacement === placement) {
148
+ existingIndex = index;
149
+ } else {
150
+ const filtered = items.filter((item) => item.key !== key);
151
+ if (filtered.length === 0) {
152
+ next.delete(currentPlacement);
153
+ } else {
154
+ next.set(currentPlacement, filtered);
155
+ }
156
+ }
157
+ });
158
+ const targetNotices = (next.get(placement) || []).filter(
159
+ (item) => item.key !== key
160
+ );
161
+ if (existingIndex >= 0) {
162
+ targetNotices.splice(existingIndex, 0, nextNotice);
163
+ } else {
164
+ targetNotices.push(nextNotice);
165
+ }
166
+ next.set(placement, targetNotices);
167
+ return next;
168
+ });
169
+ return () => {
170
+ if (generationByKey.current.get(key) === keyGeneration) {
171
+ onDestroy(key);
172
+ }
173
+ };
174
+ },
175
+ [onDestroy, updateNotices]
176
+ );
177
+ const clear = (0, import_react.useCallback)(
178
+ (placement) => {
179
+ const removed = placement ? noticesRef.current.get(placement) || [] : Array.from(noticesRef.current.values()).flat();
180
+ removed.forEach((item) => generationByKey.current.delete(item.key));
181
+ updateNotices((current) => {
182
+ if (!placement) {
183
+ return /* @__PURE__ */ new Map();
184
+ }
185
+ const next = new Map(current);
186
+ next.delete(placement);
187
+ return next;
188
+ });
189
+ invokeOnClose(removed);
190
+ },
191
+ [updateNotices]
192
+ );
193
+ const noticeApi = (0, import_react.useMemo)(
194
+ () => ({
195
+ open: (props) => add(
196
+ typeof props === "string" ? { content: props, status: "info" } : __spreadValues({ status: "info" }, props)
197
+ ),
198
+ success: (props) => add(
199
+ typeof props === "string" ? { content: props, status: "success" } : __spreadProps(__spreadValues({}, props), { status: "success" })
200
+ ),
201
+ error: (props) => add(
202
+ typeof props === "string" ? { content: props, status: "error" } : __spreadProps(__spreadValues({}, props), { status: "error" })
203
+ ),
204
+ warning: (props) => add(
205
+ typeof props === "string" ? { content: props, status: "warning" } : __spreadProps(__spreadValues({}, props), { status: "warning" })
206
+ ),
207
+ info: (props) => add(
208
+ typeof props === "string" ? { content: props, status: "info" } : __spreadProps(__spreadValues({}, props), { status: "info" })
209
+ ),
210
+ destroy: onDestroy,
211
+ clear
212
+ }),
213
+ [add, clear, onDestroy]
214
+ );
215
+ const noticeHolders = (0, import_react.useMemo)(() => {
216
+ if (!portalContainer) {
217
+ return [];
131
218
  }
132
- };
133
- const noticeHolders = import_react.default.useMemo(() => {
134
219
  const holders = [];
135
220
  noticesByPlacement.forEach((notices, placement) => {
136
221
  holders.push(
@@ -140,16 +225,16 @@ var useNotice = () => {
140
225
  {
141
226
  items: notices,
142
227
  placement,
143
- onDestroy: (key) => onDestroy(key, placement)
228
+ onDestroy
144
229
  }
145
230
  ),
146
- document.body,
231
+ portalContainer,
147
232
  `notice-${placement}`
148
233
  )
149
234
  );
150
235
  });
151
236
  return holders;
152
- }, [noticesByPlacement]);
237
+ }, [noticesByPlacement, onDestroy, portalContainer]);
153
238
  return { noticeApi, noticeHolders };
154
239
  };
155
240
  var use_notice_default = useNotice;
@@ -1,31 +1,35 @@
1
1
  import { Root } from 'react-dom/client';
2
- import { NoticeConfig, NoticeType, WrapperedNoticeConfig } from './interface';
3
- type PlacementType = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'top' | 'bottom';
2
+ import { NoticeClose, NoticeConfig, NoticeType, PlacementType, WrapperedNoticeConfig } from './interface';
4
3
  declare class NoticeWrapper {
5
4
  roots: Map<PlacementType, Root>;
6
5
  containers: Map<PlacementType, HTMLElement>;
7
6
  notices: Map<PlacementType, NoticeType[]>;
7
+ generationByKey: Map<string | number, number>;
8
+ generation: number;
9
+ timerGeneration: number;
8
10
  constructor();
9
11
  uuid(): string;
10
12
  private createContainer;
11
13
  private cleanupContainer;
12
14
  unmount(placement?: PlacementType): void;
13
15
  render(placement: PlacementType): void;
14
- show(params: WrapperedNoticeConfig): void;
15
- destroy(key: string | number, placement?: PlacementType): void;
16
- open(params: string | NoticeConfig): void;
17
- info(params: string | NoticeConfig): void;
18
- success(params: string | NoticeConfig): void;
19
- warning(params: string | NoticeConfig): void;
20
- error(params: string | NoticeConfig): void;
16
+ show(params: WrapperedNoticeConfig): NoticeClose;
17
+ destroy(key: string | number, expectedTimerGeneration?: number): void;
18
+ clear(placement?: PlacementType): void;
19
+ open(params: string | NoticeConfig): NoticeClose;
20
+ info(params: string | NoticeConfig): NoticeClose;
21
+ success(params: string | NoticeConfig): NoticeClose;
22
+ warning(params: string | NoticeConfig): NoticeClose;
23
+ error(params: string | NoticeConfig): NoticeClose;
21
24
  }
22
25
  declare const noticeWrapper: NoticeWrapper;
23
26
  export default noticeWrapper;
24
27
  export declare const notice: {
25
- open: (params: string | NoticeConfig) => void;
26
- info: (params: string | NoticeConfig) => void;
27
- success: (params: string | NoticeConfig) => void;
28
- warning: (params: string | NoticeConfig) => void;
29
- error: (params: string | NoticeConfig) => void;
30
- destroy: (key: string | number, placement?: PlacementType) => void;
28
+ open: (params: string | NoticeConfig) => NoticeClose;
29
+ info: (params: string | NoticeConfig) => NoticeClose;
30
+ success: (params: string | NoticeConfig) => NoticeClose;
31
+ warning: (params: string | NoticeConfig) => NoticeClose;
32
+ error: (params: string | NoticeConfig) => NoticeClose;
33
+ destroy: (key: string | number, expectedTimerGeneration?: number) => void;
34
+ clear: (placement?: PlacementType) => void;
31
35
  };
@@ -53,14 +53,44 @@ module.exports = __toCommonJS(wrapper_exports);
53
53
  var import_react = __toESM(require("react"));
54
54
  var import_client = require("react-dom/client");
55
55
  var import_notice_list = __toESM(require("./notice-list"));
56
+ var noop = () => {
57
+ };
58
+ var invokeOnClose = (notices) => {
59
+ const errors = [];
60
+ notices.forEach((notice2) => {
61
+ var _a;
62
+ try {
63
+ (_a = notice2.onClose) == null ? void 0 : _a.call(notice2);
64
+ } catch (error) {
65
+ errors.push(error);
66
+ }
67
+ });
68
+ errors.forEach((error) => {
69
+ const reportError = globalThis.reportError;
70
+ if (reportError) {
71
+ reportError(error);
72
+ } else {
73
+ console.error(error);
74
+ }
75
+ });
76
+ };
56
77
  var NoticeWrapper = class {
57
78
  constructor() {
58
79
  this.roots = /* @__PURE__ */ new Map();
59
80
  this.containers = /* @__PURE__ */ new Map();
60
81
  this.notices = /* @__PURE__ */ new Map();
82
+ this.generationByKey = /* @__PURE__ */ new Map();
83
+ this.generation = 0;
84
+ this.timerGeneration = 0;
85
+ this.destroy = this.destroy.bind(this);
61
86
  }
62
87
  uuid() {
63
- return crypto.randomUUID ? crypto.randomUUID() : "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
88
+ var _a, _b;
89
+ const randomUUID = (_b = (_a = globalThis.crypto) == null ? void 0 : _a.randomUUID) == null ? void 0 : _b.call(_a);
90
+ if (randomUUID) {
91
+ return randomUUID;
92
+ }
93
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
64
94
  const r = Math.random() * 16 | 0;
65
95
  const v = c === "x" ? r : r & 3 | 8;
66
96
  return v.toString(16);
@@ -77,39 +107,41 @@ var NoticeWrapper = class {
77
107
  }
78
108
  cleanupContainer(placement) {
79
109
  const container = this.containers.get(placement);
80
- if (container && container.parentNode) {
110
+ if (container == null ? void 0 : container.parentNode) {
81
111
  container.parentNode.removeChild(container);
82
- this.containers.delete(placement);
83
112
  }
113
+ this.containers.delete(placement);
84
114
  }
85
115
  unmount(placement) {
86
- if (placement) {
87
- const root = this.roots.get(placement);
88
- if (root) {
89
- root.unmount();
90
- this.roots.delete(placement);
91
- this.cleanupContainer(placement);
92
- this.notices.delete(placement);
93
- }
94
- } else {
95
- this.roots.forEach((root, placement2) => {
96
- root.unmount();
97
- this.cleanupContainer(placement2);
98
- });
116
+ const placements = placement ? [placement] : Array.from(this.notices.keys());
117
+ const removed = placements.flatMap((item) => this.notices.get(item) || []);
118
+ placements.forEach((item) => {
119
+ var _a;
120
+ (_a = this.roots.get(item)) == null ? void 0 : _a.unmount();
121
+ this.roots.delete(item);
122
+ this.cleanupContainer(item);
123
+ this.notices.delete(item);
124
+ });
125
+ if (!placement) {
99
126
  this.roots.clear();
100
127
  this.containers.clear();
101
- this.notices.clear();
102
128
  }
129
+ removed.forEach((item) => {
130
+ this.generationByKey.delete(item.key);
131
+ });
132
+ invokeOnClose(removed);
103
133
  }
104
134
  render(placement) {
135
+ var _a;
136
+ if (typeof document === "undefined") {
137
+ return;
138
+ }
105
139
  const notices = this.notices.get(placement) || [];
106
140
  if (notices.length === 0) {
107
- const root2 = this.roots.get(placement);
108
- if (root2) {
109
- root2.unmount();
110
- this.roots.delete(placement);
111
- this.cleanupContainer(placement);
112
- }
141
+ (_a = this.roots.get(placement)) == null ? void 0 : _a.unmount();
142
+ this.roots.delete(placement);
143
+ this.cleanupContainer(placement);
144
+ this.notices.delete(placement);
113
145
  return;
114
146
  }
115
147
  const container = this.createContainer(placement);
@@ -124,60 +156,97 @@ var NoticeWrapper = class {
124
156
  {
125
157
  items: notices,
126
158
  placement,
127
- onDestroy: (key) => this.destroy(key, placement)
159
+ onDestroy: this.destroy
128
160
  }
129
161
  )
130
162
  );
131
163
  }
132
164
  show(params) {
133
- const placement = params.placement || "topRight";
134
- if (!params.key) {
135
- params.key = this.uuid();
165
+ var _a, _b, _c;
166
+ if (typeof document === "undefined") {
167
+ return noop;
136
168
  }
137
- const notices = this.notices.get(placement) || [];
138
- const existIndex = notices.findIndex((item) => item.key === params.key);
139
- if (existIndex >= 0) {
140
- notices[existIndex] = params;
169
+ const placement = (_a = params.placement) != null ? _a : "topRight";
170
+ const key = (_b = params.key) != null ? _b : this.uuid();
171
+ const keyGeneration = (_c = this.generationByKey.get(key)) != null ? _c : this.generation++;
172
+ this.generationByKey.set(key, keyGeneration);
173
+ const affectedPlacements = /* @__PURE__ */ new Set([placement]);
174
+ this.notices.forEach((items, currentPlacement) => {
175
+ if (currentPlacement !== placement && items.some((item) => item.key === key)) {
176
+ this.notices.set(
177
+ currentPlacement,
178
+ items.filter((item) => item.key !== key)
179
+ );
180
+ affectedPlacements.add(currentPlacement);
181
+ }
182
+ });
183
+ const currentNotices = this.notices.get(placement) || [];
184
+ const existingIndex = currentNotices.findIndex((item) => item.key === key);
185
+ const nextNotice = __spreadProps(__spreadValues({}, params), {
186
+ key,
187
+ placement,
188
+ timerGeneration: this.timerGeneration++
189
+ });
190
+ const nextNotices = currentNotices.filter((item) => item.key !== key);
191
+ if (existingIndex >= 0) {
192
+ nextNotices.splice(existingIndex, 0, nextNotice);
141
193
  } else {
142
- notices.push(params);
194
+ nextNotices.push(nextNotice);
143
195
  }
144
- this.notices.set(placement, notices);
145
- this.render(placement);
196
+ this.notices.set(placement, nextNotices);
197
+ affectedPlacements.forEach((item) => this.render(item));
198
+ return () => {
199
+ if (this.generationByKey.get(key) === keyGeneration) {
200
+ this.destroy(key);
201
+ }
202
+ };
146
203
  }
147
- destroy(key, placement) {
148
- if (placement) {
149
- const notices = this.notices.get(placement) || [];
150
- const filtered = notices.filter((item) => item.key !== key);
151
- this.notices.set(placement, filtered);
152
- this.render(placement);
153
- } else {
154
- this.notices.forEach((notices, p) => {
155
- const filtered = notices.filter((item) => item.key !== key);
156
- this.notices.set(p, filtered);
157
- this.render(p);
158
- });
204
+ destroy(key, expectedTimerGeneration) {
205
+ var _a;
206
+ let target;
207
+ this.notices.forEach((items) => {
208
+ target != null ? target : target = items.find((item) => item.key === key);
209
+ });
210
+ if (!target || expectedTimerGeneration !== void 0 && target.timerGeneration !== expectedTimerGeneration) {
211
+ return;
159
212
  }
213
+ const affectedPlacements = /* @__PURE__ */ new Set();
214
+ this.notices.forEach((items, placement) => {
215
+ if (items.some((item) => item.key === key)) {
216
+ this.notices.set(
217
+ placement,
218
+ items.filter((item) => item.key !== key)
219
+ );
220
+ affectedPlacements.add(placement);
221
+ }
222
+ });
223
+ this.generationByKey.delete(key);
224
+ affectedPlacements.forEach((item) => this.render(item));
225
+ (_a = target.onClose) == null ? void 0 : _a.call(target);
226
+ }
227
+ clear(placement) {
228
+ this.unmount(placement);
160
229
  }
161
230
  open(params) {
162
- this.show(typeof params === "string" ? { content: params } : params);
231
+ return this.show(typeof params === "string" ? { content: params } : params);
163
232
  }
164
233
  info(params) {
165
- this.show(
234
+ return this.show(
166
235
  typeof params === "string" ? { status: "info", content: params } : __spreadProps(__spreadValues({}, params), { status: "info" })
167
236
  );
168
237
  }
169
238
  success(params) {
170
- this.show(
239
+ return this.show(
171
240
  typeof params === "string" ? { status: "success", content: params } : __spreadProps(__spreadValues({}, params), { status: "success" })
172
241
  );
173
242
  }
174
243
  warning(params) {
175
- this.show(
244
+ return this.show(
176
245
  typeof params === "string" ? { status: "warning", content: params } : __spreadProps(__spreadValues({}, params), { status: "warning" })
177
246
  );
178
247
  }
179
248
  error(params) {
180
- this.show(
249
+ return this.show(
181
250
  typeof params === "string" ? { status: "error", content: params } : __spreadProps(__spreadValues({}, params), { status: "error" })
182
251
  );
183
252
  }
@@ -190,5 +259,6 @@ var notice = {
190
259
  success: noticeWrapper.success.bind(noticeWrapper),
191
260
  warning: noticeWrapper.warning.bind(noticeWrapper),
192
261
  error: noticeWrapper.error.bind(noticeWrapper),
193
- destroy: noticeWrapper.destroy.bind(noticeWrapper)
262
+ destroy: noticeWrapper.destroy.bind(noticeWrapper),
263
+ clear: noticeWrapper.clear.bind(noticeWrapper)
194
264
  };
@@ -323,9 +323,9 @@
323
323
  --yee-menu-submenu-vertical-top: -4px;
324
324
 
325
325
  /* --Message-- */
326
- --yee-message-gap: 8px;
327
- --yee-message-padding: 12px 16px;
328
- --yee-message-border-radius: 4px;
326
+ --yee-message-gap: 6px;
327
+ --yee-message-padding: 9px 12px;
328
+ --yee-message-border-radius: 8px;
329
329
  --yee-message-box-shadow: 0 8px 24px 0 var(--yee-box-shadow-color);
330
330
  --yee-message-icon-size: 20px;
331
331
  --yee-message-list-top: 24px;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-07-23T09:42:21.552Z
4
+ * Generated on 2026-07-27T03:27:50.585Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-07-23T09:42:21.552Z
4
+ * Generated on 2026-07-27T03:27:50.585Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -1445,9 +1445,9 @@
1445
1445
  --yee-menu-submenu-vertical-top: -4px;
1446
1446
 
1447
1447
  /* --Message-- */
1448
- --yee-message-gap: 8px;
1449
- --yee-message-padding: 12px 16px;
1450
- --yee-message-border-radius: 4px;
1448
+ --yee-message-gap: 6px;
1449
+ --yee-message-padding: 9px 12px;
1450
+ --yee-message-border-radius: 8px;
1451
1451
  --yee-message-box-shadow: 0 8px 24px 0 var(--yee-box-shadow-color);
1452
1452
  --yee-message-icon-size: 20px;
1453
1453
  --yee-message-list-top: 24px;
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.8.2";
6
+ export declare const version = "0.8.4";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.8.2";
25
+ var version = "0.8.4";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }