@weavix/tracker-plugin-sdk-react 0.0.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.
package/README.md ADDED
@@ -0,0 +1,201 @@
1
+ # @weavix/tracker-plugin-sdk-react
2
+
3
+ React SDK for Tracker plugins (Weavix / npm). Mirrors `@yandex-data-ui/tracker-plugin-sdk-react`.
4
+
5
+ Для удобства написания плагинов:
6
+
7
+ Этот пакет предоставляет `TrackerPluginProvider`, хуки, а также реэкспортирует `trackerApi` и `hostApi` из core.
8
+
9
+ > **Для агентов и AI:** [AGENTS.md](./AGENTS.md) → [COOKBOOK](../../docs/agent/COOKBOOK.md). Core API: [tracker-plugin-external](../tracker-plugin-external/README.md).
10
+
11
+ ## Установка
12
+
13
+ ```bash
14
+ npm install @weavix/tracker-plugin-sdk-react
15
+ ```
16
+
17
+ ## Использование
18
+
19
+ ### Инициализация плагина
20
+
21
+ Оберните приложение в `TrackerPluginProvider` в корне. Компонент управляет инициализацией, состояниями загрузки и ошибок, а также уведомляет хост о готовности плагина.
22
+
23
+ ```tsx
24
+ import { TrackerPluginProvider } from '@weavix/tracker-plugin-sdk-react';
25
+ import { createRoot } from 'react-dom/client';
26
+ import { App } from './App';
27
+
28
+ const root = createRoot(document.getElementById('root')!);
29
+
30
+ root.render(
31
+ <TrackerPluginProvider>
32
+ <App />
33
+ </TrackerPluginProvider>,
34
+ );
35
+ ```
36
+
37
+ ### Получение темы, языка и контекста слота (basic)
38
+
39
+ По умолчанию в манифесте `contextLevel: "basic"` (или поле не задано) — в `slotContext` только `entityId` и опционально `entityMeta`.
40
+
41
+ ```tsx
42
+ import { useTrackerPluginContext } from '@weavix/tracker-plugin-sdk-react';
43
+
44
+ function MyComponent() {
45
+ const { theme, language, slot, slotContext } = useTrackerPluginContext();
46
+
47
+ return (
48
+ <div className={theme}>
49
+ <p>Язык: {language}</p>
50
+ <p>Слот: {slot}</p>
51
+ <p>Сущность: {slotContext?.entityId}</p>
52
+ </div>
53
+ );
54
+ }
55
+ ```
56
+
57
+ ### Полный контекст слота (Issue)
58
+
59
+ Требуется `"contextLevel": "full"` в манифесте плагина.
60
+
61
+ ```tsx
62
+ import { useTrackerPluginContext } from '@weavix/tracker-plugin-sdk-react';
63
+
64
+ function IssuePlugin() {
65
+ const { slotContext } = useTrackerPluginContext<'issue.action'>('full');
66
+
67
+ return (
68
+ <div>
69
+ <h1>Задача: {slotContext?.key}</h1>
70
+ <p>Версия: {slotContext?.version}</p>
71
+ </div>
72
+ );
73
+ }
74
+ ```
75
+
76
+ Тип `Issue` в контексте слота — из **`@weavix/tracker-core`** (реэкспорт из core). Типы ответов **`trackerApi.v3`** — из **`@weavix/tracker-api-types`**.
77
+
78
+ ### Локализация
79
+
80
+ ```tsx
81
+ import { useLocalizedString } from '@weavix/tracker-plugin-sdk-react';
82
+
83
+ function MyComponent() {
84
+ const localize = useLocalizedString();
85
+
86
+ const field = {
87
+ name: { ru: 'Название', en: 'Summary' },
88
+ };
89
+
90
+ return <h1>{localize(field.name)}</h1>;
91
+ }
92
+ ```
93
+
94
+ ### Кастомные состояния загрузки и ошибок
95
+
96
+ ```tsx
97
+ import { TrackerPluginProvider } from '@weavix/tracker-plugin-sdk-react';
98
+
99
+ root.render(
100
+ <TrackerPluginProvider
101
+ autoResize={false}
102
+ fallback={<div>Загрузка...</div>}
103
+ errorFallback={(error) => <div>Ошибка: {error.message}</div>}
104
+ autoNotifyReady={false}
105
+ >
106
+ <App />
107
+ </TrackerPluginProvider>,
108
+ );
109
+ ```
110
+
111
+ ### Ручной вызов `notifyReady`
112
+
113
+ ```tsx
114
+ import { TrackerPluginProvider, hostApi } from '@weavix/tracker-plugin-sdk-react';
115
+ import { useEffect } from 'react';
116
+
117
+ function App() {
118
+ useEffect(() => {
119
+ initializeApp().then(() => {
120
+ hostApi.notifyReady();
121
+ });
122
+ }, []);
123
+
124
+ return <div>My Plugin</div>;
125
+ }
126
+
127
+ root.render(
128
+ <TrackerPluginProvider autoNotifyReady={false}>
129
+ <App />
130
+ </TrackerPluginProvider>,
131
+ );
132
+ ```
133
+
134
+ ## Компоненты
135
+
136
+ ### `TrackerPluginProvider`
137
+
138
+ Оборачивает приложение и управляет жизненным циклом плагина.
139
+
140
+ **Props:**
141
+
142
+ | Prop | Тип | По умолчанию | Описание |
143
+ |------|-----|--------------|----------|
144
+ | `autoResize` | `boolean` | `true` | Автоматически изменять размер контейнера при изменении контента |
145
+ | `fallback` | `ReactNode` | `<PluginLoader />` | Отображается во время инициализации |
146
+ | `errorFallback` | `(error: Error) => ReactNode` | `<PluginError />` | Отображается при ошибке инициализации |
147
+ | `autoNotifyReady` | `boolean` | `true` | Автоматически уведомлять хост о готовности плагина |
148
+
149
+ ## Хуки
150
+
151
+ ### `useTrackerPluginContext<TSlot>(level?)`
152
+
153
+ Возвращает тему, язык, имя слота и контекст слота.
154
+
155
+ - **`level: 'basic'`** (по умолчанию) — `slotContext`: `{ entityId, entityMeta? }`
156
+ - **`level: 'full'`** — полный контекст слота (`Issue` для `issue.action`); нужен `contextLevel: "full"` в манифесте
157
+
158
+ **Возвращает:** `{ theme, language, slot, slotContext, registerHandler }`
159
+
160
+ Подробнее: [API Reference — useTrackerPluginContext](./API_REFERENCE.md#usetrackerplugincontext).
161
+
162
+ ### `useToaster()`
163
+
164
+ Хук для показа toast-уведомлений в хост-приложении.
165
+
166
+ > **Permission:** `"toaster"` в `permissions.ui` манифеста.
167
+
168
+ ```tsx
169
+ import { useToaster } from '@weavix/tracker-plugin-sdk-react';
170
+
171
+ function MyComponent() {
172
+ const toaster = useToaster();
173
+
174
+ const handleSave = async () => {
175
+ await saveData();
176
+ toaster.add({ title: 'Сохранено', theme: 'success' });
177
+ };
178
+
179
+ return <button onClick={handleSave}>Сохранить</button>;
180
+ }
181
+ ```
182
+
183
+ Параметры `add(options)` — в [README tracker-core](../tracker-plugin-external/README.md#тосты-toast-notifications).
184
+
185
+ ### `useLocalizedString(fallbackLanguage?)`
186
+
187
+ Возвращает `(value: LocalizedString) => string` для текущего языка из контекста.
188
+
189
+ ## Полная документация
190
+
191
+ 📖 [AGENTS.md](./AGENTS.md) — вход для агентов.
192
+
193
+ 📖 [COOKBOOK](../../docs/agent/COOKBOOK.md) — рецепты.
194
+
195
+ 📖 [API Reference](./API_REFERENCE.md) — Provider, хуки, contextLevel.
196
+
197
+ 📖 [README tracker-core](../tracker-plugin-external/README.md) — `trackerApi`, `hostApi`, типы, ошибки.
198
+
199
+ ## Лицензия
200
+
201
+ UNLICENSED