@inpageedit/core 0.13.1 → 0.14.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.
Files changed (77) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +13 -4
  3. package/dist/{BasePlugin-Bf2UuIHF.js → BasePlugin-YOi2_vUo.js} +17 -26
  4. package/dist/BasePlugin-YOi2_vUo.js.map +1 -0
  5. package/dist/IconQuickEdit-CMCQncyj.js.map +1 -1
  6. package/dist/InputBox-nQKtiWtZ.js.map +1 -1
  7. package/dist/{PluginPrefSync-Dn1Xsiqz.js → PluginPrefSync-jTNlRQE-.js} +124 -128
  8. package/dist/PluginPrefSync-jTNlRQE-.js.map +1 -0
  9. package/dist/PluginStoreApp-CGNxKXAN.js +453 -0
  10. package/dist/PluginStoreApp-CGNxKXAN.js.map +1 -0
  11. package/dist/{endpoints-DgyuoRZd.js → Preferences-BF2fcXrn.js} +608 -576
  12. package/dist/Preferences-BF2fcXrn.js.map +1 -0
  13. package/dist/WatchlistAction-BbNAyryN.js.map +1 -1
  14. package/dist/components/index.js.map +1 -1
  15. package/dist/index-3NZkG2a3.js +116 -0
  16. package/dist/index-3NZkG2a3.js.map +1 -0
  17. package/dist/{index-BJ7_Q1mB.js → index-BBNseJXG.js} +17 -16
  18. package/dist/index-BBNseJXG.js.map +1 -0
  19. package/dist/{index-BQ-cHWkJ.js → index-Bb0FiU2c.js} +66 -48
  20. package/dist/index-Bb0FiU2c.js.map +1 -0
  21. package/dist/{index-DqA6EAM6.js → index-BgkZW91u.js} +1429 -928
  22. package/dist/index-BgkZW91u.js.map +1 -0
  23. package/dist/index-BrYKe18j.js +179 -0
  24. package/dist/index-BrYKe18j.js.map +1 -0
  25. package/dist/index-CG38LlAh.js.map +1 -1
  26. package/dist/index-CM_6yF2v.js.map +1 -1
  27. package/dist/index-D-fW3ESK.js +195 -0
  28. package/dist/index-D-fW3ESK.js.map +1 -0
  29. package/dist/index-D6zFqL2u.js +173 -0
  30. package/dist/index-D6zFqL2u.js.map +1 -0
  31. package/dist/{index-CCRMmnwk.js → index-D97lUU3h.js} +67 -66
  32. package/dist/index-D97lUU3h.js.map +1 -0
  33. package/dist/index-DD5CVCfD.js.map +1 -1
  34. package/dist/{index-B7c6jL9x.js → index-DELHsLHS.js} +146 -137
  35. package/dist/index-DELHsLHS.js.map +1 -0
  36. package/dist/{index-BwdWyHLe.js → index-DTHY5rAO.js} +93 -93
  37. package/dist/index-DTHY5rAO.js.map +1 -0
  38. package/dist/index-DmLoihN1.js +394 -0
  39. package/dist/index-DmLoihN1.js.map +1 -0
  40. package/dist/index.d.ts +362 -43
  41. package/dist/index.js +32 -26
  42. package/dist/index.js.map +1 -1
  43. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  44. package/dist/models/index.js +174 -154
  45. package/dist/models/index.js.map +1 -1
  46. package/dist/noop-ClDc6zv4.js.map +1 -1
  47. package/dist/plugins/index.js +10 -10
  48. package/dist/services/index.js +1 -1
  49. package/dist/style.css +1 -1
  50. package/dist/vueHooks-l04s8cIl.js.map +1 -1
  51. package/lib/index.umd.js +20 -12
  52. package/lib/index.umd.js.map +1 -1
  53. package/lib/style.css +1 -1
  54. package/package.json +4 -4
  55. package/dist/BasePlugin-Bf2UuIHF.js.map +0 -1
  56. package/dist/PluginPrefSync-Dn1Xsiqz.js.map +0 -1
  57. package/dist/PluginStoreApp-CpOLArL7.js +0 -452
  58. package/dist/PluginStoreApp-CpOLArL7.js.map +0 -1
  59. package/dist/Preferences-DS4-CFWe.js +0 -9
  60. package/dist/Preferences-DS4-CFWe.js.map +0 -1
  61. package/dist/endpoints-DgyuoRZd.js.map +0 -1
  62. package/dist/index-2RfILgXm.js +0 -180
  63. package/dist/index-2RfILgXm.js.map +0 -1
  64. package/dist/index-B7c6jL9x.js.map +0 -1
  65. package/dist/index-BJ7_Q1mB.js.map +0 -1
  66. package/dist/index-BNh95-x2.js +0 -115
  67. package/dist/index-BNh95-x2.js.map +0 -1
  68. package/dist/index-BQ-cHWkJ.js.map +0 -1
  69. package/dist/index-BwdWyHLe.js.map +0 -1
  70. package/dist/index-CCRMmnwk.js.map +0 -1
  71. package/dist/index-CnIpUF9x.js +0 -173
  72. package/dist/index-CnIpUF9x.js.map +0 -1
  73. package/dist/index-CyG7_IYz.js +0 -394
  74. package/dist/index-CyG7_IYz.js.map +0 -1
  75. package/dist/index-DqA6EAM6.js.map +0 -1
  76. package/dist/index-eSlbrNqF.js +0 -146
  77. package/dist/index-eSlbrNqF.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { Context, Events as Events$1, ForkScope, Inject, Inject as Inject$1, Service } from "@cordisjs/core";
1
+ import { Context, CordisError, EffectScope, Events as Events$1, ForkScope, ForkScope as ForkScope$1, Inject, Inject as Inject$1, Lifecycle, MainScope, Plugin, Registry, ScopeStatus, Service, symbols as CordisSymbols } from "@cordisjs/core";
2
2
  import * as _inpageedit_logger0 from "@inpageedit/logger";
3
3
  import { Logger } from "@inpageedit/logger";
4
- import * as wiki_saikou1 from "wiki-saikou";
4
+ import * as wiki_saikou0 from "wiki-saikou";
5
5
  import { FexiosConfigs, MwApiParams } from "wiki-saikou";
6
6
  import { FexiosFinalContext, MediaWikiApi, MwApi, MwApiParams as MwApiParams$1, MwApiResponse } from "wiki-saikou/browser";
7
7
  import { IPEModal, IPEModalEvent, IPEModalOptions } from "@inpageedit/modal";
@@ -9,7 +9,7 @@ import "@inpageedit/modal/style.css";
9
9
  import { IDBPlus } from "idb-plus";
10
10
  import "@/styles/index.scss";
11
11
  import Schema, { default as Schema$1 } from "schemastery";
12
- import * as jsx_dom1 from "jsx-dom";
12
+ import * as jsx_dom0 from "jsx-dom";
13
13
  import { JSX, ReactElement, ReactNode } from "jsx-dom";
14
14
  import { JSX as JSX$1 } from "jsx-dom/jsx-runtime";
15
15
  import { JSX as JSX$2 } from "vue/jsx-runtime";
@@ -337,10 +337,10 @@ declare class LocalStorageManager<T = unknown> implements AbstractIPEStorageMana
337
337
  dbName?: string | undefined;
338
338
  readonly storeName?: string | undefined;
339
339
  ttl: number;
340
- version?: number | undefined;
340
+ version?: number | string | undefined;
341
341
  engine: 'localStorage' | 'sessionStorage' | 'memory';
342
342
  private db;
343
- constructor(dbName?: string | undefined, storeName?: string | undefined, ttl?: number, version?: number | undefined, engine?: 'localStorage' | 'sessionStorage' | 'memory');
343
+ constructor(dbName?: string | undefined, storeName?: string | undefined, ttl?: number, version?: number | string | undefined, engine?: 'localStorage' | 'sessionStorage' | 'memory');
344
344
  private makeKey;
345
345
  private load;
346
346
  private getRaw;
@@ -365,12 +365,12 @@ declare class IDBStorageManager<T = unknown> implements AbstractIPEStorageManage
365
365
  readonly dbName: string;
366
366
  readonly storeName: string;
367
367
  ttl: number;
368
- version?: number | undefined;
368
+ version?: number | string | undefined;
369
369
  readonly db: IDBPlus<string, TypedStorageEntry<T>>;
370
370
  keys: () => AsyncIterable<string>;
371
371
  values: () => AsyncIterable<TypedStorageEntry<T>>;
372
372
  entries: () => AsyncIterable<[string, TypedStorageEntry<T>]>;
373
- constructor(dbName: string, storeName: string, ttl?: number, version?: number | undefined);
373
+ constructor(dbName: string, storeName: string, ttl?: number, version?: number | string | undefined);
374
374
  private _clearExpiredEntries;
375
375
  get(key: string, ttl?: number, setter?: () => Promise<T> | T): Promise<T | null>;
376
376
  set(key: string, value: null | undefined): Promise<void>;
@@ -404,7 +404,7 @@ declare class StorageService extends Service<StorageServiceConfig> {
404
404
  readonly simpleKV: LocalStorageManager<any>;
405
405
  readonly memoryKV: LocalStorageManager<any>;
406
406
  constructor(ctx: InPageEdit, config: StorageServiceConfig);
407
- createDatabase<T = any>(storeName: string, ttl?: number, version?: number, engine?: 'indexedDB' | 'localStorage' | 'sessionStorage' | 'memory'): AbstractIPEStorageManager<T>;
407
+ createDatabase<T = any>(storeName: string, ttl?: number, version?: number | string, engine?: 'indexedDB' | 'localStorage' | 'sessionStorage' | 'memory'): AbstractIPEStorageManager<T>;
408
408
  }
409
409
  interface TypedStorageEntry<T = any> {
410
410
  /** last update time */
@@ -412,7 +412,7 @@ interface TypedStorageEntry<T = any> {
412
412
  /** stored value */
413
413
  value: T;
414
414
  /** version */
415
- version?: number;
415
+ version?: number | string;
416
416
  }
417
417
  interface AbstractIPEStorageManager<T = unknown> {
418
418
  get(key: string, ttl?: number, setter?: () => Promise<any> | any): Promise<T | null>;
@@ -437,6 +437,13 @@ declare module '.' {
437
437
  getSciprtUrl: WikiMetadataService['getSciprtUrl'];
438
438
  getMainpageUrl: WikiMetadataService['getMainpageUrl'];
439
439
  }
440
+ interface Events {
441
+ /**
442
+ * Application requires to clear caches and reload the page
443
+ * If returns true, the page will not be reloaded
444
+ */
445
+ 'clear-cache'(): AwaitAble<boolean | void>;
446
+ }
440
447
  }
441
448
  interface WikiMetadataKindMap {
442
449
  siteinfo: WikiSiteInfo;
@@ -464,6 +471,7 @@ declare class WikiMetadataService extends Service {
464
471
  fetchFromCache<T extends keyof WikiMetadataKindMap>(kind: T): Promise<WikiMetadataKindMap[T] | null>;
465
472
  saveToCache<T extends keyof WikiMetadataKindMap>(kind: T, data: WikiMetadataKindMap[T]): Promise<TypedStorageEntry<WikiSiteInfo | WikiUserInfo>>;
466
473
  invalidateCache<T extends keyof WikiMetadataKindMap>(kind: T): Promise<void>;
474
+ private onClearCache;
467
475
  get _raw(): WikiMetadataKindMap;
468
476
  get siteInfo(): WikiSiteInfo;
469
477
  get general(): WikiSiteGeneralInfo;
@@ -789,6 +797,7 @@ declare class WikiTitleService extends Service {
789
797
  //#endregion
790
798
  //#region src/utils/computeable.d.ts
791
799
  type ComputeAble<T> = (() => T | Promise<T>) | T;
800
+ type ComputeAbleSync<T> = (() => T) | T;
792
801
  //#endregion
793
802
  //#region src/services/PreferencesService.d.ts
794
803
  // ↓ '@/InPageEdit'
@@ -881,6 +890,307 @@ declare class PreferencesService extends Service {
881
890
  private _migrageFromLegacyMasterDB;
882
891
  }
883
892
  //#endregion
893
+ //#region src/services/i18n/interpolate.d.ts
894
+ /**
895
+ * 创建带有“全局可用函数/变量”的插值函数。
896
+ * - 传入的 globals 会作为模板可用的全局,只在上下文未提供同名键时生效(上下文优先)。
897
+ * - 返回的函数与 interpolate 具有相同签名。
898
+ *
899
+ * 示例:
900
+ * ```ts
901
+ * const interpolate = createInterpolate({ getUrl })
902
+ * interpolate('url is: {{ getUrl(title) }}', { title: 'foo' })
903
+ * ```
904
+ */
905
+ type Interpolator = {
906
+ (template: string): string;
907
+ (template: string, context: Record<string, unknown>): string;
908
+ (template: string, ...numricContext: string[]): string;
909
+ (template: string, numricContext: string[]): string;
910
+ };
911
+ //#endregion
912
+ //#region src/services/i18n/I18nManager.d.ts
913
+ declare class I18nManager {
914
+ private languages;
915
+ private currentLanguage;
916
+ private missingKeys;
917
+ private usedKeys;
918
+ interpolate: Interpolator;
919
+ constructor(init?: Record<string, any>, options?: {
920
+ language?: string;
921
+ globals?: Record<string, unknown>;
922
+ });
923
+ setGlobals(globals: Record<string, unknown>): this;
924
+ /**
925
+ * ```
926
+ * { foo: 'foo', bar: { baz: 'qux' } }
927
+ * ```
928
+ * will be merged into
929
+ * ```
930
+ * { foo: 'foo', 'bar.baz': 'qux' }
931
+ * ```
932
+ */
933
+ set(key: string, value: string): this;
934
+ set(data: Record<string, any>): this;
935
+ setLanguageData(language: string, data: Record<string, any>): this;
936
+ setLanguage(language: string): this;
937
+ getLanguage(): string;
938
+ hasLanguage(language: string): boolean | undefined;
939
+ private toStringRecord;
940
+ has(key: string): boolean;
941
+ get(key: string): string | undefined;
942
+ /**
943
+ * [payload as template] Interpolate a message with optional arguments
944
+ * @example
945
+ * ```
946
+ * i18n.msg('Hello, {{ name }}', 'dragon')
947
+ * // good: "你好,dragon"
948
+ * // missing: "Hello, dragon"
949
+ * ```
950
+ */
951
+ translate(msg: string): string;
952
+ translate(msg: string, context: Record<string, unknown>): string;
953
+ translate(msg: string, ...numricContext: string[]): string;
954
+ translate(msg: string, numricContext: string[]): string;
955
+ /**
956
+ * $ => translate
957
+ * @example
958
+ * ```
959
+ * $`hello, world` // "你好,世界"
960
+ * $('dragon')`hello, {{ $1 }}` // "你好,dragon"
961
+ */
962
+ $(context: Record<string, unknown>): (strings: TemplateStringsArray, ...values: unknown[]) => string;
963
+ $(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string;
964
+ $(strings: TemplateStringsArray, ...values: unknown[]): string;
965
+ /**
966
+ * [payload as template] Return the raw message without interpolation
967
+ * @example
968
+ * ```
969
+ * i18n.rawMsg('Hello, {{ name }}')
970
+ * // good: "你好,{{ name }}"
971
+ * // missing: "Hello, {{ name }}"
972
+ * ```
973
+ */
974
+ translateRaw(msg: string): string;
975
+ /**
976
+ * $raw => translateRaw
977
+ * @example
978
+ * ```
979
+ * $raw`hello, {{ $1 }}`
980
+ * // good: "你好,{{ $1 }}"
981
+ * // missing: "hello, {{ $1 }}"
982
+ * ```
983
+ */
984
+ $raw(_context: Record<string, unknown>): (strings: TemplateStringsArray, ...values: unknown[]) => string;
985
+ $raw(..._numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string;
986
+ $raw(strings: TemplateStringsArray, ...values: unknown[]): string;
987
+ /**
988
+ * [payload as key] Interpolate a message by key with optional arguments
989
+ * @example
990
+ * ```
991
+ * i18n.strictMsg('greeting', 'dragon')
992
+ * // good: "你好,dragon"
993
+ * // missing: "(greeting)"
994
+ * ```
995
+ */
996
+ message(key: string): string;
997
+ message(key: string, context: Record<string, unknown>): string;
998
+ message(key: string, ...numricContext: string[]): string;
999
+ message(key: string, numricContext: string[]): string;
1000
+ /**
1001
+ * $$ => message
1002
+ * @example
1003
+ * ```
1004
+ * $$`hello`
1005
+ * // good: "你好"
1006
+ * // missing: "(hello)"
1007
+ * $$('dragon')`greeting`
1008
+ * // good: "你好,dragon"
1009
+ * // missing: "(greeting)"
1010
+ * ```
1011
+ */
1012
+ $$(context: Record<string, unknown>): (strings: TemplateStringsArray, ...values: unknown[]) => string;
1013
+ $$(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string;
1014
+ $$(strings: TemplateStringsArray, ...values: unknown[]): string;
1015
+ /**
1016
+ * [payload as key] Return the raw message without interpolation
1017
+ * @example
1018
+ * ```
1019
+ * i18n.rawMsg('greeting')
1020
+ * // good: "你好,{{ name }}"
1021
+ * // missing: "(greeting)"
1022
+ * ```
1023
+ */
1024
+ messageRaw(key: string): string;
1025
+ /**
1026
+ * $$raw => messageRaw
1027
+ * @example
1028
+ * ```
1029
+ * $$raw`greeting`
1030
+ * // good: "你好,{{ name }}"
1031
+ * // missing: "(greeting)"
1032
+ * ```
1033
+ */
1034
+ $$raw(_context: Record<string, unknown>): (strings: TemplateStringsArray, ...values: unknown[]) => string;
1035
+ $$raw(..._numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string;
1036
+ $$raw(strings: TemplateStringsArray, ...values: unknown[]): string;
1037
+ getAvailableLanguages(): string[];
1038
+ private ensureLanguageMap;
1039
+ private resolveLanguageOrder;
1040
+ /**
1041
+ * 获取缺失键报告:
1042
+ * { foo: ['zh', 'zh-hans', 'en'] }
1043
+ */
1044
+ getMissingReport(): {
1045
+ [k: string]: string[];
1046
+ };
1047
+ /**
1048
+ * 清空缺失键记录
1049
+ */
1050
+ clearMissingReport(): void;
1051
+ private recordMissing;
1052
+ private recordUsedKey;
1053
+ private getUsedKeys;
1054
+ private generateBlankKeyRecord;
1055
+ }
1056
+ //#endregion
1057
+ //#region src/services/i18n/index.d.ts
1058
+ interface I18nIndexV1 {
1059
+ manifest_version: 1;
1060
+ base_language: string;
1061
+ last_modified: string;
1062
+ languages: Record<string, I18nIndexLanguage>;
1063
+ }
1064
+ interface I18nIndexLanguage {
1065
+ file: string;
1066
+ iso_name?: string;
1067
+ endonym?: string;
1068
+ fallback?: string;
1069
+ data?: I18nStringRecord;
1070
+ }
1071
+ interface I18nStringRecord {
1072
+ [key: string]: string | I18nStringRecord;
1073
+ }
1074
+ // ↓ '@/InPageEdit'
1075
+ declare module '.' {
1076
+ interface InPageEdit {
1077
+ i18n: I18nService;
1078
+ /**
1079
+ * $ => translate [payload as template]
1080
+ * @example
1081
+ * ```
1082
+ * $`hello, world`
1083
+ * // good: "你好,世界"
1084
+ * // missing: "hello, world"
1085
+ * $('dragon')`hello, {{ $1 }}`
1086
+ * // good: "你好,dragon"
1087
+ * // missing: "hello, dragon"
1088
+ * ```
1089
+ */
1090
+ $: I18nManager['$'];
1091
+ /**
1092
+ * $raw => translateRaw [payload as template]
1093
+ * @example
1094
+ * ```
1095
+ * $raw`hello, {{ $1 }}`
1096
+ * // good: "你好,{{ $1 }}"
1097
+ * // missing: "hello, {{ $1 }}"
1098
+ * ```
1099
+ */
1100
+ $raw: I18nManager['$raw'];
1101
+ /**
1102
+ * $$ => message [payload as key]
1103
+ * @example
1104
+ * ```
1105
+ * $$`hello`
1106
+ * // good: "你好"
1107
+ * // missing: "(hello)"
1108
+ * $$('dragon')`greeting`
1109
+ * // good: "你好,dragon"
1110
+ * // missing: "(greeting)"
1111
+ * ```
1112
+ */
1113
+ $$: I18nManager['$$'];
1114
+ /**
1115
+ * $$raw => messageRaw [payload as key]
1116
+ * @example
1117
+ * ```
1118
+ * $$raw`greeting`
1119
+ * // good: "你好,{{ name }}"
1120
+ * // missing: "(greeting)"
1121
+ * ```
1122
+ */
1123
+ $$raw: I18nManager['$$raw'];
1124
+ }
1125
+ interface PreferencesMap {
1126
+ language: string;
1127
+ 'i18n.index_url': string;
1128
+ }
1129
+ interface Events {
1130
+ 'i18n/changed'(payload: {
1131
+ ctx: InPageEdit;
1132
+ language: string;
1133
+ }): void;
1134
+ }
1135
+ }
1136
+ declare class I18nService extends Service {
1137
+ readonly ctx: InPageEdit;
1138
+ private readonly logger;
1139
+ private _indexUrl;
1140
+ private _indexCache;
1141
+ readonly manager: I18nManager;
1142
+ private i18nIndexDB;
1143
+ private i18nDataDB;
1144
+ $: I18nManager['$'];
1145
+ $raw: I18nManager['$raw'];
1146
+ $$: I18nManager['$$'];
1147
+ $$raw: I18nManager['$$raw'];
1148
+ constructor(ctx: InPageEdit);
1149
+ protected start(): Promise<void>;
1150
+ private setupShortcuts;
1151
+ private normalizeLanguageCode;
1152
+ get language(): string;
1153
+ /**
1154
+ * 主动设置偏好值(会触发 preferences/changed,从而热切换)
1155
+ */
1156
+ setLanguagePreference(value: '@user' | '@site' | string): Promise<void>;
1157
+ /**
1158
+ * 直接切换到具体语言(不修改偏好值)
1159
+ */
1160
+ switchLanguage(language: string): Promise<void>;
1161
+ /**
1162
+ * 为指定语言注册(或合并)消息。
1163
+ * - 推荐加命名空间避免冲突:{ myPlugin: { key: 'value' } }
1164
+ * - 若 language 为当前语言,将立即可用;必要时你可以手动触发 UI 刷新或监听 i18n/changed。
1165
+ */
1166
+ registerMessages(language: string, data: Record<string, any>, options?: {
1167
+ namespace?: string;
1168
+ }): Promise<void>;
1169
+ /**
1170
+ * 列出可用语言与文件(来源于 index.json)
1171
+ */
1172
+ getAvailableLanguageCodes(): (I18nIndexLanguage & {
1173
+ code: string;
1174
+ })[];
1175
+ private findLanguageMeta;
1176
+ getI18nIndex(url: string, noCache?: boolean): Promise<I18nIndexV1>;
1177
+ private fetchI18nIndex;
1178
+ private ensureLanguageLoaded;
1179
+ getLanguageData(language: string, noCache?: boolean): Promise<Record<string, string>>;
1180
+ /**
1181
+ * 获取缺失键报告,形如:
1182
+ * { foo: ['zh', 'zh-hans', 'en'] }
1183
+ */
1184
+ getMissingReport(): {
1185
+ [k: string]: string[];
1186
+ };
1187
+ /**
1188
+ * 清空缺失键记录
1189
+ */
1190
+ clearMissingReport(): void;
1191
+ private onClearCache;
1192
+ }
1193
+ //#endregion
884
1194
  //#region src/InPageEdit.d.ts
885
1195
  interface InPageEditCoreConfig {
886
1196
  apiConfigs: Partial<FexiosConfigs>;
@@ -913,6 +1223,8 @@ declare class InPageEdit extends Context {
913
1223
  }
914
1224
  interface PreferencesMap {}
915
1225
  interface Events<C extends InPageEdit = InPageEdit> extends Events$1<C> {}
1226
+ type IPEPlugin<C = any> = Plugin<InPageEdit, C>;
1227
+ type IPERegistry = Registry<InPageEdit>;
916
1228
  interface InPageEdit {
917
1229
  [InPageEdit.events]: Events<this>;
918
1230
  }
@@ -922,9 +1234,13 @@ declare enum Endpoints {
922
1234
  ANALYTICS_API_BASE = "https://analytics.ipe.wiki/api/v6",
923
1235
  ANALYTICS_DASH_URL = "https://analytics.ipe.wiki",
924
1236
  GITHUB_URL = "https://github.com/inpageedit/inpageedit-next",
1237
+ GITHUB_OWNER = "inpageedit",
1238
+ GITHUB_REPO = "inpageedit-next",
925
1239
  HOME_URL = "https://www.ipe.wiki/",
926
1240
  UPDATE_LOGS_URL = "https://www.ipe.wiki/changelogs/",
927
1241
  PLUGIN_REGISTRY_URL = "https://registry.ipe.wiki/registry.v1.json",
1242
+ I18N_INDEX_URL = "https://registry.ipe.wiki/i18n/index.json",
1243
+ QQ_GROUP_ID = "1026023666",
928
1244
  }
929
1245
  //#endregion
930
1246
  //#region src/plugins/BasePlugin.d.ts
@@ -964,10 +1280,7 @@ type PreferenceAugmented<D, C extends AnyConstructor> = C & {
964
1280
  * @RegisterPreferences(
965
1281
  * Schema.object({
966
1282
  * foo: Schema.string().description('Foo description'),
967
- * }),
968
- * {
969
- * foo: 'default foo value',
970
- * }
1283
+ * })
971
1284
  * )
972
1285
  * class Foo {}
973
1286
  * ```
@@ -979,9 +1292,6 @@ type PreferenceAugmented<D, C extends AnyConstructor> = C & {
979
1292
  * static ConfigSchema = Schema.object({
980
1293
  * foo: Schema.string().description('Foo description')
981
1294
  * })
982
- * static ConfigDefaults = {
983
- * foo: 'default foo value'
984
- * }
985
1295
  * }
986
1296
  * ```
987
1297
  */
@@ -1022,21 +1332,21 @@ declare function TabView({
1022
1332
  content: ReactNode;
1023
1333
  })[];
1024
1334
  defaultActiveIndex?: number;
1025
- }): jsx_dom1.ReactElement;
1335
+ }): jsx_dom0.ReactElement;
1026
1336
  declare function TabLabel({
1027
1337
  name,
1028
1338
  children
1029
1339
  }: {
1030
1340
  name: string;
1031
1341
  children: ReactNode;
1032
- }): jsx_dom1.ReactElement;
1342
+ }): jsx_dom0.ReactElement;
1033
1343
  declare function TabContent({
1034
1344
  name,
1035
1345
  children
1036
1346
  }: {
1037
1347
  name: string;
1038
1348
  children: ReactNode;
1039
- }): jsx_dom1.ReactElement;
1349
+ }): jsx_dom0.ReactElement;
1040
1350
  //#endregion
1041
1351
  //#region src/components/TwinSwapInput/index.d.ts
1042
1352
  type TwinSwapInputProps = {
@@ -1081,7 +1391,7 @@ type CheckBoxProps = {
1081
1391
  inputProps?: JSX.IntrinsicElements['input'];
1082
1392
  labelProps?: JSX.IntrinsicElements['span'];
1083
1393
  } & JSX.IntrinsicElements['label'];
1084
- declare const CheckBox: (props: CheckBoxProps) => jsx_dom1.ReactElement;
1394
+ declare const CheckBox: (props: CheckBoxProps) => jsx_dom0.ReactElement;
1085
1395
  //#endregion
1086
1396
  //#region src/components/InputBox.d.ts
1087
1397
  type InputBoxProps = {
@@ -1093,7 +1403,7 @@ type InputBoxProps = {
1093
1403
  labelProps?: JSX.IntrinsicElements['label'];
1094
1404
  inputProps?: JSX.IntrinsicElements['input'];
1095
1405
  } & JSX.IntrinsicElements['div'];
1096
- declare const InputBox: (props: InputBoxProps) => jsx_dom1.ReactElement;
1406
+ declare const InputBox: (props: InputBoxProps) => jsx_dom0.ReactElement;
1097
1407
  //#endregion
1098
1408
  //#region src/components/RadioBox.d.ts
1099
1409
  type RadioBoxProps = {
@@ -1104,7 +1414,7 @@ type RadioBoxProps = {
1104
1414
  inputProps?: JSX.IntrinsicElements['input'];
1105
1415
  labelProps?: JSX.IntrinsicElements['span'];
1106
1416
  } & JSX.IntrinsicElements['label'];
1107
- declare const RadioBox: (props: RadioBoxProps) => jsx_dom1.ReactElement;
1417
+ declare const RadioBox: (props: RadioBoxProps) => jsx_dom0.ReactElement;
1108
1418
  //#endregion
1109
1419
  //#region src/models/MemoryStorage.d.ts
1110
1420
  declare class MemoryStorage implements Storage {
@@ -1278,11 +1588,11 @@ declare class PluginPluginStore extends BasePlugin {
1278
1588
  private _injectPreferenceUI;
1279
1589
  showModal(): Promise<CustomIPEModal>;
1280
1590
  private _installedPlugins;
1281
- install(registry: string, id: string, source?: PluginStoreRegistrySource): Promise<ForkScope<InPageEdit> | null>;
1591
+ install(registry: string, id: string, source?: PluginStoreRegistrySource): Promise<ForkScope$1<InPageEdit> | null>;
1282
1592
  uninstall(registry: string, id: string): Promise<boolean>;
1283
1593
  addToPreferences(registry: string, id: string): Promise<boolean>;
1284
1594
  removeFromPreferences(registry: string, id: string): Promise<boolean>;
1285
- installAndSetPreference(registry: string, id: string): Promise<ForkScope<InPageEdit> | null>;
1595
+ installAndSetPreference(registry: string, id: string): Promise<ForkScope$1<InPageEdit> | null>;
1286
1596
  uninstallAndRemovePreference(registry: string, id: string): Promise<boolean>;
1287
1597
  private _installOneByRegistryInfo;
1288
1598
  validateRegistry(data: any): PluginStoreRegistry;
@@ -1507,7 +1817,7 @@ declare class PluginQuickEdit extends BasePlugin {
1507
1817
  constructor(ctx: InPageEdit);
1508
1818
  protected start(): Promise<void> | void;
1509
1819
  showModal(payload?: string | Partial<QuickEditOptions>): Promise<void>;
1510
- handleSubmit(payload: QuickEditSubmitPayload): Promise<Required<wiki_saikou1.FexiosContext<wiki_saikou1.MwApiResponse<{
1820
+ handleSubmit(payload: QuickEditSubmitPayload): Promise<Required<wiki_saikou0.FexiosContext<wiki_saikou0.MwApiResponse<{
1511
1821
  success: boolean;
1512
1822
  }>>>>;
1513
1823
  static readonly BUILT_IN_FONT_OPTIONS: string[];
@@ -1563,7 +1873,7 @@ declare class PluginQuickMove extends BasePlugin {
1563
1873
  protected start(): Promise<void> | void;
1564
1874
  private injectToolbox;
1565
1875
  showModal(options?: Partial<QuickMoveOptions>): Promise<CustomIPEModal>;
1566
- movePage(options: MovePageOptions): Promise<Required<wiki_saikou1.FexiosContext<wiki_saikou1.MwApiResponse<{
1876
+ movePage(options: MovePageOptions): Promise<Required<wiki_saikou0.FexiosContext<wiki_saikou0.MwApiResponse<{
1567
1877
  success: boolean;
1568
1878
  }>>>>;
1569
1879
  }
@@ -1644,7 +1954,7 @@ declare class PluginQuickRedirect extends BasePlugin {
1644
1954
  protected start(): Promise<void> | void;
1645
1955
  protected stop(): Promise<void> | void;
1646
1956
  showModal(options?: Partial<QuickRedirectOptions>): Promise<CustomIPEModal>;
1647
- redirectPage(options: RedirectPageOptions): Promise<Required<wiki_saikou1.FexiosContext<wiki_saikou1.MwApiResponse<{
1957
+ redirectPage(options: RedirectPageOptions): Promise<Required<wiki_saikou0.FexiosContext<wiki_saikou0.MwApiResponse<{
1648
1958
  success: boolean;
1649
1959
  }>>>>;
1650
1960
  }
@@ -1658,16 +1968,16 @@ declare module '.' {
1658
1968
  interface Events {
1659
1969
  'toolbox/button-added'(payload: {
1660
1970
  ctx: InPageEdit;
1661
- button: HTMLElement;
1971
+ payload: ToolboxButton;
1662
1972
  }): void;
1663
1973
  'toolbox/button-removed'(payload: {
1664
1974
  ctx: InPageEdit;
1665
- id: string;
1975
+ payload: ToolboxButton;
1666
1976
  }): void;
1667
1977
  'toolbox/button-clicked'(payload: {
1668
1978
  ctx: InPageEdit;
1669
- button: HTMLElement;
1670
- id: string;
1979
+ event: MouseEvent;
1980
+ payload: ToolboxButton;
1671
1981
  }): void;
1672
1982
  'toolbox/toggle'(payload: {
1673
1983
  ctx: InPageEdit;
@@ -1678,9 +1988,22 @@ declare module '.' {
1678
1988
  toolboxAlwaysShow: boolean;
1679
1989
  }
1680
1990
  }
1991
+ interface ToolboxButton {
1992
+ id: string;
1993
+ group?: 'auto' | 'group1' | 'group2';
1994
+ icon: ComputeAbleSync<string | HTMLElement | SVGElement | ReactElement>;
1995
+ tooltip?: ComputeAbleSync<string | HTMLElement>;
1996
+ itemProps?: JSX.IntrinsicElements['li'];
1997
+ buttonProps?: JSX.IntrinsicElements['button'];
1998
+ onClick?: (event: MouseEvent) => void;
1999
+ index?: number;
2000
+ }
1681
2001
  declare class PluginToolbox extends Service {
1682
2002
  ctx: InPageEdit;
1683
2003
  container: HTMLElement;
2004
+ private buttons;
2005
+ private seqCounter;
2006
+ private seqMap;
1684
2007
  constructor(ctx: InPageEdit);
1685
2008
  protected start(): Promise<void>;
1686
2009
  protected stop(): void | Promise<void>;
@@ -1699,17 +2022,13 @@ declare class PluginToolbox extends Service {
1699
2022
  private updateButtonDelays;
1700
2023
  private createToolbox;
1701
2024
  private normalizeButtonId;
1702
- addButton(payload: {
1703
- id: string;
1704
- group?: 'auto' | 'group1' | 'group2';
1705
- icon: string | HTMLElement | SVGElement | ReactElement;
1706
- tooltip?: string | HTMLElement;
1707
- itemProps?: JSX.IntrinsicElements['li'];
1708
- buttonProps?: JSX.IntrinsicElements['button'];
1709
- onClick?: (event: MouseEvent) => void;
1710
- index?: number;
1711
- }): HTMLElement;
2025
+ private chooseAutoGroup;
2026
+ private orderKey;
2027
+ private compareButtons;
2028
+ addButton(payload: ToolboxButton): void;
1712
2029
  removeButton(id: string): void;
2030
+ private renderButton;
2031
+ private renderAll;
1713
2032
  getContainer(): HTMLElement;
1714
2033
  get isOpened(): boolean;
1715
2034
  toggle(force?: boolean): void;
@@ -1718,7 +2037,7 @@ declare namespace index_d_exports$1 {
1718
2037
  export { AbstractIPEStorageManager, ApiService, ApiServiceOptions, CurrentPageService, CustomIPEModal, InPageEditPreferenceUICategory, InPageEditPreferenceUIRegistryItem, ModalService, PreferencesService, ResourceLoaderService, StorageService, StorageServiceConfig, TypedStorageEntry, WikiLinkMetadata, WikiMetadataService, WikiPageService, WikiTitleService };
1719
2038
  }
1720
2039
  declare namespace index_d_exports {
1721
- export { AbstractIPEStorageManager, ActionButton, ActionButtonProps, ApiService, ApiServiceOptions, BasePlugin, CheckBox, CheckBoxProps, CompareApiRequestOptions, CompareApiResponse, ContentModelMap, CurrentPageService, CustomIPEModal, Endpoints, Events, IPEBeaconPayload, IPEBeaconUsage, IWikiPage, IWikiTitle, InArticleWikiAnchorMetadata, InPageEdit, InPageEditCoreConfig, InPageEditPreferenceUICategory, InPageEditPreferenceUIRegistryItem, Inject, InputBox, InputBoxProps, MBox, MBoxElement, MBoxProps, MemoryStorage, ModalService, MovePageOptions, PageInfo, PageParseData, PluginAnalytics, PluginInArticleLinks, PluginPluginStore, PluginPreferencesUI, PluginQuickDiff, PluginQuickEdit, PluginQuickMove, PluginQuickPreview, PluginQuickRedirect, PluginStoreRegistrySource, PluginToolbox, PreferencesMap, PreferencesService, ProgressBar, QuickEditEventPayload, QuickEditOptions, QuickEditSubmitPayload, QuickMoveOptions, QuickRedirectOptions, RadioBox, RadioBoxProps, RedirectPageOptions, RegisterPreferences, ResourceLoaderService, Schema, Service, StorageService, StorageServiceConfig, TabContent, TabLabel, TabView, TabViewLabelOptions, TwinSwapElement, TwinSwapInput, TwinSwapInputInput, TwinSwapInputProps, TypedStorageEntry, WatchlistAction, WikiLinkMetadata, WikiMagicWord, WikiMetadataService, WikiNameSpaceAlias, WikiNamespace, WikiPageConstructor, WikiPageEditPayload, WikiPageService, WikiSiteGeneralInfo, WikiSiteInfo, WikiSpecialPageAlias, WikiTitleConstructor, WikiTitleService, WikiUserBlockInfo, WikiUserInfo, WikiUserOptions, createWikiPageModel, createWikiTitleModel, useMemoryStorage };
2040
+ export { AbstractIPEStorageManager, ActionButton, ActionButtonProps, ApiService, ApiServiceOptions, BasePlugin, CheckBox, CheckBoxProps, CompareApiRequestOptions, CompareApiResponse, ContentModelMap, CordisError, CordisSymbols, CurrentPageService, CustomIPEModal, EffectScope, Endpoints, Events, ForkScope, IPEBeaconPayload, IPEBeaconUsage, IPEPlugin, IPERegistry, IWikiPage, IWikiTitle, InArticleWikiAnchorMetadata, InPageEdit, InPageEditCoreConfig, InPageEditPreferenceUICategory, InPageEditPreferenceUIRegistryItem, Inject, InputBox, InputBoxProps, Lifecycle, MBox, MBoxElement, MBoxProps, MainScope, MemoryStorage, ModalService, MovePageOptions, PageInfo, PageParseData, PluginAnalytics, PluginInArticleLinks, PluginPluginStore, PluginPreferencesUI, PluginQuickDiff, PluginQuickEdit, PluginQuickMove, PluginQuickPreview, PluginQuickRedirect, PluginStoreRegistrySource, PluginToolbox, PreferencesMap, PreferencesService, ProgressBar, QuickEditEventPayload, QuickEditOptions, QuickEditSubmitPayload, QuickMoveOptions, QuickRedirectOptions, RadioBox, RadioBoxProps, RedirectPageOptions, RegisterPreferences, ResourceLoaderService, Schema, ScopeStatus, Service, StorageService, StorageServiceConfig, TabContent, TabLabel, TabView, TabViewLabelOptions, TwinSwapElement, TwinSwapInput, TwinSwapInputInput, TwinSwapInputProps, TypedStorageEntry, WatchlistAction, WikiLinkMetadata, WikiMagicWord, WikiMetadataService, WikiNameSpaceAlias, WikiNamespace, WikiPageConstructor, WikiPageEditPayload, WikiPageService, WikiSiteGeneralInfo, WikiSiteInfo, WikiSpecialPageAlias, WikiTitleConstructor, WikiTitleService, WikiUserBlockInfo, WikiUserInfo, WikiUserOptions, createWikiPageModel, createWikiTitleModel, useMemoryStorage };
1722
2041
  }
1723
2042
  declare global {
1724
2043
  const ipe: InPageEdit;
@@ -1754,4 +2073,4 @@ declare global {
1754
2073
  }
1755
2074
  }
1756
2075
  //#endregion
1757
- export { AbstractIPEStorageManager, ActionButton, ActionButtonProps, ApiService, ApiServiceOptions, BasePlugin, CheckBox, CheckBoxProps, CompareApiRequestOptions, CompareApiResponse, ContentModelMap, CurrentPageService, CustomIPEModal, Endpoints, Events, IPEBeaconPayload, IPEBeaconUsage, IWikiPage, IWikiTitle, InArticleWikiAnchorMetadata, InPageEdit, InPageEditCoreConfig, InPageEditPreferenceUICategory, InPageEditPreferenceUIRegistryItem, Inject, InputBox, InputBoxProps, MBox, MBoxElement, MBoxProps, MemoryStorage, ModalService, MovePageOptions, PageInfo, PageParseData, PluginAnalytics, PluginInArticleLinks, PluginPluginStore, PluginPreferencesUI, PluginQuickDiff, PluginQuickEdit, PluginQuickMove, PluginQuickPreview, PluginQuickRedirect, PluginStoreRegistrySource, PluginToolbox, PreferencesMap, PreferencesService, ProgressBar, QuickEditEventPayload, QuickEditOptions, QuickEditSubmitPayload, QuickMoveOptions, QuickRedirectOptions, RadioBox, RadioBoxProps, RedirectPageOptions, RegisterPreferences, ResourceLoaderService, Schema, Service, StorageService, StorageServiceConfig, TabContent, TabLabel, TabView, TabViewLabelOptions, TwinSwapElement, TwinSwapInput, TwinSwapInputInput, TwinSwapInputProps, TypedStorageEntry, WatchlistAction, WikiLinkMetadata, WikiMagicWord, WikiMetadataService, WikiNameSpaceAlias, WikiNamespace, WikiPageConstructor, WikiPageEditPayload, WikiPageService, WikiSiteGeneralInfo, WikiSiteInfo, WikiSpecialPageAlias, WikiTitleConstructor, WikiTitleService, WikiUserBlockInfo, WikiUserInfo, WikiUserOptions, createWikiPageModel, createWikiTitleModel, useMemoryStorage };
2076
+ export { AbstractIPEStorageManager, ActionButton, ActionButtonProps, ApiService, ApiServiceOptions, BasePlugin, CheckBox, CheckBoxProps, CompareApiRequestOptions, CompareApiResponse, ContentModelMap, CordisError, CordisSymbols, CurrentPageService, CustomIPEModal, EffectScope, Endpoints, Events, ForkScope, IPEBeaconPayload, IPEBeaconUsage, IPEPlugin, IPERegistry, IWikiPage, IWikiTitle, InArticleWikiAnchorMetadata, InPageEdit, InPageEditCoreConfig, InPageEditPreferenceUICategory, InPageEditPreferenceUIRegistryItem, Inject, InputBox, InputBoxProps, Lifecycle, MBox, MBoxElement, MBoxProps, MainScope, MemoryStorage, ModalService, MovePageOptions, PageInfo, PageParseData, PluginAnalytics, PluginInArticleLinks, PluginPluginStore, PluginPreferencesUI, PluginQuickDiff, PluginQuickEdit, PluginQuickMove, PluginQuickPreview, PluginQuickRedirect, PluginStoreRegistrySource, PluginToolbox, PreferencesMap, PreferencesService, ProgressBar, QuickEditEventPayload, QuickEditOptions, QuickEditSubmitPayload, QuickMoveOptions, QuickRedirectOptions, RadioBox, RadioBoxProps, RedirectPageOptions, RegisterPreferences, ResourceLoaderService, Schema, ScopeStatus, Service, StorageService, StorageServiceConfig, TabContent, TabLabel, TabView, TabViewLabelOptions, TwinSwapElement, TwinSwapInput, TwinSwapInputInput, TwinSwapInputProps, TypedStorageEntry, WatchlistAction, WikiLinkMetadata, WikiMagicWord, WikiMetadataService, WikiNameSpaceAlias, WikiNamespace, WikiPageConstructor, WikiPageEditPayload, WikiPageService, WikiSiteGeneralInfo, WikiSiteInfo, WikiSpecialPageAlias, WikiTitleConstructor, WikiTitleService, WikiUserBlockInfo, WikiUserInfo, WikiUserOptions, createWikiPageModel, createWikiTitleModel, useMemoryStorage };