@cuby-ui/cdk 0.0.485 → 0.0.488
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 +380 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,25 +1,392 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Cuby UI - агентская документация (RU)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Документ для кодовых агентов. Описывает публичный API пакета `@cuby-ui/cdk`, а также примеры использования.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Оглавление
|
|
6
|
+
- [CDK: директивы](#cdk-директивы)
|
|
7
|
+
- [CDK: пайпы](#cdk-пайпы)
|
|
8
|
+
- [CDK: сервисы](#cdk-сервисы)
|
|
9
|
+
- [CDK: токены](#cdk-токены)
|
|
10
|
+
- [CDK: интерфейсы и типы](#cdk-интерфейсы-и-типы)
|
|
11
|
+
- [CDK: утилиты и константы](#cdk-утилиты-и-константы)
|
|
12
|
+
- [Анти-паттерны](#анти-паттерны)
|
|
13
|
+
- [Линт и форматирование](#линт-и-форматирование)
|
|
14
|
+
- [Версии и совместимость](#версии-и-совместимость)
|
|
6
15
|
|
|
7
|
-
|
|
16
|
+
## CDK: директивы
|
|
8
17
|
|
|
9
|
-
|
|
18
|
+
### Feature: CuiAutoResizingDirective (`textarea[cuiAutoResizing]`)
|
|
19
|
+
Описание: автоматический ресайз textarea по контенту.
|
|
20
|
+
Публичный API:
|
|
21
|
+
- Standalone: да
|
|
22
|
+
Пример:
|
|
23
|
+
```html
|
|
24
|
+
<textarea cuiAutoResizing [formControl]="notesControl" style="max-height: 200px;"></textarea>
|
|
25
|
+
```
|
|
10
26
|
|
|
11
|
-
|
|
27
|
+
### Feature: CuiClickOutsideDirective (`(cuiClickOutside)`)
|
|
28
|
+
Описание: эмитит событие при клике вне элемента.
|
|
29
|
+
Публичный API:
|
|
30
|
+
- Standalone: да
|
|
31
|
+
- Output: `cuiClickOutside: EventEmitter<HTMLElement>`
|
|
32
|
+
Пример:
|
|
33
|
+
```html
|
|
34
|
+
<div (cuiClickOutside)="onOutside()">
|
|
35
|
+
...
|
|
36
|
+
</div>
|
|
37
|
+
```
|
|
12
38
|
|
|
13
|
-
|
|
39
|
+
### Feature: CuiContentEditableValueAccessorDirective
|
|
40
|
+
Описание: связывает contenteditable с Angular формами.
|
|
41
|
+
Публичный API:
|
|
42
|
+
- Standalone: да
|
|
43
|
+
- Селектор: `[contenteditable][formControlName|formControl|ngModel]`
|
|
44
|
+
Пример:
|
|
45
|
+
```html
|
|
46
|
+
<div contenteditable [formControl]="bioControl"></div>
|
|
47
|
+
```
|
|
14
48
|
|
|
15
|
-
|
|
49
|
+
### Feature: CuiDimensionsObserverDirective (`[cuiResizeObserver]`)
|
|
50
|
+
Описание: отдаёт размеры элемента при изменениях.
|
|
51
|
+
Публичный API:
|
|
52
|
+
- Standalone: да
|
|
53
|
+
- Output: `cuiResizeObserver: EventEmitter<CuiDimensions>`
|
|
54
|
+
Пример:
|
|
55
|
+
```html
|
|
56
|
+
<div cuiResizeObserver (cuiResizeObserver)="onResize($event)"></div>
|
|
57
|
+
```
|
|
16
58
|
|
|
17
|
-
|
|
59
|
+
### Feature: CuiElementDirective (`[cuiElement]`)
|
|
60
|
+
Описание: экспортирует `ElementRef` как `elementRef` в шаблоне.
|
|
61
|
+
Публичный API:
|
|
62
|
+
- Standalone: да
|
|
63
|
+
- exportAs: `elementRef`
|
|
64
|
+
Пример:
|
|
65
|
+
```html
|
|
66
|
+
<button cuiElement #btn="elementRef">Open</button>
|
|
67
|
+
<cui-context-menu [target]="btn.nativeElement" [items]="items"></cui-context-menu>
|
|
68
|
+
```
|
|
18
69
|
|
|
19
|
-
|
|
70
|
+
### Feature: CuiFocusTrapDirective (`[cuiFocusTrap]`)
|
|
71
|
+
Описание: запирает фокус внутри контейнера.
|
|
72
|
+
Публичный API:
|
|
73
|
+
- Standalone: да
|
|
74
|
+
Пример:
|
|
75
|
+
```html
|
|
76
|
+
<div cuiFocusTrap>
|
|
77
|
+
<input />
|
|
78
|
+
<button>OK</button>
|
|
79
|
+
</div>
|
|
80
|
+
```
|
|
20
81
|
|
|
21
|
-
|
|
82
|
+
### Feature: CuiItemDirective (`[cuiItem]`)
|
|
83
|
+
Описание: метка элемента коллекции, используется в `cui-breadcrumbs`.
|
|
84
|
+
Публичный API:
|
|
85
|
+
- Standalone: да
|
|
86
|
+
Пример:
|
|
87
|
+
```html
|
|
88
|
+
<a cuiBreadcrumb *cuiItem>Раздел</a>
|
|
89
|
+
```
|
|
22
90
|
|
|
23
|
-
|
|
91
|
+
### Feature: CuiLetDirective (`*cuiLet`)
|
|
92
|
+
Описание: структурная директива для удобного alias значения.
|
|
93
|
+
Публичный API:
|
|
94
|
+
- Standalone: да
|
|
95
|
+
Пример:
|
|
96
|
+
```html
|
|
97
|
+
<ng-container *cuiLet="user$ | async as user">
|
|
98
|
+
{{ user?.name }}
|
|
99
|
+
</ng-container>
|
|
100
|
+
```
|
|
24
101
|
|
|
25
|
-
|
|
102
|
+
### Feature: CuiLetContext
|
|
103
|
+
Описание: контекст для `cuiLet`, полезен для типизации.
|
|
104
|
+
Публичный API:
|
|
105
|
+
- Класс: `CuiLetContext<T>`
|
|
106
|
+
Пример:
|
|
107
|
+
```ts
|
|
108
|
+
type Ctx = CuiLetContext<User>;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Feature: CuiTargetDirective (`[ccTarget]`)
|
|
112
|
+
Описание: слушает клики на внешнем DOM-элементе.
|
|
113
|
+
Публичный API:
|
|
114
|
+
- Standalone: да
|
|
115
|
+
- Input: `ccTarget: HTMLElement`
|
|
116
|
+
- Output: `clicked: EventEmitter<MouseEvent>`
|
|
117
|
+
Пример:
|
|
118
|
+
```html
|
|
119
|
+
<div [ccTarget]="buttonRef.nativeElement" (clicked)="onTargetClick($event)"></div>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## CDK: пайпы
|
|
123
|
+
|
|
124
|
+
### Feature: CuiFilterPipe (`| cuiFilter`)
|
|
125
|
+
Описание: фильтрация массива по matcher функции.
|
|
126
|
+
Публичный API:
|
|
127
|
+
- Standalone: да
|
|
128
|
+
Пример:
|
|
129
|
+
```html
|
|
130
|
+
<li *ngFor="let item of items | cuiFilter: isVisible: filterValue">
|
|
131
|
+
{{ item.label }}
|
|
132
|
+
</li>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## CDK: сервисы
|
|
136
|
+
|
|
137
|
+
### Feature: CuiDestroyService
|
|
138
|
+
Описание: Subject, который автоматически завершает подписки в `ngOnDestroy`.
|
|
139
|
+
Публичный API:
|
|
140
|
+
- Использование: `takeUntil(destroy$)`
|
|
141
|
+
Пример:
|
|
142
|
+
```ts
|
|
143
|
+
@Component({ providers: [CuiDestroyService] })
|
|
144
|
+
export class ExampleComponent {
|
|
145
|
+
private destroy$ = inject(CuiDestroyService);
|
|
146
|
+
|
|
147
|
+
ngOnInit() {
|
|
148
|
+
this.stream$.pipe(takeUntil(this.destroy$)).subscribe();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Feature: CuiIdService
|
|
154
|
+
Описание: генератор уникальных id.
|
|
155
|
+
Публичный API:
|
|
156
|
+
- Метод: `generate(): string`
|
|
157
|
+
Пример:
|
|
158
|
+
```ts
|
|
159
|
+
const id = inject(CuiIdService).generate();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Feature: CuiPopoverService
|
|
163
|
+
Описание: абстрактный сервис для поповеров/оверлеев.
|
|
164
|
+
Публичный API:
|
|
165
|
+
- Метод: `open(content, options?) -> Observable`
|
|
166
|
+
- Типы: `CuiPopoverContext`, `CuiPopover<T>`
|
|
167
|
+
Пример:
|
|
168
|
+
```ts
|
|
169
|
+
class MyPopoverService extends CuiPopoverService<MyOptions> {
|
|
170
|
+
constructor() {
|
|
171
|
+
super(MY_ITEMS_TOKEN, MyPopoverComponent, MY_DEFAULT_OPTIONS);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Feature: CuiPopoverContext
|
|
177
|
+
Описание: контекст поповера (`id`, `component`, `content`, `completeWith`).
|
|
178
|
+
Публичный API:
|
|
179
|
+
- Поля: `$implicit`, `id`, `component`, `content`, `completeWith`
|
|
180
|
+
Пример:
|
|
181
|
+
```ts
|
|
182
|
+
const ctx: CuiPopoverContext = {
|
|
183
|
+
$implicit: observer,
|
|
184
|
+
id: 'id',
|
|
185
|
+
component: MyComponent,
|
|
186
|
+
content: 'text',
|
|
187
|
+
completeWith: () => {}
|
|
188
|
+
};
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Feature: CuiPopover
|
|
192
|
+
Описание: тип поповера (опции + контекст).
|
|
193
|
+
Пример:
|
|
194
|
+
```ts
|
|
195
|
+
type AlertPopover = CuiPopover<CuiAlertOptions>;
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## CDK: токены
|
|
199
|
+
|
|
200
|
+
### Feature: CUI_WINDOW
|
|
201
|
+
Описание: DI токен для `window`.
|
|
202
|
+
Пример:
|
|
203
|
+
```ts
|
|
204
|
+
const win = inject(CUI_WINDOW);
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Feature: CUI_LOCAL_STORAGE
|
|
208
|
+
Описание: DI токен для `localStorage`.
|
|
209
|
+
Пример:
|
|
210
|
+
```ts
|
|
211
|
+
const storage = inject(CUI_LOCAL_STORAGE);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Feature: CUI_SESSION_STORAGE
|
|
215
|
+
Описание: DI токен для `sessionStorage`.
|
|
216
|
+
Пример:
|
|
217
|
+
```ts
|
|
218
|
+
const storage = inject(CUI_SESSION_STORAGE);
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Feature: CUI_HISTORY
|
|
222
|
+
Описание: DI токен для `history`.
|
|
223
|
+
Пример:
|
|
224
|
+
```ts
|
|
225
|
+
const history = inject(CUI_HISTORY);
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## CDK: интерфейсы и типы
|
|
229
|
+
|
|
230
|
+
### Feature: CuiDimensions
|
|
231
|
+
Описание: размеры элемента.
|
|
232
|
+
Публичный API:
|
|
233
|
+
- Поля: `width`, `height`
|
|
234
|
+
Пример:
|
|
235
|
+
```ts
|
|
236
|
+
function onResize(dim: CuiDimensions) { console.log(dim.width); }
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Feature: CuiOnChange
|
|
240
|
+
Описание: сигнатура функции onChange для ControlValueAccessor.
|
|
241
|
+
Пример:
|
|
242
|
+
```ts
|
|
243
|
+
const onChange: CuiOnChange<string> = (value) => console.log(value);
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Feature: CuiOnTouched
|
|
247
|
+
Описание: сигнатура функции onTouched.
|
|
248
|
+
Пример:
|
|
249
|
+
```ts
|
|
250
|
+
const onTouched: CuiOnTouched = () => console.log('touched');
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Feature: CuiTimeMode
|
|
254
|
+
Описание: формат времени для `CuiTime`.
|
|
255
|
+
Публичный API:
|
|
256
|
+
- Значения: `HH:MM`, `HH:MM:SS`, `HH:MM:SS.MSS`
|
|
257
|
+
Пример:
|
|
258
|
+
```ts
|
|
259
|
+
const mode: CuiTimeMode = 'HH:MM:SS';
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Feature: CuiInputType
|
|
263
|
+
Описание: типы инпутов, используемые в core.
|
|
264
|
+
Публичный API:
|
|
265
|
+
- Значения: `text | password`
|
|
266
|
+
Пример:
|
|
267
|
+
```ts
|
|
268
|
+
const type: CuiInputType = 'password';
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Feature: Mapper
|
|
272
|
+
Описание: тип функции-отображения.
|
|
273
|
+
Пример:
|
|
274
|
+
```ts
|
|
275
|
+
const map: Mapper<[number, number], number> = (a, b) => a + b;
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Feature: CuiMatcher
|
|
279
|
+
Описание: тип функции-предиката для фильтрации.
|
|
280
|
+
Пример:
|
|
281
|
+
```ts
|
|
282
|
+
const matcher: CuiMatcher<[number, number]> = (item, min) => item > min;
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Feature: CuiNullable
|
|
286
|
+
Описание: `T | null | undefined`.
|
|
287
|
+
Пример:
|
|
288
|
+
```ts
|
|
289
|
+
const value: CuiNullable<string> = null;
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Feature: CuiValueOf
|
|
293
|
+
Описание: значение union по ключам объекта.
|
|
294
|
+
Пример:
|
|
295
|
+
```ts
|
|
296
|
+
type Modes = CuiValueOf<{ a: 'x'; b: 'y' }>;
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Feature: CuiTime
|
|
300
|
+
Описание: класс времени с парсингом и форматированием.
|
|
301
|
+
Публичный API:
|
|
302
|
+
- Методы: `fromString`, `fromPT`, `toString`, `toPT`
|
|
303
|
+
Пример:
|
|
304
|
+
```ts
|
|
305
|
+
const time = CuiTime.fromString('12:30');
|
|
306
|
+
time.toString('HH:MM'); // "12:30"
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## CDK: утилиты и константы
|
|
310
|
+
|
|
311
|
+
### Feature: svgNodeFilter
|
|
312
|
+
Описание: фильтр узлов для TreeWalker, исключает SVG.
|
|
313
|
+
Пример:
|
|
314
|
+
```ts
|
|
315
|
+
document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, svgNodeFilter);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Feature: cuiContainsOrAfter
|
|
319
|
+
Описание: проверка, что узел внутри или после другого.
|
|
320
|
+
Пример:
|
|
321
|
+
```ts
|
|
322
|
+
cuiContainsOrAfter(container, node);
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Feature: cuiIsHTMLElement
|
|
326
|
+
Описание: type guard для HTMLElement.
|
|
327
|
+
Пример:
|
|
328
|
+
```ts
|
|
329
|
+
if (cuiIsHTMLElement(node)) node.focus();
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Feature: cuiBlurNativeFocused
|
|
333
|
+
Описание: blur активного элемента.
|
|
334
|
+
Пример:
|
|
335
|
+
```ts
|
|
336
|
+
cuiBlurNativeFocused(document);
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Feature: cuiGetClosestFocusable
|
|
340
|
+
Описание: поиск ближайшего фокусируемого элемента.
|
|
341
|
+
Пример:
|
|
342
|
+
```ts
|
|
343
|
+
const next = cuiGetClosestFocusable({ initial, root });
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Feature: cuiGetNativeFocused
|
|
347
|
+
Описание: получение активного элемента с учетом shadow DOM.
|
|
348
|
+
Пример:
|
|
349
|
+
```ts
|
|
350
|
+
const active = cuiGetNativeFocused(document);
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Feature: cuiIsNativeKeyboardFocusable
|
|
354
|
+
Описание: проверка фокуса по клавиатуре.
|
|
355
|
+
Пример:
|
|
356
|
+
```ts
|
|
357
|
+
cuiIsNativeKeyboardFocusable(element);
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Feature: cuiIsNativeMouseFocusable
|
|
361
|
+
Описание: проверка фокуса по клику мыши.
|
|
362
|
+
Пример:
|
|
363
|
+
```ts
|
|
364
|
+
cuiIsNativeMouseFocusable(element);
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Feature: cuiCreateToken / cuiCreateTokenFromFactory
|
|
368
|
+
Описание: хелперы для создания `InjectionToken`.
|
|
369
|
+
Пример:
|
|
370
|
+
```ts
|
|
371
|
+
export const MY_TOKEN = cuiCreateToken({ enabled: true });
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Feature: cuiProvide
|
|
375
|
+
Описание: хелпер для `ExistingProvider`.
|
|
376
|
+
Пример:
|
|
377
|
+
```ts
|
|
378
|
+
providers: [cuiProvide(NG_VALUE_ACCESSOR, MyComponent, true)]
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Анти-паттерны
|
|
382
|
+
- Анти-паттерн: передавать строку вместо `CuiTime` в `cui-input-time`. Описание: компонент ожидает `CuiTime`.
|
|
383
|
+
|
|
384
|
+
## Линт и форматирование
|
|
385
|
+
- Явных конфигураций ESLint/Prettier в репозитории нет. Ориентируйтесь на текущий стиль файлов и типичные правила Angular/TypeScript.
|
|
386
|
+
|
|
387
|
+
## Версии и совместимость
|
|
388
|
+
- Angular: `>=18.0.0`
|
|
389
|
+
- RxJS: `>=7.0.0`
|
|
390
|
+
- `@maskito/*`: `^2.5.0` (input number/time)
|
|
391
|
+
- `@tinkoff/ng-polymorpheus`: `^4.3.0` (dialog header)
|
|
392
|
+
- Пакеты `@cuby-ui/*`: версия `0.0.177` (см. `projects/*/package.json`)
|