From 72e97e9a19bf6ee8d5d8c7c955fe9f564354a569 Mon Sep 17 00:00:00 2001 From: Andrei Fateev Date: Fri, 17 Jul 2026 16:37:05 +0200 Subject: [PATCH] docs: add code examples for Tree Select, Tree Autocomplete, Tooltip --- .../tooltip-page/tooltip-page.component.html | 40 +-- .../tooltip-page/tooltip-page.component.scss | 41 +-- .../tooltip-page/tooltip-page.component.ts | 8 +- .../tooltip-page/tooltip-page.examples.ts | 83 ++++++ .../tree-autocomplete-page.component.html | 227 +++++++++------ .../tree-autocomplete-page.component.scss | 6 - .../tree-autocomplete-page.component.ts | 7 +- .../tree-autocomplete-page.examples.ts | 269 ++++++++++++++++++ .../tree-select-page.component.html | 222 +++++++++------ .../tree-select-page.component.scss | 6 - .../tree-select-page.component.ts | 7 +- .../tree-select-page.examples.ts | 262 +++++++++++++++++ 12 files changed, 935 insertions(+), 243 deletions(-) create mode 100644 projects/composition/src/app/pages/tooltip-page/tooltip-page.examples.ts create mode 100644 projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.examples.ts create mode 100644 projects/composition/src/app/pages/tree-select-page/tree-select-page.examples.ts diff --git a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.html b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.html index 2a83470e5..8db2d7ebb 100644 --- a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.html +++ b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.html @@ -1,9 +1,8 @@ -
-
- Different tooltip positions (auto repositioning if doesn't fit the screen) -
+
-
+ -
-
Different opening methods
+
-
+ -
-
Long open and close delays
+
-
+ -
-
- Persistent tooltip with inner HTML and custom style -
+ -
+ -
-
Tooltip disabled state
+
-
+
diff --git a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.scss b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.scss index 7541f7e47..0a2c4385e 100644 --- a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.scss +++ b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.scss @@ -1,33 +1,18 @@ :host { - .tooltip-elems-group { - margin-bottom: 2rem; - margin-left: 0.5rem; - margin-right: 0.5rem; - - &-title { - font-size: 1.5rem; - color: var(--cps-color-depth); - border-bottom: 0.0625rem solid lightgrey; - margin-bottom: 0.75rem; - padding-bottom: 0.5rem; - font-weight: 600; - } - &-elem-left { - display: flex; - flex-wrap: wrap; - gap: 0.75rem 2.5rem; - align-items: center; - } + .tooltip-elems-group-elem-left { + display: flex; + flex-wrap: wrap; + gap: 0.75rem 2.5rem; + align-items: center; + } - &-row { - width: 100%; - display: flex; - flex-wrap: wrap; - justify-content: space-between; - gap: 0.75rem; - margin-bottom: 1.125rem; - align-items: center; - } + .tooltip-elems-group-row { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 0.75rem; + align-items: center; } } diff --git a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.ts b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.ts index c3f7388cd..788003c4c 100644 --- a/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.ts +++ b/projects/composition/src/app/pages/tooltip-page/tooltip-page.component.ts @@ -5,10 +5,10 @@ import { CpsCheckboxComponent, CpsTooltipDirective } from 'cps-ui-kit'; - import { ComponentDocsViewerComponent } from '../../components/component-docs-viewer/component-docs-viewer.component'; - +import { CodeExampleComponent } from '../../components/code-example/code-example.component'; import ComponentData from '../../api-data/cps-tooltip.json'; +import { tooltipExamples } from './tooltip-page.examples'; @Component({ selector: 'tooltip-page', @@ -17,7 +17,8 @@ import ComponentData from '../../api-data/cps-tooltip.json'; CpsButtonComponent, CpsTooltipDirective, CpsCheckboxComponent, - ComponentDocsViewerComponent + ComponentDocsViewerComponent, + CodeExampleComponent ], templateUrl: './tooltip-page.component.html', styleUrls: ['./tooltip-page.component.scss'], @@ -26,4 +27,5 @@ import ComponentData from '../../api-data/cps-tooltip.json'; export class TooltipPageComponent { componentData = ComponentData; ttipEnabled = false; + readonly examples = tooltipExamples; } diff --git a/projects/composition/src/app/pages/tooltip-page/tooltip-page.examples.ts b/projects/composition/src/app/pages/tooltip-page/tooltip-page.examples.ts new file mode 100644 index 000000000..1b8999d43 --- /dev/null +++ b/projects/composition/src/app/pages/tooltip-page/tooltip-page.examples.ts @@ -0,0 +1,83 @@ +export const tooltipExamples: Record = { + tooltipPositions: { + html: ` + + + + + + + +` + }, + + openingMethods: { + html: ` + + + +` + }, + + openCloseDelays: { + html: ` + + + +` + }, + + persistentHtmlTooltip: { + html: ` + +` + }, + + disabledTooltipState: { + html: ` + + +`, + ts: ` +ttipEnabled = false;` + } +}; diff --git a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.html b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.html index fe9977e6a..cbb019e06 100644 --- a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.html +++ b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.html @@ -1,7 +1,10 @@ -
-
+ + + + - - + + + + - - + + + + - - + + + + - - + + + + - + + + - - - -
- - - {{ syncVal?.label }} -
+ + + + + +
- - - + [(ngModel)]="syncVal" + [ngModelOptions]="{ standalone: true }"> + {{ syncVal?.label }}
- +
+ + + + + + + + + + diff --git a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.scss b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.scss index f902635d4..fe6f52680 100644 --- a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.scss +++ b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.scss @@ -1,9 +1,3 @@ -.tree-autocompletes-group { - gap: 1.5rem; - display: flex; - flex-direction: column; -} - .sync-val-example { display: flex; align-items: center; diff --git a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.ts b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.ts index 679681b3c..db3aa9fed 100644 --- a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.ts +++ b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.component.ts @@ -7,16 +7,18 @@ import { Validators } from '@angular/forms'; import { CpsTreeAutocompleteComponent } from 'cps-ui-kit'; - import ComponentData from '../../api-data/cps-tree-autocomplete.json'; import { ComponentDocsViewerComponent } from '../../components/component-docs-viewer/component-docs-viewer.component'; +import { CodeExampleComponent } from '../../components/code-example/code-example.component'; +import { treeAutocompleteExamples } from './tree-autocomplete-page.examples'; @Component({ imports: [ CpsTreeAutocompleteComponent, FormsModule, ReactiveFormsModule, - ComponentDocsViewerComponent + ComponentDocsViewerComponent, + CodeExampleComponent ], selector: 'app-tree-autocomplete-page', templateUrl: './tree-autocomplete-page.component.html', @@ -24,6 +26,7 @@ import { ComponentDocsViewerComponent } from '../../components/component-docs-vi host: { class: 'composition-page' } }) export class TreeAutocompletePageComponent implements OnInit { + readonly examples = treeAutocompleteExamples; selectedItems = [ { label: 'AttrB', diff --git a/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.examples.ts b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.examples.ts new file mode 100644 index 000000000..f3d14b988 --- /dev/null +++ b/projects/composition/src/app/pages/tree-autocomplete-page/tree-autocomplete-page.examples.ts @@ -0,0 +1,269 @@ +const treeOptionsTs = ` +options = [ + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 1', + children: [ + { + label: 'Attr1_1', + data: 'This is attribute 1 1', + attrType: 'struct', + children: [ + { + label: 'AttrA', + desc: 'Attribute A' + }, + { + label: 'AttrB', + info: 'AttrB', + attrType: 'number' + } + ] + }, + { + label: 'Attr2_1', + data: 'This is attribute 2 1', + attrType: 'struct', + children: [ + { + label: 'AttrC', + desc: 'C' + } + ] + } + ] + }, + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 2', + children: [ + { + label: 'Attr1_2', + data: 'attr1 data' + }, + { + label: 'Attr2_2', + desc: 'attr2 desc' + }, + { + label: 'Attr3_2', + data: 'attr3 data' + } + ] + }, + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 3', + children: [ + { + label: 'Attr1_3', + data: 'attr1 data', + children: [ + { + label: 'Attr1 A', + data: 'attr 1 a data', + attrType: 'decimal' + }, + { + label: 'Attr1 B', + desc: 'Attr1 b desc' + } + ] + }, + { + label: 'Attr2_3', + data: 'De Niro Movies', + attrType: 'struct', + children: [ + { + label: 'Attr2 A', + data: 'attr2 a data', + description: 'attr2 a description' + } + ] + } + ] + } +];`; + +export const treeAutocompleteExamples: Record< + string, + { html: string; ts?: string } +> = { + requiredTreeAutocomplete: { + html: ` +
+ + +
`, + ts: ` +private readonly _formBuilder = inject(UntypedFormBuilder); + +${treeOptionsTs.trim()} + +form!: UntypedFormGroup; + +ngOnInit(): void { + this.form = this._formBuilder.group({ + requiredTreeAutocomplete: [ + this.options[1].children[0], + [Validators.required] + ] + }); +}` + }, + + loadingTreeAutocomplete: { + html: ` + +`, + ts: treeOptionsTs + }, + + disabledTreeAutocomplete: { + html: ` + +` + }, + + multipleTreeAutocomplete: { + html: ` + +`, + ts: ` +${treeOptionsTs.trim()} + +selectedItems = [ + { + label: 'AttrB', + info: 'AttrB', + attrType: 'number' + } +];` + }, + + virtualScrollTreeAutocomplete: { + html: ` + +`, + ts: treeOptionsTs + }, + + nonClosableChipsTreeAutocomplete: { + html: ` +`, + ts: treeOptionsTs + }, + + prefixIconTreeAutocomplete: { + html: ` + +`, + ts: treeOptionsTs + }, + + twoWayBindingTreeAutocomplete: { + html: ` +
+ + + {{ syncVal?.label }} +
`, + ts: ` +${treeOptionsTs.trim()} + +syncVal: any = null;` + }, + + underlinedTreeAutocomplete: { + html: ` + +`, + ts: treeOptionsTs + }, + + borderlessTreeAutocomplete: { + html: ` + +`, + ts: treeOptionsTs + } +}; diff --git a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.html b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.html index 1f96f4b6a..6e8dae9b9 100644 --- a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.html +++ b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.html @@ -1,7 +1,10 @@ -
-
+ + - - + + - - + + + + - - - - - + + + + - + + + + - - + + + + -
- - - {{ syncVal?.label }} -
+ + + - - + + + + + +
+ [(ngModel)]="syncVal" + [ngModelOptions]="{ standalone: true }"> + {{ syncVal?.label }}
- +
+ + + + + + + + + + diff --git a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.scss b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.scss index cc0971412..fe6f52680 100644 --- a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.scss +++ b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.scss @@ -1,9 +1,3 @@ -.tree-selects-group { - gap: 1.5rem; - display: flex; - flex-direction: column; -} - .sync-val-example { display: flex; align-items: center; diff --git a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.ts b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.ts index 53bc0cfdd..89953b611 100644 --- a/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.ts +++ b/projects/composition/src/app/pages/tree-select-page/tree-select-page.component.ts @@ -7,16 +7,18 @@ import { Validators } from '@angular/forms'; import { CpsTreeSelectComponent } from 'cps-ui-kit'; - import ComponentData from '../../api-data/cps-tree-select.json'; import { ComponentDocsViewerComponent } from '../../components/component-docs-viewer/component-docs-viewer.component'; +import { CodeExampleComponent } from '../../components/code-example/code-example.component'; +import { treeSelectExamples } from './tree-select-page.examples'; @Component({ imports: [ CpsTreeSelectComponent, FormsModule, ReactiveFormsModule, - ComponentDocsViewerComponent + ComponentDocsViewerComponent, + CodeExampleComponent ], selector: 'app-tree-select-page', templateUrl: './tree-select-page.component.html', @@ -24,6 +26,7 @@ import { ComponentDocsViewerComponent } from '../../components/component-docs-vi host: { class: 'composition-page' } }) export class TreeSelectPageComponent implements OnInit { + readonly examples = treeSelectExamples; selectedItems = [ { label: 'AttrB', diff --git a/projects/composition/src/app/pages/tree-select-page/tree-select-page.examples.ts b/projects/composition/src/app/pages/tree-select-page/tree-select-page.examples.ts new file mode 100644 index 000000000..53950476c --- /dev/null +++ b/projects/composition/src/app/pages/tree-select-page/tree-select-page.examples.ts @@ -0,0 +1,262 @@ +const treeOptionsTs = ` +options = [ + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 1', + children: [ + { + label: 'Attr1_1', + data: 'This is attribute 1 1', + attrType: 'struct', + children: [ + { + label: 'AttrA', + desc: 'Attribute A' + }, + { + label: 'AttrB', + info: 'AttrB', + attrType: 'number' + } + ] + }, + { + label: 'Attr2_1', + data: 'This is attribute 2 1', + attrType: 'struct', + children: [ + { + label: 'AttrC', + desc: 'C' + } + ] + } + ] + }, + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 2', + children: [ + { + label: 'Attr1_2', + data: 'attr1 data' + }, + { + label: 'Attr2_2', + desc: 'attr2 desc' + }, + { + label: 'Attr3_2', + data: 'attr3 data' + } + ] + }, + { + isDirectory: true, // RESERVED KEY + label: 'Dataset 3', + children: [ + { + label: 'Attr1_3', + data: 'attr1 data', + children: [ + { + label: 'Attr1 A', + data: 'attr 1 a data', + attrType: 'decimal' + }, + { + label: 'Attr1 B', + desc: 'Attr1 b desc' + } + ] + }, + { + label: 'Attr2_3', + data: 'De Niro Movies', + attrType: 'struct', + children: [ + { + label: 'Attr2 A', + data: 'attr2 a data', + description: 'attr2 a description' + } + ] + } + ] + } +];`; + +export const treeSelectExamples: Record = + { + requiredTreeSelect: { + html: ` +
+ + +
`, + ts: ` +private readonly _formBuilder = inject(UntypedFormBuilder); + +${treeOptionsTs.trim()} + +form!: UntypedFormGroup; + +ngOnInit(): void { + this.form = this._formBuilder.group({ + requiredTreeSelect: [this.options[1].children[0], [Validators.required]] + }); +}` + }, + + loadingTreeSelect: { + html: ` + +`, + ts: treeOptionsTs + }, + + disabledTreeSelect: { + html: ` + +` + }, + + multipleTreeSelect: { + html: ` + +`, + ts: ` +${treeOptionsTs.trim()} + +selectedItems = [ + { + label: 'AttrB', + info: 'AttrB', + attrType: 'number' + } +];` + }, + + virtualScrollTreeSelect: { + html: ` + +`, + ts: treeOptionsTs + }, + + nonClosableChipsTreeSelect: { + html: ` +`, + ts: treeOptionsTs + }, + + prefixIconTreeSelect: { + html: ` + +`, + ts: treeOptionsTs + }, + + twoWayBindingTreeSelect: { + html: ` +
+ + + {{ syncVal?.label }} +
`, + ts: ` +${treeOptionsTs.trim()} + +syncVal: any = null;` + }, + + underlinedTreeSelect: { + html: ` + +`, + ts: treeOptionsTs + }, + + borderlessTreeSelect: { + html: ` + +`, + ts: treeOptionsTs + } + };