@emailmaker/extensions-app 1.1.84 → 1.1.85-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -79,7 +79,7 @@ npm install @emailmaker/emailmaker @emailmaker/extensions-app @emailmaker/extens
79
79
 
80
80
  | Пакет | Назначение | Что экспортирует |
81
81
  |-------|------------|------------------|
82
- | `@emailmaker/emailmaker` | Основной пакет | `init()`, `prefetch()`, типы `IPlugin`, `Instance`; runtime React/Ant Design — subpath `@emailmaker/emailmaker/runtime/*` (отдельный npm не нужен) |
82
+ | `@emailmaker/emailmaker` | Основной пакет | `init()`, `preload()`, типы `IPlugin`, `Instance`; runtime React/Ant Design — subpath `@emailmaker/emailmaker/runtime/*` (отдельный npm не нужен) |
83
83
  | `@emailmaker/extensions-app` | API для app-плагинов | `pluginRegistry`, `DomComponentRegistry`, `ElementsApi`, `SettingsPanelApi`, `ModalApi` |
84
84
  | `@emailmaker/extensions-react` | React API для плагинов | `ComponentRegistry`, `createComponentIdentifier()` |
85
85
  | `@emailmaker/extensions-sandbox` | API для sandbox-плагинов | `App`, `MessageService`, `SyncService` |
@@ -205,6 +205,11 @@ module.exports = {
205
205
  - `встраиваемый bundle` -> `globals`
206
206
  - `advanced` -> только если host уже требует async/globals контракт Webpack
207
207
 
208
+ `globals` читает зависимости из глобального реестра **синхронно**, когда выполняется скрипт
209
+ плагина. Хост готовит реестр сам, если грузит плагин по URL через `init()` или `useAsync()`; при
210
+ ручной вставке `<script>` дождитесь `preload()` — подробности в разделе
211
+ `Подключение плагина`.
212
+
208
213
  Для `встраиваемый bundle` и `advanced` рекомендуемый runtime-контракт — descriptor вида `{ type: 'umd', url, name, resolve: 'registry' }`, где `name` совпадает с ключом из `PluginTypeMap`.
209
214
 
210
215
  ### Ручная настройка (без PluginDev)
@@ -212,9 +217,16 @@ module.exports = {
212
217
  Нужна только для продвинутой интеграции или собственного бандлерного пайплайна. Основной сценарий для внешнего плагина — отдельный пакет с `PluginDev`.
213
218
 
214
219
  - `resolve.alias`: `react` → `@emailmaker/emailmaker/runtime/react` (и т.д.) для `esm` / dev; локальные shared internals идут через compat facades runtime; UI-kit (`@emailmaker/ui-kit`) → **`@emailmaker/emailmaker/ui-kit`** (singleton bytes на main, не `runtime/@scope/ui-kit`)
215
- - `externals`: `@emailmaker/emailmaker/runtime/core`, runtime npm-модули; ui-kit external → **`@emailmaker/emailmaker/ui-kit`** (глобальный ключ `UiKit` в `runtimeExports`, см. манифест)
220
+ - `externals`: `@emailmaker/emailmaker/runtime-core`, runtime npm-модули; ui-kit external → **`@emailmaker/emailmaker/ui-kit`** (глобальный ключ `UiKit` в `runtimeExports`, см. манифест)
216
221
  - Список модулей: `@emailmaker/emailmaker/runtime/plugin-dev-manifest.json` → `runtimeModules`
217
222
 
223
+ **Иконки — особый случай.** Общим (singleton) обязан быть только класс
224
+ `@ant-design/icons/es/components/AntdIcon`: он вычисляет иконку, читая `IconContext`, и вторая его
225
+ копия сломает тему. Сам каталог из восьми с лишним сотен определений singleton'ом не является —
226
+ каждый потребитель берёт его себе и вытрясает неиспользуемое. Поэтому обычный
227
+ `import { UserOutlined } from '@ant-design/icons'` в плагине законен: в сборку попадут только взятые
228
+ иконки, а общая машинерия придёт из продукта. `PluginDev` разводит эти два случая сам.
229
+
218
230
  Если release bundle неожиданно стал толстым или target `встраиваемый bundle` не загружается, начните с раздела `Troubleshooting`.
219
231
 
220
232
  Типы для плагина всё равно собираются отдельно: CLI-шаблон запускает `build:types` и кладёт `dist/public-types.d.ts` рядом с JS bundle, поэтому TypeScript support сохраняется и для browser/advanced targets.
@@ -248,6 +260,102 @@ import { ComponentRegistry } from '@emailmaker/extensions-react';
248
260
  > Обычно достаточно использовать готовый шаблон CLI и не настраивать alias/external вручную.
249
261
 
250
262
 
263
+ ---
264
+
265
+ # Совместимость: как плагин встречается с редактором
266
+
267
+ Одна страница на вопрос «что с чем работает». Всё остальное в этом разделе — подробности.
268
+
269
+ ## Главное правило
270
+
271
+ Плагин и редактор обязаны использовать **один экземпляр** React, antd и ui-kit. Не потому, что так
272
+ аккуратнее: компоненты плагина рисуются внутри дерева редактора, и если экземпляры разные, хуки
273
+ вызываются против чужого диспетчера. На странице это выглядит как
274
+ `Cannot read properties of null (reading 'useState')` — падает не панель плагина, а весь интерфейс.
275
+
276
+ Сводить их вручную не нужно: этим занимается `PluginDev` в сборке плагина.
277
+
278
+ ## Формат плагина × способ подключения
279
+
280
+ | Формат плагина | Как подключается | Где берёт React, antd, ui-kit |
281
+ |---|---|---|
282
+ | **ESM** (npm-пакет, собирается вместе с хостом) | импортом: `plugins: [MyPlugin]` или `useAsync(() => import(…))` | `PluginDev` переписывает импорты на подпути продукта |
283
+ | **UMD / globals** (файл по URL) | `{ type: 'umd', url, name, resolve: 'registry' }` | из реестра `window.emailmaker.modules` на странице |
284
+ | ~~**ESM по URL**~~ | **не поддерживается** | — |
285
+
286
+ **Почему `{ type: 'esm', url }` не работает.** В собранном ESM-плагине остаются имена подпутей
287
+ продукта (`@emailmaker/emailmaker/runtime/*`). Браузеру разрешать их нечем: карту импортов
288
+ продукт не выдаёт. Плагин в формате ESM подключают как npm-пакет, собирая вместе с хостом.
289
+
290
+ ## Что приходит из продукта, а что собирается в плагин
291
+
292
+ | Зависимость | Откуда берётся | Почему так |
293
+ |---|---|---|
294
+ | `react`, `react-dom` | из продукта (`@emailmaker/emailmaker/runtime/react`) | один диспетчер хуков на страницу |
295
+ | `antd` | из продукта | контексты темы и формы общие |
296
+ | `@emailmaker/ui-kit` | из продукта (`@emailmaker/emailmaker/ui-kit`) | общий `ThemeProvider`, стили вставляются один раз |
297
+ | `@ant-design/icons` — **класс `AntdIcon`** | из продукта | читает `IconContext`; вторая копия ломает тему |
298
+ | `@ant-design/icons` — **каталог иконок** | собирается в плагин | каждый берёт только те иконки, что использует |
299
+ | всё остальное | собирается в плагин | к общему состоянию отношения не имеет |
300
+
301
+ ## Как проверить, что всё сошлось
302
+
303
+ Сборка хоста сама скажет, если в граф попала вторая копия React или ui-kit: плагин хоста
304
+ (Vite/webpack) печатает предупреждение с именем файла-виновника и обоими путями. Молчание на сборке
305
+ — признак того, что копии сведены.
306
+
307
+ Плагин **на глобалах** при этом ничего не импортирует и в графе не появляется: он берёт зависимости
308
+ из реестра уже на странице, и проверять там нечего.
309
+
310
+ ## Вход редактора тоже участвует
311
+
312
+ Редактор подключают двумя способами, и не с каждым работает ESM-плагин:
313
+
314
+ | Вход редактора | ESM-плагин | Плагин на глобалах |
315
+ |---|---|---|
316
+ | **ESM** (собирается вместе с хостом) | да | да |
317
+ | **UMD** (`<script>` на странице) | **нет** | да |
318
+
319
+ **Почему UMD-вход и ESM-плагин не сходятся.** UMD-вход несёт React внутри себя и объявляет его на
320
+ странице сам. ESM-плагин собирает ваш сборщик, и подпуть `@emailmaker/emailmaker/runtime/react`
321
+ он разрешает в копию внутри пакета. Это два разных файла с двумя диспетчерами хуков — тот самый
322
+ `Cannot read properties of null (reading 'useState')`, падающий вместе со всем интерфейсом.
323
+
324
+ Сборка про это молчать обязана: UMD-редактор подключён скриптом и в граф сборки хоста не входит, а
325
+ в момент сборки плагина ещё неизвестно, какой вход выберет хост. Поэтому **редактор говорит сам** —
326
+ при инициализации он сверяет копии и, найдя вторую, пишет в консоль, что нашёл и как это чинить.
327
+
328
+ Чинится любым из двух способов: собрать плагин **на глобалах** — тогда он возьмёт React из реестра
329
+ `window.emailmaker.modules` на странице, — либо подключить **ESM-вход** редактора и
330
+ собрать оба одним сборщиком.
331
+
332
+ ## Что бывает, если собрать плагин без `PluginDev`
333
+
334
+ Плагин соберётся, сборка хоста пройдёт — и редактор упадёт на странице. Ровно этот случай:
335
+
336
+ - в плагине остались `import 'react'` и `import '@emailmaker/ui-kit'` как есть;
337
+ - сборщик хоста разрешил их из `node_modules` проекта — это **вторые** копии;
338
+ - редактор при этом работает на своих, вендоренных.
339
+
340
+ Лечится добавлением `PluginDev` в конфигурацию сборки плагина (`externals: 'esm'`) либо сборкой
341
+ плагина на глобалах.
342
+
343
+ ## Общий React (необязательно)
344
+
345
+ Плагин хоста умеет обратное: отдать редактору **ваш** React вместо вендоренного —
346
+ `VitePlugin({ sharedReact: true })` или `new WebpackPlugin({ sharedReact: true })`.
347
+
348
+ | | по умолчанию | `sharedReact: true` |
349
+ |---|---|---|
350
+ | React редактора | свой, внутри пакета | ваш |
351
+ | требования к вашему React | нет | мажорная версия 19 |
352
+ | Strict Mode и dev-сборка React | не касаются редактора | касаются |
353
+ | antd | свой, внутри пакета | свой, внутри пакета |
354
+ | вес поставки | как есть | меньше примерно на 98 КБ gzip |
355
+
356
+ Версия проверяется до сборки: несовпадение мажора будет названо в предупреждении.
357
+
358
+
251
359
  ---
252
360
 
253
361
  ## 📂 PublicPath
@@ -444,12 +552,17 @@ emailmaker.init({
444
552
  ```ts
445
553
  emailmaker.init({
446
554
  plugins: [
447
- { type: 'esm', url: 'https://cdn.example.com/my-plugin.js' },
448
555
  { type: 'umd', url: 'https://cdn.example.com/my-plugin.umd.js', name: 'MyPlugin', resolve: 'registry' },
449
556
  ]
450
557
  });
451
558
  ```
452
559
 
560
+ > **По URL работает `umd` с `resolve: 'registry'`.** Вариант `{ type: 'esm', url }` в браузере не
561
+ > поддерживается: в собранном ESM-плагине остаются имена подпутей продукта
562
+ > (`@emailmaker/emailmaker/runtime/*`), а разрешить их браузеру нечем — карту импортов
563
+ > продукт не выдаёт. ESM-плагин подключают как npm-пакет: способами 1 и 2 выше, собирая его вместе
564
+ > с хостом.
565
+
453
566
  | Параметр | Описание |
454
567
  |----------|----------|
455
568
  | `type` | `'esm'` — ESM модуль (`import()`), `'umd'` — UMD/IIFE (`<script>`) |
@@ -457,6 +570,30 @@ emailmaker.init({
457
570
  | `name` | Для `resolve: 'registry'` — строковый ключ из `PluginTypeMap`; для legacy `umd`/`window` — ключ в `window` |
458
571
  | `resolve` | Опционально. `'module'` (default ESM), `'window'` (legacy default UMD), `'registry'` |
459
572
 
573
+ #### Кто готовит runtime до запуска скрипта
574
+
575
+ Плагин, собранный под `globals` (targets `встраиваемый bundle` и `advanced`), читает
576
+ `window.__emailmaker__.modules.Antd` **синхронно** — в момент, когда выполняется его скрипт.
577
+ До этого момента в реестре лежат ожидания: часть runtime приезжает по требованию, чтобы первый
578
+ экран не платил за то, чем не пользуется.
579
+
580
+ Если плагин подключён через `init({ plugins: [...] })` или `useAsync(...)`, делать ничего не
581
+ нужно: хост сам дожидается готовности runtime перед тем, как выполнить скрипт. Тормозится только
582
+ загрузка такого плагина, остальное приложение работает своим ходом.
583
+
584
+ Если же вы вставляете `<script>` с плагином сами, мимо API — дождитесь `preload()`:
585
+
586
+ ```ts
587
+ import { preload } from '@emailmaker/emailmaker';
588
+
589
+ await preload();
590
+ document.head.appendChild(Object.assign(document.createElement('script'), {
591
+ src: 'https://cdn.example.com/my-plugin.umd.js',
592
+ }));
593
+ ```
594
+
595
+ Плагинов на `esm` это не касается: их импорты разрешает сборщик, ждать им нечего.
596
+
460
597
  ### 4. Регистрация по имени (связь между плагинами)
461
598
 
462
599
  Если плагин A должен обращаться к плагину B через `editor.use('PluginB')` — используйте `pluginRegistry.add`:
@@ -504,10 +641,6 @@ const myPlugin = await this.editor.useAsync(
504
641
  () => import('my-plugin').then(m => m.MyPlugin)
505
642
  );
506
643
 
507
- const myPlugin = await this.editor.useAsync(
508
- { type: 'esm', url: '/plugins/analytics.js' }
509
- );
510
-
511
644
  const myPluginByKey = await this.editor.useAsync(
512
645
  { type: 'umd', url: '/plugins/my-plugin.umd.js', name: 'MyPlugin', resolve: 'registry' }
513
646
  );
@@ -1020,7 +1153,7 @@ settingsPanel.showSettingsPanel({
1020
1153
 
1021
1154
  ### `--dev` / `--dev-packages`
1022
1155
 
1023
- **Самый частый флаг для разработки:** подставляет **dev**-версии внутренних npm-пакетов (`@emailmaker-internal/*`), которые в шаблонах задаются с dist-tag `dev` вместо `latest`. Используйте, когда нужны свежие предрелизные сборки экосистемы.
1156
+ **Самый частый флаг для разработки:** в сгенерированном проекте пакеты экосистемы получают dist-tag `dev` вместо `latest`. Используйте, когда нужны свежие предрелизные сборки.
1024
1157
 
1025
1158
  ```bash
1026
1159
  npx @emailmaker/cli my-plugin --kind plugin --preset advanced --bundler vite --target npm-package --dev --output-dir ./my-plugin
@@ -1136,6 +1269,18 @@ npm run start:release
1136
1269
  - что release bundle собран под target `встраиваемый bundle`
1137
1270
  - что sandbox и main bundle публикуются по ожидаемым URL
1138
1271
 
1272
+ ### Плагин на `globals` падает: вместо `antd` приходит объект с `then`
1273
+
1274
+ Значит скрипт плагина выполнился раньше, чем хост подготовил реестр runtime. Часть runtime
1275
+ приезжает по требованию, и до этого момента в `window.__emailmaker__.modules` лежат
1276
+ ожидания, а не значения.
1277
+
1278
+ Проверьте:
1279
+
1280
+ - плагин подключён через `init({ plugins: [{ type, url, ... }] })` или `useAsync(...)` — тогда
1281
+ хост дожидается готовности сам;
1282
+ - если `<script>` вставляете вы, перед вставкой вызван `await preload()`.
1283
+
1139
1284
  ### Duplicate React / hooks error
1140
1285
 
1141
1286
  Почти всегда это значит, что React попал в bundle плагина вместо runtime externals.
@@ -1162,7 +1307,7 @@ npm run start:release
1162
1307
  ## ❓ FAQ / Типичные ошибки
1163
1308
 
1164
1309
  - **«Invalid hook call» или два React на странице**
1165
- > Для обычного плагина используйте стандартные импорты `react` / `antd` и собирайте проект через `PluginDev` с `alias: true` (по умолчанию). Не смешивайте обычные импорты с прямыми импортами из runtime в одном plugin UI.
1310
+ > Для обычного плагина используйте стандартные импорты `react` / `antd` и собирайте проект через `PluginDev` с `alias: true` (по умолчанию). Не смешивайте обычные импорты с прямыми импортами из runtime в одном интерфейсе плагина: выбирается что-то одно на весь плагин, подробности — в README пакета runtime.
1166
1311
 
1167
1312
  - **Externals не работают в dev server**
1168
1313
  > В serve-режиме externals должны быть отключены: `PluginDev({ externals: false })`. Зависимости резолвятся из runtime через alias.
package/externals.json CHANGED
@@ -23,6 +23,10 @@
23
23
  "promise __emailmaker__.modules",
24
24
  "Antd"
25
25
  ],
26
+ "@ant-design/icons/es/components/AntdIcon": [
27
+ "promise __emailmaker__.modules",
28
+ "AntDesignIconBase"
29
+ ],
26
30
  "@ant-design/icons": [
27
31
  "promise __emailmaker__.modules",
28
32
  "AntDesignIcons"
@@ -39,10 +43,6 @@
39
43
  "promise __emailmaker__.modules",
40
44
  "Dayjs"
41
45
  ],
42
- "uuid": [
43
- "promise __emailmaker__.modules",
44
- "Uuid"
45
- ],
46
46
  "@emailmaker/ui-kit": [
47
47
  "promise __emailmaker__.modules",
48
48
  "UiKit"
package/index.js CHANGED
@@ -33,7 +33,11 @@ var e = class e {
33
33
  function t(e) {
34
34
  return `service_container_${e}`;
35
35
  }
36
- var n = class n extends e {
36
+ var n = /* @__PURE__ */ new Set();
37
+ function r(e) {
38
+ n.delete(e);
39
+ }
40
+ var i = class i extends e {
37
41
  _parent;
38
42
  _injectCallbacks = [];
39
43
  _injections = Object.create(null);
@@ -74,7 +78,24 @@ var n = class n extends e {
74
78
  }
75
79
  getInstanceAsync(e) {
76
80
  let t = this._find(e);
77
- return typeof t == "function" ? Promise.resolve(t()) : new Promise((t) => this._onInject(e, () => t(this.getInstance(e))));
81
+ return typeof t == "function" ? Promise.resolve(t()) : new Promise((t, i) => {
82
+ let a = {
83
+ id: String(e),
84
+ startedAt: Date.now(),
85
+ origin: void 0,
86
+ container: this,
87
+ reject: i
88
+ };
89
+ n.add(a), this._onInject(e, () => {
90
+ r(a), t(this.getInstance(e));
91
+ });
92
+ });
93
+ }
94
+ failPendingWaits(e) {
95
+ for (let t of Array.from(n)) t.container === this && (r(t), t.reject(e));
96
+ }
97
+ pendingWaits() {
98
+ return [...n].filter((e) => e.container === this);
78
99
  }
79
100
  addService(n, r) {
80
101
  let i = t(n);
@@ -97,70 +118,78 @@ var n = class n extends e {
97
118
  return [...this.getInstance(n, !1) || [], ...this._parent?.getServices(e) || []];
98
119
  }
99
120
  createChild() {
100
- return new n(this);
121
+ return new i(this);
101
122
  }
102
123
  getOrCreateIsolatedContainer(e) {
103
124
  return this.getOrCreateInstance(e, () => {
104
125
  let t = this._parent?.getOrCreateIsolatedContainer(e);
105
- return new n(t);
126
+ return new i(t);
106
127
  });
107
128
  }
129
+ remove(e) {
130
+ let t = this._injections;
131
+ delete t[String(e)];
132
+ }
133
+ injectListenerCount() {
134
+ return this._injectCallbacks.length;
135
+ }
108
136
  dispose() {
109
- this._injections = Object.create(null);
137
+ for (let e of Array.from(n)) e.container === this && r(e);
138
+ this._injections = Object.create(null), this._injectCallbacks = [], super.dispose();
110
139
  }
111
140
  };
112
141
  //#endregion
113
142
  //#region packages/runtime-core/di/namespace.ts
114
- function r(e) {
143
+ function a(e) {
115
144
  return e.startsWith("__") ? e : `__${e}__`;
116
145
  }
117
- function i(e) {
146
+ function o(e) {
118
147
  if (typeof globalThis > "u") throw Error("[di] globalThis is required for namespace container access.");
119
- let t = r(e), n = globalThis;
148
+ let t = a(e), n = globalThis;
120
149
  return n[t] ??= {};
121
150
  }
122
151
  //#endregion
123
152
  //#region packages/runtime-core/di/ensureContainer.ts
124
- function a(e) {
153
+ function s(e) {
125
154
  return typeof e == "object" && !!e && typeof e.inject == "function" && typeof e.getInstance == "function";
126
155
  }
127
- function o(e) {
128
- return r(e || "emailmaker");
156
+ function c(e) {
157
+ return a(e || "emailmaker");
129
158
  }
130
- function s(e) {
131
- let t = i(o(e));
132
- if (a(t.container)) return t.container;
133
- let r = new n(null);
134
- return t.container = r, r;
159
+ function l(e) {
160
+ let t = o(c(e));
161
+ if (s(t.container)) return t.container;
162
+ let n = new i(null);
163
+ return t.container = n, n;
135
164
  }
136
- function c(e) {
137
- return s(e);
165
+ function u(e) {
166
+ return l(e);
138
167
  }
139
168
  //#endregion
140
169
  //#region packages/runtime-core/guid/index.ts
141
- function l() {
170
+ function d() {
142
171
  let e = (/* @__PURE__ */ new Date()).getTime(), t = typeof performance < "u" && performance.now && performance.now() * 1e3 || 0;
143
172
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(n) {
144
173
  let r = Math.random() * 16;
145
174
  return e > 0 ? (r = (e + r) % 16 | 0, e = Math.floor(e / 16)) : (r = (t + r) % 16 | 0, t = Math.floor(t / 16)), (n === "x" ? r : r & 3 | 8).toString(16);
146
175
  });
147
176
  }
148
- function u() {
149
- return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : l();
177
+ function f() {
178
+ return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : d();
150
179
  }
151
180
  //#endregion
152
181
  //#region packages/runtime-core/di/identifier.ts
153
- function d(e = u()) {
182
+ function p(e = f()) {
154
183
  return e;
155
184
  }
156
185
  //#endregion
157
186
  //#region packages/runtime-core/di/index.ts
158
- function f() {
187
+ function m() {
159
188
  return "app";
160
189
  }
161
- function p(e) {
190
+ function h(e) {
162
191
  if (typeof globalThis > "u") return;
163
- let t = f(), n = globalThis[e] ?? {};
192
+ let t = m(), n = globalThis[e] ?? {};
164
193
  globalThis[e] = n;
165
194
  let r = n.__diagnostics ??= {}, i = r.diModuleEval ??= {
166
195
  evalCount: 0,
@@ -172,12 +201,12 @@ function p(e) {
172
201
  stack: (/* @__PURE__ */ Error()).stack
173
202
  }), i.evalCount += 1;
174
203
  }
175
- function m() {
204
+ function g() {
176
205
  return "__emailmaker__";
177
206
  }
178
- function h(e, t) {
179
- if (p(t), typeof globalThis > "u") return e;
180
- let n = f(), r = globalThis, i = r[t] = r[t] || {}, a = i.__diagnostics = i.__diagnostics || {}, o = a.dependencyResolver = a.dependencyResolver || { entries: [] }, s = {
207
+ function _(e, t) {
208
+ if (h(t), typeof globalThis > "u") return e;
209
+ let n = m(), r = globalThis, i = r[t] = r[t] || {}, a = i.__diagnostics = i.__diagnostics || {}, o = a.dependencyResolver = a.dependencyResolver || { entries: [] }, s = {
181
210
  container: e,
182
211
  source: "packages/runtime-core/di/index.ts",
183
212
  buildSource: n,
@@ -186,16 +215,16 @@ function h(e, t) {
186
215
  };
187
216
  return o.entries.push(s), e;
188
217
  }
189
- var g;
190
- function _() {
191
- if (g) return g;
192
- let e = m();
193
- return g = h(s(e), e), g;
218
+ var v;
219
+ function y() {
220
+ if (v) return v;
221
+ let e = g();
222
+ return v = _(l(e), e), v;
194
223
  }
195
- var v = new Proxy({}, { get(e, t, n) {
196
- let r = _(), i = Reflect.get(r, t, n);
224
+ var b = new Proxy({}, { get(e, t, n) {
225
+ let r = y(), i = Reflect.get(r, t, n);
197
226
  return typeof i == "function" ? i.bind(r) : i;
198
- } }), y = class {
227
+ } }), x = class {
199
228
  _plugins = /* @__PURE__ */ new Map();
200
229
  _listeners = /* @__PURE__ */ new Map();
201
230
  _getOrCreateEntry(e) {
@@ -310,7 +339,7 @@ var v = new Proxy({}, { get(e, t, n) {
310
339
  e.add(t, n);
311
340
  } };
312
341
  }
313
- }, b = class {
342
+ }, S = class {
314
343
  resolveRegistry;
315
344
  constructor(e) {
316
345
  this.resolveRegistry = e;
@@ -357,7 +386,7 @@ var v = new Proxy({}, { get(e, t, n) {
357
386
  forContext() {
358
387
  return this.target().forContext();
359
388
  }
360
- }, x = class {
389
+ }, C = class {
361
390
  _factories = /* @__PURE__ */ new Map();
362
391
  add(e, t) {
363
392
  let n = e;
@@ -368,33 +397,34 @@ var v = new Proxy({}, { get(e, t, n) {
368
397
  get(e) {
369
398
  return this._factories.get(e);
370
399
  }
371
- }, S = d("DomComponentRegistry");
372
- function C(e, t = S) {
373
- return v.getOrCreateInstance(t, () => new x());
400
+ }, w = p("DomComponentRegistry");
401
+ function T(e, t = w) {
402
+ return b.getOrCreateInstance(t, () => new C());
374
403
  }
375
404
  //#endregion
376
405
  //#region src/plugin/registryId.ts
377
- var w = "PluginRegistry";
406
+ var E = "PluginRegistry";
378
407
  //#endregion
379
408
  //#region src/plugin/pluginRegistry.ts
380
- function T(e = c()) {
381
- return e.getOrCreateInstance(w, () => new y());
409
+ function D(e = u()) {
410
+ return e.getOrCreateInstance(E, () => new x());
382
411
  }
383
- var E = new b(() => T());
412
+ var O = new S(() => D());
413
+ p("ELEMENT_INSERT_HTML_PIPELINE"), p("BLOCK_INSERT_HTML_PIPELINE");
384
414
  //#endregion
385
415
  //#region packages/extensions-core/identifiers/index.ts
386
- function D(e) {
387
- return d(e);
416
+ function k(e) {
417
+ return p(e);
388
418
  }
389
- D("HANDLE_ATOM_INSERT"), D("SETTINGS_PANEL_EVENT"), D("MODAL_SHOW_EVENT"), D("MODAL_CLOSE_EVENT"), D("MODAL_UPDATE_EVENT");
419
+ p("extensions.atomsHandlers"), k("HANDLE_ATOM_INSERT"), p("extensions.sandboxExtensions"), p("MESSAGE_SERVICE"), k("SETTINGS_PANEL_EVENT"), k("MODAL_SHOW_EVENT"), k("MODAL_CLOSE_EVENT"), k("MODAL_UPDATE_EVENT"), p("ComponentRegistry");
390
420
  //#endregion
391
421
  //#region packages/extensions-core/utils/blockInjectInfo.ts
392
- function O(e) {
422
+ function A(e) {
393
423
  if (e.meta !== void 0 && e.meta !== null && typeof e.meta == "object") return e.meta;
394
424
  let t = e.catalogExtra?.meta;
395
425
  if (typeof t == "object" && t) return t;
396
426
  }
397
- function k(e, t) {
427
+ function j(e, t) {
398
428
  let n = e.insertFrom ?? t?.type, r = t?.blockId ?? (e.id != null && e.id !== "" ? String(e.id) : void 0), i = t?.project ?? (e.project !== void 0 && e.project !== null ? String(e.project) : void 0);
399
429
  return {
400
430
  type: t?.type ?? n,
@@ -406,11 +436,11 @@ function k(e, t) {
406
436
  id: r,
407
437
  title: e.title ?? void 0,
408
438
  blockType: e.type,
409
- meta: O(e)
439
+ meta: A(e)
410
440
  };
411
441
  }
412
- function A(e, t) {
413
- return t ? k(t, e) : {
442
+ function M(e, t) {
443
+ return t ? j(t, e) : {
414
444
  type: e.type,
415
445
  name: e.name,
416
446
  blockId: e.blockId,
@@ -420,7 +450,7 @@ function A(e, t) {
420
450
  }
421
451
  //#endregion
422
452
  //#region src/extensions/api/src/index.ts
423
- function j(e, t, n, r) {
453
+ function N(e, t, n, r) {
424
454
  if (typeof r.value == "function") {
425
455
  Object.defineProperty(e, n, {
426
456
  value: r.value.bind(t),
@@ -448,50 +478,50 @@ function j(e, t, n, r) {
448
478
  enumerable: !1
449
479
  });
450
480
  }
451
- function M(e, t, n) {
481
+ function P(e, t, n) {
452
482
  let r = t.use(n), i = /* @__PURE__ */ new Set(), a = [r];
453
483
  for (let e = Object.getPrototypeOf(r); e && e !== Object.prototype; e = Object.getPrototypeOf(e)) a.push(e);
454
484
  for (let t of a) for (let n of Reflect.ownKeys(t)) {
455
485
  if (n === "constructor" || i.has(n)) continue;
456
486
  let a = Object.getOwnPropertyDescriptor(t, n);
457
- a && (i.add(n), j(e, r, n, a));
487
+ a && (i.add(n), N(e, r, n, a));
458
488
  }
459
489
  }
460
- function N() {
490
+ function F() {
461
491
  return typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID() : `component-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
462
492
  }
463
- var P = class {
464
- constructor(e) {
465
- M(this, e, "SandboxScriptApi");
466
- }
467
- }, F = class {
468
- constructor(e) {
469
- M(this, e, "ElementsApi");
470
- }
471
- }, I = class {
493
+ var I = class {
472
494
  constructor(e) {
473
- M(this, e, "BlocksApi");
495
+ P(this, e, "SandboxScriptApi");
474
496
  }
475
497
  }, L = class {
476
498
  constructor(e) {
477
- M(this, e, "MessageService");
499
+ P(this, e, "ElementsApi");
478
500
  }
479
501
  }, R = class {
480
502
  constructor(e) {
481
- M(this, e, "SettingsPanelApi");
503
+ P(this, e, "BlocksApi");
482
504
  }
483
505
  }, z = class {
484
506
  constructor(e) {
485
- M(this, e, "ModalApi");
507
+ P(this, e, "MessageService");
486
508
  }
487
509
  }, B = class {
488
510
  constructor(e) {
489
- M(this, e, "EmailSettingsApi");
511
+ P(this, e, "SettingsPanelApi");
512
+ }
513
+ }, V = class {
514
+ constructor(e) {
515
+ P(this, e, "ModalApi");
516
+ }
517
+ }, H = class {
518
+ constructor(e) {
519
+ P(this, e, "EmailSettingsApi");
490
520
  }
491
521
  };
492
- function V(e = N()) {
522
+ function U(e = F()) {
493
523
  return e;
494
524
  }
495
- var H = C(v), U = "1.1.84";
525
+ var W = T(b), G = "1.1.85-dev.2";
496
526
  //#endregion
497
- export { I as BlocksApi, H as DomComponentRegistry, F as ElementsApi, B as EmailSettingsApi, L as MessageService, z as ModalApi, P as SandboxScriptApi, R as SettingsPanelApi, k as blockInsertContextToInjectInfo, V as createComponentIdentifier, A as mergeBlockInjectAck, E as pluginRegistry, U as version };
527
+ export { R as BlocksApi, W as DomComponentRegistry, L as ElementsApi, H as EmailSettingsApi, z as MessageService, V as ModalApi, I as SandboxScriptApi, B as SettingsPanelApi, j as blockInsertContextToInjectInfo, U as createComponentIdentifier, M as mergeBlockInjectAck, O as pluginRegistry, G as version };
package/package.json CHANGED
@@ -5,8 +5,8 @@
5
5
  "main": "index.js",
6
6
  "types": "types.d.ts",
7
7
  "name": "@emailmaker/extensions-app",
8
- "version": "1.1.84",
8
+ "version": "1.1.85-dev.2",
9
9
  "dependencies": {
10
- "@emailmaker/emailmaker": "1.1.84"
10
+ "@emailmaker/emailmaker": "1.1.85-dev.2"
11
11
  }
12
12
  }