@emailmaker/extensions-sandbox 1.0.111-dev.5 → 1.0.111-dev.7

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 (3) hide show
  1. package/README.md +33 -2
  2. package/index.js +13 -9
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -192,8 +192,8 @@ module.exports = {
192
192
 
193
193
  Нужна только для продвинутой интеграции или собственного бандлерного пайплайна. Основной сценарий для внешнего плагина — отдельный пакет с `PluginDev`.
194
194
 
195
- - `resolve.alias`: `react` → `@emailmaker/emailmaker/runtime/react` (и т.д.) для `esm` / dev; локальные shared internals идут через compat facades runtime
196
- - `externals`: `@emailmaker/emailmaker/runtime/core`, runtime npm-модули и `@emailmaker/ui-kit`
195
+ - `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`)
196
+ - `externals`: `@emailmaker/emailmaker/runtime/core`, runtime npm-модули; ui-kit external → **`@emailmaker/emailmaker/ui-kit`** (глобальный ключ `UiKit` в `runtimeExports`, см. манифест)
197
197
  - Список модулей: `@emailmaker/emailmaker/runtime/plugin-dev-manifest.json` → `runtimeModules`
198
198
 
199
199
  Если release bundle неожиданно стал толстым или target `встраиваемый bundle` не загружается, начните с раздела `Troubleshooting`.
@@ -504,6 +504,21 @@ panel.showSettingsPanel({
504
504
  });
505
505
  ```
506
506
 
507
+ #### `instanceKey` (идентификатор экземпляра панели)
508
+
509
+ По умолчанию **каждый** вызов `showSettingsPanel` получает новый `instanceKey`, и хост **перемонтирует** React-компонент панели. Это нужно при переключении между несколькими экземплярами одного блока в письме (две карточки товара с одним `ComponentId`).
510
+
511
+ Передайте стабильный `instanceKey` только если нужно **обновлять props без remount** и сохранять внутреннее состояние панели (скролл, фокус, черновик формы):
512
+
513
+ ```ts
514
+ panel.showSettingsPanel({
515
+ instanceKey: blockUuid,
516
+ content: { type: 'SettingsPanelId', props: { blockUuid, settings } },
517
+ });
518
+ ```
519
+
520
+ Не вызывайте `closeSettingsPanel` перед `showSettingsPanel` при переключении между экземплярами — достаточно одного `showSettingsPanel` с новыми `props`.
521
+
507
522
  Примерная последовательность процесса взаимодействия sandbox и app:
508
523
  1. Обработчик клика в sandbox
509
524
  2. Отправка события в app через MessageService
@@ -725,6 +740,10 @@ settingsPanel.showSettingsPanel({
725
740
 
726
741
  ## 🎨 UI Kit
727
742
 
743
+ ### ColorPicker — минимальный пример
744
+
745
+ Растягивается на ширину родителя (Form.Item, колонку и т.д.) — дополнительный inline-style для ширины не нужен.
746
+
728
747
  ```tsx
729
748
  import { EmIcons, ColorPicker } from "@emailmaker/ui-kit";
730
749
 
@@ -734,6 +753,18 @@ import { EmIcons, ColorPicker } from "@emailmaker/ui-kit";
734
753
  />
735
754
  ```
736
755
 
756
+ ### FormColorField — рекомендуется для settings panel
757
+
758
+ Микролейбл + `Form.Item` + color picker — тот же паттерн, что в панелях редактора. Используйте внутри `Form` с полем `name`.
759
+
760
+ ```tsx
761
+ import { Form, FormColorField } from "@emailmaker/ui-kit";
762
+
763
+ <Form layout="vertical">
764
+ <FormColorField name="bgColor" label="Цвет фона" />
765
+ </Form>
766
+ ```
767
+
737
768
 
738
769
  ---
739
770
 
package/index.js CHANGED
@@ -60,7 +60,7 @@ var t = e("SandboxApp"), n = e("IframePluginRegistry");
60
60
  n.packages[e.id] = e, n.validateAll();
61
61
  }, t.__compat.registerPackage({
62
62
  id: "extensions-sandbox",
63
- version: "1.0.111-dev.5",
63
+ version: "1.0.111-dev.7",
64
64
  requires: { host: "^1.0.105" }
65
65
  });
66
66
  }
@@ -71,11 +71,9 @@ function r() {
71
71
  function i() {
72
72
  let e = r();
73
73
  if (!e) throw Error("Sandbox not initialized. Make sure sandbox bootstrap is loaded first.");
74
- let i = e.getInstance(t);
75
- if (!i) throw Error("App not registered in DI container.");
76
- let o = e.getInstance(n);
77
- if (!o) throw Error("PluginRegistry not registered in DI container.");
78
- return a(i, o);
74
+ let n = e.getInstance(t);
75
+ if (!n) throw Error("App not registered in DI container.");
76
+ return a(n, l());
79
77
  }
80
78
  function a(e, t) {
81
79
  return {
@@ -96,14 +94,20 @@ function a(e, t) {
96
94
  }
97
95
  };
98
96
  }
99
- var o = i();
97
+ var o;
100
98
  function s() {
99
+ return o ||= i(), o;
100
+ }
101
+ var c = new Proxy({}, { get(e, t, n) {
102
+ let r = s(), i = Reflect.get(r, t, n);
103
+ return typeof i == "function" ? i.bind(r) : i;
104
+ } });
105
+ function l() {
101
106
  let e = r();
102
107
  if (!e) throw Error("Sandbox not initialized.");
103
108
  let t = e.getInstance(n);
104
109
  if (!t) throw Error("PluginRegistry not registered in DI container.");
105
110
  return t;
106
111
  }
107
- var c = s();
108
112
  //#endregion
109
- export { t as APP_ID, o as App, n as IFRAME_PLUGIN_REGISTRY_ID, s as getPluginRegistry, c as pluginRegistry };
113
+ export { t as APP_ID, c as App, n as IFRAME_PLUGIN_REGISTRY_ID, l as getPluginRegistry };
package/package.json CHANGED
@@ -5,5 +5,5 @@
5
5
  "main": "index.js",
6
6
  "types": "types.d.ts",
7
7
  "name": "@emailmaker/extensions-sandbox",
8
- "version": "1.0.111-dev.5"
8
+ "version": "1.0.111-dev.7"
9
9
  }