@taiga-ui/addon-doc 2.22.0 → 2.26.0

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 (101) hide show
  1. package/README.md +7 -19
  2. package/bundles/taiga-ui-addon-doc.umd.js +809 -738
  3. package/bundles/taiga-ui-addon-doc.umd.js.map +1 -1
  4. package/bundles/taiga-ui-addon-doc.umd.min.js +2 -2
  5. package/bundles/taiga-ui-addon-doc.umd.min.js.map +1 -1
  6. package/components/code/code.component.d.ts +4 -1
  7. package/components/documentation/documentation-property-connector.directive.d.ts +3 -1
  8. package/components/example/example-get-tabs.pipe.d.ts +4 -0
  9. package/components/example/example.component.d.ts +4 -7
  10. package/components/navigation/navigation.component.d.ts +2 -1
  11. package/esm2015/addon-doc.module.js +1 -1
  12. package/esm2015/components/code/code.component.js +11 -4
  13. package/esm2015/components/code/code.module.js +1 -1
  14. package/esm2015/components/copy/copy.component.js +2 -2
  15. package/esm2015/components/copy/copy.module.js +1 -1
  16. package/esm2015/components/demo/demo.component.js +3 -3
  17. package/esm2015/components/demo/demo.module.js +1 -1
  18. package/esm2015/components/documentation/documentation-property-connector.directive.js +9 -2
  19. package/esm2015/components/documentation/documentation.component.js +9 -3
  20. package/esm2015/components/documentation/documentation.module.js +4 -3
  21. package/esm2015/components/example/example-get-tabs.pipe.js +12 -0
  22. package/esm2015/components/example/example.component.js +9 -27
  23. package/esm2015/components/example/example.module.js +4 -3
  24. package/esm2015/components/main/main.component.js +1 -1
  25. package/esm2015/components/main/main.module.js +1 -1
  26. package/esm2015/components/navigation/navigation.component.js +19 -16
  27. package/esm2015/components/navigation/navigation.module.js +1 -1
  28. package/esm2015/components/navigation/navigation.providers.js +1 -1
  29. package/esm2015/components/page/page.component.js +4 -4
  30. package/esm2015/components/page/page.module.js +2 -2
  31. package/esm2015/components/page/page.providers.js +1 -1
  32. package/esm2015/directives/scroll-into-view/scroll-into-view.module.js +1 -1
  33. package/esm2015/interfaces/page.js +1 -1
  34. package/esm2015/internal/header/header.component.js +3 -3
  35. package/esm2015/internal/header/header.module.js +1 -1
  36. package/esm2015/internal/input-opacity/input-opacity.module.js +1 -1
  37. package/esm2015/internal/see-also/see-also.component.js +2 -2
  38. package/esm2015/internal/see-also/see-also.module.js +1 -1
  39. package/esm2015/internal/source-code/source-code.component.js +2 -2
  40. package/esm2015/internal/source-code/source-code.module.js +1 -1
  41. package/esm2015/languages/russian.js +1 -1
  42. package/esm2015/public-api.js +5 -5
  43. package/esm2015/taiga-ui-addon-doc.js +12 -11
  44. package/esm2015/tokens/code-editor.js +1 -1
  45. package/esm2015/tokens/example-content-processor.js +2 -4
  46. package/esm2015/tokens/i18n.js +13 -5
  47. package/esm2015/tokens/pages.js +1 -1
  48. package/esm2015/tokens/source-code.js +1 -1
  49. package/esm2015/utils/raw-load-record.js +12 -0
  50. package/esm2015/utils/raw-load.js +7 -0
  51. package/esm5/addon-doc.module.js +1 -1
  52. package/esm5/components/code/code.component.js +15 -4
  53. package/esm5/components/code/code.module.js +1 -1
  54. package/esm5/components/copy/copy.component.js +2 -2
  55. package/esm5/components/copy/copy.module.js +1 -1
  56. package/esm5/components/demo/demo.component.js +3 -3
  57. package/esm5/components/demo/demo.module.js +1 -1
  58. package/esm5/components/documentation/documentation-property-connector.directive.js +9 -2
  59. package/esm5/components/documentation/documentation.component.js +9 -3
  60. package/esm5/components/documentation/documentation.module.js +4 -3
  61. package/esm5/components/example/example-get-tabs.pipe.js +15 -0
  62. package/esm5/components/example/example.component.js +10 -44
  63. package/esm5/components/example/example.module.js +4 -3
  64. package/esm5/components/main/main.component.js +1 -1
  65. package/esm5/components/main/main.module.js +1 -1
  66. package/esm5/components/navigation/navigation.component.js +19 -16
  67. package/esm5/components/navigation/navigation.module.js +1 -1
  68. package/esm5/components/navigation/navigation.providers.js +1 -1
  69. package/esm5/components/page/page.component.js +4 -4
  70. package/esm5/components/page/page.module.js +2 -2
  71. package/esm5/components/page/page.providers.js +1 -1
  72. package/esm5/directives/scroll-into-view/scroll-into-view.module.js +1 -1
  73. package/esm5/interfaces/page.js +1 -1
  74. package/esm5/internal/header/header.component.js +3 -3
  75. package/esm5/internal/header/header.module.js +1 -1
  76. package/esm5/internal/input-opacity/input-opacity.module.js +1 -1
  77. package/esm5/internal/see-also/see-also.component.js +2 -2
  78. package/esm5/internal/see-also/see-also.module.js +1 -1
  79. package/esm5/internal/source-code/source-code.component.js +2 -2
  80. package/esm5/internal/source-code/source-code.module.js +1 -1
  81. package/esm5/languages/russian.js +1 -1
  82. package/esm5/public-api.js +5 -5
  83. package/esm5/taiga-ui-addon-doc.js +12 -11
  84. package/esm5/tokens/code-editor.js +1 -1
  85. package/esm5/tokens/example-content-processor.js +2 -4
  86. package/esm5/tokens/i18n.js +13 -5
  87. package/esm5/tokens/pages.js +1 -1
  88. package/esm5/tokens/source-code.js +1 -1
  89. package/esm5/utils/raw-load-record.js +44 -0
  90. package/esm5/utils/raw-load.js +21 -0
  91. package/fesm2015/taiga-ui-addon-doc.js +725 -691
  92. package/fesm2015/taiga-ui-addon-doc.js.map +1 -1
  93. package/fesm5/taiga-ui-addon-doc.js +796 -725
  94. package/fesm5/taiga-ui-addon-doc.js.map +1 -1
  95. package/interfaces/page.d.ts +4 -0
  96. package/package.json +7 -6
  97. package/public-api.d.ts +4 -4
  98. package/taiga-ui-addon-doc.d.ts +11 -10
  99. package/taiga-ui-addon-doc.metadata.json +1 -1
  100. package/utils/raw-load-record.d.ts +2 -0
  101. package/utils/raw-load.d.ts +2 -0
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('ngx-highlightjs'), require('@taiga-ui/cdk'), require('@taiga-ui/kit'), require('rxjs'), require('rxjs/operators'), require('@taiga-ui/core'), require('@angular/forms'), require('@angular/router'), require('@angular/platform-browser'), require('@taiga-ui/addon-mobile'), require('@angular/cdk/clipboard'), require('@ng-web-apis/common'), require('@tinkoff/ng-polymorpheus')) :
3
- typeof define === 'function' && define.amd ? define('@taiga-ui/addon-doc', ['exports', '@angular/core', '@angular/common', 'ngx-highlightjs', '@taiga-ui/cdk', '@taiga-ui/kit', 'rxjs', 'rxjs/operators', '@taiga-ui/core', '@angular/forms', '@angular/router', '@angular/platform-browser', '@taiga-ui/addon-mobile', '@angular/cdk/clipboard', '@ng-web-apis/common', '@tinkoff/ng-polymorpheus'], factory) :
4
- (global = global || self, factory((global['taiga-ui'] = global['taiga-ui'] || {}, global['taiga-ui']['addon-doc'] = {}), global.ng.core, global.ng.common, global.ngxHighlightjs, global.cdk, global.kit, global.rxjs, global.rxjs.operators, global.core$1, global.ng.forms, global.ng.router, global.ng.platformBrowser, global.addonMobile, global.ng.cdk.clipboard, global.common$1, global.ngPolymorpheus));
5
- }(this, (function (exports, core, common, ngxHighlightjs, cdk, kit, rxjs, operators, core$1, forms, router, platformBrowser, addonMobile, clipboard, common$1, ngPolymorpheus) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/common'), require('ngx-highlightjs'), require('@taiga-ui/cdk'), require('@taiga-ui/kit'), require('@taiga-ui/core'), require('@angular/forms'), require('@angular/router'), require('@angular/animations'), require('@angular/cdk/clipboard'), require('@ng-web-apis/common'), require('@tinkoff/ng-polymorpheus'), require('@taiga-ui/addon-mobile'), require('@angular/platform-browser')) :
3
+ typeof define === 'function' && define.amd ? define('@taiga-ui/addon-doc', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/common', 'ngx-highlightjs', '@taiga-ui/cdk', '@taiga-ui/kit', '@taiga-ui/core', '@angular/forms', '@angular/router', '@angular/animations', '@angular/cdk/clipboard', '@ng-web-apis/common', '@tinkoff/ng-polymorpheus', '@taiga-ui/addon-mobile', '@angular/platform-browser'], factory) :
4
+ (global = global || self, factory((global['taiga-ui'] = global['taiga-ui'] || {}, global['taiga-ui']['addon-doc'] = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.ng.common, global.ngxHighlightjs, global.cdk, global.kit, global.core$1, global.ng.forms, global.ng.router, global.ng.animations, global.ng.cdk.clipboard, global.common$1, global.ngPolymorpheus, global.addonMobile, global.ng.platformBrowser));
5
+ }(this, (function (exports, core, rxjs, operators, common, ngxHighlightjs, cdk, kit, core$1, forms, router, animations, clipboard, common$1, ngPolymorpheus, addonMobile, platformBrowser) { 'use strict';
6
6
 
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation.
@@ -223,11 +223,39 @@
223
223
  return value;
224
224
  }
225
225
 
226
+ function rawLoad(content) {
227
+ return __awaiter(this, void 0, void 0, function () {
228
+ var _a;
229
+ return __generator(this, function (_b) {
230
+ switch (_b.label) {
231
+ case 0:
232
+ if (!(content instanceof Promise)) return [3 /*break*/, 2];
233
+ return [4 /*yield*/, content];
234
+ case 1:
235
+ _a = (_b.sent()).default;
236
+ return [3 /*break*/, 3];
237
+ case 2:
238
+ _a = content;
239
+ _b.label = 3;
240
+ case 3: return [2 /*return*/, _a];
241
+ }
242
+ });
243
+ });
244
+ }
245
+
226
246
  var TuiDocCodeComponent = /** @class */ (function () {
227
247
  function TuiDocCodeComponent() {
248
+ this.rawLoader$$ = new rxjs.BehaviorSubject('');
249
+ this.processor$ = this.rawLoader$$.pipe(operators.switchMap(rawLoad));
228
250
  this.filename = '';
229
- this.code = '';
230
251
  }
252
+ Object.defineProperty(TuiDocCodeComponent.prototype, "code", {
253
+ set: function (code) {
254
+ this.rawLoader$$.next(code);
255
+ },
256
+ enumerable: true,
257
+ configurable: true
258
+ });
231
259
  Object.defineProperty(TuiDocCodeComponent.prototype, "hasFilename", {
232
260
  get: function () {
233
261
  return !!this.filename;
@@ -240,14 +268,14 @@
240
268
  ], TuiDocCodeComponent.prototype, "filename", void 0);
241
269
  __decorate([
242
270
  core.Input()
243
- ], TuiDocCodeComponent.prototype, "code", void 0);
271
+ ], TuiDocCodeComponent.prototype, "code", null);
244
272
  __decorate([
245
273
  core.HostBinding('class._has-filename')
246
274
  ], TuiDocCodeComponent.prototype, "hasFilename", null);
247
275
  TuiDocCodeComponent = __decorate([
248
276
  core.Component({
249
277
  selector: 'tui-doc-code',
250
- template: "<p *ngIf=\"filename\" class=\"t-header\">{{filename}}</p>\n<pre class=\"t-code\"><code [lineNumbers]=\"true\" [highlight]=\"code\"></code></pre>\n",
278
+ template: "<p *ngIf=\"filename\" class=\"t-header\">{{filename}}</p>\n<pre\n class=\"t-code\"\n><code [lineNumbers]=\"true\" [highlight]=\"processor$ | async\"></code></pre>\n",
251
279
  styles: [":host{display:block}.t-header{font:var(--tui-font-text-s);font-weight:700}.t-code{margin:0}.hljs:not(:empty){font:var(--tui-font-text-m);padding:1.5rem 2rem;font-family:monospace;background:var(--tui-clear-disabled);word-wrap:break-word;white-space:pre-wrap}@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.hljs:not(:empty)::-webkit-scrollbar,.hljs:not(:empty)::-webkit-scrollbar-thumb{width:1rem;height:1rem;border-radius:6.25rem;background-clip:padding-box;border:6px solid transparent}.hljs:not(:empty)::-webkit-scrollbar{background-color:transparent}.hljs:not(:empty)::-webkit-scrollbar-thumb{background-color:var(--tui-clear-hover)}.hljs:not(:empty)::-webkit-scrollbar-thumb:hover{background-color:var(--tui-clear-active)}.hljs:not(:empty)::-webkit-scrollbar-thumb:active{background-color:var(--tui-text-03)}}:host._has-filename .hljs:not(:empty){border-radius:.75rem}@media screen and (max-width:47.9375em){.hljs:not(:empty){padding:1rem}}"]
252
280
  })
253
281
  ], TuiDocCodeComponent);
@@ -293,7 +321,7 @@
293
321
  TuiDocCopyComponent = __decorate([
294
322
  core.Component({
295
323
  selector: 'tui-doc-copy',
296
- template: "<button\n *ngIf=\"texts$ | async as texts\"\n tuiButton\n type=\"button\"\n class=\"t-copy\"\n appearance=\"\"\n size=\"s\"\n [title]=\"texts[0]\"\n (click)=\"onClick()\"\n>\n <span class=\"t-content\" [class.t-content_moved]=\"copied$ | async\">\n <span class=\"t-initial\" [attr.data-text]=\"texts[0]\">\n <ng-content></ng-content>\n </span>\n {{texts[1]}}\n </span>\n</button>\n",
324
+ template: "<button\n *ngIf=\"texts$ | async as texts\"\n tuiButton\n type=\"button\"\n appearance=\"\"\n size=\"s\"\n class=\"t-copy\"\n [title]=\"texts[0]\"\n (click)=\"onClick()\"\n>\n <span class=\"t-content\" [class.t-content_moved]=\"copied$ | async\">\n <span class=\"t-initial\" [attr.data-text]=\"texts[0]\">\n <ng-content></ng-content>\n </span>\n {{ texts[1] }}\n </span>\n</button>\n",
297
325
  changeDetection: core.ChangeDetectionStrategy.OnPush,
298
326
  providers: [cdk.TuiDestroyService],
299
327
  styles: [":host{position:relative;display:inline-block;vertical-align:middle}.t-copy{transition-property:background;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;width:100%;color:var(--tui-text-01);background:var(--tui-base-01);overflow:hidden}.t-copy:hover{background:var(--tui-base-02)}.t-initial{white-space:nowrap}.t-initial:empty:before{content:attr(data-text)}.t-content{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;display:flex;flex-direction:column;transform:translateY(1rem);text-align:center;line-height:2rem}.t-content_moved{transform:translateY(-1rem)}"]
@@ -323,7 +351,9 @@
323
351
  * Works with a tuple
324
352
  * [@string tuiMode tooltip content, @string word 'background', @string 'form value']
325
353
  */
326
- var TUI_DOC_DEMO_TEXTS = new core.InjectionToken('tui-doc-demo i18n texts', { factory: function () { return ['Read more more about modes: ', 'Background', 'Form value']; } });
354
+ var TUI_DOC_DEMO_TEXTS = new core.InjectionToken('tui-doc-demo i18n texts', {
355
+ factory: function () { return ['Read more more about modes: ', 'Background', 'Form value']; },
356
+ });
327
357
  /**
328
358
  * Works with a tuple
329
359
  * [
@@ -351,15 +381,21 @@
351
381
  * @string link to a sample copied message label
352
382
  * ]
353
383
  */
354
- var TUI_DOC_EXAMPLE_TEXTS = new core.InjectionToken('tui-doc-example i18n texts', { factory: function () { return ['Preview', 'Link to a sample was successfully copied', 'Done']; } });
384
+ var TUI_DOC_EXAMPLE_TEXTS = new core.InjectionToken('tui-doc-example i18n texts', {
385
+ factory: function () { return ['Preview', 'Link to a sample was successfully copied', 'Done']; },
386
+ });
355
387
  var TUI_DOC_MENU_TEXT = new core.InjectionToken('menu i18n text', {
356
388
  factory: function () { return 'Menu'; },
357
389
  });
358
390
  var TUI_DOC_SEARCH_TEXT = new core.InjectionToken('search i18n text', {
359
391
  factory: function () { return 'Search'; },
360
392
  });
361
- var TUI_DOC_SEE_ALSO_TEXT = new core.InjectionToken('tui-doc-see-also i18n text', { factory: function () { return 'See also'; } });
362
- var TUI_DOC_SOURCE_CODE_TEXT = new core.InjectionToken('tui-doc-source-code i18n text', { factory: function () { return 'Source code'; } });
393
+ var TUI_DOC_SEE_ALSO_TEXT = new core.InjectionToken('tui-doc-see-also i18n text', {
394
+ factory: function () { return 'See also'; },
395
+ });
396
+ var TUI_DOC_SOURCE_CODE_TEXT = new core.InjectionToken('tui-doc-source-code i18n text', {
397
+ factory: function () { return 'Source code'; },
398
+ });
363
399
 
364
400
  var MIN_COMPONENT_WIDTH = 104;
365
401
  // @dynamic
@@ -480,7 +516,7 @@
480
516
  TuiDocDemoComponent = TuiDocDemoComponent_1 = __decorate([
481
517
  core.Component({
482
518
  selector: 'tui-doc-demo',
483
- template: "<div class=\"t-bg-toggle\" [tuiMode]=\"null\">\n <ng-template #tooltip>\n {{texts[0]}}\n <a tuiLink tuiMode=\"onDark\" routerLink=\"/directives/mode\">\n <code>tuiMode</code>\n </a>\n </ng-template>\n <ng-container *ngIf=\"isMobile else desktop\">\n <tui-select\n class=\"t-mode\"\n tuiTextfieldSize=\"s\"\n [tuiTextfieldCleaner]=\"true\"\n [tuiHintContent]=\"tooltip\"\n [formControl]=\"modeControl\"\n >\n tuiMode\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"items\"\n ></tui-data-list-wrapper>\n </tui-select>\n </ng-container>\n <ng-template #desktop>\n tuiMode:\n <tui-tooltip describeId=\"form\" [content]=\"tooltip\"></tui-tooltip>\n <div tuiGroup class=\"tui-space_left-3\" [collapsed]=\"true\">\n <tui-radio-block\n class=\"tui-group__auto-width-item\"\n size=\"s\"\n nativeId=\"form\"\n [item]=\"null\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n null\n </tui-radio-block>\n <tui-radio-block\n class=\"tui-group__auto-width-item\"\n item=\"onDark\"\n size=\"s\"\n nativeId=\"form\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n onDark\n </tui-radio-block>\n <tui-radio-block\n class=\"tui-group__auto-width-item\"\n item=\"onLight\"\n size=\"s\"\n nativeId=\"form\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n onLight\n </tui-radio-block>\n </div>\n </ng-template>\n <tui-checkbox-labeled\n class=\"tui-space_left-3\"\n size=\"m\"\n [(ngModel)]=\"opaque\"\n >\n {{texts[1]}}\n </tui-checkbox-labeled>\n</div>\n<div\n #wrapper\n class=\"t-wrapper\"\n [class.t-wrapper_dark]=\"modeControl.value === 'onDark'\"\n [class.t-wrapper_gray]=\"modeControl.value === 'onLight'\"\n [class.t-wrapper_transparent]=\"!opaque\"\n>\n <div #content id=\"demoContent\" class=\"t-content\">\n <form *ngIf=\"testForm\" class=\"t-form\" [formGroup]=\"testForm\">\n <div class=\"t-input-wrapper\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n <button\n tuiButton\n type=\"button\"\n class=\"tui-space_top-3\"\n size=\"s\"\n [iconRight]=\"icon\"\n (click)=\"toggleDetails()\"\n >\n {{texts[2]}}\n </button>\n <ng-template #icon>\n <tui-svg\n src=\"tuiIconChevronDown\"\n class=\"t-icon\"\n [class.t-icon_rotated]=\"expanded\"\n ></tui-svg>\n </ng-template>\n <tui-expand class=\"t-expand\" [expanded]=\"expanded\">\n <ng-template tuiExpandContent>\n <pre class=\"t-value\">\nForm data: {{testForm.value | json}}</pre\n >\n <div tuiGroup class=\"tui-space_top-3\">\n <tui-select\n class=\"t-select\"\n tuiTextfieldSize=\"s\"\n [ngModel]=\"updateOn\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"updateOnChange($event)\"\n >\n updateOn\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"updateOnVariants\"\n ></tui-data-list-wrapper>\n </tui-select>\n <button\n tuiButton\n class=\"tui-group__auto-width-item\"\n type=\"reset\"\n size=\"s\"\n >\n Reset\n </button>\n <button\n tuiButton\n class=\"tui-group__auto-width-item\"\n type=\"submit\"\n size=\"s\"\n >\n Submit\n </button>\n </div>\n </ng-template>\n </tui-expand>\n </form>\n <ng-content></ng-content>\n </div>\n <button\n class=\"t-resizer\"\n tabindex=\"-1\"\n (tuiDragStart)=\"onDragStart($event)\"\n (tuiDragContinues)=\"onDragContinues($event)\"\n (tuiDragEnd)=\"onDragEnd()\"\n >\n <span #resizerText class=\"t-resizer-text\"></span>\n </button>\n</div>\n",
519
+ template: "<div class=\"t-bg-toggle\" [tuiMode]=\"null\">\n <ng-template #tooltip>\n {{ texts[0] }}\n <a tuiLink tuiMode=\"onDark\" routerLink=\"/directives/mode\">\n <code>tuiMode</code>\n </a>\n </ng-template>\n <ng-container *ngIf=\"isMobile; else desktop\">\n <tui-select\n tuiTextfieldSize=\"s\"\n class=\"t-mode\"\n [tuiTextfieldCleaner]=\"true\"\n [tuiHintContent]=\"tooltip\"\n [formControl]=\"modeControl\"\n >\n tuiMode\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"items\"\n ></tui-data-list-wrapper>\n </tui-select>\n </ng-container>\n <ng-template #desktop>\n tuiMode:\n <tui-tooltip describeId=\"form\" [content]=\"tooltip\"></tui-tooltip>\n <div tuiGroup class=\"tui-space_left-3\" [collapsed]=\"true\">\n <tui-radio-block\n size=\"s\"\n nativeId=\"form\"\n class=\"tui-group__auto-width-item\"\n [item]=\"null\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n null\n </tui-radio-block>\n <tui-radio-block\n item=\"onDark\"\n size=\"s\"\n nativeId=\"form\"\n class=\"tui-group__auto-width-item\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n onDark\n </tui-radio-block>\n <tui-radio-block\n item=\"onLight\"\n size=\"s\"\n nativeId=\"form\"\n class=\"tui-group__auto-width-item\"\n [hideRadio]=\"true\"\n [formControl]=\"modeControl\"\n >\n onLight\n </tui-radio-block>\n </div>\n </ng-template>\n <tui-checkbox-labeled\n size=\"m\"\n class=\"tui-space_left-3\"\n [(ngModel)]=\"opaque\"\n >\n {{ texts[1] }}\n </tui-checkbox-labeled>\n</div>\n<div\n #wrapper\n class=\"t-wrapper\"\n [class.t-wrapper_dark]=\"modeControl.value === 'onDark'\"\n [class.t-wrapper_gray]=\"modeControl.value === 'onLight'\"\n [class.t-wrapper_transparent]=\"!opaque\"\n>\n <div #content id=\"demoContent\" class=\"t-content\">\n <form *ngIf=\"testForm\" class=\"t-form\" [formGroup]=\"testForm\">\n <div class=\"t-input-wrapper\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n <button\n tuiButton\n type=\"button\"\n size=\"s\"\n class=\"tui-space_top-3\"\n [iconRight]=\"icon\"\n (click)=\"toggleDetails()\"\n >\n {{ texts[2] }}\n </button>\n <ng-template #icon>\n <tui-svg\n src=\"tuiIconChevronDown\"\n class=\"t-icon\"\n [class.t-icon_rotated]=\"expanded\"\n ></tui-svg>\n </ng-template>\n <tui-expand class=\"t-expand\" [expanded]=\"expanded\">\n <ng-template tuiExpandContent>\n <pre class=\"t-value\">\nForm data: {{ testForm.value | json }}</pre\n >\n <div tuiGroup class=\"tui-space_top-3\">\n <tui-select\n tuiTextfieldSize=\"s\"\n class=\"t-select\"\n [ngModel]=\"updateOn\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"updateOnChange($event)\"\n >\n updateOn\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"updateOnVariants\"\n ></tui-data-list-wrapper>\n </tui-select>\n <button\n tuiButton\n type=\"reset\"\n size=\"s\"\n class=\"tui-group__auto-width-item\"\n >\n Reset\n </button>\n <button\n tuiButton\n type=\"submit\"\n size=\"s\"\n class=\"tui-group__auto-width-item\"\n >\n Submit\n </button>\n </div>\n </ng-template>\n </tui-expand>\n </form>\n <ng-content></ng-content>\n </div>\n <button\n tabindex=\"-1\"\n class=\"t-resizer\"\n (tuiDragStart)=\"onDragStart($event)\"\n (tuiDragContinues)=\"onDragContinues($event)\"\n (tuiDragEnd)=\"onDragEnd()\"\n >\n <span #resizerText class=\"t-resizer-text\"></span>\n </button>\n</div>\n",
484
520
  changeDetection: core.ChangeDetectionStrategy.OnPush,
485
521
  providers: [
486
522
  cdk.TuiDestroyService,
@@ -489,7 +525,7 @@
489
525
  useExisting: core.forwardRef(function () { return TuiDocDemoComponent_1; }),
490
526
  },
491
527
  ],
492
- styles: [":host{position:relative;display:block;min-width:100%;margin:1.5rem 0}.t-bg-toggle{position:absolute;bottom:calc(100% + .75rem);display:flex;align-items:center;justify-content:flex-end;pointer-events:none;width:100%}.t-bg-toggle>*{pointer-events:auto}.t-wrapper{box-shadow:0 .5rem 1rem rgba(0,0,0,.16);display:flex;border:1px solid var(--tui-base-03);border-radius:var(--tui-radius-m);max-width:100%;min-height:6rem;width:100%;background-color:var(--tui-base-01);overflow:hidden}.t-wrapper.wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-base-02) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-base-02) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-base-02) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-base-02) 75%);background-size:1.25rem 1.25rem;background-position:0 0,0 .625rem,.625rem -.625rem,-.625rem 0}.t-wrapper.wrapper_dark{background-color:#454e58;color:var(--tui-base-01)}.t-wrapper.wrapper_gray{background-color:#e5e7ea}.t-wrapper.wrapper_dark.wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-focus) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-focus) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-focus) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-focus) 75%)}.t-wrapper.wrapper_gray.wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-base-05) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-base-05) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-base-05) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-base-05) 75%)}.t-content{flex:1 1 0;min-width:0;padding:1.5rem;box-sizing:border-box;overflow:hidden}@media screen and (max-width:47.9375em){.t-wrapper{min-height:auto}.t-content{padding:1rem}}.t-form{display:flex;flex-wrap:wrap;align-items:flex-start}.t-input-wrapper{width:100%;margin-bottom:.5rem}.t-expand{width:100%}.t-icon{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out}.t-icon_rotated{transform:rotate(180deg)}.t-value{flex:1;background:var(--tui-clear-inverse);padding:.75rem;border-radius:.25rem}.t-mode{width:12.5rem}.t-select{max-width:15rem}.t-resizer{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;border:0;background:0 0;font-size:inherit;line-height:inherit;box-shadow:0 .5rem 1rem rgba(0,0,0,.16);position:relative;width:3.5rem;min-height:inherit;flex-shrink:0;border-left:1px solid var(--tui-base-03);cursor:col-resize;outline:0;background:var(--tui-base-01);color:var(--tui-text-01)}.t-resizer:after,.t-resizer:before{content:'';position:absolute;top:.75rem;left:50%;bottom:.75rem;width:1px;background:var(--tui-base-05)}.t-resizer:before{transform:translateX(.125rem)}.t-resizer:after{transform:translateX(-.1875rem)}@media screen and (max-width:47.9375em){.t-resizer{display:none}}.t-resizer-text{font:var(--tui-font-text-s);position:relative;z-index:1;padding:.75rem;background:var(--tui-base-01)}.wrapper_light .t-resizer-text{background:#3e464e}@supports (position:sticky){@media screen and (min-height:37.5rem){:host{position:sticky;top:4.625rem;z-index:2}}}"]
528
+ styles: [":host{position:relative;display:block;min-width:100%;margin:1.5rem 0}.t-bg-toggle{position:absolute;bottom:calc(100% + .75rem);display:flex;align-items:center;justify-content:flex-end;pointer-events:none;width:100%}.t-bg-toggle>*{pointer-events:auto}.t-wrapper{box-shadow:0 .5rem 1rem rgba(0,0,0,.16);display:flex;border:1px solid var(--tui-base-03);border-radius:var(--tui-radius-m);max-width:100%;min-height:6rem;width:100%;background-color:var(--tui-base-01);overflow:hidden}.t-wrapper.t-wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-base-02) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-base-02) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-base-02) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-base-02) 75%);background-size:1.25rem 1.25rem;background-position:0 0,0 .625rem,.625rem -.625rem,-.625rem 0}.t-wrapper.t-wrapper_dark{background-color:#454e58;color:var(--tui-base-01)}.t-wrapper.t-wrapper_gray{background-color:#e5e7ea}.t-wrapper.t-wrapper_dark.t-wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-focus) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-focus) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-focus) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-focus) 75%)}.t-wrapper.t-wrapper_gray.t-wrapper_transparent{background-image:linear-gradient(45deg,var(--tui-base-05) 25%,transparent 25%),linear-gradient(-45deg,var(--tui-base-05) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--tui-base-05) 75%),linear-gradient(-45deg,transparent 75%,var(--tui-base-05) 75%)}.t-content{flex:1 1 0;min-width:0;padding:1.5rem;box-sizing:border-box;overflow:hidden}@media screen and (max-width:47.9375em){.t-wrapper{min-height:auto}.t-content{padding:1rem}}.t-form{display:flex;flex-wrap:wrap;align-items:flex-start}.t-input-wrapper{width:100%;margin-bottom:.5rem}.t-expand{width:100%}.t-icon{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out}.t-icon_rotated{transform:rotate(180deg)}.t-value{flex:1;background:var(--tui-clear-inverse);padding:.75rem;border-radius:.25rem}.t-mode{width:12.5rem}.t-select{max-width:15rem}.t-resizer{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;border:0;background:0 0;font-size:inherit;line-height:inherit;box-shadow:0 .5rem 1rem rgba(0,0,0,.16);position:relative;width:3.5rem;min-height:inherit;flex-shrink:0;border-left:1px solid var(--tui-base-03);cursor:col-resize;outline:0;background:var(--tui-base-01);color:var(--tui-text-01)}.t-resizer:after,.t-resizer:before{content:'';position:absolute;top:.75rem;left:50%;bottom:.75rem;width:1px;background:var(--tui-base-05)}.t-resizer:before{transform:translateX(.125rem)}.t-resizer:after{transform:translateX(-.1875rem)}@media screen and (max-width:47.9375em){.t-resizer{display:none}}.t-resizer-text{font:var(--tui-font-text-s);position:relative;z-index:1;padding:.75rem;background:var(--tui-base-01)}.wrapper_light .t-resizer-text{background:#3e464e}@supports (position:sticky){@media screen and (min-height:37.5rem){:host{position:sticky;top:4.625rem;z-index:2}}}"]
493
529
  }),
494
530
  __param(0, core.Inject(cdk.TUI_IS_MOBILE)),
495
531
  __param(1, core.Inject(cdk.TuiDestroyService)),
@@ -535,497 +571,138 @@
535
571
  return TuiDocDemoModule;
536
572
  }());
537
573
 
538
- var MAP = {
539
- а: 'f',
540
- б: ',',
541
- в: 'd',
542
- г: 'u',
543
- д: 'l',
544
- е: 't',
545
- ё: '`',
546
- ж: ';',
547
- з: 'p',
548
- и: 'b',
549
- й: 'q',
550
- к: 'r',
551
- л: 'k',
552
- м: 'v',
553
- н: 'y',
554
- о: 'j',
555
- п: 'g',
556
- р: 'h',
557
- с: 'c',
558
- т: 'n',
559
- у: 'e',
560
- ф: 'a',
561
- х: '[',
562
- ц: 'w',
563
- ч: 'x',
564
- ш: 'i',
565
- щ: 'o',
566
- ъ: ']',
567
- ы: 's',
568
- ь: 'm',
569
- ю: '.',
570
- я: 'z',
571
- };
572
- /**
573
- * Translates text mistakenly typed in the Russian layout into English
574
- * @param string string with Russian layout characters
575
- * @return string with English layout characters
576
- */
577
- function transliterateKeyboardLayout(string) {
578
- var newStr = '';
579
- for (var i = 0; i < string.length; i++) {
580
- newStr += string.charAt(i) in MAP ? MAP[string.charAt(i)] : string.charAt(i);
581
- }
582
- return newStr;
574
+ function rgbToHex(r, g, b) {
575
+ return ('#' +
576
+ [r, g, b]
577
+ .map(function (x) {
578
+ var hex = x.toString(16);
579
+ return hex.length === 1 ? '0' + hex : hex;
580
+ })
581
+ .join(''));
582
+ }
583
+ function hexToRgb(hex) {
584
+ var matches = hex
585
+ .replace('#', '')
586
+ .split('')
587
+ .map(function (char, _, array) { return (array.length === 3 ? char + char : char); })
588
+ .join('')
589
+ .match(/.{2}/g);
590
+ return matches
591
+ ? matches.map(function (x) { return Number.parseInt(x, 16); })
592
+ : [0, 0, 0];
583
593
  }
584
594
 
585
- var TUI_DOC_PAGES = new core.InjectionToken('Documentation pages', {
586
- factory: function () { return []; },
587
- });
588
-
589
- var TUI_DOC_TITLE = new core.InjectionToken('Page title', {
590
- factory: function () { return ''; },
591
- });
592
-
593
- var NAVIGATION_TITLE = new core.InjectionToken('Page title');
594
- var NAVIGATION_LABELS = new core.InjectionToken('Navigation sections labels for search');
595
- var NAVIGATION_ITEMS = new core.InjectionToken('Navigation pages');
596
- var NAVIGATION_PROVIDERS = [
597
- cdk.TuiDestroyService,
598
- {
599
- provide: NAVIGATION_TITLE,
600
- deps: [router.Router, router.ActivatedRoute, TUI_DOC_TITLE, cdk.TuiDestroyService],
601
- useFactory: titleProviderFactory,
602
- },
603
- {
604
- provide: NAVIGATION_LABELS,
605
- deps: [TUI_DOC_PAGES],
606
- useFactory: labelsProviderFactory,
607
- },
608
- {
609
- provide: NAVIGATION_ITEMS,
610
- deps: [TUI_DOC_PAGES],
611
- useFactory: itemsProviderFactory,
612
- },
613
- ];
614
- function titleProviderFactory(router$1, activatedRoute, titlePrefix, destroy$) {
615
- return router$1.events.pipe(operators.filter(function (event) { return event instanceof router.NavigationEnd; }), operators.map(function () { return activatedRoute.firstChild; }), operators.filter(cdk.isPresent), operators.mergeMap(function (_a) {
616
- var data = _a.data;
617
- return data;
618
- }), operators.map(function (_a) {
619
- var title = _a.title;
620
- return titlePrefix + title;
621
- }), operators.takeUntil(destroy$));
595
+ function inspectArray(array, depth) {
596
+ if (depth === 0) {
597
+ return '[…]';
598
+ }
599
+ var result = '';
600
+ var first = true;
601
+ for (var index = 0; index < array.length; index++) {
602
+ if (first) {
603
+ first = false;
604
+ }
605
+ else {
606
+ result += ', ';
607
+ }
608
+ result += index in array ? inspectAny(array[index], depth - 1) : 'empty';
609
+ }
610
+ return "[" + result + "]";
622
611
  }
623
- function labelsProviderFactory(pages) {
624
- return pages
625
- .map(function (_a) {
626
- var section = _a.section;
627
- return section;
628
- })
629
- .filter(cdk.isPresent)
630
- .filter(function (item, index, array) { return array.indexOf(item) === index; });
612
+ function inspectObject(object, depth) {
613
+ if (depth === 0) {
614
+ return "{\u2026}";
615
+ }
616
+ var result = '';
617
+ var first = true;
618
+ for (var key in object) {
619
+ if (!object.hasOwnProperty(key)) {
620
+ continue;
621
+ }
622
+ if (first) {
623
+ first = false;
624
+ }
625
+ else {
626
+ result += ', ';
627
+ }
628
+ result += key + ": " + inspectAny(object[key], depth - 1);
629
+ }
630
+ return "{" + result + "}";
631
631
  }
632
- function itemsProviderFactory(pages) {
633
- var labels = labelsProviderFactory(pages);
634
- return __spread(labels.map(function (label) { return pages.filter(function (_a) {
635
- var section = _a.section;
636
- return section === label;
637
- }); }), [
638
- pages.filter(function (page) { return !page.section; }),
639
- ]);
632
+ // @bad TODO add more types
633
+ /**
634
+ * Returns readable JS entity
635
+ * @param data
636
+ * @param depth
637
+ * @return readable JS entity
638
+ */
639
+ function inspectAny(data, depth) {
640
+ if (data === null) {
641
+ return 'null';
642
+ }
643
+ switch (typeof data) {
644
+ case 'string':
645
+ return "'" + data + "'";
646
+ case 'undefined':
647
+ case 'number':
648
+ case 'boolean':
649
+ case 'function':
650
+ return String(data);
651
+ }
652
+ if (data instanceof RegExp) {
653
+ return data.toString();
654
+ }
655
+ if (Array.isArray(data)) {
656
+ return inspectArray(data, depth);
657
+ }
658
+ return inspectObject(data, depth);
640
659
  }
641
660
 
642
- var SCROLL_INTO_VIEW_DELAY = 200;
643
- // @dynamic
644
- var TuiDocNavigationComponent = /** @class */ (function () {
645
- function TuiDocNavigationComponent(titleService, title$, documentRef, mode, sidebar, labels, items, searchText, router, activatedRoute) {
646
- var _this = this;
647
- this.documentRef = documentRef;
648
- this.mode = mode;
649
- this.sidebar = sidebar;
650
- this.labels = labels;
651
- this.items = items;
652
- this.searchText = searchText;
653
- this.router = router;
661
+ var SERIALIZED_SUFFIX = '$';
662
+ // @bad TODO: refactor output and value sync
663
+ var TuiDocDocumentationPropertyConnectorDirective = /** @class */ (function () {
664
+ function TuiDocDocumentationPropertyConnectorDirective(template, locationRef, activatedRoute, urlSerializer) {
665
+ this.template = template;
666
+ this.locationRef = locationRef;
654
667
  this.activatedRoute = activatedRoute;
655
- this.search = '';
656
- this.open = false;
657
- this.openPagesArr = [];
658
- this.openPagesGroupsArr = [];
659
- this.active = '';
660
- this.menuOpen = false;
661
- this.mode$ = this.mode.change$.pipe(operators.startWith(null), operators.map(function () { return _this.mode.mode || 'onLight'; }));
662
- // Angular can't navigate no anchor links
663
- // https://stackoverflow.com/questions/36101756/angular2-routing-with-hashtag-to-page-anchor
664
- title$.subscribe(function (title) {
665
- titleService.setTitle(title);
666
- _this.openActivePageGroup();
667
- _this.handleAnchorLink(_this.activatedRoute.snapshot.fragment);
668
- });
668
+ this.urlSerializer = urlSerializer;
669
+ this.documentationPropertyName = '';
670
+ this.documentationPropertyMode = null;
671
+ this.documentationPropertyType = '';
672
+ this.documentationPropertyValue = null;
673
+ this.documentationPropertyDeprecated = false;
674
+ this.documentationPropertyValues = null;
675
+ this.documentationPropertyValueChange = new core.EventEmitter();
676
+ this.changed$ = new rxjs.Subject();
677
+ this.emits$ = new rxjs.BehaviorSubject(1);
669
678
  }
670
- Object.defineProperty(TuiDocNavigationComponent.prototype, "canOpen", {
679
+ TuiDocDocumentationPropertyConnectorDirective.prototype.ngOnInit = function () {
680
+ this.parseParams(this.activatedRoute.snapshot.queryParams);
681
+ };
682
+ Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "attrName", {
671
683
  get: function () {
672
- return this.search.length > 2;
684
+ switch (this.documentationPropertyMode) {
685
+ case 'input':
686
+ return "[" + this.documentationPropertyName + "]";
687
+ case 'output':
688
+ return "(" + this.documentationPropertyName + ")";
689
+ case 'input-output':
690
+ return "[(" + this.documentationPropertyName + ")]";
691
+ default:
692
+ return this.documentationPropertyName;
693
+ }
673
694
  },
674
695
  enumerable: true,
675
696
  configurable: true
676
697
  });
677
- Object.defineProperty(TuiDocNavigationComponent.prototype, "filteredItems", {
698
+ Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "hasItems", {
678
699
  get: function () {
679
- return this.filterItems(this.flattenSubPages(this.items), this.search);
700
+ return !!this.documentationPropertyValues;
680
701
  },
681
702
  enumerable: true,
682
703
  configurable: true
683
704
  });
684
- Object.defineProperty(TuiDocNavigationComponent.prototype, "itemsWithoutSections", {
685
- get: function () {
686
- return this.items[this.items.length - 1];
687
- },
688
- enumerable: true,
689
- configurable: true
690
- });
691
- TuiDocNavigationComponent.prototype.isActive = function (route) {
692
- return route === this.active;
693
- };
694
- TuiDocNavigationComponent.prototype.onGroupClick = function (index) {
695
- this.openPagesGroupsArr[index] = !this.openPagesGroupsArr[index];
696
- };
697
- TuiDocNavigationComponent.prototype.closeMenu = function () {
698
- this.menuOpen = false;
699
- };
700
- TuiDocNavigationComponent.prototype.onSearchChange = function (search) {
701
- this.search = search;
702
- this.open = this.canOpen;
703
- };
704
- TuiDocNavigationComponent.prototype.onClick = function () {
705
- this.open = false;
706
- this.menuOpen = false;
707
- this.search = '';
708
- this.openActivePageGroup();
709
- };
710
- TuiDocNavigationComponent.prototype.filterItems = function (items, search) {
711
- return items.map(function (section) {
712
- return cdk.uniqBy(section.filter(function (_a) {
713
- var title = _a.title, _b = _a.keywords, keywords = _b === void 0 ? '' : _b;
714
- title = title.toLowerCase();
715
- search = search.toLowerCase();
716
- keywords = keywords.toLowerCase();
717
- return (title.includes(search) ||
718
- keywords.includes(search) ||
719
- title.includes(transliterateKeyboardLayout(search)) ||
720
- keywords.includes(transliterateKeyboardLayout(search)) ||
721
- search.replace(/-/gi, '').includes(title));
722
- }), 'title');
723
- });
724
- };
725
- TuiDocNavigationComponent.prototype.flattenSubPages = function (items) {
726
- return items.reduce(function (array, item) { return __spread(array, [
727
- item.reduce(function (pages, page) {
728
- return 'subPages' in page
729
- ? __spread(pages, page.subPages) : __spread(pages, [page]);
730
- }, []),
731
- ]); }, []);
732
- };
733
- TuiDocNavigationComponent.prototype.isActiveRoute = function (route) {
734
- return this.router.isActive(route, false);
735
- };
736
- TuiDocNavigationComponent.prototype.handleAnchorLink = function (hash) {
737
- var _this = this;
738
- setTimeout(function () {
739
- _this.navigateToAnchorLink(hash);
740
- }, SCROLL_INTO_VIEW_DELAY);
741
- };
742
- TuiDocNavigationComponent.prototype.openActivePageGroup = function () {
743
- var _this = this;
744
- this.items.forEach(function (pages, pagesIndex) {
745
- pages.forEach(function (page, pageIndex) {
746
- if ('route' in page && _this.isActiveRoute(page.route)) {
747
- _this.openPagesArr[pagesIndex] = true;
748
- _this.active = page.route;
749
- }
750
- if ('subPages' in page) {
751
- page.subPages.forEach(function (subPage) {
752
- if (_this.isActiveRoute(subPage.route)) {
753
- _this.openPagesArr[pagesIndex] = true;
754
- _this.openPagesGroupsArr[pagesIndex * 100 + pageIndex] = true;
755
- _this.active = subPage.route;
756
- }
757
- });
758
- }
759
- });
760
- });
761
- };
762
- TuiDocNavigationComponent.prototype.navigateToAnchorLink = function (fragment) {
763
- var element = fragment && this.documentRef.querySelector("#" + fragment);
764
- if (!element) {
765
- return;
766
- }
767
- element.classList.add('tui-doc-animated-example');
768
- element.scrollIntoView({
769
- block: 'start',
770
- inline: 'nearest',
771
- behavior: 'smooth',
772
- });
773
- };
774
- TuiDocNavigationComponent.ctorParameters = function () { return [
775
- { type: platformBrowser.Title, decorators: [{ type: core.Inject, args: [platformBrowser.Title,] }] },
776
- { type: rxjs.Observable, decorators: [{ type: core.Inject, args: [NAVIGATION_TITLE,] }] },
777
- { type: Document, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] },
778
- { type: core$1.TuiModeDirective, decorators: [{ type: core.Inject, args: [core$1.TuiModeDirective,] }] },
779
- { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [addonMobile.TuiSidebarDirective,] }] },
780
- { type: Array, decorators: [{ type: core.Inject, args: [NAVIGATION_LABELS,] }] },
781
- { type: undefined, decorators: [{ type: core.Inject, args: [NAVIGATION_ITEMS,] }] },
782
- { type: String, decorators: [{ type: core.Inject, args: [TUI_DOC_SEARCH_TEXT,] }] },
783
- { type: router.Router, decorators: [{ type: core.Inject, args: [router.Router,] }] },
784
- { type: router.ActivatedRoute, decorators: [{ type: core.Inject, args: [router.ActivatedRoute,] }] }
785
- ]; };
786
- __decorate([
787
- core.HostBinding('class._open')
788
- ], TuiDocNavigationComponent.prototype, "menuOpen", void 0);
789
- __decorate([
790
- cdk.tuiPure
791
- ], TuiDocNavigationComponent.prototype, "filterItems", null);
792
- __decorate([
793
- cdk.tuiPure
794
- ], TuiDocNavigationComponent.prototype, "flattenSubPages", null);
795
- TuiDocNavigationComponent = __decorate([
796
- core.Component({
797
- selector: 'tui-doc-navigation',
798
- template: "<tui-hosted-dropdown\n *tuiLet=\"filteredItems as filtered\"\n class=\"input\"\n tuiAutoFocus\n tuiDropdownLimitWidth=\"fixed\"\n [autoFocus]=\"!!sidebar\"\n [content]=\"dropdown\"\n [canOpen]=\"canOpen\"\n [(open)]=\"open\"\n>\n <tui-primitive-textfield\n iconAlign=\"left\"\n tuiTextfieldSize=\"m\"\n iconContent=\"tuiIconSearch\"\n [pseudoFocused]=\"open || null\"\n [tuiTextfieldCleaner]=\"true\"\n [tuiTextfieldLabelOutside]=\"true\"\n [value]=\"search\"\n (valueChange)=\"onSearchChange($event)\"\n >\n {{searchText}}\n </tui-primitive-textfield>\n <ng-template #dropdown let-activeZone>\n <tui-data-list>\n <tui-opt-group\n *ngFor=\"let group of filtered; let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <a\n *ngFor=\"let item of group\"\n tuiOption\n [routerLink]=\"item.route\"\n (click)=\"onClick()\"\n >\n {{item.title}}\n </a>\n </tui-opt-group>\n </tui-data-list>\n </ng-template>\n</tui-hosted-dropdown>\n\n<nav class=\"navigation\">\n <tui-scrollbar [tuiMode]=\"mode$ | async\" class=\"scrollbar\">\n <tui-accordion [closeOthers]=\"false\" [rounded]=\"false\">\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [(open)]=\"!!openPagesArr[index]\"\n >\n <span class=\"tui-space_left-2\">\n <strong>{{label}}</strong>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"pages; context: {item: item, index: (index * 100) + subIndex}\"\n >\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n >\n <ng-container\n *ngTemplateOutlet=\"pages; context: {item: item, index: (items.length - 1) + index}\"\n >\n </ng-container>\n </ng-container>\n </div>\n\n <ng-template #pages let-item=\"item\" let-index=\"index\">\n <a\n *ngIf=\"!item.subPages; else subPages\"\n tuiLink\n class=\"sublink\"\n routerLinkActive=\"sublink_active\"\n [routerLink]=\"item.route\"\n [scrollIntoView]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{item.title}}\n </a>\n <ng-template #subPages>\n <div\n routerLinkActive\n class=\"subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"sublink sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-svg\n src=\"tuiIconChevronRight\"\n class=\"chevron\"\n [class.chevron_active]=\"!!openPagesGroupsArr[index]\"\n ></tui-svg>\n {{item.title}}\n </button>\n <tui-expand\n class=\"tui-space_left-1\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"section section_bordered\">\n <a\n *ngFor=\"let subPage of item.subPages\"\n tuiLink\n class=\"sublink sublink_small\"\n routerLinkActive=\"sublink_active\"\n [routerLink]=\"subPage.route\"\n [scrollIntoView]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{subPage.title}}\n </a>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content></ng-content>\n",
799
- providers: NAVIGATION_PROVIDERS,
800
- changeDetection: core.ChangeDetectionStrategy.OnPush,
801
- styles: [":host{display:flex;flex-direction:column;text-align:center;background:var(--tui-base-01);z-index:1}.input{display:block;margin:1.25rem}.navigation{display:flex;max-height:100%;min-height:0;flex:1 1 0;text-align:left}.scrollbar{width:100%;scroll-behavior:smooth}.items-container{display:flex;flex-direction:column;padding:0 16px}.section{display:flex;flex-direction:column;align-items:flex-start;margin:-1rem 0 -.5rem}.section_bordered{margin:.5rem 0;border-left:1px solid var(--tui-base-03)}.subsection{margin-left:.5rem}.sublink{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;border:0;background:0 0;font-size:inherit;font:var(--tui-font-text-m);margin-left:.5rem;line-height:2.75rem}.sublink_small{margin-left:1rem;line-height:1.5rem}.sublink_small:not(:first-child){margin-top:1rem}.sublink_subsection{margin-left:0;line-height:2.75rem}.sublink_active{color:var(--tui-text-01)}.chevron{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;width:1rem;height:1rem;margin:-.25rem .25rem 0 -.1875rem}.chevron_active{transform:rotate(90deg)}"]
802
- }),
803
- __param(0, core.Inject(platformBrowser.Title)),
804
- __param(1, core.Inject(NAVIGATION_TITLE)),
805
- __param(2, core.Inject(common.DOCUMENT)),
806
- __param(3, core.Inject(core$1.TuiModeDirective)),
807
- __param(4, core.Optional()),
808
- __param(4, core.Inject(addonMobile.TuiSidebarDirective)),
809
- __param(5, core.Inject(NAVIGATION_LABELS)),
810
- __param(6, core.Inject(NAVIGATION_ITEMS)),
811
- __param(7, core.Inject(TUI_DOC_SEARCH_TEXT)),
812
- __param(8, core.Inject(router.Router)),
813
- __param(9, core.Inject(router.ActivatedRoute))
814
- ], TuiDocNavigationComponent);
815
- return TuiDocNavigationComponent;
816
- }());
817
-
818
- var ScrollIntoViewDirective = /** @class */ (function () {
819
- function ScrollIntoViewDirective(destroy$, _a) {
820
- var nativeElement = _a.nativeElement;
821
- this.scroll$ = new rxjs.Subject();
822
- this.scroll$
823
- .pipe(operators.debounceTime(750), operators.filter(function (shallWe) { return shallWe && !!cdk.getElementObscurers(nativeElement); }), operators.takeUntil(destroy$))
824
- .subscribe(function () {
825
- nativeElement.scrollIntoView();
826
- });
827
- }
828
- Object.defineProperty(ScrollIntoViewDirective.prototype, "scrollIntoView", {
829
- set: function (shallWe) {
830
- this.scroll$.next(shallWe);
831
- },
832
- enumerable: true,
833
- configurable: true
834
- });
835
- ScrollIntoViewDirective.ctorParameters = function () { return [
836
- { type: cdk.TuiDestroyService, decorators: [{ type: core.Inject, args: [cdk.TuiDestroyService,] }] },
837
- { type: core.ElementRef, decorators: [{ type: core.Inject, args: [core.ElementRef,] }] }
838
- ]; };
839
- __decorate([
840
- core.Input()
841
- ], ScrollIntoViewDirective.prototype, "scrollIntoView", null);
842
- ScrollIntoViewDirective = __decorate([
843
- core.Directive({
844
- selector: '[scrollIntoView]',
845
- providers: [cdk.TuiDestroyService],
846
- }),
847
- __param(0, core.Inject(cdk.TuiDestroyService)),
848
- __param(1, core.Inject(core.ElementRef))
849
- ], ScrollIntoViewDirective);
850
- return ScrollIntoViewDirective;
851
- }());
852
-
853
- var ScrollIntoViewModule = /** @class */ (function () {
854
- function ScrollIntoViewModule() {
855
- }
856
- ScrollIntoViewModule = __decorate([
857
- core.NgModule({
858
- declarations: [ScrollIntoViewDirective],
859
- exports: [ScrollIntoViewDirective],
860
- })
861
- ], ScrollIntoViewModule);
862
- return ScrollIntoViewModule;
863
- }());
864
-
865
- var TuiDocNavigationModule = /** @class */ (function () {
866
- function TuiDocNavigationModule() {
867
- }
868
- TuiDocNavigationModule = __decorate([
869
- core.NgModule({
870
- imports: [
871
- common.CommonModule,
872
- forms.FormsModule,
873
- router.RouterModule,
874
- ScrollIntoViewModule,
875
- core$1.TuiButtonModule,
876
- core$1.TuiPrimitiveTextfieldModule,
877
- core$1.TuiTextfieldControllerModule,
878
- cdk.TuiActiveZoneModule,
879
- cdk.TuiLetModule,
880
- core$1.TuiModeModule,
881
- core$1.TuiLinkModule,
882
- core$1.TuiExpandModule,
883
- core$1.TuiHostedDropdownModule,
884
- core$1.TuiDropdownControllerModule,
885
- kit.TuiAccordionModule,
886
- core$1.TuiScrollbarModule,
887
- core$1.TuiSvgModule,
888
- core$1.TuiDataListModule,
889
- cdk.TuiAutoFocusModule,
890
- ],
891
- declarations: [TuiDocNavigationComponent],
892
- exports: [TuiDocNavigationComponent],
893
- })
894
- ], TuiDocNavigationModule);
895
- return TuiDocNavigationModule;
896
- }());
897
-
898
- function rgbToHex(r, g, b) {
899
- return ('#' +
900
- [r, g, b]
901
- .map(function (x) {
902
- var hex = x.toString(16);
903
- return hex.length === 1 ? '0' + hex : hex;
904
- })
905
- .join(''));
906
- }
907
- function hexToRgb(hex) {
908
- var matches = hex
909
- .replace('#', '')
910
- .split('')
911
- .map(function (char, _, array) { return (array.length === 3 ? char + char : char); })
912
- .join('')
913
- .match(/.{2}/g);
914
- return matches
915
- ? matches.map(function (x) { return Number.parseInt(x, 16); })
916
- : [0, 0, 0];
917
- }
918
-
919
- function inspectArray(array, depth) {
920
- if (depth === 0) {
921
- return '[…]';
922
- }
923
- var result = '';
924
- var first = true;
925
- for (var index = 0; index < array.length; index++) {
926
- if (first) {
927
- first = false;
928
- }
929
- else {
930
- result += ', ';
931
- }
932
- result += index in array ? inspectAny(array[index], depth - 1) : 'empty';
933
- }
934
- return "[" + result + "]";
935
- }
936
- function inspectObject(object, depth) {
937
- if (depth === 0) {
938
- return "{\u2026}";
939
- }
940
- var result = '';
941
- var first = true;
942
- for (var key in object) {
943
- if (!object.hasOwnProperty(key)) {
944
- continue;
945
- }
946
- if (first) {
947
- first = false;
948
- }
949
- else {
950
- result += ', ';
951
- }
952
- result += key + ": " + inspectAny(object[key], depth - 1);
953
- }
954
- return "{" + result + "}";
955
- }
956
- // @bad TODO add more types
957
- /**
958
- * Returns readable JS entity
959
- * @param data
960
- * @param depth
961
- * @return readable JS entity
962
- */
963
- function inspectAny(data, depth) {
964
- if (data === null) {
965
- return 'null';
966
- }
967
- switch (typeof data) {
968
- case 'string':
969
- return "'" + data + "'";
970
- case 'undefined':
971
- case 'number':
972
- case 'boolean':
973
- case 'function':
974
- return String(data);
975
- }
976
- if (data instanceof RegExp) {
977
- return data.toString();
978
- }
979
- if (Array.isArray(data)) {
980
- return inspectArray(data, depth);
981
- }
982
- return inspectObject(data, depth);
983
- }
984
-
985
- var SERIALIZED_SUFFIX = '$';
986
- // @bad TODO: refactor output and value sync
987
- var TuiDocDocumentationPropertyConnectorDirective = /** @class */ (function () {
988
- function TuiDocDocumentationPropertyConnectorDirective(template, locationRef, activatedRoute, urlSerializer) {
989
- this.template = template;
990
- this.locationRef = locationRef;
991
- this.activatedRoute = activatedRoute;
992
- this.urlSerializer = urlSerializer;
993
- this.documentationPropertyName = '';
994
- this.documentationPropertyMode = null;
995
- this.documentationPropertyType = '';
996
- this.documentationPropertyValue = null;
997
- this.documentationPropertyDeprecated = false;
998
- this.documentationPropertyValues = null;
999
- this.documentationPropertyValueChange = new core.EventEmitter();
1000
- this.changed$ = new rxjs.Subject();
1001
- }
1002
- TuiDocDocumentationPropertyConnectorDirective.prototype.ngOnInit = function () {
1003
- this.parseParams(this.activatedRoute.snapshot.queryParams);
1004
- };
1005
- Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "attrName", {
1006
- get: function () {
1007
- switch (this.documentationPropertyMode) {
1008
- case 'input':
1009
- return "[" + this.documentationPropertyName + "]";
1010
- case 'output':
1011
- return "(" + this.documentationPropertyName + ")";
1012
- case 'input-output':
1013
- return "[(" + this.documentationPropertyName + ")]";
1014
- default:
1015
- return this.documentationPropertyName;
1016
- }
1017
- },
1018
- enumerable: true,
1019
- configurable: true
1020
- });
1021
- Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "hasItems", {
1022
- get: function () {
1023
- return !!this.documentationPropertyValues;
1024
- },
1025
- enumerable: true,
1026
- configurable: true
1027
- });
1028
- Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "shouldShowValues", {
705
+ Object.defineProperty(TuiDocDocumentationPropertyConnectorDirective.prototype, "shouldShowValues", {
1029
706
  get: function () {
1030
707
  return this.documentationPropertyMode !== 'output';
1031
708
  },
@@ -1066,6 +743,11 @@
1066
743
  tree.queryParams = __assign(__assign({}, tree.queryParams), (_a = {}, _a[propName] = computedValue, _a));
1067
744
  this.locationRef.go(String(tree));
1068
745
  };
746
+ TuiDocDocumentationPropertyConnectorDirective.prototype.emitEvent = function (event) {
747
+ // For more convenient debugging
748
+ console.log(this.attrName, event);
749
+ this.emits$.next(this.emits$.value + 1);
750
+ };
1069
751
  TuiDocDocumentationPropertyConnectorDirective.ctorParameters = function () { return [
1070
752
  { type: core.TemplateRef, decorators: [{ type: core.Inject, args: [core.TemplateRef,] }] },
1071
753
  { type: common.Location, decorators: [{ type: core.Inject, args: [common.Location,] }] },
@@ -1096,6 +778,7 @@
1096
778
  TuiDocDocumentationPropertyConnectorDirective = __decorate([
1097
779
  core.Directive({
1098
780
  selector: 'ng-template[documentationPropertyName]',
781
+ exportAs: 'documentationProperty',
1099
782
  }),
1100
783
  __param(0, core.Inject(core.TemplateRef)),
1101
784
  __param(1, core.Inject(common.Location)),
@@ -1221,9 +904,14 @@
1221
904
  TuiDocDocumentationComponent = __decorate([
1222
905
  core.Component({
1223
906
  selector: 'tui-doc-documentation',
1224
- template: "<h1 *ngIf=\"heading\" class=\"tui-text_h4\">{{heading}}</h1>\n<ng-content></ng-content>\n<table class=\"tui-table tui-table_layout_fixed tui-table_font-size_s\">\n <tr class=\"tui-table__tr tui-table__tr_hover_disabled t-row t-row_header\">\n <th class=\"tui-table__th tui-table__th_first t-cell t-cell_prop\">\n {{texts[2]}}\n </th>\n <td class=\"tui-table__th\">{{type}}</td>\n <td\n *ngIf=\"showValues && !isAPI\"\n class=\"\n tui-table__th tui-table__th_last tui-table__th_text_right\n t-cell t-cell_value\n \"\n >\n {{texts[3]}}\n </td>\n </tr>\n <tr\n *ngFor=\"let propertyConnector of propertiesConnectors; last as lastItem\"\n class=\"tui-table__tr tui-table__tr_hover_disabled t-row\"\n [class.t-deprecated]=\"propertyConnector.documentationPropertyDeprecated\"\n [class.tui-table__tr_border_none]=\"lastItem\"\n >\n <td\n class=\"\n tui-table__td tui-table__td_first tui-table__td_align_center\n t-cell\n \"\n >\n <div\n class=\"t-property t-cell\"\n automation-id=\"tui-documentation__property-name\"\n >\n {{stripOptional(propertyConnector.attrName)}}\n <tui-badge\n *ngIf=\"isOptional(propertyConnector.attrName)\"\n size=\"s\"\n value=\"Optional\"\n ></tui-badge>\n </div>\n <span\n *ngIf=\"propertyConnector.documentationPropertyDeprecated\"\n class=\"t-deprecated-label\"\n >deprecated</span\n >\n <ng-container\n *ngTemplateOutlet=\"propertyConnector.template\"\n ></ng-container>\n </td>\n <td class=\"tui-table__td tui-table__td_align_center t-cell\">\n <span class=\"type\">\n {{propertyConnector.documentationPropertyType}}\n <tui-tooltip\n *ngIf=\"showContentTooltip(propertyConnector.documentationPropertyType)\"\n [describeId]=\"propertyConnector.attrName\"\n [content]=\"content\"\n >\n <ng-template #content>\n {{texts[4]}}\n <a\n tuiLink\n tuiMode=\"onDark\"\n target=\"_blank\"\n href=\"https://github.com/TinkoffCreditSystems/ng-polymorpheus\"\n ><code>ng-polymorpheus</code></a\n >\n </ng-template>\n </tui-tooltip>\n </span>\n </td>\n <td\n *ngIf=\"showValues\"\n class=\"\n tui-table__td\n tui-table__td_align_center\n tui-table__td_last\n tui-table__td_text_right\n t-cell\n \"\n >\n <ng-container *ngIf=\"propertyConnector.shouldShowValues\">\n <tui-select\n *ngIf=\"propertyConnector.hasItems; else noItems\"\n tuiTextfieldSize=\"m\"\n tuiDropdownLimitWidth=\"min\"\n [tuiTextfieldCleaner]=\"showCleaner(propertyConnector.documentationPropertyType)\"\n [tuiTextfieldLabelOutside]=\"true\"\n [nativeId]=\"propertyConnector.attrName\"\n [valueContent]=\"selectContent\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n >\n <code class=\"t-exception\">null</code>\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"propertyConnector.documentationPropertyValues\"\n [itemContent]=\"selectContent\"\n ></tui-data-list-wrapper>\n </tui-select>\n <ng-template #selectContent let-data>\n <code>{{inspectAny(data)}}</code>\n </ng-template>\n\n <ng-template #noItems>\n <ng-container\n [ngSwitch]=\"propertyConnector.documentationPropertyType\"\n >\n <tui-toggle\n *ngSwitchCase=\"'boolean'\"\n size=\"l\"\n [nativeId]=\"propertyConnector.attrName\"\n [showIcons]=\"true\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-toggle>\n\n <tui-primitive-textfield\n *ngSwitchCase=\"'string'\"\n tuiTextfieldSize=\"m\"\n [nativeId]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n [value]=\"propertyConnector.documentationPropertyValue || ''\"\n (valueChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-primitive-textfield>\n\n <div *ngSwitchCase=\"'color'\" tuiGroup>\n <tui-primitive-textfield\n tuiTextfieldType=\"color\"\n tuiTextfieldSize=\"m\"\n [attr.id]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiInputOpacity]=\"getOpacity(propertyConnector.documentationPropertyValue)\"\n [value]=\"getColor(propertyConnector.documentationPropertyValue)\"\n (valueChange)=\"onColorChange(propertyConnector, $event)\"\n ></tui-primitive-textfield>\n <tui-input-count\n tuiTextfieldSize=\"m\"\n [max]=\"100\"\n [ngModel]=\"getOpacity(propertyConnector.documentationPropertyValue)\"\n (ngModelChange)=\"onOpacityChange(propertyConnector, $event)\"\n >\n Opacity\n </tui-input-count>\n </div>\n\n <tui-input-count\n *ngSwitchCase=\"'number'\"\n tuiTextfieldSize=\"m\"\n [nativeId]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-input-count>\n </ng-container>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n</table>\n",
907
+ template: "<h1 *ngIf=\"heading\" class=\"tui-text_h4\">{{ heading }}</h1>\n<ng-content></ng-content>\n<table class=\"tui-table tui-table_layout_fixed tui-table_font-size_s\">\n <tr class=\"tui-table__tr tui-table__tr_hover_disabled t-row t-row_header\">\n <th class=\"tui-table__th tui-table__th_first t-cell t-cell_prop\">\n {{ texts[2] }}\n </th>\n <td class=\"tui-table__th\">{{ type }}</td>\n <td\n *ngIf=\"showValues && !isAPI\"\n class=\"\n tui-table__th tui-table__th_last tui-table__th_text_right\n t-cell t-cell_value\n \"\n >\n {{ texts[3] }}\n </td>\n </tr>\n <tr\n *ngFor=\"let propertyConnector of propertiesConnectors; last as lastItem\"\n class=\"tui-table__tr tui-table__tr_hover_disabled t-row\"\n [class.t-deprecated]=\"propertyConnector.documentationPropertyDeprecated\"\n [class.tui-table__tr_border_none]=\"lastItem\"\n >\n <td\n class=\"\n tui-table__td tui-table__td_first tui-table__td_align_center\n t-cell\n \"\n >\n <div\n automation-id=\"tui-documentation__property-name\"\n class=\"t-property t-cell\"\n >\n {{ stripOptional(propertyConnector.attrName) }}\n <tui-badge\n *ngIf=\"isOptional(propertyConnector.attrName)\"\n size=\"s\"\n value=\"Optional\"\n ></tui-badge>\n </div>\n <span\n *ngIf=\"propertyConnector.documentationPropertyDeprecated\"\n class=\"t-deprecated-label\"\n >\n deprecated\n </span>\n <ng-container\n *ngTemplateOutlet=\"propertyConnector.template\"\n ></ng-container>\n </td>\n <td class=\"tui-table__td tui-table__td_align_center t-cell\">\n <span class=\"type\">\n {{ propertyConnector.documentationPropertyType }}\n <tui-tooltip\n *ngIf=\"showContentTooltip(propertyConnector.documentationPropertyType)\"\n [describeId]=\"propertyConnector.attrName\"\n [content]=\"content\"\n >\n <ng-template #content>\n {{ texts[4] }}\n <a\n tuiLink\n tuiMode=\"onDark\"\n target=\"_blank\"\n href=\"https://github.com/TinkoffCreditSystems/ng-polymorpheus\"\n >\n <code>ng-polymorpheus</code>\n </a>\n </ng-template>\n </tui-tooltip>\n </span>\n </td>\n <td\n *ngIf=\"showValues\"\n class=\"\n tui-table__td\n tui-table__td_align_center\n tui-table__td_last\n tui-table__td_text_right\n t-cell\n \"\n >\n <ng-container\n *ngIf=\"propertyConnector.shouldShowValues; else elseEmitter\"\n >\n <tui-select\n *ngIf=\"propertyConnector.hasItems; else noItems\"\n tuiTextfieldSize=\"m\"\n tuiDropdownLimitWidth=\"min\"\n [tuiTextfieldCleaner]=\"showCleaner(propertyConnector.documentationPropertyType)\"\n [tuiTextfieldLabelOutside]=\"true\"\n [nativeId]=\"propertyConnector.attrName\"\n [valueContent]=\"selectContent\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n >\n <code class=\"t-exception\">null</code>\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"propertyConnector.documentationPropertyValues\"\n [itemContent]=\"selectContent\"\n ></tui-data-list-wrapper>\n </tui-select>\n <ng-template #selectContent let-data>\n <code>{{ inspectAny(data) }}</code>\n </ng-template>\n\n <ng-template #noItems>\n <ng-container\n [ngSwitch]=\"propertyConnector.documentationPropertyType\"\n >\n <tui-toggle\n *ngSwitchCase=\"'boolean'\"\n size=\"l\"\n [nativeId]=\"propertyConnector.attrName\"\n [showIcons]=\"true\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-toggle>\n\n <tui-primitive-textfield\n *ngSwitchCase=\"'string'\"\n tuiTextfieldSize=\"m\"\n [nativeId]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n [value]=\"propertyConnector.documentationPropertyValue || ''\"\n (valueChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-primitive-textfield>\n\n <div *ngSwitchCase=\"'color'\" tuiGroup>\n <tui-primitive-textfield\n tuiTextfieldType=\"color\"\n tuiTextfieldSize=\"m\"\n [attr.id]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiInputOpacity]=\"getOpacity(propertyConnector.documentationPropertyValue)\"\n [value]=\"getColor(propertyConnector.documentationPropertyValue)\"\n (valueChange)=\"onColorChange(propertyConnector, $event)\"\n ></tui-primitive-textfield>\n <tui-input-count\n tuiTextfieldSize=\"m\"\n [max]=\"100\"\n [ngModel]=\"getOpacity(propertyConnector.documentationPropertyValue)\"\n (ngModelChange)=\"onOpacityChange(propertyConnector, $event)\"\n >\n Opacity\n </tui-input-count>\n </div>\n\n <tui-input-count\n *ngSwitchCase=\"'number'\"\n tuiTextfieldSize=\"m\"\n [nativeId]=\"propertyConnector.attrName\"\n [tuiTextfieldLabelOutside]=\"true\"\n [ngModel]=\"propertyConnector.documentationPropertyValue\"\n (ngModelChange)=\"propertyConnector.onValueChange($event)\"\n ></tui-input-count>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-template #elseEmitter>\n <tui-notification\n class=\"t-output\"\n [@emitEvent]=\"propertyConnector.emits$ | async\"\n >\n Emit!\n </tui-notification>\n </ng-template>\n </td>\n </tr>\n</table>\n",
1225
908
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1226
- styles: [":host{display:block;min-width:100%}.t-cell_prop{width:40%}.t-cell_value{max-width:20rem}@media screen and (max-width:47.9375em){.t-row{display:flex;flex-wrap:wrap}.t-row_header{display:none}.t-cell_value{width:9.375rem}.t-cell{width:100%;height:auto;padding:.5rem 0;text-align:left}}.t-property{font:var(--tui-font-text-m);margin-bottom:.25rem;font-family:monospace;color:#8f75d1}.t-type{font-family:monospace}.t-deprecated{background-color:var(--tui-error-bg)}.t-deprecated-label{margin-right:.125rem;color:var(--tui-error-fill)}"]
909
+ animations: [
910
+ animations.trigger('emitEvent', [
911
+ animations.transition(':increment', [animations.style({ opacity: 1 }), animations.animate('500ms ease-in')]),
912
+ ]),
913
+ ],
914
+ styles: [":host{display:block;min-width:100%}.t-cell_prop{width:40%}.t-cell_value{max-width:20rem}@media screen and (max-width:47.9375em){.t-row{display:flex;flex-wrap:wrap}.t-row_header{display:none}.t-cell_value{width:9.375rem}.t-cell{width:100%;height:auto;padding:.5rem 0;text-align:left}}.t-property{font:var(--tui-font-text-m);margin-bottom:.25rem;font-family:monospace;color:#8f75d1}.t-type{font-family:monospace}.t-deprecated{background-color:var(--tui-error-bg)}.t-deprecated-label{margin-right:.125rem;color:var(--tui-error-fill)}.t-exception{display:block;width:-webkit-max-content;width:-moz-max-content;width:max-content}.t-output{text-align:left;opacity:0}"]
1227
915
  }),
1228
916
  __param(0, core.Inject(core.ChangeDetectorRef)),
1229
917
  __param(1, core.Inject(TUI_DOC_DOCUMENTATION_TEXTS))
@@ -1275,238 +963,620 @@
1275
963
  return TuiInputOpacityModule;
1276
964
  }());
1277
965
 
1278
- var TuiDocDocumentationModule = /** @class */ (function () {
1279
- function TuiDocDocumentationModule() {
966
+ var TuiDocDocumentationModule = /** @class */ (function () {
967
+ function TuiDocDocumentationModule() {
968
+ }
969
+ TuiDocDocumentationModule = __decorate([
970
+ core.NgModule({
971
+ imports: [
972
+ common.CommonModule,
973
+ forms.FormsModule,
974
+ router.RouterModule,
975
+ kit.TuiBadgeModule,
976
+ kit.TuiSelectModule,
977
+ kit.TuiToggleModule,
978
+ core$1.TuiTooltipModule,
979
+ core$1.TuiLinkModule,
980
+ kit.TuiInputCountModule,
981
+ core$1.TuiModeModule,
982
+ core$1.TuiGroupModule,
983
+ TuiInputOpacityModule,
984
+ core$1.TuiPrimitiveTextfieldModule,
985
+ core$1.TuiTextfieldControllerModule,
986
+ core$1.TuiHintControllerModule,
987
+ core$1.TuiDropdownControllerModule,
988
+ core$1.TuiDataListModule,
989
+ kit.TuiDataListWrapperModule,
990
+ core$1.TuiNotificationModule,
991
+ ],
992
+ declarations: [
993
+ TuiDocDocumentationComponent,
994
+ TuiDocDocumentationPropertyConnectorDirective,
995
+ ],
996
+ exports: [
997
+ TuiDocDocumentationComponent,
998
+ TuiDocDocumentationPropertyConnectorDirective,
999
+ ],
1000
+ })
1001
+ ], TuiDocDocumentationModule);
1002
+ return TuiDocDocumentationModule;
1003
+ }());
1004
+
1005
+ var TUI_DOC_CODE_EDITOR = new core.InjectionToken('Contains service for opening online IDE e.g. Stackblitz');
1006
+
1007
+ var TUI_DOC_EXAMPLE_CONTENT_PROCESSOR = new core.InjectionToken('Processes content in example', { factory: function () { return cdk.identity; } });
1008
+
1009
+ function rawLoadRecord(example) {
1010
+ return __awaiter(this, void 0, void 0, function () {
1011
+ var processedContent, _a, _b, _c, key, content, _d, _e, e_1_1;
1012
+ var e_1, _f;
1013
+ return __generator(this, function (_g) {
1014
+ switch (_g.label) {
1015
+ case 0:
1016
+ processedContent = {};
1017
+ _g.label = 1;
1018
+ case 1:
1019
+ _g.trys.push([1, 6, 7, 8]);
1020
+ _a = __values(Object.entries(example)), _b = _a.next();
1021
+ _g.label = 2;
1022
+ case 2:
1023
+ if (!!_b.done) return [3 /*break*/, 5];
1024
+ _c = __read(_b.value, 2), key = _c[0], content = _c[1];
1025
+ _d = processedContent;
1026
+ _e = key;
1027
+ return [4 /*yield*/, rawLoad(content)];
1028
+ case 3:
1029
+ _d[_e] = _g.sent();
1030
+ _g.label = 4;
1031
+ case 4:
1032
+ _b = _a.next();
1033
+ return [3 /*break*/, 2];
1034
+ case 5: return [3 /*break*/, 8];
1035
+ case 6:
1036
+ e_1_1 = _g.sent();
1037
+ e_1 = { error: e_1_1 };
1038
+ return [3 /*break*/, 8];
1039
+ case 7:
1040
+ try {
1041
+ if (_b && !_b.done && (_f = _a.return)) _f.call(_a);
1042
+ }
1043
+ finally { if (e_1) throw e_1.error; }
1044
+ return [7 /*endfinally*/];
1045
+ case 8: return [2 /*return*/, processedContent];
1046
+ }
1047
+ });
1048
+ });
1049
+ }
1050
+
1051
+ // Ambient type cannot be used without dynamic https://github.com/angular/angular/issues/23395
1052
+ // @dynamic
1053
+ var TuiDocExampleComponent = /** @class */ (function () {
1054
+ function TuiDocExampleComponent(id, clipboard, notifications, location, copyTexts$, texts, codeEditor, processContent) {
1055
+ this.id = id;
1056
+ this.clipboard = clipboard;
1057
+ this.notifications = notifications;
1058
+ this.location = location;
1059
+ this.copyTexts$ = copyTexts$;
1060
+ this.texts = texts;
1061
+ this.codeEditor = codeEditor;
1062
+ this.processContent = processContent;
1063
+ this.rawLoader$$ = new rxjs.BehaviorSubject({});
1064
+ this.heading = '';
1065
+ this.description = '';
1066
+ this.componentName = this.location.pathname.slice(1);
1067
+ this.activeItemIndex = 0;
1068
+ this.defaultTab = this.texts[0];
1069
+ this.copy$ = this.copyTexts$.pipe(operators.map(function (_a) {
1070
+ var _b = __read(_a, 1), copy = _b[0];
1071
+ return copy;
1072
+ }));
1073
+ this.processor$ = this.rawLoader$$.pipe(operators.switchMap(rawLoadRecord), operators.map(this.processContent));
1074
+ }
1075
+ Object.defineProperty(TuiDocExampleComponent.prototype, "content", {
1076
+ set: function (content) {
1077
+ this.rawLoader$$.next(content);
1078
+ },
1079
+ enumerable: true,
1080
+ configurable: true
1081
+ });
1082
+ TuiDocExampleComponent.prototype.copyExampleLink = function () {
1083
+ var hashPosition = this.location.href.indexOf('#');
1084
+ var currentUrl = hashPosition > -1
1085
+ ? this.location.href.substr(0, hashPosition)
1086
+ : this.location.href;
1087
+ var url = currentUrl + "#" + this.id;
1088
+ this.clipboard.copy(url);
1089
+ this.notifications
1090
+ .show(this.texts[1], {
1091
+ label: this.texts[2],
1092
+ status: "success" /* Success */,
1093
+ })
1094
+ .subscribe();
1095
+ };
1096
+ TuiDocExampleComponent.ctorParameters = function () { return [
1097
+ { type: String, decorators: [{ type: core.Attribute, args: ['id',] }] },
1098
+ { type: clipboard.Clipboard, decorators: [{ type: core.Inject, args: [clipboard.Clipboard,] }] },
1099
+ { type: core$1.TuiNotificationsService, decorators: [{ type: core.Inject, args: [core$1.TuiNotificationsService,] }] },
1100
+ { type: Location, decorators: [{ type: core.Inject, args: [common$1.LOCATION,] }] },
1101
+ { type: rxjs.Observable, decorators: [{ type: core.Inject, args: [kit.TUI_COPY_TEXTS,] }] },
1102
+ { type: Array, decorators: [{ type: core.Inject, args: [TUI_DOC_EXAMPLE_TEXTS,] }] },
1103
+ { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [TUI_DOC_CODE_EDITOR,] }] },
1104
+ { type: undefined, decorators: [{ type: core.Inject, args: [TUI_DOC_EXAMPLE_CONTENT_PROCESSOR,] }] }
1105
+ ]; };
1106
+ __decorate([
1107
+ core.Input()
1108
+ ], TuiDocExampleComponent.prototype, "heading", void 0);
1109
+ __decorate([
1110
+ core.Input()
1111
+ ], TuiDocExampleComponent.prototype, "description", void 0);
1112
+ __decorate([
1113
+ core.Input()
1114
+ ], TuiDocExampleComponent.prototype, "content", null);
1115
+ __decorate([
1116
+ core.Input()
1117
+ ], TuiDocExampleComponent.prototype, "componentName", void 0);
1118
+ TuiDocExampleComponent = __decorate([
1119
+ core.Component({
1120
+ selector: 'tui-doc-example',
1121
+ template: "<h3 *ngIf=\"heading\" class=\"t-title\">\n <span polymorpheus-outlet [content]=\"heading\"></span>\n <button\n *ngIf=\"id\"\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n icon=\"tuiIconLinkLarge\"\n appearance=\"icon\"\n class=\"t-link-icon\"\n [title]=\"copy$ | async\"\n (click)=\"copyExampleLink()\"\n ></button>\n</h3>\n<h4\n *ngIf=\"description\"\n polymorpheus-outlet\n class=\"t-description\"\n [content]=\"description\"\n></h4>\n\n<div *ngIf=\"processor$ | async as content\" class=\"t-example\">\n <ng-container *ngIf=\"content | tuiDocExampleGetTabs: defaultTab as tabs\">\n <div class=\"t-tabs-wrapper\">\n <tui-tabs-with-more\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <button *tuiTab tuiTab>{{tab}}</button>\n </ng-container>\n </tui-tabs-with-more>\n\n <button\n *ngIf=\"codeEditor\"\n tuiButton\n appearance=\"flat\"\n size=\"s\"\n (click)=\"codeEditor.open(componentName, id || '', content)\"\n >\n Edit on {{codeEditor.name}}\n </button>\n </div>\n\n <ng-container\n *ngIf=\"{\n activeTab: tabs[activeItemIndex],\n code: content[tabs[activeItemIndex]] || ''\n } as state\"\n >\n <div\n *ngIf=\"state.activeTab == defaultTab; else codeSection\"\n automation-id=\"tui-doc-example\"\n class=\"t-demo\"\n >\n <ng-content></ng-content>\n </div>\n\n <ng-template #codeSection>\n <tui-doc-copy\n class=\"t-copy-code\"\n [cdkCopyToClipboard]=\"state.code\"\n ></tui-doc-copy>\n <tui-doc-code [code]=\"state.code\"></tui-doc-code>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n",
1122
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
1123
+ styles: [":host{position:relative;display:block;padding-top:3.5rem;clear:right}.t-title{font:var(--tui-font-heading-5);margin:0 0 .5rem}@media screen and (max-width:47.9375em){:host{padding-top:2rem}.t-title{font:var(--tui-font-heading-6)}}.t-description{font:var(--tui-font-text-m);font-weight:400;margin:0}.t-description:first-letter,.t-title:first-letter{text-transform:capitalize}.t-example{position:relative;margin-top:1.5rem;border:1px solid var(--tui-base-03);border-radius:var(--tui-radius-m);box-shadow:0 .125rem .1875rem rgba(0,0,0,.1)}.t-tabs-wrapper{display:flex;padding:0 2rem;box-shadow:inset 0 -1px var(--tui-base-03);justify-content:space-between;align-items:center}@media screen and (max-width:47.9375em){.t-example{margin-top:.75rem}.t-tabs-wrapper{padding:0 1rem}}.t-tabs{flex-grow:1}.t-demo{padding:2rem;overflow-x:auto}@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.t-demo::-webkit-scrollbar,.t-demo::-webkit-scrollbar-thumb{width:1rem;height:1rem;border-radius:6.25rem;background-clip:padding-box;border:6px solid transparent}.t-demo::-webkit-scrollbar{background-color:transparent}.t-demo::-webkit-scrollbar-thumb{background-color:var(--tui-clear-hover)}.t-demo::-webkit-scrollbar-thumb:hover{background-color:var(--tui-clear-active)}.t-demo::-webkit-scrollbar-thumb:active{background-color:var(--tui-text-03)}}@media screen and (max-width:47.9375em){.t-demo{padding:1rem}}.t-copy-code{position:absolute;top:4.375rem;right:1rem}.t-link-icon{margin-left:.3rem;vertical-align:baseline}"]
1124
+ }),
1125
+ __param(0, core.Attribute('id')),
1126
+ __param(1, core.Inject(clipboard.Clipboard)),
1127
+ __param(2, core.Inject(core$1.TuiNotificationsService)),
1128
+ __param(3, core.Inject(common$1.LOCATION)),
1129
+ __param(4, core.Inject(kit.TUI_COPY_TEXTS)),
1130
+ __param(5, core.Inject(TUI_DOC_EXAMPLE_TEXTS)),
1131
+ __param(6, core.Optional()),
1132
+ __param(6, core.Inject(TUI_DOC_CODE_EDITOR)),
1133
+ __param(7, core.Inject(TUI_DOC_EXAMPLE_CONTENT_PROCESSOR))
1134
+ ], TuiDocExampleComponent);
1135
+ return TuiDocExampleComponent;
1136
+ }());
1137
+
1138
+ var TuiDocExampleGetTabsPipe = /** @class */ (function () {
1139
+ function TuiDocExampleGetTabsPipe() {
1140
+ }
1141
+ TuiDocExampleGetTabsPipe.prototype.transform = function (content, defaultTab) {
1142
+ return __spread([defaultTab], Object.keys(content));
1143
+ };
1144
+ TuiDocExampleGetTabsPipe = __decorate([
1145
+ core.Pipe({ name: 'tuiDocExampleGetTabs' })
1146
+ ], TuiDocExampleGetTabsPipe);
1147
+ return TuiDocExampleGetTabsPipe;
1148
+ }());
1149
+
1150
+ var TuiDocExampleModule = /** @class */ (function () {
1151
+ function TuiDocExampleModule() {
1152
+ }
1153
+ TuiDocExampleModule = __decorate([
1154
+ core.NgModule({
1155
+ imports: [
1156
+ common.CommonModule,
1157
+ clipboard.ClipboardModule,
1158
+ kit.TuiTabsModule,
1159
+ core$1.TuiButtonModule,
1160
+ TuiDocCopyModule,
1161
+ TuiDocCodeModule,
1162
+ ngPolymorpheus.PolymorpheusModule,
1163
+ ],
1164
+ declarations: [TuiDocExampleComponent, TuiDocExampleGetTabsPipe],
1165
+ exports: [TuiDocExampleComponent, TuiDocExampleGetTabsPipe],
1166
+ })
1167
+ ], TuiDocExampleModule);
1168
+ return TuiDocExampleModule;
1169
+ }());
1170
+
1171
+ // @dynamic
1172
+ var TuiDocMainComponent = /** @class */ (function () {
1173
+ function TuiDocMainComponent(storage, windowRef) {
1174
+ this.storage = storage;
1175
+ this.windowRef = windowRef;
1176
+ this.night = this.storage.getItem('night') === 'true' ||
1177
+ (this.storage.getItem('night') === null &&
1178
+ this.windowRef.matchMedia('(prefers-color-scheme: dark)').matches);
1179
+ this.change$ = new rxjs.Subject();
1180
+ }
1181
+ TuiDocMainComponent_1 = TuiDocMainComponent;
1182
+ Object.defineProperty(TuiDocMainComponent.prototype, "mode", {
1183
+ get: function () {
1184
+ return this.night ? 'onDark' : null;
1185
+ },
1186
+ enumerable: true,
1187
+ configurable: true
1188
+ });
1189
+ TuiDocMainComponent.prototype.onMode = function (night) {
1190
+ this.night = night;
1191
+ this.change$.next();
1192
+ this.storage.setItem('night', String(night));
1193
+ };
1194
+ var TuiDocMainComponent_1;
1195
+ TuiDocMainComponent.ctorParameters = function () { return [
1196
+ { type: Storage, decorators: [{ type: core.Inject, args: [common$1.LOCAL_STORAGE,] }] },
1197
+ { type: Window, decorators: [{ type: core.Inject, args: [common$1.WINDOW,] }] }
1198
+ ]; };
1199
+ TuiDocMainComponent = TuiDocMainComponent_1 = __decorate([
1200
+ core.Component({
1201
+ selector: 'tui-doc-main',
1202
+ template: "<tui-theme-night *ngIf=\"night\"></tui-theme-night>\n<tui-root>\n <div class=\"tui-doc-page\">\n <tui-doc-navigation class=\"tui-doc-navigation\">\n <ng-content select=\"tuiDocNavigation\"></ng-content>\n </tui-doc-navigation>\n <div class=\"tui-doc-content\">\n <router-outlet class=\"tui-doc-outlet\"></router-outlet>\n </div>\n </div>\n <header tuiDocHeader>\n <label class=\"night-mode\">\n Night mode\n <tui-toggle\n class=\"tui-space_left-2\"\n [ngModel]=\"night\"\n (ngModelChange)=\"onMode($event)\"\n ></tui-toggle>\n </label>\n <ng-content select=\"tuiDocHeader\"></ng-content>\n </header>\n <ng-container ngProjectAs=\"tuiOverContent\">\n <ng-content select=\"tuiOverContent\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDialogs\">\n <ng-content select=\"tuiOverDialogs\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverNotifications\">\n <ng-content select=\"tuiOverNotifications\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverPortals\">\n <ng-content select=\"tuiOverPortals\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverHints\">\n <ng-content select=\"tuiOverHints\"></ng-content>\n </ng-container>\n</tui-root>\n",
1203
+ encapsulation: core.ViewEncapsulation.None,
1204
+ providers: [
1205
+ {
1206
+ provide: core$1.TuiModeDirective,
1207
+ useExisting: core.forwardRef(function () { return TuiDocMainComponent_1; }),
1208
+ },
1209
+ cdk.TuiSwipeService,
1210
+ ],
1211
+ styles: ["html{scroll-padding-top:4rem;height:auto}tui-root>tui-scroll-controls{top:4rem!important}@-webkit-keyframes tuiShaking{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}@keyframes tuiShaking{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}body{background:var(--tui-base-01);height:auto}tui-doc-main{display:block}code:not(.hljs):not(.exception){transition-property:background;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;background:var(--tui-base-02);color:var(--tui-text-02);vertical-align:middle;box-shadow:inset 0 -2px var(--tui-secondary);padding:.375rem .5rem;font-size:.875rem;border-radius:.5rem}:focus code:not(.exception){background:var(--tui-base-01)}.tui-doc-page{position:relative;z-index:0;padding-top:4rem}tui-doc-navigation.tui-doc-navigation{position:fixed;top:4rem;bottom:0;width:16.25rem;border-right:1px solid var(--tui-base-03)}.tui-doc-content{margin-left:16.25rem}@media screen and (max-width:47.9375em){tui-doc-navigation.tui-doc-navigation{display:none}.tui-doc-content{margin-left:0}}.tui-doc-outlet+*{display:block}.tui-doc-animated-example{-webkit-animation:1s .3s tuiShaking;animation:1s .3s tuiShaking}label.night-mode{cursor:pointer}.hljs-tag{background:0 0}.hljs{display:block;overflow-x:auto;padding:.5em;color:var(--tui-text-01);background-color:var(--tui-clear-disabled)}.hljs-subst,.hljs-title{font-weight:400;color:var(--tui-text-01)}.hljs-comment,.hljs-quote{color:var(--tui-text-03);font-style:italic}.hljs-meta{color:#e38162}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type{font-weight:700;color:var(--tui-link)}.hljs-attribute,.hljs-link,.hljs-number,.hljs-regexp{font-weight:700;color:var(--tui-support-06)}.hljs-link,.hljs-number,.hljs-regexp{font-weight:400}.hljs-string{color:var(--tui-positive);font-weight:700}.hljs-bullet,.hljs-formula,.hljs-symbol{color:var(--tui-text-01);background:var(--tui-base-02);font-style:italic}.hljs-doctag{text-decoration:underline}.hljs-template-variable,.hljs-variable{color:var(--tui-warning-fill)}.hljs-addition{background:var(--tui-success-bg)}.hljs-deletion{background:var(--tui-error-bg)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs .hljs-line-numbers{padding:0}.hljs-ln-numbers{vertical-align:top;opacity:.3;text-align:right;padding-right:1em!important}"]
1212
+ }),
1213
+ __param(0, core.Inject(common$1.LOCAL_STORAGE)),
1214
+ __param(1, core.Inject(common$1.WINDOW))
1215
+ ], TuiDocMainComponent);
1216
+ return TuiDocMainComponent;
1217
+ }());
1218
+
1219
+ var ScrollIntoViewDirective = /** @class */ (function () {
1220
+ function ScrollIntoViewDirective(destroy$, _a) {
1221
+ var nativeElement = _a.nativeElement;
1222
+ this.scroll$ = new rxjs.Subject();
1223
+ this.scroll$
1224
+ .pipe(operators.debounceTime(750), operators.filter(function (shallWe) { return shallWe && !!cdk.getElementObscurers(nativeElement); }), operators.takeUntil(destroy$))
1225
+ .subscribe(function () {
1226
+ nativeElement.scrollIntoView();
1227
+ });
1228
+ }
1229
+ Object.defineProperty(ScrollIntoViewDirective.prototype, "scrollIntoView", {
1230
+ set: function (shallWe) {
1231
+ this.scroll$.next(shallWe);
1232
+ },
1233
+ enumerable: true,
1234
+ configurable: true
1235
+ });
1236
+ ScrollIntoViewDirective.ctorParameters = function () { return [
1237
+ { type: cdk.TuiDestroyService, decorators: [{ type: core.Inject, args: [cdk.TuiDestroyService,] }] },
1238
+ { type: core.ElementRef, decorators: [{ type: core.Inject, args: [core.ElementRef,] }] }
1239
+ ]; };
1240
+ __decorate([
1241
+ core.Input()
1242
+ ], ScrollIntoViewDirective.prototype, "scrollIntoView", null);
1243
+ ScrollIntoViewDirective = __decorate([
1244
+ core.Directive({
1245
+ selector: '[scrollIntoView]',
1246
+ providers: [cdk.TuiDestroyService],
1247
+ }),
1248
+ __param(0, core.Inject(cdk.TuiDestroyService)),
1249
+ __param(1, core.Inject(core.ElementRef))
1250
+ ], ScrollIntoViewDirective);
1251
+ return ScrollIntoViewDirective;
1252
+ }());
1253
+
1254
+ var ScrollIntoViewModule = /** @class */ (function () {
1255
+ function ScrollIntoViewModule() {
1280
1256
  }
1281
- TuiDocDocumentationModule = __decorate([
1257
+ ScrollIntoViewModule = __decorate([
1282
1258
  core.NgModule({
1283
- imports: [
1284
- common.CommonModule,
1285
- forms.FormsModule,
1286
- router.RouterModule,
1287
- kit.TuiBadgeModule,
1288
- kit.TuiSelectModule,
1289
- kit.TuiToggleModule,
1290
- core$1.TuiTooltipModule,
1291
- core$1.TuiLinkModule,
1292
- kit.TuiInputCountModule,
1293
- core$1.TuiModeModule,
1294
- core$1.TuiGroupModule,
1295
- TuiInputOpacityModule,
1296
- core$1.TuiPrimitiveTextfieldModule,
1297
- core$1.TuiTextfieldControllerModule,
1298
- core$1.TuiHintControllerModule,
1299
- core$1.TuiDropdownControllerModule,
1300
- core$1.TuiDataListModule,
1301
- kit.TuiDataListWrapperModule,
1302
- ],
1303
- declarations: [
1304
- TuiDocDocumentationComponent,
1305
- TuiDocDocumentationPropertyConnectorDirective,
1306
- ],
1307
- exports: [
1308
- TuiDocDocumentationComponent,
1309
- TuiDocDocumentationPropertyConnectorDirective,
1310
- ],
1259
+ declarations: [ScrollIntoViewDirective],
1260
+ exports: [ScrollIntoViewDirective],
1311
1261
  })
1312
- ], TuiDocDocumentationModule);
1313
- return TuiDocDocumentationModule;
1262
+ ], ScrollIntoViewModule);
1263
+ return ScrollIntoViewModule;
1314
1264
  }());
1315
1265
 
1316
- var TUI_DOC_CODE_EDITOR = new core.InjectionToken('Contains service for opening online IDE e.g. Stackblitz');
1266
+ var MAP = {
1267
+ а: 'f',
1268
+ б: ',',
1269
+ в: 'd',
1270
+ г: 'u',
1271
+ д: 'l',
1272
+ е: 't',
1273
+ ё: '`',
1274
+ ж: ';',
1275
+ з: 'p',
1276
+ и: 'b',
1277
+ й: 'q',
1278
+ к: 'r',
1279
+ л: 'k',
1280
+ м: 'v',
1281
+ н: 'y',
1282
+ о: 'j',
1283
+ п: 'g',
1284
+ р: 'h',
1285
+ с: 'c',
1286
+ т: 'n',
1287
+ у: 'e',
1288
+ ф: 'a',
1289
+ х: '[',
1290
+ ц: 'w',
1291
+ ч: 'x',
1292
+ ш: 'i',
1293
+ щ: 'o',
1294
+ ъ: ']',
1295
+ ы: 's',
1296
+ ь: 'm',
1297
+ ю: '.',
1298
+ я: 'z',
1299
+ };
1300
+ /**
1301
+ * Translates text mistakenly typed in the Russian layout into English
1302
+ * @param string string with Russian layout characters
1303
+ * @return string with English layout characters
1304
+ */
1305
+ function transliterateKeyboardLayout(string) {
1306
+ var newStr = '';
1307
+ for (var i = 0; i < string.length; i++) {
1308
+ newStr += string.charAt(i) in MAP ? MAP[string.charAt(i)] : string.charAt(i);
1309
+ }
1310
+ return newStr;
1311
+ }
1317
1312
 
1318
- var TUI_DOC_EXAMPLE_CONTENT_PROCESSOR = new core.InjectionToken('Processes content in example', {
1319
- factory: function () { return cdk.identity; },
1313
+ var TUI_DOC_PAGES = new core.InjectionToken('Documentation pages', {
1314
+ factory: function () { return []; },
1320
1315
  });
1321
1316
 
1322
- // Ambient type cannot be used without dynamic https://github.com/angular/angular/issues/23395
1317
+ var TUI_DOC_TITLE = new core.InjectionToken('Page title', {
1318
+ factory: function () { return ''; },
1319
+ });
1320
+
1321
+ var NAVIGATION_TITLE = new core.InjectionToken('Page title');
1322
+ var NAVIGATION_LABELS = new core.InjectionToken('Navigation sections labels for search');
1323
+ var NAVIGATION_ITEMS = new core.InjectionToken('Navigation pages');
1324
+ var NAVIGATION_PROVIDERS = [
1325
+ cdk.TuiDestroyService,
1326
+ {
1327
+ provide: NAVIGATION_TITLE,
1328
+ deps: [router.Router, router.ActivatedRoute, TUI_DOC_TITLE, cdk.TuiDestroyService],
1329
+ useFactory: titleProviderFactory,
1330
+ },
1331
+ {
1332
+ provide: NAVIGATION_LABELS,
1333
+ deps: [TUI_DOC_PAGES],
1334
+ useFactory: labelsProviderFactory,
1335
+ },
1336
+ {
1337
+ provide: NAVIGATION_ITEMS,
1338
+ deps: [TUI_DOC_PAGES],
1339
+ useFactory: itemsProviderFactory,
1340
+ },
1341
+ ];
1342
+ function titleProviderFactory(router$1, activatedRoute, titlePrefix, destroy$) {
1343
+ return router$1.events.pipe(operators.filter(function (event) { return event instanceof router.NavigationEnd; }), operators.map(function () { return activatedRoute.firstChild; }), operators.filter(cdk.isPresent), operators.mergeMap(function (_a) {
1344
+ var data = _a.data;
1345
+ return data;
1346
+ }), operators.map(function (_a) {
1347
+ var title = _a.title;
1348
+ return titlePrefix + title;
1349
+ }), operators.takeUntil(destroy$));
1350
+ }
1351
+ function labelsProviderFactory(pages) {
1352
+ return pages
1353
+ .map(function (_a) {
1354
+ var section = _a.section;
1355
+ return section;
1356
+ })
1357
+ .filter(cdk.isPresent)
1358
+ .filter(function (item, index, array) { return array.indexOf(item) === index; });
1359
+ }
1360
+ function itemsProviderFactory(pages) {
1361
+ var labels = labelsProviderFactory(pages);
1362
+ return __spread(labels.map(function (label) { return pages.filter(function (_a) {
1363
+ var section = _a.section;
1364
+ return section === label;
1365
+ }); }), [
1366
+ pages.filter(function (page) { return !page.section; }),
1367
+ ]);
1368
+ }
1369
+
1370
+ var SCROLL_INTO_VIEW_DELAY = 200;
1323
1371
  // @dynamic
1324
- var TuiDocExampleComponent = /** @class */ (function () {
1325
- function TuiDocExampleComponent(id, clipboard, notifications, location, copyTexts$, texts, codeEditor, processContent) {
1326
- this.id = id;
1327
- this.clipboard = clipboard;
1328
- this.notifications = notifications;
1329
- this.location = location;
1330
- this.copyTexts$ = copyTexts$;
1331
- this.texts = texts;
1332
- this.codeEditor = codeEditor;
1333
- this.processContent = processContent;
1334
- this.heading = '';
1335
- this.description = '';
1336
- this.componentName = this.location.pathname.slice(1);
1337
- this.activeItemIndex = 0;
1338
- this.processedContent = {};
1339
- this.defaultTab = this.texts[0];
1340
- this.copy$ = this.copyTexts$.pipe(operators.map(function (_a) {
1341
- var _b = __read(_a, 1), copy = _b[0];
1342
- return copy;
1343
- }));
1372
+ var TuiDocNavigationComponent = /** @class */ (function () {
1373
+ function TuiDocNavigationComponent(changeDetectorRef, titleService, title$, documentRef, mode, sidebar, labels, items, searchText, router, activatedRoute) {
1374
+ var _this = this;
1375
+ this.documentRef = documentRef;
1376
+ this.mode = mode;
1377
+ this.sidebar = sidebar;
1378
+ this.labels = labels;
1379
+ this.items = items;
1380
+ this.searchText = searchText;
1381
+ this.router = router;
1382
+ this.activatedRoute = activatedRoute;
1383
+ this.search = '';
1384
+ this.open = false;
1385
+ this.openPagesArr = [];
1386
+ this.openPagesGroupsArr = [];
1387
+ this.active = '';
1388
+ this.menuOpen = false;
1389
+ this.mode$ = this.mode.change$.pipe(operators.startWith(null), operators.map(function () { return _this.mode.mode || 'onLight'; }));
1390
+ // Angular can't navigate no anchor links
1391
+ // https://stackoverflow.com/questions/36101756/angular2-routing-with-hashtag-to-page-anchor
1392
+ title$.subscribe(function (title) {
1393
+ changeDetectorRef.markForCheck();
1394
+ titleService.setTitle(title);
1395
+ _this.openActivePageGroup();
1396
+ _this.handleAnchorLink(_this.activatedRoute.snapshot.fragment);
1397
+ });
1344
1398
  }
1345
- Object.defineProperty(TuiDocExampleComponent.prototype, "content", {
1346
- set: function (content) {
1347
- this.processedContent = this.processContent(content);
1348
- },
1349
- enumerable: true,
1350
- configurable: true
1351
- });
1352
- Object.defineProperty(TuiDocExampleComponent.prototype, "activeItem", {
1353
- get: function () {
1354
- return this.tabs[this.activeItemIndex];
1355
- },
1356
- enumerable: true,
1357
- configurable: true
1358
- });
1359
- Object.defineProperty(TuiDocExampleComponent.prototype, "tabs", {
1399
+ Object.defineProperty(TuiDocNavigationComponent.prototype, "canOpen", {
1360
1400
  get: function () {
1361
- return this.getTabs(this.processedContent);
1401
+ return this.search.length > 2;
1362
1402
  },
1363
1403
  enumerable: true,
1364
1404
  configurable: true
1365
1405
  });
1366
- Object.defineProperty(TuiDocExampleComponent.prototype, "code", {
1406
+ Object.defineProperty(TuiDocNavigationComponent.prototype, "filteredItems", {
1367
1407
  get: function () {
1368
- var code = this.processedContent[this.activeItem];
1369
- return code ? code.trim() : '';
1408
+ return this.filterItems(this.flattenSubPages(this.items), this.search);
1370
1409
  },
1371
1410
  enumerable: true,
1372
1411
  configurable: true
1373
1412
  });
1374
- Object.defineProperty(TuiDocExampleComponent.prototype, "isDefaultItem", {
1413
+ Object.defineProperty(TuiDocNavigationComponent.prototype, "itemsWithoutSections", {
1375
1414
  get: function () {
1376
- return this.activeItem === this.defaultTab;
1415
+ return this.items[this.items.length - 1];
1377
1416
  },
1378
1417
  enumerable: true,
1379
1418
  configurable: true
1380
1419
  });
1381
- TuiDocExampleComponent.prototype.copyExampleLink = function () {
1382
- var hashPosition = this.location.href.indexOf('#');
1383
- var currentUrl = hashPosition > -1
1384
- ? this.location.href.substr(0, hashPosition)
1385
- : this.location.href;
1386
- var url = currentUrl + "#" + this.id;
1387
- this.clipboard.copy(url);
1388
- this.notifications
1389
- .show(this.texts[1], {
1390
- label: this.texts[2],
1391
- status: "success" /* Success */,
1392
- })
1393
- .subscribe();
1420
+ TuiDocNavigationComponent.prototype.isActive = function (route) {
1421
+ return route === this.active;
1422
+ };
1423
+ TuiDocNavigationComponent.prototype.onGroupClick = function (index) {
1424
+ this.openPagesGroupsArr[index] = !this.openPagesGroupsArr[index];
1425
+ };
1426
+ TuiDocNavigationComponent.prototype.closeMenu = function () {
1427
+ this.menuOpen = false;
1428
+ };
1429
+ TuiDocNavigationComponent.prototype.onSearchChange = function (search) {
1430
+ this.search = search;
1431
+ this.open = this.canOpen;
1432
+ };
1433
+ TuiDocNavigationComponent.prototype.onClick = function () {
1434
+ this.open = false;
1435
+ this.menuOpen = false;
1436
+ this.search = '';
1437
+ this.openActivePageGroup();
1438
+ };
1439
+ TuiDocNavigationComponent.prototype.filterItems = function (items, search) {
1440
+ return items.map(function (section) {
1441
+ return cdk.uniqBy(section.filter(function (_a) {
1442
+ var title = _a.title, _b = _a.keywords, keywords = _b === void 0 ? '' : _b;
1443
+ title = title.toLowerCase();
1444
+ search = search.toLowerCase();
1445
+ keywords = keywords.toLowerCase();
1446
+ return (title.includes(search) ||
1447
+ keywords.includes(search) ||
1448
+ title.includes(transliterateKeyboardLayout(search)) ||
1449
+ keywords.includes(transliterateKeyboardLayout(search)) ||
1450
+ search.replace(/-/gi, '').includes(title));
1451
+ }), 'title');
1452
+ });
1453
+ };
1454
+ TuiDocNavigationComponent.prototype.flattenSubPages = function (items) {
1455
+ return items.reduce(function (array, item) { return __spread(array, [
1456
+ item.reduce(function (pages, page) {
1457
+ return 'subPages' in page
1458
+ ? __spread(pages, page.subPages) : __spread(pages, [page]);
1459
+ }, []),
1460
+ ]); }, []);
1394
1461
  };
1395
- TuiDocExampleComponent.prototype.getTabs = function (content) {
1396
- return __spread([this.defaultTab], Object.keys(content));
1462
+ TuiDocNavigationComponent.prototype.isActiveRoute = function (route) {
1463
+ return this.router.isActive(route, false);
1397
1464
  };
1398
- TuiDocExampleComponent.ctorParameters = function () { return [
1399
- { type: String, decorators: [{ type: core.Attribute, args: ['id',] }] },
1400
- { type: clipboard.Clipboard, decorators: [{ type: core.Inject, args: [clipboard.Clipboard,] }] },
1401
- { type: core$1.TuiNotificationsService, decorators: [{ type: core.Inject, args: [core$1.TuiNotificationsService,] }] },
1402
- { type: Location, decorators: [{ type: core.Inject, args: [common$1.LOCATION,] }] },
1403
- { type: rxjs.Observable, decorators: [{ type: core.Inject, args: [kit.TUI_COPY_TEXTS,] }] },
1404
- { type: Array, decorators: [{ type: core.Inject, args: [TUI_DOC_EXAMPLE_TEXTS,] }] },
1405
- { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [TUI_DOC_CODE_EDITOR,] }] },
1406
- { type: undefined, decorators: [{ type: core.Inject, args: [TUI_DOC_EXAMPLE_CONTENT_PROCESSOR,] }] }
1465
+ TuiDocNavigationComponent.prototype.handleAnchorLink = function (hash) {
1466
+ var _this = this;
1467
+ setTimeout(function () {
1468
+ _this.navigateToAnchorLink(hash);
1469
+ }, SCROLL_INTO_VIEW_DELAY);
1470
+ };
1471
+ TuiDocNavigationComponent.prototype.openActivePageGroup = function () {
1472
+ var _this = this;
1473
+ this.items.forEach(function (pages, pagesIndex) {
1474
+ pages.forEach(function (page, pageIndex) {
1475
+ if ('route' in page && _this.isActiveRoute(page.route)) {
1476
+ _this.openPagesArr[pagesIndex] = true;
1477
+ _this.active = page.route;
1478
+ }
1479
+ if ('subPages' in page) {
1480
+ page.subPages.forEach(function (subPage) {
1481
+ if (_this.isActiveRoute(subPage.route)) {
1482
+ _this.openPagesArr[pagesIndex] = true;
1483
+ _this.openPagesGroupsArr[pagesIndex * 100 + pageIndex] = true;
1484
+ _this.active = subPage.route;
1485
+ }
1486
+ });
1487
+ }
1488
+ });
1489
+ });
1490
+ };
1491
+ TuiDocNavigationComponent.prototype.navigateToAnchorLink = function (fragment) {
1492
+ var element = fragment && this.documentRef.querySelector("#" + fragment);
1493
+ if (!element) {
1494
+ return;
1495
+ }
1496
+ element.classList.add('tui-doc-animated-example');
1497
+ element.scrollIntoView({
1498
+ block: 'start',
1499
+ inline: 'nearest',
1500
+ behavior: 'smooth',
1501
+ });
1502
+ };
1503
+ TuiDocNavigationComponent.ctorParameters = function () { return [
1504
+ { type: core.ChangeDetectorRef, decorators: [{ type: core.Inject, args: [core.ChangeDetectorRef,] }] },
1505
+ { type: platformBrowser.Title, decorators: [{ type: core.Inject, args: [platformBrowser.Title,] }] },
1506
+ { type: rxjs.Observable, decorators: [{ type: core.Inject, args: [NAVIGATION_TITLE,] }] },
1507
+ { type: Document, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] },
1508
+ { type: core$1.TuiModeDirective, decorators: [{ type: core.Inject, args: [core$1.TuiModeDirective,] }] },
1509
+ { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [addonMobile.TuiSidebarDirective,] }] },
1510
+ { type: Array, decorators: [{ type: core.Inject, args: [NAVIGATION_LABELS,] }] },
1511
+ { type: undefined, decorators: [{ type: core.Inject, args: [NAVIGATION_ITEMS,] }] },
1512
+ { type: String, decorators: [{ type: core.Inject, args: [TUI_DOC_SEARCH_TEXT,] }] },
1513
+ { type: router.Router, decorators: [{ type: core.Inject, args: [router.Router,] }] },
1514
+ { type: router.ActivatedRoute, decorators: [{ type: core.Inject, args: [router.ActivatedRoute,] }] }
1407
1515
  ]; };
1408
1516
  __decorate([
1409
- core.Input()
1410
- ], TuiDocExampleComponent.prototype, "heading", void 0);
1411
- __decorate([
1412
- core.Input()
1413
- ], TuiDocExampleComponent.prototype, "description", void 0);
1414
- __decorate([
1415
- core.Input()
1416
- ], TuiDocExampleComponent.prototype, "content", null);
1517
+ core.HostBinding('class._open')
1518
+ ], TuiDocNavigationComponent.prototype, "menuOpen", void 0);
1417
1519
  __decorate([
1418
- core.Input()
1419
- ], TuiDocExampleComponent.prototype, "componentName", void 0);
1520
+ cdk.tuiPure
1521
+ ], TuiDocNavigationComponent.prototype, "filterItems", null);
1420
1522
  __decorate([
1421
1523
  cdk.tuiPure
1422
- ], TuiDocExampleComponent.prototype, "getTabs", null);
1423
- TuiDocExampleComponent = __decorate([
1524
+ ], TuiDocNavigationComponent.prototype, "flattenSubPages", null);
1525
+ TuiDocNavigationComponent = __decorate([
1424
1526
  core.Component({
1425
- selector: 'tui-doc-example',
1426
- template: "<h3 *ngIf=\"heading\" class=\"t-title\">\n <span polymorpheus-outlet [content]=\"heading\"></span>\n <button\n *ngIf=\"id\"\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n class=\"t-link-icon\"\n icon=\"tuiIconLinkLarge\"\n appearance=\"icon\"\n [title]=\"copy$ | async\"\n (click)=\"copyExampleLink()\"\n ></button>\n</h3>\n<h4\n *ngIf=\"description\"\n class=\"t-description\"\n polymorpheus-outlet\n [content]=\"description\"\n></h4>\n<div class=\"t-example\">\n <div class=\"t-tabs-wrapper\">\n <tui-tabs-with-more\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <button *tuiTab tuiTab>{{tab}}</button>\n </ng-container>\n </tui-tabs-with-more>\n\n <button\n *ngIf=\"codeEditor\"\n tuiButton\n appearance=\"flat\"\n size=\"s\"\n (click)=\"codeEditor.open(componentName, id || '', processedContent)\"\n >\n Edit on {{codeEditor.name}}\n </button>\n </div>\n <ng-container [ngSwitch]=\"activeItem\">\n <div\n *ngIf=\"isDefaultItem; else codeTab\"\n class=\"t-demo\"\n automation-id=\"tui-doc-example\"\n >\n <ng-content></ng-content>\n </div>\n <ng-template #codeTab>\n <tui-doc-copy\n class=\"t-copy-code\"\n [cdkCopyToClipboard]=\"code\"\n ></tui-doc-copy>\n <tui-doc-code [code]=\"code\"></tui-doc-code>\n </ng-template>\n </ng-container>\n</div>\n",
1527
+ selector: 'tui-doc-navigation',
1528
+ template: "<tui-hosted-dropdown\n *tuiLet=\"filteredItems as filtered\"\n tuiAutoFocus\n tuiDropdownLimitWidth=\"fixed\"\n class=\"input\"\n [autoFocus]=\"!!sidebar\"\n [content]=\"dropdown\"\n [canOpen]=\"canOpen\"\n [(open)]=\"open\"\n>\n <tui-primitive-textfield\n iconAlign=\"left\"\n tuiTextfieldSize=\"m\"\n iconContent=\"tuiIconSearch\"\n [pseudoFocused]=\"open || null\"\n [tuiTextfieldCleaner]=\"true\"\n [tuiTextfieldLabelOutside]=\"true\"\n [value]=\"search\"\n (valueChange)=\"onSearchChange($event)\"\n >\n {{ searchText }}\n </tui-primitive-textfield>\n <ng-template #dropdown let-activeZone>\n <tui-data-list>\n <tui-opt-group\n *ngFor=\"let group of filtered; let index = index\"\n [label]=\"labels[index] || ''\"\n >\n <a\n *ngFor=\"let item of group\"\n tuiOption\n [routerLink]=\"item.route\"\n (click)=\"onClick()\"\n >\n {{ item.title }}\n </a>\n </tui-opt-group>\n </tui-data-list>\n </ng-template>\n</tui-hosted-dropdown>\n\n<nav class=\"navigation\">\n <tui-scrollbar class=\"scrollbar\" [tuiMode]=\"mode$ | async\">\n <tui-accordion [closeOthers]=\"false\" [rounded]=\"false\">\n <tui-accordion-item\n *ngFor=\"let label of labels; index as index\"\n size=\"s\"\n [borders]=\"null\"\n [(open)]=\"!!openPagesArr[index]\"\n >\n <span class=\"tui-space_left-2\">\n <strong>{{ label }}</strong>\n </span>\n <ng-template tuiAccordionItemContent>\n <div class=\"section\">\n <ng-container\n *ngFor=\"let item of items[index]; index as subIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"pages; context: {item: item, index: index * 100 + subIndex}\"\n ></ng-container>\n </ng-container>\n </div>\n </ng-template>\n </tui-accordion-item>\n </tui-accordion>\n <div class=\"items-container\">\n <ng-container\n *ngFor=\"let item of itemsWithoutSections; let index = index\"\n >\n <ng-container\n *ngTemplateOutlet=\"pages; context: {item: item, index: items.length - 1 + index}\"\n ></ng-container>\n </ng-container>\n </div>\n\n <ng-template #pages let-item=\"item\" let-index=\"index\">\n <a\n *ngIf=\"!item.subPages; else subPages\"\n tuiLink\n routerLinkActive=\"sublink_active\"\n class=\"sublink\"\n [routerLink]=\"item.route\"\n [scrollIntoView]=\"isActive(item.route)\"\n (click)=\"closeMenu()\"\n >\n {{ item.title }}\n </a>\n <ng-template #subPages>\n <div\n routerLinkActive\n class=\"subsection\"\n [routerLinkActiveOptions]=\"{exact: false}\"\n >\n <button\n *ngIf=\"item.subPages\"\n tuiLink\n type=\"button\"\n class=\"sublink sublink_subsection\"\n (click)=\"onGroupClick(index)\"\n >\n <tui-svg\n src=\"tuiIconChevronRight\"\n class=\"chevron\"\n [class.chevron_active]=\"!!openPagesGroupsArr[index]\"\n ></tui-svg>\n {{ item.title }}\n </button>\n <tui-expand\n class=\"tui-space_left-1\"\n [expanded]=\"!!openPagesGroupsArr[index]\"\n >\n <div class=\"section section_bordered\">\n <a\n *ngFor=\"let subPage of item.subPages\"\n tuiLink\n routerLinkActive=\"sublink_active\"\n class=\"sublink sublink_small\"\n [routerLink]=\"subPage.route\"\n [scrollIntoView]=\"isActive(subPage.route)\"\n (click)=\"closeMenu()\"\n >\n {{ subPage.title }}\n </a>\n </div>\n </tui-expand>\n </div>\n </ng-template>\n </ng-template>\n </tui-scrollbar>\n</nav>\n\n<ng-content></ng-content>\n",
1529
+ providers: NAVIGATION_PROVIDERS,
1427
1530
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1428
- styles: [":host{position:relative;display:block;padding-top:3.5rem;clear:right}.t-title{font:var(--tui-font-heading-5);margin:0 0 .5rem}@media screen and (max-width:47.9375em){:host{padding-top:2rem}.t-title{font:var(--tui-font-heading-6)}}.t-description{font:var(--tui-font-text-m);font-weight:400;margin:0}.t-description:first-letter,.t-title:first-letter{text-transform:capitalize}.t-example{position:relative;margin-top:1.5rem;border:1px solid var(--tui-base-03);border-radius:var(--tui-radius-m);box-shadow:0 .125rem .1875rem rgba(0,0,0,.1)}.t-tabs-wrapper{padding:0 2rem;box-shadow:inset 0 -1px var(--tui-base-03);display:flex;justify-content:space-between;align-items:center}@media screen and (max-width:47.9375em){.t-example{margin-top:.75rem}.t-tabs-wrapper{padding:0 1rem}}.t-tabs{flex-grow:1}.t-demo{padding:2rem;overflow-x:auto}@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.t-demo::-webkit-scrollbar,.t-demo::-webkit-scrollbar-thumb{width:1rem;height:1rem;border-radius:6.25rem;background-clip:padding-box;border:6px solid transparent}.t-demo::-webkit-scrollbar{background-color:transparent}.t-demo::-webkit-scrollbar-thumb{background-color:var(--tui-clear-hover)}.t-demo::-webkit-scrollbar-thumb:hover{background-color:var(--tui-clear-active)}.t-demo::-webkit-scrollbar-thumb:active{background-color:var(--tui-text-03)}}@media screen and (max-width:47.9375em){.t-demo{padding:1rem}}.t-copy-code{position:absolute;top:4.375rem;right:1rem}.t-link-icon{margin-left:.3rem;vertical-align:baseline}"]
1531
+ styles: [":host{z-index:1;display:flex;flex-direction:column;text-align:center;background:var(--tui-base-01)}.input{display:block;margin:1.25rem}.navigation{display:flex;max-height:100%;min-height:0;flex:1 1 0;text-align:left}.scrollbar{width:100%;scroll-behavior:smooth}.items-container{display:flex;flex-direction:column;padding:0 16px}.section{display:flex;flex-direction:column;align-items:flex-start;margin:-1rem 0 -.5rem}.section_bordered{margin:.5rem 0;border-left:1px solid var(--tui-base-03)}.subsection{margin-left:.5rem}.sublink{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;border:0;background:0 0;font-size:inherit;font:var(--tui-font-text-m);margin-left:.5rem;line-height:2.75rem}.sublink_small{margin-left:1rem;line-height:1.5rem}.sublink_small:not(:first-child){margin-top:1rem}.sublink_subsection{margin-left:0;line-height:2.75rem}.sublink_active{color:var(--tui-text-01)}.chevron{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;width:1rem;height:1rem;margin:-.25rem .25rem 0 -.1875rem}.chevron_active{transform:rotate(90deg)}"]
1429
1532
  }),
1430
- __param(0, core.Attribute('id')),
1431
- __param(1, core.Inject(clipboard.Clipboard)),
1432
- __param(2, core.Inject(core$1.TuiNotificationsService)),
1433
- __param(3, core.Inject(common$1.LOCATION)),
1434
- __param(4, core.Inject(kit.TUI_COPY_TEXTS)),
1435
- __param(5, core.Inject(TUI_DOC_EXAMPLE_TEXTS)),
1436
- __param(6, core.Optional()),
1437
- __param(6, core.Inject(TUI_DOC_CODE_EDITOR)),
1438
- __param(7, core.Inject(TUI_DOC_EXAMPLE_CONTENT_PROCESSOR))
1439
- ], TuiDocExampleComponent);
1440
- return TuiDocExampleComponent;
1533
+ __param(0, core.Inject(core.ChangeDetectorRef)),
1534
+ __param(1, core.Inject(platformBrowser.Title)),
1535
+ __param(2, core.Inject(NAVIGATION_TITLE)),
1536
+ __param(3, core.Inject(common.DOCUMENT)),
1537
+ __param(4, core.Inject(core$1.TuiModeDirective)),
1538
+ __param(5, core.Optional()),
1539
+ __param(5, core.Inject(addonMobile.TuiSidebarDirective)),
1540
+ __param(6, core.Inject(NAVIGATION_LABELS)),
1541
+ __param(7, core.Inject(NAVIGATION_ITEMS)),
1542
+ __param(8, core.Inject(TUI_DOC_SEARCH_TEXT)),
1543
+ __param(9, core.Inject(router.Router)),
1544
+ __param(10, core.Inject(router.ActivatedRoute))
1545
+ ], TuiDocNavigationComponent);
1546
+ return TuiDocNavigationComponent;
1441
1547
  }());
1442
1548
 
1443
- var TuiDocExampleModule = /** @class */ (function () {
1444
- function TuiDocExampleModule() {
1549
+ var TuiDocNavigationModule = /** @class */ (function () {
1550
+ function TuiDocNavigationModule() {
1445
1551
  }
1446
- TuiDocExampleModule = __decorate([
1552
+ TuiDocNavigationModule = __decorate([
1447
1553
  core.NgModule({
1448
1554
  imports: [
1449
1555
  common.CommonModule,
1450
- clipboard.ClipboardModule,
1451
- kit.TuiTabsModule,
1556
+ forms.FormsModule,
1557
+ router.RouterModule,
1558
+ ScrollIntoViewModule,
1452
1559
  core$1.TuiButtonModule,
1453
- TuiDocCopyModule,
1454
- TuiDocCodeModule,
1455
- ngPolymorpheus.PolymorpheusModule,
1560
+ core$1.TuiPrimitiveTextfieldModule,
1561
+ core$1.TuiTextfieldControllerModule,
1562
+ cdk.TuiActiveZoneModule,
1563
+ cdk.TuiLetModule,
1564
+ core$1.TuiModeModule,
1565
+ core$1.TuiLinkModule,
1566
+ core$1.TuiExpandModule,
1567
+ core$1.TuiHostedDropdownModule,
1568
+ core$1.TuiDropdownControllerModule,
1569
+ kit.TuiAccordionModule,
1570
+ core$1.TuiScrollbarModule,
1571
+ core$1.TuiSvgModule,
1572
+ core$1.TuiDataListModule,
1573
+ cdk.TuiAutoFocusModule,
1456
1574
  ],
1457
- declarations: [TuiDocExampleComponent],
1458
- exports: [TuiDocExampleComponent],
1575
+ declarations: [TuiDocNavigationComponent],
1576
+ exports: [TuiDocNavigationComponent],
1459
1577
  })
1460
- ], TuiDocExampleModule);
1461
- return TuiDocExampleModule;
1462
- }());
1463
-
1464
- // @dynamic
1465
- var TuiDocMainComponent = /** @class */ (function () {
1466
- function TuiDocMainComponent(storage, windowRef) {
1467
- this.storage = storage;
1468
- this.windowRef = windowRef;
1469
- this.night = this.storage.getItem('night') === 'true' ||
1470
- (this.storage.getItem('night') === null &&
1471
- this.windowRef.matchMedia('(prefers-color-scheme: dark)').matches);
1472
- this.change$ = new rxjs.Subject();
1473
- }
1474
- TuiDocMainComponent_1 = TuiDocMainComponent;
1475
- Object.defineProperty(TuiDocMainComponent.prototype, "mode", {
1476
- get: function () {
1477
- return this.night ? 'onDark' : null;
1478
- },
1479
- enumerable: true,
1480
- configurable: true
1481
- });
1482
- TuiDocMainComponent.prototype.onMode = function (night) {
1483
- this.night = night;
1484
- this.change$.next();
1485
- this.storage.setItem('night', String(night));
1486
- };
1487
- var TuiDocMainComponent_1;
1488
- TuiDocMainComponent.ctorParameters = function () { return [
1489
- { type: Storage, decorators: [{ type: core.Inject, args: [common$1.LOCAL_STORAGE,] }] },
1490
- { type: Window, decorators: [{ type: core.Inject, args: [common$1.WINDOW,] }] }
1491
- ]; };
1492
- TuiDocMainComponent = TuiDocMainComponent_1 = __decorate([
1493
- core.Component({
1494
- selector: 'tui-doc-main',
1495
- template: "<tui-theme-night *ngIf=\"night\"></tui-theme-night>\n<tui-root>\n <div class=\"tui-doc-page\">\n <tui-doc-navigation class=\"tui-doc-navigation\">\n <ng-content select=\"tuiDocNavigation\"></ng-content>\n </tui-doc-navigation>\n <div class=\"tui-doc-content\">\n <router-outlet class=\"tui-doc-outlet\"></router-outlet>\n </div>\n </div>\n <header tuiDocHeader>\n <label class=\"night-mode\">\n Night mode\n <tui-toggle\n class=\"tui-space_left-2\"\n [ngModel]=\"night\"\n (ngModelChange)=\"onMode($event)\"\n ></tui-toggle>\n </label>\n <ng-content select=\"tuiDocHeader\"></ng-content>\n </header>\n <ng-container ngProjectAs=\"tuiOverContent\">\n <ng-content select=\"tuiOverContent\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDialogs\">\n <ng-content select=\"tuiOverDialogs\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverNotifications\">\n <ng-content select=\"tuiOverNotifications\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverPortals\">\n <ng-content select=\"tuiOverPortals\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverHints\">\n <ng-content select=\"tuiOverHints\"></ng-content>\n </ng-container>\n</tui-root>\n",
1496
- encapsulation: core.ViewEncapsulation.None,
1497
- providers: [
1498
- {
1499
- provide: core$1.TuiModeDirective,
1500
- useExisting: core.forwardRef(function () { return TuiDocMainComponent_1; }),
1501
- },
1502
- cdk.TuiSwipeService,
1503
- ],
1504
- styles: ["html{scroll-padding-top:4rem;height:auto}@-webkit-keyframes tuiShaking{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}@keyframes tuiShaking{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}body{background:var(--tui-base-01);height:auto}tui-doc-main{display:block}code:not(.hljs):not(.exception){transition-property:background;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;background:var(--tui-base-02);color:var(--tui-text-02);vertical-align:middle;box-shadow:inset 0 -2px var(--tui-secondary);padding:.375rem .5rem;font-size:.875rem;border-radius:.5rem}:focus code:not(.exception){background:var(--tui-base-01)}.tui-doc-page{position:relative;z-index:0;padding-top:4rem}tui-doc-navigation.tui-doc-navigation{position:fixed;top:4rem;bottom:0;width:16.25rem;border-right:1px solid var(--tui-base-03)}.tui-doc-content{margin-left:16.25rem}@media screen and (max-width:47.9375em){tui-doc-navigation.tui-doc-navigation{display:none}.tui-doc-content{margin-left:0}}.tui-doc-outlet+*{display:block}.tui-doc-animated-example{-webkit-animation:1s .3s tuiShaking;animation:1s .3s tuiShaking}label.night-mode{cursor:pointer}.hljs-tag{background:0 0}.hljs{display:block;overflow-x:auto;padding:.5em;color:var(--tui-text-01);background-color:var(--tui-clear-disabled)}.hljs-subst,.hljs-title{font-weight:400;color:var(--tui-text-01)}.hljs-comment,.hljs-quote{color:var(--tui-text-03);font-style:italic}.hljs-meta{color:#e38162}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type{font-weight:700;color:var(--tui-link)}.hljs-attribute,.hljs-link,.hljs-number,.hljs-regexp{font-weight:700;color:var(--tui-support-06)}.hljs-link,.hljs-number,.hljs-regexp{font-weight:400}.hljs-string{color:var(--tui-positive);font-weight:700}.hljs-bullet,.hljs-formula,.hljs-symbol{color:var(--tui-text-01);background:var(--tui-base-02);font-style:italic}.hljs-doctag{text-decoration:underline}.hljs-template-variable,.hljs-variable{color:var(--tui-warning-fill)}.hljs-addition{background:var(--tui-success-bg)}.hljs-deletion{background:var(--tui-error-bg)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs .hljs-line-numbers{padding:0}.hljs-ln-numbers{vertical-align:top;opacity:.3;text-align:right;padding-right:1em!important}"]
1505
- }),
1506
- __param(0, core.Inject(common$1.LOCAL_STORAGE)),
1507
- __param(1, core.Inject(common$1.WINDOW))
1508
- ], TuiDocMainComponent);
1509
- return TuiDocMainComponent;
1578
+ ], TuiDocNavigationModule);
1579
+ return TuiDocNavigationModule;
1510
1580
  }());
1511
1581
 
1512
1582
  var TUI_DOC_LOGO = new core.InjectionToken('Main logo', {
@@ -1539,9 +1609,9 @@
1539
1609
  TuiDocHeaderComponent = __decorate([
1540
1610
  core.Component({
1541
1611
  selector: 'header[tuiDocHeader]',
1542
- template: "<button\n tuiIconButton\n class=\"menu\"\n icon=\"tuiIconMenuLarge\"\n appearance=\"icon\"\n [title]=\"menu\"\n (click)=\"onClick()\"\n (tuiActiveZoneChange)=\"onActiveZone($event)\"\n>\n <tui-doc-navigation\n *tuiSidebar=\"open$ | async\"\n class=\"navigation\"\n ></tui-doc-navigation>\n</button>\n<div polymorpheus-outlet class=\"logo tui-text_h5\" [content]=\"logo\">\n <ng-template let-src>\n <img class=\"img\" alt=\"Logo\" [src]=\"src\" />\n </ng-template>\n</div>\n<ng-content></ng-content>\n",
1612
+ template: "<button\n tuiIconButton\n icon=\"tuiIconMenuLarge\"\n appearance=\"icon\"\n class=\"menu\"\n [title]=\"menu\"\n (click)=\"onClick()\"\n (tuiActiveZoneChange)=\"onActiveZone($event)\"\n>\n <tui-doc-navigation\n *tuiSidebar=\"open$ | async\"\n class=\"navigation\"\n ></tui-doc-navigation>\n</button>\n<div polymorpheus-outlet class=\"logo tui-text_h5\" [content]=\"logo\">\n <ng-template let-src>\n <img alt=\"Logo\" class=\"img\" [src]=\"src\" />\n </ng-template>\n</div>\n<ng-content></ng-content>\n",
1543
1613
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1544
- styles: [":host{box-shadow:0 .125rem 1rem rgba(0,0,0,.08);position:fixed;top:0;left:0;right:0;display:flex;height:3.9375rem;align-items:center;padding:0 1.25rem;background:var(--tui-base-01);border-bottom:1px solid var(--tui-base-03);z-index:1}.logo{margin-right:auto}.img{display:block}.menu{margin-left:-1.25rem}@media screen and (min-width:48em){.menu{display:none}}.navigation{min-height:100%}"]
1614
+ styles: [":host{box-shadow:0 .125rem 1rem rgba(0,0,0,.08);position:fixed;top:0;left:0;right:0;z-index:1;display:flex;height:3.9375rem;align-items:center;padding:0 1.25rem;background:var(--tui-base-01);border-bottom:1px solid var(--tui-base-03)}.logo{margin-right:auto}.img{display:block}.menu{margin-left:-1.25rem}@media screen and (min-width:48em){.menu{display:none}}.navigation{min-height:100%}"]
1545
1615
  }),
1546
1616
  __param(0, core.Inject(TUI_DOC_LOGO)),
1547
1617
  __param(1, core.Inject(TUI_DOC_MENU_TEXT)),
@@ -1599,26 +1669,6 @@
1599
1669
  factory: function () { return []; },
1600
1670
  });
1601
1671
 
1602
- var TuiDocPageTabConnectorDirective = /** @class */ (function () {
1603
- function TuiDocPageTabConnectorDirective(template) {
1604
- this.template = template;
1605
- }
1606
- TuiDocPageTabConnectorDirective.ctorParameters = function () { return [
1607
- { type: core.TemplateRef, decorators: [{ type: core.Inject, args: [core.TemplateRef,] }] }
1608
- ]; };
1609
- __decorate([
1610
- core.Input(),
1611
- cdk.tuiDefaultProp()
1612
- ], TuiDocPageTabConnectorDirective.prototype, "pageTab", void 0);
1613
- TuiDocPageTabConnectorDirective = __decorate([
1614
- core.Directive({
1615
- selector: '[pageTab]',
1616
- }),
1617
- __param(0, core.Inject(core.TemplateRef))
1618
- ], TuiDocPageTabConnectorDirective);
1619
- return TuiDocPageTabConnectorDirective;
1620
- }());
1621
-
1622
1672
  var TUI_DOC_SEE_ALSO = new core.InjectionToken('Array of arrays of related pages', {
1623
1673
  factory: function () { return []; },
1624
1674
  });
@@ -1641,6 +1691,26 @@
1641
1691
  return Array.from(seeAlsoSet);
1642
1692
  }
1643
1693
 
1694
+ var TuiDocPageTabConnectorDirective = /** @class */ (function () {
1695
+ function TuiDocPageTabConnectorDirective(template) {
1696
+ this.template = template;
1697
+ }
1698
+ TuiDocPageTabConnectorDirective.ctorParameters = function () { return [
1699
+ { type: core.TemplateRef, decorators: [{ type: core.Inject, args: [core.TemplateRef,] }] }
1700
+ ]; };
1701
+ __decorate([
1702
+ core.Input(),
1703
+ cdk.tuiDefaultProp()
1704
+ ], TuiDocPageTabConnectorDirective.prototype, "pageTab", void 0);
1705
+ TuiDocPageTabConnectorDirective = __decorate([
1706
+ core.Directive({
1707
+ selector: '[pageTab]',
1708
+ }),
1709
+ __param(0, core.Inject(core.TemplateRef))
1710
+ ], TuiDocPageTabConnectorDirective);
1711
+ return TuiDocPageTabConnectorDirective;
1712
+ }());
1713
+
1644
1714
  // Ambient type cannot be used without dynamic https://github.com/angular/angular/issues/23395
1645
1715
  // @dynamic
1646
1716
  var TuiDocPageComponent = /** @class */ (function () {
@@ -1689,10 +1759,10 @@
1689
1759
  TuiDocPageComponent = __decorate([
1690
1760
  core.Component({
1691
1761
  selector: 'tui-doc-page',
1692
- template: "<header class=\"t-header\">\n <h1 class=\"t-title\">\n {{header}}\n <tui-tag\n *ngIf=\"deprecated !== null\"\n class=\"t-tag t-tag_deprecated\"\n value=\"deprecated\"\n status=\"custom\"\n ></tui-tag>\n <tui-tag\n *ngIf=\"package\"\n class=\"t-tag t-tag_package\"\n status=\"custom\"\n [value]=\"package\"\n [autoColor]=\"true\"\n ></tui-tag>\n </h1>\n <tui-tabs-with-more\n *ngIf=\"tabConnectors.length\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container\n *ngFor=\"let tab of tabConnectors; first as first; index as index\"\n >\n <ng-container *ngIf=\"first; else dynamicTab\">\n <a\n *tuiTab\n tuiTab\n routerLink=\"./\"\n routerLinkActive\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n {{tab.pageTab || defaultTabs[index]}}\n </a>\n </ng-container>\n <ng-template #dynamicTab>\n <a\n *tuiTab\n tuiTab\n routerLinkActive\n [routerLink]=\"getRouterLink(tab.pageTab || defaultTabs[index])\"\n >\n {{tab.pageTab || defaultTabs[index]}}\n </a>\n </ng-template>\n </ng-container>\n </tui-tabs-with-more>\n <tui-doc-source-code\n class=\"t-source-code\"\n [header]=\"header\"\n [package]=\"package\"\n [type]=\"type\"\n [path]=\"path\"\n ></tui-doc-source-code>\n</header>\n<div class=\"t-content\">\n <ng-content></ng-content>\n <tui-doc-see-also\n *ngIf=\"showSeeAlso\"\n class=\"t-see-also\"\n [seeAlso]=\"seeAlso\"\n ></tui-doc-see-also>\n <ng-container *ngFor=\"let tab of tabConnectors; index as index\">\n <ng-container *ngIf=\"index === activeItemIndex\">\n <ng-container *ngTemplateOutlet=\"tab.template\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n",
1762
+ template: "<header class=\"t-header\">\n <h1 class=\"t-title\">\n {{ header }}\n <tui-tag\n *ngIf=\"deprecated !== null\"\n value=\"deprecated\"\n status=\"custom\"\n class=\"t-tag t-tag_deprecated\"\n ></tui-tag>\n <tui-tag\n *ngIf=\"package\"\n status=\"custom\"\n class=\"t-tag t-tag_package\"\n [value]=\"package\"\n [autoColor]=\"true\"\n ></tui-tag>\n </h1>\n <tui-tabs-with-more\n *ngIf=\"tabConnectors.length\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container\n *ngFor=\"let tab of tabConnectors; first as first; index as index\"\n >\n <ng-container *ngIf=\"first; else dynamicTab\">\n <a\n *tuiTab\n tuiTab\n routerLink=\"./\"\n routerLinkActive\n [routerLinkActiveOptions]=\"{exact: true}\"\n >\n {{ tab.pageTab || defaultTabs[index] }}\n </a>\n </ng-container>\n <ng-template #dynamicTab>\n <a\n *tuiTab\n tuiTab\n routerLinkActive\n [routerLink]=\"getRouterLink(tab.pageTab || defaultTabs[index])\"\n >\n {{ tab.pageTab || defaultTabs[index] }}\n </a>\n </ng-template>\n </ng-container>\n </tui-tabs-with-more>\n <tui-doc-source-code\n class=\"t-source-code\"\n [header]=\"header\"\n [package]=\"package\"\n [type]=\"type\"\n [path]=\"path\"\n ></tui-doc-source-code>\n</header>\n<div class=\"t-content\">\n <ng-content></ng-content>\n <tui-doc-see-also\n *ngIf=\"showSeeAlso\"\n class=\"t-see-also\"\n [seeAlso]=\"seeAlso\"\n ></tui-doc-see-also>\n <ng-container *ngFor=\"let tab of tabConnectors; index as index\">\n <ng-container *ngIf=\"index === activeItemIndex\">\n <ng-container *ngTemplateOutlet=\"tab.template\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n",
1693
1763
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1694
1764
  providers: PAGE_PROVIDERS,
1695
- styles: [":host{display:flex;flex-direction:column;min-height:0;flex-basis:0;flex-grow:1}.t-header{font:var(--tui-font-heading-3);display:flex;flex-wrap:wrap;min-height:7.25rem;color:var(--tui-text-01);box-shadow:inset 0 -1px 0 0 var(--tui-base-03);padding:3.75rem 0 0;box-sizing:border-box;flex-shrink:0;margin:0 min(10vw,8.75rem)}@media screen and (max-width:47.9375em){.t-header{font:var(--tui-font-heading-4);min-height:4.5rem;padding:1.25rem 1.25rem 0;margin:0}}.t-title{min-width:100%;font-size:inherit;margin:0}.t-tag{vertical-align:middle;text-transform:uppercase;margin-right:.5rem}.t-tag_deprecated{background-color:var(--tui-error-fill)}.t-tag.t-tag_package{color:#000}.t-tabs{flex:1;margin:1.125rem .3125rem 0 0}@media screen and (max-width:47.9375em){.t-tabs{margin-top:.25rem}}.t-content{padding:2rem 0;margin:0 min(10vw,8.75rem)}@media screen and (max-width:47.9375em){.t-content{padding:2rem 1.25rem;margin:0}}.t-see-also{min-width:18.75rem;width:30%;float:right;margin-left:1.5rem}@media screen and (max-width:47.9375em){.t-see-also{float:none;width:100%;margin:0 0 1.5rem}}.t-source-code{align-self:flex-end;line-height:2.75rem}"]
1765
+ styles: [":host{display:flex;flex-direction:column;min-height:0;flex-basis:0;flex-grow:1}.t-header{display:flex;font:var(--tui-font-heading-3);flex-wrap:wrap;min-height:7.25rem;color:var(--tui-text-01);box-shadow:inset 0 -1px 0 0 var(--tui-base-03);padding:3.75rem 0 0;box-sizing:border-box;flex-shrink:0;margin:0 min(10vw,8.75rem)}@media screen and (max-width:47.9375em){.t-header{font:var(--tui-font-heading-4);min-height:4.5rem;padding:1.25rem 1.25rem 0;margin:0}}.t-title{min-width:100%;font-size:inherit;margin:0}.t-tag{vertical-align:middle;text-transform:uppercase;margin-right:.5rem}.t-tag_deprecated{background-color:var(--tui-error-fill)}.t-tag.t-tag_package{color:#000}.t-tabs{flex:1;margin:1.125rem .3125rem 0 0}@media screen and (max-width:47.9375em){.t-tabs{margin-top:.25rem}}.t-content{padding:2rem 0;margin:0 min(10vw,8.75rem)}@media screen and (max-width:47.9375em){.t-content{padding:2rem 1.25rem;margin:0}}.t-see-also{min-width:18.75rem;width:30%;float:right;margin-left:1.5rem}@media screen and (max-width:47.9375em){.t-see-also{float:none;width:100%;margin:0 0 1.5rem}}.t-source-code{align-self:flex-end;line-height:2.75rem}"]
1696
1766
  }),
1697
1767
  __param(0, core.Attribute('deprecated')),
1698
1768
  __param(1, core.Inject(TUI_DOC_DEFAULT_TABS)),
@@ -1730,7 +1800,7 @@
1730
1800
  TuiDocSeeAlsoComponent = __decorate([
1731
1801
  core.Component({
1732
1802
  selector: 'tui-doc-see-also',
1733
- template: "<h5 class=\"header\">{{text}}</h5>\n<ng-container *ngFor=\"let item of seeAlso; last as last\">\n <a tuiLink [routerLink]=\"getRouterLink(item)\">{{item}}</a>\n <ng-container *ngIf=\"!last\">, </ng-container>\n</ng-container>\n",
1803
+ template: "<h5 class=\"header\">{{ text }}</h5>\n<ng-container *ngFor=\"let item of seeAlso; last as last\">\n <a tuiLink [routerLink]=\"getRouterLink(item)\">{{ item }}</a>\n <ng-container *ngIf=\"!last\">,</ng-container>\n</ng-container>\n",
1734
1804
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1735
1805
  styles: [":host{display:block}.header{font-size:.6875rem;line-height:1rem;text-transform:uppercase;letter-spacing:.075em;color:var(--tui-text-02);margin:0 0 .5rem;white-space:nowrap}"]
1736
1806
  }),
@@ -1803,7 +1873,7 @@
1803
1873
  TuiDocSourceCodeComponent = __decorate([
1804
1874
  core.Component({
1805
1875
  selector: 'tui-doc-source-code',
1806
- template: "<div\n polymorpheus-outlet\n *ngIf=\"!!sourceCode\"\n [content]=\"sourceCode\"\n [context]=\"pathOptions\"\n>\n <ng-template let-link>\n <a\n *ngIf=\"link\"\n tuiIconButton\n type=\"button\"\n icon=\"tuiIconCodeLarge\"\n appearance=\"icon\"\n target=\"_blank\"\n size=\"s\"\n [title]=\"text\"\n [href]=\"link\"\n ></a>\n </ng-template>\n</div>\n",
1876
+ template: "<div\n *ngIf=\"!!sourceCode\"\n polymorpheus-outlet\n [content]=\"sourceCode\"\n [context]=\"pathOptions\"\n>\n <ng-template let-link>\n <a\n *ngIf=\"link\"\n tuiIconButton\n type=\"button\"\n icon=\"tuiIconCodeLarge\"\n appearance=\"icon\"\n target=\"_blank\"\n size=\"s\"\n [title]=\"text\"\n [href]=\"link\"\n ></a>\n </ng-template>\n</div>\n",
1807
1877
  changeDetection: core.ChangeDetectionStrategy.OnPush
1808
1878
  }),
1809
1879
  __param(0, core.Inject(TUI_DOC_SOURCE_CODE)),
@@ -1886,6 +1956,23 @@
1886
1956
  },
1887
1957
  ];
1888
1958
 
1959
+ var TuiAddonDocModule = /** @class */ (function () {
1960
+ function TuiAddonDocModule() {
1961
+ }
1962
+ TuiAddonDocModule = __decorate([
1963
+ core.NgModule({
1964
+ exports: [
1965
+ TuiDocCodeModule,
1966
+ TuiDocDemoModule,
1967
+ TuiDocDocumentationModule,
1968
+ TuiDocPageModule,
1969
+ TuiDocExampleModule,
1970
+ ],
1971
+ })
1972
+ ], TuiAddonDocModule);
1973
+ return TuiAddonDocModule;
1974
+ }());
1975
+
1889
1976
  /**
1890
1977
  * Generates typical page routing structure
1891
1978
  */
@@ -1904,23 +1991,6 @@
1904
1991
  ];
1905
1992
  }
1906
1993
 
1907
- var TuiAddonDocModule = /** @class */ (function () {
1908
- function TuiAddonDocModule() {
1909
- }
1910
- TuiAddonDocModule = __decorate([
1911
- core.NgModule({
1912
- exports: [
1913
- TuiDocCodeModule,
1914
- TuiDocDemoModule,
1915
- TuiDocDocumentationModule,
1916
- TuiDocPageModule,
1917
- TuiDocExampleModule,
1918
- ],
1919
- })
1920
- ], TuiAddonDocModule);
1921
- return TuiAddonDocModule;
1922
- }());
1923
-
1924
1994
  exports.DEMO_TEXTS = DEMO_TEXTS;
1925
1995
  exports.DOC_TEXTS = DOC_TEXTS;
1926
1996
  exports.EXAMPLE_TEXTS = EXAMPLE_TEXTS;
@@ -1962,24 +2032,25 @@
1962
2032
  exports.TuiDocPageModule = TuiDocPageModule;
1963
2033
  exports.TuiDocPageTabConnectorDirective = TuiDocPageTabConnectorDirective;
1964
2034
  exports.generateRoutes = generateRoutes;
1965
- exports.ɵa = NAVIGATION_TITLE;
1966
- exports.ɵb = NAVIGATION_LABELS;
1967
- exports.ɵc = NAVIGATION_ITEMS;
1968
- exports.ɵd = NAVIGATION_PROVIDERS;
1969
- exports.ɵe = titleProviderFactory;
1970
- exports.ɵf = labelsProviderFactory;
1971
- exports.ɵg = itemsProviderFactory;
1972
- exports.ɵh = TuiInputOpacityModule;
1973
- exports.ɵi = TuiInputOpacityDirective;
1974
- exports.ɵj = TuiDocHeaderModule;
1975
- exports.ɵk = TuiDocHeaderComponent;
1976
- exports.ɵl = PAGE_SEE_ALSO;
1977
- exports.ɵm = PAGE_PROVIDERS;
1978
- exports.ɵn = seeAlsoProviderFactory;
1979
- exports.ɵo = TuiDocSeeAlsoModule;
1980
- exports.ɵp = TuiDocSeeAlsoComponent;
1981
- exports.ɵq = TuiDocSourceCodeModule;
1982
- exports.ɵr = TuiDocSourceCodeComponent;
2035
+ exports.ɵa = TuiInputOpacityModule;
2036
+ exports.ɵb = TuiInputOpacityDirective;
2037
+ exports.ɵc = TuiDocExampleGetTabsPipe;
2038
+ exports.ɵd = TuiDocHeaderModule;
2039
+ exports.ɵe = NAVIGATION_TITLE;
2040
+ exports.ɵf = NAVIGATION_LABELS;
2041
+ exports.ɵg = NAVIGATION_ITEMS;
2042
+ exports.ɵh = NAVIGATION_PROVIDERS;
2043
+ exports.ɵi = titleProviderFactory;
2044
+ exports.ɵj = labelsProviderFactory;
2045
+ exports.ɵk = itemsProviderFactory;
2046
+ exports.ɵl = TuiDocHeaderComponent;
2047
+ exports.ɵm = PAGE_SEE_ALSO;
2048
+ exports.ɵn = PAGE_PROVIDERS;
2049
+ exports.ɵo = seeAlsoProviderFactory;
2050
+ exports.ɵp = TuiDocSeeAlsoModule;
2051
+ exports.ɵq = TuiDocSeeAlsoComponent;
2052
+ exports.ɵr = TuiDocSourceCodeModule;
2053
+ exports.ɵs = TuiDocSourceCodeComponent;
1983
2054
 
1984
2055
  Object.defineProperty(exports, '__esModule', { value: true });
1985
2056