@jelper/notify 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ export const buildNotify = () => {
2
+ let listeners = new Set();
3
+ return {
4
+ notify: (data) => {
5
+ listeners.forEach(fn => fn(data));
6
+ },
7
+ on: (callback) => {
8
+ listeners.add(callback);
9
+ return () => listeners.delete(callback);
10
+ },
11
+ once: (callback) => {
12
+ const handler = (data) => {
13
+ callback(data);
14
+ listeners.delete(handler);
15
+ };
16
+ listeners.add(handler);
17
+ return () => listeners.delete(handler);
18
+ },
19
+ destroy: () => {
20
+ listeners.clear();
21
+ }
22
+ };
23
+ };
24
+ //# sourceMappingURL=base-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-notify.js","sourceRoot":"/","sources":["base-notify.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,WAAW,GAAG,GAAwB,EAAE;IACnD,IAAI,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,OAAO;QACL,MAAM,EAAE,CAAC,IAAO,EAAE,EAAE;YAClB,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,EAAE,EAAE,CAAC,QAA2B,EAAe,EAAE;YAC/C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,EAAE,CAAC,QAA2B,EAAe,EAAE;YACjD,MAAM,OAAO,GAAG,CAAC,IAAO,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC,CAAA","sourcesContent":["\ntype Unsubscribe = () => void;\n\nexport interface Notify<T> {\n notify: (data: T) => void;\n on: (callback: (data: T) => void) => Unsubscribe;\n once: (callback: (data: T) => void) => Unsubscribe;\n destroy: () => void;\n}\n\nexport const buildNotify = <T = void>(): Notify<T> => {\n let listeners = new Set<(data: T) => void>();\n\n return {\n notify: (data: T) => {\n listeners.forEach(fn => fn(data));\n },\n\n on: (callback: (data: T) => void): Unsubscribe => {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n once: (callback: (data: T) => void): Unsubscribe => {\n const handler = (data: T) => {\n callback(data);\n listeners.delete(handler);\n };\n listeners.add(handler);\n return () => listeners.delete(handler);\n },\n\n destroy: () => {\n listeners.clear();\n }\n };\n}\n"]}
package/es/index.js CHANGED
@@ -1,31 +1,5 @@
1
- export default () => {
2
- const listeners = new Set();
3
- return {
4
- /**
5
- * 发送通知(单向,fire-and-forget)
6
- */
7
- notify: (data) => {
8
- listeners.forEach(fn => fn(data));
9
- },
10
- /**
11
- * 订阅通知
12
- */
13
- on: (callback) => {
14
- listeners.add(callback);
15
- return () => listeners.delete(callback);
16
- },
17
- // 可选:一次性监听
18
- once: (callback) => {
19
- const handler = (data) => {
20
- callback(data);
21
- listeners.delete(handler);
22
- };
23
- listeners.add(handler);
24
- return () => listeners.delete(handler);
25
- },
26
- clear: () => {
27
- listeners.clear();
28
- }
29
- };
30
- };
1
+ import { buildNotify } from './base-notify';
2
+ import { buildThemeNotify } from './theme-notify';
3
+ export { buildNotify, buildThemeNotify };
4
+ export default buildNotify;
31
5
  //# sourceMappingURL=index.js.map
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AAGA,eAAe,GAAa,EAAE;IAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE/C,OAAO;QACL;;WAEG;QACH,MAAM,EAAE,CAAC,IAAO,EAAE,EAAE;YAClB,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;QAED;;WAEG;QACH,EAAE,EAAE,CAAC,QAA2B,EAAe,EAAE;YAC/C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,WAAW;QACX,IAAI,EAAE,CAAC,QAA2B,EAAe,EAAE;YACjD,MAAM,OAAO,GAAG,CAAC,IAAO,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC,CAAA","sourcesContent":["\ntype Unsubscribe = () => void;\n\nexport default <T = void>() => {\n const listeners = new Set<(data: T) => void>();\n\n return {\n /**\n * 发送通知(单向,fire-and-forget)\n */\n notify: (data: T) => {\n listeners.forEach(fn => fn(data));\n },\n\n /**\n * 订阅通知\n */\n on: (callback: (data: T) => void): Unsubscribe => {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n // 可选:一次性监听\n once: (callback: (data: T) => void): Unsubscribe => {\n const handler = (data: T) => {\n callback(data);\n listeners.delete(handler);\n };\n listeners.add(handler);\n return () => listeners.delete(handler);\n },\n\n clear: () => {\n listeners.clear();\n }\n };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AACzC,eAAe,WAAW,CAAC","sourcesContent":["\nimport { buildNotify } from './base-notify';\nimport { buildThemeNotify } from './theme-notify';\n\nexport { buildNotify, buildThemeNotify };\nexport default buildNotify;\n"]}
@@ -0,0 +1,30 @@
1
+ import { buildNotify } from './base-notify';
2
+ export let buildThemeNotify = () => {
3
+ let notifyApi = buildNotify();
4
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
5
+ return notifyApi;
6
+ }
7
+ let mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
8
+ const handleChange = (ev) => {
9
+ notifyApi.notify(ev.matches ? 'dark' : 'light');
10
+ };
11
+ if (mediaQuery.addEventListener) {
12
+ mediaQuery.addEventListener('change', handleChange);
13
+ }
14
+ else {
15
+ // 旧版 Safari 使用 addListener
16
+ mediaQuery.addListener(handleChange);
17
+ }
18
+ return Object.assign(Object.assign({}, notifyApi), { destroy: () => {
19
+ notifyApi.destroy();
20
+ if (mediaQuery.removeEventListener) {
21
+ mediaQuery.removeEventListener('change', handleChange);
22
+ }
23
+ else {
24
+ // 旧版 Safari 使用 removeListener
25
+ mediaQuery.removeListener(handleChange);
26
+ }
27
+ mediaQuery = null;
28
+ } });
29
+ };
30
+ //# sourceMappingURL=theme-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-notify.js","sourceRoot":"/","sources":["theme-notify.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,CAAC,IAAI,gBAAgB,GAAG,GAAkB,EAAE;IAChD,IAAI,SAAS,GAAG,WAAW,EAAS,CAAC;IAErC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,EAAuB,EAAE,EAAE;QAC/C,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAChC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,uCACK,SAAS,KACZ,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACnC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;YACD,UAAU,GAAG,IAAW,CAAC;QAC3B,CAAC,IACD;AACJ,CAAC,CAAC","sourcesContent":["\n\nimport { buildNotify } from './base-notify';\nimport type { Notify } from './base-notify';\n\nexport type Theme = 'light' | 'dark';\nexport let buildThemeNotify = (): Notify<Theme> => {\n let notifyApi = buildNotify<Theme>();\n\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return notifyApi;\n }\n let mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (ev: MediaQueryListEvent) => {\n notifyApi.notify(ev.matches ? 'dark' : 'light');\n };\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n } else {\n // 旧版 Safari 使用 addListener\n mediaQuery.addListener(handleChange);\n }\n\n return {\n ...notifyApi,\n destroy: () => {\n notifyApi.destroy();\n if (mediaQuery.removeEventListener) {\n mediaQuery.removeEventListener('change', handleChange);\n } else {\n // 旧版 Safari 使用 removeListener\n mediaQuery.removeListener(handleChange);\n }\n mediaQuery = null as any;\n }\n };\n};\n"]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildNotify = void 0;
4
+ var buildNotify = function () {
5
+ var listeners = new Set();
6
+ return {
7
+ notify: function (data) {
8
+ listeners.forEach(function (fn) { return fn(data); });
9
+ },
10
+ on: function (callback) {
11
+ listeners.add(callback);
12
+ return function () { return listeners.delete(callback); };
13
+ },
14
+ once: function (callback) {
15
+ var handler = function (data) {
16
+ callback(data);
17
+ listeners.delete(handler);
18
+ };
19
+ listeners.add(handler);
20
+ return function () { return listeners.delete(handler); };
21
+ },
22
+ destroy: function () {
23
+ listeners.clear();
24
+ }
25
+ };
26
+ };
27
+ exports.buildNotify = buildNotify;
28
+ //# sourceMappingURL=base-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-notify.js","sourceRoot":"/","sources":["base-notify.ts"],"names":[],"mappings":";;;AAUO,IAAM,WAAW,GAAG;IACzB,IAAI,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,OAAO;QACL,MAAM,EAAE,UAAC,IAAO;YACd,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,IAAI,CAAC,EAAR,CAAQ,CAAC,CAAC;QACpC,CAAC;QAED,EAAE,EAAE,UAAC,QAA2B;YAC9B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,cAAM,OAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAA1B,CAA0B,CAAC;QAC1C,CAAC;QAED,IAAI,EAAE,UAAC,QAA2B;YAChC,IAAM,OAAO,GAAG,UAAC,IAAO;gBACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,cAAM,OAAA,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC;QACzC,CAAC;QAED,OAAO,EAAE;YACP,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC,CAAA;AA1BY,QAAA,WAAW,eA0BvB","sourcesContent":["\ntype Unsubscribe = () => void;\n\nexport interface Notify<T> {\n notify: (data: T) => void;\n on: (callback: (data: T) => void) => Unsubscribe;\n once: (callback: (data: T) => void) => Unsubscribe;\n destroy: () => void;\n}\n\nexport const buildNotify = <T = void>(): Notify<T> => {\n let listeners = new Set<(data: T) => void>();\n\n return {\n notify: (data: T) => {\n listeners.forEach(fn => fn(data));\n },\n\n on: (callback: (data: T) => void): Unsubscribe => {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n once: (callback: (data: T) => void): Unsubscribe => {\n const handler = (data: T) => {\n callback(data);\n listeners.delete(handler);\n };\n listeners.add(handler);\n return () => listeners.delete(handler);\n },\n\n destroy: () => {\n listeners.clear();\n }\n };\n}\n"]}
package/lib/index.js CHANGED
@@ -1,33 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = (function () {
4
- var listeners = new Set();
5
- return {
6
- /**
7
- * 发送通知(单向,fire-and-forget)
8
- */
9
- notify: function (data) {
10
- listeners.forEach(function (fn) { return fn(data); });
11
- },
12
- /**
13
- * 订阅通知
14
- */
15
- on: function (callback) {
16
- listeners.add(callback);
17
- return function () { return listeners.delete(callback); };
18
- },
19
- // 可选:一次性监听
20
- once: function (callback) {
21
- var handler = function (data) {
22
- callback(data);
23
- listeners.delete(handler);
24
- };
25
- listeners.add(handler);
26
- return function () { return listeners.delete(handler); };
27
- },
28
- clear: function () {
29
- listeners.clear();
30
- }
31
- };
32
- });
3
+ exports.buildThemeNotify = exports.buildNotify = void 0;
4
+ var base_notify_1 = require("./base-notify");
5
+ Object.defineProperty(exports, "buildNotify", { enumerable: true, get: function () { return base_notify_1.buildNotify; } });
6
+ var theme_notify_1 = require("./theme-notify");
7
+ Object.defineProperty(exports, "buildThemeNotify", { enumerable: true, get: function () { return theme_notify_1.buildThemeNotify; } });
8
+ exports.default = base_notify_1.buildNotify;
33
9
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;AAGA,mBAAe;IACb,IAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE/C,OAAO;QACL;;WAEG;QACH,MAAM,EAAE,UAAC,IAAO;YACd,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,IAAI,CAAC,EAAR,CAAQ,CAAC,CAAC;QACpC,CAAC;QAED;;WAEG;QACH,EAAE,EAAE,UAAC,QAA2B;YAC9B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,cAAM,OAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAA1B,CAA0B,CAAC;QAC1C,CAAC;QAED,WAAW;QACX,IAAI,EAAE,UAAC,QAA2B;YAChC,IAAM,OAAO,GAAG,UAAC,IAAO;gBACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,cAAM,OAAA,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC;QACzC,CAAC;QAED,KAAK,EAAE;YACL,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC,EAAA","sourcesContent":["\ntype Unsubscribe = () => void;\n\nexport default <T = void>() => {\n const listeners = new Set<(data: T) => void>();\n\n return {\n /**\n * 发送通知(单向,fire-and-forget)\n */\n notify: (data: T) => {\n listeners.forEach(fn => fn(data));\n },\n\n /**\n * 订阅通知\n */\n on: (callback: (data: T) => void): Unsubscribe => {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n // 可选:一次性监听\n once: (callback: (data: T) => void): Unsubscribe => {\n const handler = (data: T) => {\n callback(data);\n listeners.delete(handler);\n };\n listeners.add(handler);\n return () => listeners.delete(handler);\n },\n\n clear: () => {\n listeners.clear();\n }\n };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;AACA,6CAA4C;AAGnC,4FAHA,yBAAW,OAGA;AAFpB,+CAAkD;AAE5B,iGAFb,+BAAgB,OAEa;AACtC,kBAAe,yBAAW,CAAC","sourcesContent":["\nimport { buildNotify } from './base-notify';\nimport { buildThemeNotify } from './theme-notify';\n\nexport { buildNotify, buildThemeNotify };\nexport default buildNotify;\n"]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.buildThemeNotify = void 0;
15
+ var base_notify_1 = require("./base-notify");
16
+ var buildThemeNotify = function () {
17
+ var notifyApi = (0, base_notify_1.buildNotify)();
18
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
19
+ return notifyApi;
20
+ }
21
+ var mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
22
+ var handleChange = function (ev) {
23
+ notifyApi.notify(ev.matches ? 'dark' : 'light');
24
+ };
25
+ if (mediaQuery.addEventListener) {
26
+ mediaQuery.addEventListener('change', handleChange);
27
+ }
28
+ else {
29
+ // 旧版 Safari 使用 addListener
30
+ mediaQuery.addListener(handleChange);
31
+ }
32
+ return __assign(__assign({}, notifyApi), { destroy: function () {
33
+ notifyApi.destroy();
34
+ if (mediaQuery.removeEventListener) {
35
+ mediaQuery.removeEventListener('change', handleChange);
36
+ }
37
+ else {
38
+ // 旧版 Safari 使用 removeListener
39
+ mediaQuery.removeListener(handleChange);
40
+ }
41
+ mediaQuery = null;
42
+ } });
43
+ };
44
+ exports.buildThemeNotify = buildThemeNotify;
45
+ //# sourceMappingURL=theme-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-notify.js","sourceRoot":"/","sources":["theme-notify.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,6CAA4C;AAIrC,IAAI,gBAAgB,GAAG;IAC5B,IAAI,SAAS,GAAG,IAAA,yBAAW,GAAS,CAAC;IAErC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACnE,IAAM,YAAY,GAAG,UAAC,EAAuB;QAC3C,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAChC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,6BACK,SAAS,KACZ,OAAO,EAAE;YACP,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACnC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;YACD,UAAU,GAAG,IAAW,CAAC;QAC3B,CAAC,IACD;AACJ,CAAC,CAAC;AA/BS,QAAA,gBAAgB,oBA+BzB","sourcesContent":["\n\nimport { buildNotify } from './base-notify';\nimport type { Notify } from './base-notify';\n\nexport type Theme = 'light' | 'dark';\nexport let buildThemeNotify = (): Notify<Theme> => {\n let notifyApi = buildNotify<Theme>();\n\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return notifyApi;\n }\n let mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (ev: MediaQueryListEvent) => {\n notifyApi.notify(ev.matches ? 'dark' : 'light');\n };\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n } else {\n // 旧版 Safari 使用 addListener\n mediaQuery.addListener(handleChange);\n }\n\n return {\n ...notifyApi,\n destroy: () => {\n notifyApi.destroy();\n if (mediaQuery.removeEventListener) {\n mediaQuery.removeEventListener('change', handleChange);\n } else {\n // 旧版 Safari 使用 removeListener\n mediaQuery.removeListener(handleChange);\n }\n mediaQuery = null as any;\n }\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jelper/notify",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "通知器",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -24,13 +24,17 @@
24
24
  "dependencies": {
25
25
  },
26
26
  "devDependencies": {
27
- "@jest/globals":"~30.2.0",
28
27
  "@jelper/builder": "workspace:*",
28
+ "@jest/globals":"~30.2.0",
29
29
  "@types/node": "~24.10.1"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
34
  "author": "apathyjade@outlook.com",
35
- "license": "ISC"
35
+ "license": "ISC",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/apathyjade/jelper.git"
39
+ }
36
40
  }
@@ -0,0 +1,9 @@
1
+ type Unsubscribe = () => void;
2
+ export interface Notify<T> {
3
+ notify: (data: T) => void;
4
+ on: (callback: (data: T) => void) => Unsubscribe;
5
+ once: (callback: (data: T) => void) => Unsubscribe;
6
+ destroy: () => void;
7
+ }
8
+ export declare const buildNotify: <T = void>() => Notify<T>;
9
+ export {};
package/types/index.d.ts CHANGED
@@ -1,14 +1,4 @@
1
- type Unsubscribe = () => void;
2
- declare const _default: <T = void>() => {
3
- /**
4
- * 发送通知(单向,fire-and-forget)
5
- */
6
- notify: (data: T) => void;
7
- /**
8
- * 订阅通知
9
- */
10
- on: (callback: (data: T) => void) => Unsubscribe;
11
- once: (callback: (data: T) => void) => Unsubscribe;
12
- clear: () => void;
13
- };
14
- export default _default;
1
+ import { buildNotify } from './base-notify';
2
+ import { buildThemeNotify } from './theme-notify';
3
+ export { buildNotify, buildThemeNotify };
4
+ export default buildNotify;
@@ -0,0 +1,3 @@
1
+ import type { Notify } from './base-notify';
2
+ export type Theme = 'light' | 'dark';
3
+ export declare let buildThemeNotify: () => Notify<Theme>;