@retailcrm/embed-ui-v1-endpoint 0.9.21 → 0.9.22-alpha.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 (46) hide show
  1. package/README.md +70 -11
  2. package/bin/embed-ui-v1-endpoint-mcp.mjs +10 -0
  3. package/bin/embed-ui-v1-endpoint.mjs +416 -0
  4. package/dist/common/targets.cjs +61 -130
  5. package/dist/common/targets.d.ts +38 -27
  6. package/dist/common/targets.documentation.d.ts +302 -0
  7. package/dist/common/targets.js +61 -130
  8. package/dist/mcp/server.cjs +115 -0
  9. package/dist/mcp/server.d.ts +3 -0
  10. package/dist/mcp/server.js +97 -0
  11. package/dist/meta.json +618 -0
  12. package/docs/README.md +8 -6
  13. package/docs/create-endpoint.md +8 -10
  14. package/docs/define-page-runner.md +3 -3
  15. package/docs/define-widget-runner.md +2 -2
  16. package/docs/layout.md +14 -37
  17. package/docs/menu-placements.md +11 -13
  18. package/docs/page-routes.md +12 -14
  19. package/docs/run-endpoint.md +4 -4
  20. package/docs/targets/customer-card-communications-after.yml +48 -0
  21. package/docs/targets/customer-card-inwork-after.yml +48 -0
  22. package/docs/targets/customer-card-inwork-before.yml +48 -0
  23. package/docs/targets/customer-card-phone.yml +49 -0
  24. package/docs/targets/order-card-comment-manager-before.yml +51 -0
  25. package/docs/targets/order-card-common-after.yml +51 -0
  26. package/docs/targets/order-card-common-before.yml +51 -0
  27. package/docs/targets/order-card-customer-after.yml +51 -0
  28. package/docs/targets/order-card-customer-before.yml +51 -0
  29. package/docs/targets/order-card-customer-email.yml +51 -0
  30. package/docs/targets/order-card-customer-phone.yml +51 -0
  31. package/docs/targets/order-card-delivery-address.yml +51 -0
  32. package/docs/targets/order-card-delivery-after.yml +51 -0
  33. package/docs/targets/order-card-delivery-before.yml +51 -0
  34. package/docs/targets/order-card-dimensions-before.yml +51 -0
  35. package/docs/targets/order-card-list-after.yml +51 -0
  36. package/docs/targets/order-card-list-before.yml +51 -0
  37. package/docs/targets/order-card-payment-before.yml +51 -0
  38. package/docs/targets/order-card-store-before.yml +51 -0
  39. package/docs/targets/order-mg-delivery-after.yml +51 -0
  40. package/docs/targets/order-mg-delivery-before.yml +51 -0
  41. package/docs/targets/order-mg-list-after.yml +51 -0
  42. package/docs/targets/order-mg-list-before.yml +51 -0
  43. package/docs/targets/order-mg-payment-after.yml +51 -0
  44. package/docs/targets/order-mg-payment-before.yml +51 -0
  45. package/docs/targets.md +42 -17
  46. package/package.json +27 -7
@@ -0,0 +1,51 @@
1
+ target: "order/mg:delivery.after"
2
+ summary: >
3
+ Widget for the block "Delivery". It is placed in the chat order form: Section end, right under the input fields.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "delivery.after"
23
+
24
+ description: "Widget for the block \"Delivery\""
25
+ location: "Section end, right under the input fields"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:delivery.after."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section end, right under the input fields."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
@@ -0,0 +1,51 @@
1
+ target: "order/mg:delivery.before"
2
+ summary: >
3
+ Widget for the block "Delivery". It is placed in the chat order form: Section start, right above the input field.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "delivery.before"
23
+
24
+ description: "Widget for the block \"Delivery\""
25
+ location: "Section start, right above the input field"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:delivery.before."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section start, right above the input field."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
@@ -0,0 +1,51 @@
1
+ target: "order/mg:list.after"
2
+ summary: >
3
+ Widget for the block "Order items". It is placed in the chat order form: Section end, right after the list of order items and before the discount, privilege selection, etc. input fields.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "list.after"
23
+
24
+ description: "Widget for the block \"Order items\""
25
+ location: "Section end, right after the list of order items and before the discount, privilege selection, etc. input fields"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:list.after."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section end, right after the list of order items and before the discount, privilege selection, etc. input fields."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
@@ -0,0 +1,51 @@
1
+ target: "order/mg:list.before"
2
+ summary: >
3
+ Widget for the block "Order items". It is placed in the chat order form: Section start, right above the list of order items.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "list.before"
23
+
24
+ description: "Widget for the block \"Order items\""
25
+ location: "Section start, right above the list of order items"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:list.before."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section start, right above the list of order items."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
@@ -0,0 +1,51 @@
1
+ target: "order/mg:payment.after"
2
+ summary: >
3
+ Widget for the block "Payment". It is placed in the chat order form: Section end, after the list of payments, controls, and custom fields.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "payment.after"
23
+
24
+ description: "Widget for the block \"Payment\""
25
+ location: "Section end, after the list of payments, controls, and custom fields"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:payment.after."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section end, after the list of payments, controls, and custom fields."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
@@ -0,0 +1,51 @@
1
+ target: "order/mg:payment.before"
2
+ summary: >
3
+ Widget for the block "Payment". It is placed in the chat order form: Section start, right above the input field.
4
+ language: en-GB
5
+ audience: ai
6
+
7
+ public_import:
8
+ from: "@retailcrm/embed-ui-v1-endpoint/common"
9
+ named:
10
+ - targets
11
+ - TargetName
12
+
13
+ runner_import:
14
+ from: "@retailcrm/embed-ui-v1-endpoint/remote/widgets"
15
+ named:
16
+ - defineWidgetRunner
17
+ - defineMultiRunner
18
+
19
+ page:
20
+ id: "order/mg"
21
+ label: "chat order form"
22
+ area: "payment.before"
23
+
24
+ description: "Widget for the block \"Payment\""
25
+ location: "Section start, right above the input field"
26
+
27
+ target_config:
28
+ contexts:
29
+ - "order/card"
30
+ - "order/card:settings"
31
+ - "user/current"
32
+ - "settings"
33
+ custom_contexts:
34
+ - "order"
35
+ action_scopes:
36
+ - "order/card"
37
+
38
+ use_when:
39
+ - "Place a widget exactly at order/mg:payment.before."
40
+ - "The widget belongs to the chat order form and should appear at this location: Section start, right above the input field."
41
+ - "The widget can work with the contexts listed in target_config.contexts."
42
+
43
+ avoid_when:
44
+ - "The widget belongs to a different page, section, or field-level insertion point."
45
+ - "The widget requires contexts, custom contexts, or action scopes that are not listed in target_config."
46
+
47
+ ai_notes:
48
+ - "Use the target id as the runner registration key."
49
+ - "Use targets[target].contexts as the source of truth for context availability."
50
+ - "Do not duplicate target context lists in generated widget code."
51
+ - "Order card and chat order form targets share the same order form data contract."
package/docs/targets.md CHANGED
@@ -7,12 +7,14 @@
7
7
 
8
8
  - `targets` — словарь встроенных target-конфигураций.
9
9
  - `TargetName` — union всех ключей `targets`.
10
- - `defineTarget(id, contexts)` — helper для объявления target с типами контекстов.
10
+ - `TargetList` — словарь `target -> SchemaList`, выведенный из `targets[target].contexts`.
11
+ - `defineTarget(id, config)` — helper для объявления target с типами контекстов, custom contexts и action scopes.
12
+ Также поддерживает альтернативную форму `defineTarget(id, contexts)`.
11
13
 
12
14
  ## Что такое `target` и `context`
13
15
 
14
16
  `target` — это идентификатор места встраивания виджета в интерфейсе CRM. Он отвечает на вопрос:
15
- «куда CRM сейчас монтирует remote-виджет?». Например, `order/card:common.before` означает конкретную
17
+ «куда CRM сейчас монтирует встраиваемый виджет?». Например, `order/card:common.before` означает конкретную
16
18
  точку встраивания на карточке заказа.
17
19
 
18
20
  `context` — это набор реактивных данных, доступных виджету в этом месте. Он отвечает на вопрос:
@@ -22,15 +24,6 @@
22
24
  `target` не является данными заказа, клиента или пользователя. Это только место встраивания.
23
25
  Данные нужно брать из контекстов, которые привязаны к этому `target`.
24
26
 
25
- ## Примеры встроенных `target`
26
-
27
- | Target | Где встраивается | Доступные контексты |
28
- | --- | --- | --- |
29
- | `order/card:common.before` | Карточка заказа, перед блоком общей информации | `order/card`, `user/current`, `settings` |
30
- | `order/card:customer.phone` | Карточка заказа, поле телефона клиента | `order/card`, `user/current`, `settings` |
31
- | `customer/card:phone` | Карточка клиента, телефонный блок | `customer/card`, `customer/card:phone`, `user/current`, `settings` |
32
- | `order/mg:list.before` | Карточка заказа, перед списком в multi-goods блоке | `order/card`, `order/card:settings`, `user/current`, `settings` |
33
-
34
27
  ## Проверка контекстов для `target`
35
28
 
36
29
  ```ts
@@ -60,6 +53,7 @@ const selectedTarget: TargetName = 'order/card:common.before'
60
53
  import type { TargetName } from '@retailcrm/embed-ui-v1-endpoint/common'
61
54
 
62
55
  import { useContext as useOrderContext } from '@retailcrm/embed-ui-v1-contexts/remote/order/card'
56
+ import { useContext as useOrderSettingsContext } from '@retailcrm/embed-ui-v1-contexts/remote/order/card-settings'
63
57
  import { useContext as useSettingsContext } from '@retailcrm/embed-ui-v1-contexts/remote/settings'
64
58
  import { useContext as useUserContext } from '@retailcrm/embed-ui-v1-contexts/remote/user/current'
65
59
 
@@ -68,13 +62,14 @@ defineProps<{
68
62
  }>()
69
63
 
70
64
  const order = useOrderContext()
65
+ const orderSettings = useOrderSettingsContext()
71
66
  const settings = useSettingsContext()
72
67
  const user = useUserContext()
73
68
  </script>
74
69
  ```
75
70
 
76
71
  Такой набор контекстов подходит для `order/card:common.before`, потому что этот `target` объявлен с
77
- контекстами `order/card`, `user/current` и `settings`.
72
+ контекстами `order/card`, `order/card:settings`, `user/current` и `settings`.
78
73
 
79
74
  Для `customer/card:phone` набор импортов будет другим:
80
75
 
@@ -85,18 +80,48 @@ import { useContext as useSettingsContext } from '@retailcrm/embed-ui-v1-context
85
80
  import { useContext as useUserContext } from '@retailcrm/embed-ui-v1-contexts/remote/user/current'
86
81
  ```
87
82
 
88
- ## Пример `defineTarget`
83
+ ## `defineTarget` в тестах
84
+
85
+ CRM не предоставляет расширениям механизм регистрации произвольных widget targets.
86
+ В рабочем сценарии виджет монтируется только в заранее определённые платформой цели из `targets`.
87
+
88
+ `defineTarget` нужен для объявления этих встроенных целей внутри пакета и для автотестов,
89
+ где требуется собрать изолированную target-конфигурацию без запуска CRM.
89
90
 
90
91
  ```ts
91
92
  import { defineTarget } from '@retailcrm/embed-ui-v1-endpoint/common'
92
93
 
93
- const customTarget = defineTarget('order/card:custom.after', [
94
- 'order/card',
94
+ const testTarget = defineTarget('order/card:test.after', {
95
+ contexts: [
96
+ 'order/card',
97
+ 'order/card:settings',
98
+ 'user/current',
99
+ 'settings',
100
+ ],
101
+ customContexts: ['order'],
102
+ actions: ['order/card'],
103
+ } as const)
104
+ ```
105
+
106
+ Альтернативная форма с массивом контекстов подходит для target без custom contexts и action scopes.
107
+ В этом случае `customContexts` и `actions` будут пустыми:
108
+
109
+ ```ts
110
+ const testTarget = defineTarget('customer/card:test.after', [
111
+ 'customer/card',
95
112
  'user/current',
96
113
  'settings',
97
114
  ] as const)
98
115
  ```
99
116
 
117
+ ## AI-friendly YAML profiles
118
+
119
+ Для встроенных целей дополнительно генерируется каталог [`targets/*.yml`](./targets/).
120
+ Эти файлы предназначены для AI-ассистентов: они описывают target на английском, перечисляют
121
+ доступные contexts, custom contexts и action scopes, но не являются отдельным источником truth.
122
+ Обновляйте `targets.ts` и `targets.documentation.ts`, затем запускайте
123
+ `yarn workspace @retailcrm/embed-ui-v1-endpoint run build:docs`.
124
+
100
125
  ## Практический совет
101
126
 
102
127
  Если раннер маппится по `target`, старайтесь использовать ключи из `TargetName`.
@@ -104,8 +129,8 @@ const customTarget = defineTarget('order/card:custom.after', [
104
129
 
105
130
  Читайте также:
106
131
 
107
- - [`defineWidgetRunner`](./define-widget-runner.md) — как `target` попадает в remote-компонент.
132
+ - [`defineWidgetRunner`](./define-widget-runner.md) — как `target` попадает в компонент встраиваемого виджета.
108
133
  - [`menu-placements`](./menu-placements.md) — чем пункты меню для страниц отличаются от widget `target`.
109
- - [`page-routes`](./page-routes.md) — как описывать page `code` и CRM route.
134
+ - [`page-routes`](./page-routes.md) — как описывать page `code` и CRM-маршрут.
110
135
  - [`CONCEPT`](../../v1-contexts/docs/ru/CONCEPT.md) — общий принцип работы контекстов.
111
136
  - [`CUSTOM`](../../v1-contexts/docs/ru/CUSTOM.md) — пользовательский контекст для custom fields.
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@retailcrm/embed-ui-v1-endpoint",
3
+ "bin": {
4
+ "embed-ui-v1-endpoint": "./bin/embed-ui-v1-endpoint.mjs",
5
+ "embed-ui-v1-endpoint-mcp": "./bin/embed-ui-v1-endpoint-mcp.mjs"
6
+ },
3
7
  "type": "module",
4
- "version": "0.9.21",
8
+ "version": "0.9.22-alpha.1",
5
9
  "description": "Endpoint API for integrations in RetailCRM",
6
10
  "license": "MIT",
7
11
  "author": "RetailDriverLLC <integration@retailcrm.ru>",
@@ -25,6 +29,12 @@
25
29
  "require": "./dist/common/targets.cjs",
26
30
  "default": "./dist/common/targets.js"
27
31
  },
32
+ "./mcp": {
33
+ "types": "./dist/mcp/server.d.ts",
34
+ "import": "./dist/mcp/server.js",
35
+ "require": "./dist/mcp/server.cjs",
36
+ "default": "./dist/mcp/server.js"
37
+ },
28
38
  "./remote": {
29
39
  "types": "./dist/remote.d.ts",
30
40
  "import": "./dist/remote.js",
@@ -54,6 +64,9 @@
54
64
  "common/targets": [
55
65
  "./dist/common/targets.d.ts"
56
66
  ],
67
+ "mcp": [
68
+ "./dist/mcp/server.d.ts"
69
+ ],
57
70
  "remote": [
58
71
  "./dist/remote.d.ts"
59
72
  ],
@@ -66,29 +79,35 @@
66
79
  }
67
80
  },
68
81
  "files": [
82
+ "bin",
69
83
  "dist",
70
84
  "docs",
71
85
  "README.md"
72
86
  ],
73
87
  "scripts": {
74
- "build": "yarn build:code",
88
+ "build": "yarn build:docs && yarn build:code && yarn build:mcp && yarn build:meta",
75
89
  "build:code": "vite build -c ./vite.config.ts",
90
+ "build:docs": "npx tsx scripts/build.docs.ts",
91
+ "build:mcp": "vite build -c ./vite.config.mcp.ts",
92
+ "build:meta": "npx tsx scripts/build.meta.ts",
76
93
  "test:e2e": "yarn exec vitest --run --config ./vitest.config.playwright.ts",
77
94
  "test:playwright": "yarn exec vitest --run --config ./vitest.config.playwright.ts",
78
95
  "test": "vitest --run"
79
96
  },
80
97
  "peerDependencies": {
98
+ "@omnicajs/vue-remote": "^0.2.23",
81
99
  "@remote-ui/rpc": "^1.4",
82
- "@retailcrm/embed-ui-v1-contexts": "^0.9.21",
83
- "@retailcrm/embed-ui-v1-types": "^0.9.21",
100
+ "@retailcrm/embed-ui-v1-contexts": "^0.9.22-alpha.1",
101
+ "@retailcrm/embed-ui-v1-types": "^0.9.22-alpha.1",
84
102
  "pinia": "^2.2",
85
103
  "vue": "^3.5"
86
104
  },
87
105
  "dependencies": {
106
+ "@modelcontextprotocol/sdk": "^1.29.0",
88
107
  "@remote-ui/rpc": "^1.4.7",
89
- "@retailcrm/embed-ui-v1-components": "^0.9.21",
90
- "@retailcrm/embed-ui-v1-contexts": "^0.9.21",
91
- "@retailcrm/embed-ui-v1-types": "^0.9.21"
108
+ "@retailcrm/embed-ui-v1-components": "^0.9.22-alpha.1",
109
+ "@retailcrm/embed-ui-v1-contexts": "^0.9.22-alpha.1",
110
+ "@retailcrm/embed-ui-v1-types": "^0.9.22-alpha.1"
92
111
  },
93
112
  "devDependencies": {
94
113
  "@retailcrm/image-preview": "^1.0.2",
@@ -97,6 +116,7 @@
97
116
  "date-fns": "^4.1.0",
98
117
  "lodash.isequal": "^4.5.0",
99
118
  "playwright": "1.58.2",
119
+ "tsx": "^4.21.0",
100
120
  "vite": "^7.3.2",
101
121
  "vite-plugin-dts": "^4.5.4",
102
122
  "vitest": "4.1.3"