@emailmaker/extensions-sandbox 1.0.111-dev.6 → 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.
- package/README.md +33 -2
- package/index.js +13 -9
- 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
|
|
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.
|
|
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
|
|
75
|
-
if (!
|
|
76
|
-
|
|
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
|
|
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,
|
|
113
|
+
export { t as APP_ID, c as App, n as IFRAME_PLUGIN_REGISTRY_ID, l as getPluginRegistry };
|
package/package.json
CHANGED