@cuby-ui/cdk 0.0.562 → 0.0.564

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 (99) hide show
  1. package/README.md +392 -392
  2. package/esm2022/constants/empty.mjs +1 -1
  3. package/esm2022/constants/handlers.mjs +1 -1
  4. package/esm2022/constants/index.mjs +1 -1
  5. package/esm2022/constants/svg-node-filter.mjs +1 -1
  6. package/esm2022/constants/unicode-chars.mjs +1 -1
  7. package/esm2022/constants/units.mjs +1 -1
  8. package/esm2022/date-time/index.mjs +1 -1
  9. package/esm2022/date-time/time.mjs +1 -1
  10. package/esm2022/directives/active-zone/active-zone.directive.mjs +1 -1
  11. package/esm2022/directives/active-zone/index.mjs +1 -1
  12. package/esm2022/directives/auto-resizing.directive.mjs +1 -1
  13. package/esm2022/directives/click-outside.directive.mjs +1 -1
  14. package/esm2022/directives/content-editable-value-accessor.directive.mjs +1 -1
  15. package/esm2022/directives/dimensions-observer.directive.mjs +1 -1
  16. package/esm2022/directives/drag-drop/index.mjs +1 -1
  17. package/esm2022/directives/element.directive.mjs +1 -1
  18. package/esm2022/directives/focus-trap.directive.mjs +1 -1
  19. package/esm2022/directives/hovered/hovered.directive.mjs +1 -1
  20. package/esm2022/directives/hovered/hovered.service.mjs +1 -1
  21. package/esm2022/directives/hovered/index.mjs +1 -1
  22. package/esm2022/directives/index.mjs +1 -1
  23. package/esm2022/directives/item.directive.mjs +1 -1
  24. package/esm2022/directives/let.context.mjs +1 -1
  25. package/esm2022/directives/let.directive.mjs +1 -1
  26. package/esm2022/index.mjs +1 -1
  27. package/esm2022/interfaces/dimensions.mjs +1 -1
  28. package/esm2022/interfaces/index.mjs +1 -1
  29. package/esm2022/interfaces/on-change.mjs +1 -1
  30. package/esm2022/interfaces/on-touched.mjs +1 -1
  31. package/esm2022/models/consumption-units.mjs +1 -1
  32. package/esm2022/models/index.mjs +1 -1
  33. package/esm2022/observables/if-map.mjs +1 -1
  34. package/esm2022/observables/index.mjs +1 -1
  35. package/esm2022/observables/typed-from-event.mjs +1 -1
  36. package/esm2022/observables/watch.mjs +1 -1
  37. package/esm2022/observables/zone.mjs +1 -1
  38. package/esm2022/pipes/filter.pipe.mjs +1 -1
  39. package/esm2022/pipes/index.mjs +1 -1
  40. package/esm2022/services/consumption-units.service.mjs +1 -1
  41. package/esm2022/services/destroy.service.mjs +1 -1
  42. package/esm2022/services/id.service.mjs +1 -1
  43. package/esm2022/services/index.mjs +1 -1
  44. package/esm2022/services/popover.service.mjs +1 -1
  45. package/esm2022/tokens/active-element.mjs +1 -1
  46. package/esm2022/tokens/animation-frame.mjs +1 -1
  47. package/esm2022/tokens/environment.mjs +1 -1
  48. package/esm2022/tokens/history.mjs +1 -1
  49. package/esm2022/tokens/index.mjs +1 -1
  50. package/esm2022/tokens/local-storage.mjs +1 -1
  51. package/esm2022/tokens/navigator.mjs +1 -1
  52. package/esm2022/tokens/removed-element.mjs +1 -1
  53. package/esm2022/tokens/session-storage.mjs +1 -1
  54. package/esm2022/tokens/user-agent.mjs +1 -1
  55. package/esm2022/tokens/window.mjs +1 -1
  56. package/esm2022/types/context.mjs +1 -1
  57. package/esm2022/types/date-time.mjs +1 -1
  58. package/esm2022/types/handler.mjs +1 -1
  59. package/esm2022/types/index.mjs +1 -1
  60. package/esm2022/types/input-type.mjs +1 -1
  61. package/esm2022/types/mapper.mjs +1 -1
  62. package/esm2022/types/matcher.mjs +1 -1
  63. package/esm2022/types/nullable.mjs +1 -1
  64. package/esm2022/types/value-of.mjs +1 -1
  65. package/esm2022/utils/dom/contains-or-after.mjs +1 -1
  66. package/esm2022/utils/dom/element-checks.mjs +1 -1
  67. package/esm2022/utils/dom/get-actual-target.mjs +1 -1
  68. package/esm2022/utils/dom/get-document-or-shadow-root.mjs +1 -1
  69. package/esm2022/utils/dom/get-element-obscurers.mjs +1 -1
  70. package/esm2022/utils/dom/index.mjs +1 -1
  71. package/esm2022/utils/dom/inject-element.mjs +1 -1
  72. package/esm2022/utils/dom/point-to-client-rect.mjs +1 -1
  73. package/esm2022/utils/files/files.uploader.mjs +1 -1
  74. package/esm2022/utils/files/index.mjs +1 -1
  75. package/esm2022/utils/files/take-capture-from-video.mjs +1 -1
  76. package/esm2022/utils/focus/blur-native-focused.mjs +1 -1
  77. package/esm2022/utils/focus/get-closest-focusable.mjs +1 -1
  78. package/esm2022/utils/focus/get-native-focused.mjs +1 -1
  79. package/esm2022/utils/focus/index.mjs +1 -1
  80. package/esm2022/utils/focus/is-native-focused.mjs +1 -1
  81. package/esm2022/utils/focus/is-native-keyboard-focusable.mjs +1 -1
  82. package/esm2022/utils/focus/is-native-mouse-focusable.mjs +1 -1
  83. package/esm2022/utils/index.mjs +1 -1
  84. package/esm2022/utils/math/clamp.mjs +1 -1
  85. package/esm2022/utils/math/index.mjs +1 -1
  86. package/esm2022/utils/miscellaneous/array-remove.mjs +1 -1
  87. package/esm2022/utils/miscellaneous/index.mjs +1 -1
  88. package/esm2022/utils/miscellaneous/is-present.mjs +1 -1
  89. package/esm2022/utils/miscellaneous/move-item-in-array.mjs +1 -1
  90. package/esm2022/utils/miscellaneous/pure.mjs +1 -1
  91. package/esm2022/utils/miscellaneous/px.mjs +1 -1
  92. package/esm2022/utils/miscellaneous/with-styles.mjs +1 -1
  93. package/esm2022/utils/platform/index.mjs +1 -1
  94. package/esm2022/utils/platform/is-ios.mjs +1 -1
  95. package/esm2022/utils/token/create-token.mjs +1 -1
  96. package/esm2022/utils/token/index.mjs +1 -1
  97. package/esm2022/utils/token/provide.mjs +1 -1
  98. package/fesm2022/cuby-ui-cdk.mjs.map +1 -1
  99. package/package.json +1 -1
package/README.md CHANGED
@@ -1,392 +1,392 @@
1
- # Cuby UI - агентская документация (RU)
2
-
3
- Документ для кодовых агентов. Описывает публичный API пакета `@cuby-ui/cdk`, а также примеры использования.
4
-
5
- ## Оглавление
6
- - [CDK: директивы](#cdk-директивы)
7
- - [CDK: пайпы](#cdk-пайпы)
8
- - [CDK: сервисы](#cdk-сервисы)
9
- - [CDK: токены](#cdk-токены)
10
- - [CDK: интерфейсы и типы](#cdk-интерфейсы-и-типы)
11
- - [CDK: утилиты и константы](#cdk-утилиты-и-константы)
12
- - [Анти-паттерны](#анти-паттерны)
13
- - [Линт и форматирование](#линт-и-форматирование)
14
- - [Версии и совместимость](#версии-и-совместимость)
15
-
16
- ## CDK: директивы
17
-
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
- ```
26
-
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
- ```
38
-
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
- ```
48
-
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
- ```
58
-
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
- ```
69
-
70
- ### Feature: CuiFocusTrapDirective (`[cuiFocusTrap]`)
71
- Описание: запирает фокус внутри контейнера.
72
- Публичный API:
73
- - Standalone: да
74
- Пример:
75
- ```html
76
- <div cuiFocusTrap>
77
- <input />
78
- <button>OK</button>
79
- </div>
80
- ```
81
-
82
- ### Feature: CuiItemDirective (`[cuiItem]`)
83
- Описание: метка элемента коллекции, используется в `cui-breadcrumbs`.
84
- Публичный API:
85
- - Standalone: да
86
- Пример:
87
- ```html
88
- <a cuiBreadcrumb *cuiItem>Раздел</a>
89
- ```
90
-
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
- ```
101
-
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`)
1
+ # Cuby UI - агентская документация (RU)
2
+
3
+ Документ для кодовых агентов. Описывает публичный API пакета `@cuby-ui/cdk`, а также примеры использования.
4
+
5
+ ## Оглавление
6
+ - [CDK: директивы](#cdk-директивы)
7
+ - [CDK: пайпы](#cdk-пайпы)
8
+ - [CDK: сервисы](#cdk-сервисы)
9
+ - [CDK: токены](#cdk-токены)
10
+ - [CDK: интерфейсы и типы](#cdk-интерфейсы-и-типы)
11
+ - [CDK: утилиты и константы](#cdk-утилиты-и-константы)
12
+ - [Анти-паттерны](#анти-паттерны)
13
+ - [Линт и форматирование](#линт-и-форматирование)
14
+ - [Версии и совместимость](#версии-и-совместимость)
15
+
16
+ ## CDK: директивы
17
+
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
+ ```
26
+
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
+ ```
38
+
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
+ ```
48
+
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
+ ```
58
+
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
+ ```
69
+
70
+ ### Feature: CuiFocusTrapDirective (`[cuiFocusTrap]`)
71
+ Описание: запирает фокус внутри контейнера.
72
+ Публичный API:
73
+ - Standalone: да
74
+ Пример:
75
+ ```html
76
+ <div cuiFocusTrap>
77
+ <input />
78
+ <button>OK</button>
79
+ </div>
80
+ ```
81
+
82
+ ### Feature: CuiItemDirective (`[cuiItem]`)
83
+ Описание: метка элемента коллекции, используется в `cui-breadcrumbs`.
84
+ Публичный API:
85
+ - Standalone: да
86
+ Пример:
87
+ ```html
88
+ <a cuiBreadcrumb *cuiItem>Раздел</a>
89
+ ```
90
+
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
+ ```
101
+
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`)