@rt-tools/ui-kit-v2 0.32.0 → 0.34.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.
- package/README.md +4 -3
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +92 -5
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs +191 -0
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +6 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +35 -4
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +13 -4
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +245 -60
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +30 -5
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +114 -2
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +14 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +17 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs +112 -0
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs +854 -0
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +580 -65
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +203 -15
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +40 -8
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +7 -3
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +53 -2
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +207 -7
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs +171 -0
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +176 -6
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +9 -6
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +142 -23
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +22 -9
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +105 -8
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +13 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +609 -33
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +45 -7
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +11 -2
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +152 -11
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +199 -17
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +35 -5
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +21 -6
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +4 -0
- package/package.json +17 -1
- package/src/assets/icons/volume-off.svg +2 -1
- package/src/lib/components/autocomplete/CONTEXT.md +25 -14
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +19 -0
- package/src/lib/components/badge/CONTEXT.md +33 -0
- package/src/lib/components/badge/rt-badge.directive.scss +104 -0
- package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +2 -2
- package/src/lib/components/button/CONTEXT.md +5 -0
- package/src/lib/components/button/rt-button.directive.scss +3 -1
- package/src/lib/components/checkbox/CONTEXT.md +15 -8
- package/src/lib/components/color-palette/rt-color-palette.component.scss +2 -2
- package/src/lib/components/container/CONTEXT.md +23 -6
- package/src/lib/components/container/rt-container.component.scss +90 -1
- package/src/lib/components/copy-value/CONTEXT.md +6 -5
- package/src/lib/components/copy-value/rt-copy-value.component.scss +16 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +7 -0
- package/src/lib/components/date-range/rt-date-range.component.scss +7 -0
- package/src/lib/components/divider/CONTEXT.md +21 -0
- package/src/lib/components/divider/rt-divider.component.scss +34 -0
- package/src/lib/components/drawer/CONTEXT.md +73 -0
- package/src/lib/components/drawer/rt-drawer-container.component.scss +19 -0
- package/src/lib/components/drawer/rt-drawer.component.scss +168 -0
- package/src/lib/components/drawer/rt-resize-handle.component.scss +42 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +5 -0
- package/src/lib/components/expansion-panel/CONTEXT.md +32 -8
- package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +67 -2
- package/src/lib/components/field/CONTEXT.md +43 -0
- package/src/lib/components/field/rt-field-label-inside.scss +179 -0
- package/src/lib/components/field/rt-field.component.scss +51 -2
- package/src/lib/components/icon-button/CONTEXT.md +17 -15
- package/src/lib/components/icon-button/rt-icon-button.component.scss +3 -1
- package/src/lib/components/inline-edit/rt-inline-edit.component.scss +4 -4
- package/src/lib/components/input/CONTEXT.md +45 -11
- package/src/lib/components/input/rt-input-floating-label.scss +192 -0
- package/src/lib/components/input/rt-input-icons.scss +105 -0
- package/src/lib/components/input/rt-input.component.scss +91 -13
- package/src/lib/components/input-number/CONTEXT.md +7 -0
- package/src/lib/components/input-number/rt-input-number.component.scss +58 -1
- package/src/lib/components/menu/CONTEXT.md +1 -0
- package/src/lib/components/multiselect/CONTEXT.md +2 -1
- package/src/lib/components/multiselect/rt-multiselect.component.scss +7 -0
- package/src/lib/components/pagination/CONTEXT.md +3 -0
- package/src/lib/components/pagination/rt-pagination.component.scss +7 -0
- package/src/lib/components/progress-bar/CONTEXT.md +22 -0
- package/src/lib/components/progress-bar/rt-progress-bar.component.scss +77 -0
- package/src/lib/components/radio-button/CONTEXT.md +9 -0
- package/src/lib/components/radio-button/rt-radio-group.component.scss +13 -0
- package/src/lib/components/select/CONTEXT.md +28 -0
- package/src/lib/components/select/rt-select-clear.scss +88 -0
- package/src/lib/components/select/rt-select-floating-label.scss +155 -0
- package/src/lib/components/select/rt-select-material.scss +54 -0
- package/src/lib/components/select/rt-select.component.scss +54 -16
- package/src/lib/components/side-menu/CONTEXT.md +5 -0
- package/src/lib/components/speed-menu/rt-speed-menu.component.scss +5 -5
- package/src/lib/components/stepper/CONTEXT.md +13 -5
- package/src/lib/components/stepper/rt-stepper.component.scss +93 -0
- package/src/lib/components/tabs/CONTEXT.md +57 -9
- package/src/lib/components/tabs/rt-tabs.component.scss +201 -5
- package/src/lib/components/textarea/CONTEXT.md +12 -1
- package/src/lib/components/textarea/rt-textarea.component.scss +116 -1
- package/src/lib/components/toast/CONTEXT.md +23 -0
- package/src/lib/components/toast/rt-toast.component.scss +37 -0
- package/src/lib/components/toggle-button-group/CONTEXT.md +24 -4
- package/src/lib/components/toggle-button-group/rt-toggle-button-group-chips.scss +151 -0
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -0
- package/src/lib/components/tooltip/CONTEXT.md +7 -1
- package/src/lib/components/tree/rt-tree.component.scss +2 -2
- package/src/rich-editor/lib/components/chat/CONTEXT.md +3 -0
- package/src/rich-editor/lib/components/chat/rt-chat.component.scss +9 -0
- package/src/styles/_color-scheme.scss +1 -1
- package/src/styles/_density.scss +48 -0
- package/src/styles/_index.scss +8 -0
- package/src/styles/_preset-material.scss +160 -70
- package/src/styles/_primitives.scss +1 -0
- package/src/styles/_semantic-navigation.scss +117 -0
- package/src/styles/_semantic.scss +29 -98
- package/src/styles/_theme-dark.scss +8 -0
- package/styles/tokens.css +2066 -1134
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
- package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +110 -4
- package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
- package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
- package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
- package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +5 -2
- package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +291 -6
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
- package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
- package/types/rt-tools-ui-kit-v2.d.ts +4 -0
- package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-tree-selector.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.directives.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.component.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.component.html"],"sourcesContent":["import { inject, Directive, TemplateRef } from '@angular/core';\n\n/**\n * Свои контролы приложения в строке селектора — после «Развернуть всё» и «Свернуть всё». Так в\n * строку встаёт, например, выбор группировки.\n */\n@Directive({ selector: 'ng-template[rtTreeSelectorControls]' })\nexport class RtTreeSelectorControlsDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Разметка приложения сразу под полем поиска — между полем и строкой контролов. Так под поиском\n * встаёт, например, выбор области поиска или подсказка.\n */\n@Directive({ selector: 'ng-template[rtTreeSelectorUnderSearch]' })\nexport class RtTreeSelectorUnderSearchDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { rtSearchMatches, rtSearchWords } from '@rt-tools/ui-kit-v2/core';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\n\ntype TNode<TValue> = IRtTree.Node<TValue>;\n\nfunction nodeText<TValue>(node: TNode<TValue>): string {\n const badges: string = (node.badges ?? []).map((badge: IRtTree.Badge): string => badge.text).join(' ');\n return `${node.label} ${node.description ?? ''} ${badges}`;\n}\n\nfunction keepMatching<TValue>(nodes: ReadonlyArray<TNode<TValue>>, term: string): TNode<TValue>[] {\n return nodes.reduce((kept: TNode<TValue>[], node: TNode<TValue>): TNode<TValue>[] => {\n if (rtSearchMatches(nodeText(node), term)) {\n kept.push(node);\n return kept;\n }\n const inside: TNode<TValue>[] = keepMatching(node.children ?? [], term);\n if (inside.length > 0) {\n kept.push({ ...node, children: inside });\n }\n return kept;\n }, []);\n}\n\n/**\n * Узлы, в которых нашлось каждое слово поиска — в подписи, описании или метках. Совпавшая ветка\n * остаётся со всем поддеревом: без детей она выглядела бы листом. Несовпавшая ветка остаётся путём к\n * совпавшим внизу. Узлы не правятся: отобранная ветка — новый объект.\n */\nexport function rtTreeSelectorFilter<TValue>(nodes: ReadonlyArray<TNode<TValue>>, term: string): ReadonlyArray<TNode<TValue>> {\n if (rtSearchWords(term).length === 0) {\n return nodes;\n }\n return keepMatching(nodes, term);\n}\n\n/** Выключенные узлы дерева на любой глубине. */\nfunction disabledValues<TValue>(nodes: ReadonlyArray<TNode<TValue>>, into: Set<TValue>): Set<TValue> {\n nodes.forEach((node: TNode<TValue>): void => {\n if (node.disabled) {\n into.add(node.value);\n }\n disabledValues(node.children ?? [], into);\n });\n return into;\n}\n\n/** Выбор после «Очистить»: остаются только выключенные узлы — снять их человек не может. */\nexport function rtTreeSelectorClear<TValue>(nodes: ReadonlyArray<TNode<TValue>>, choice: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n const disabled: Set<TValue> = disabledValues(nodes, new Set<TValue>());\n return choice.filter((value: TValue): boolean => disabled.has(value));\n}\n\n/** Равны ли два выбора без учёта порядка. */\nexport function rtTreeSelectorSame<TValue>(a: ReadonlyArray<TValue>, b: ReadonlyArray<TValue>): boolean {\n const left: Set<TValue> = new Set<TValue>(a);\n const right: Set<TValue> = new Set<TValue>(b);\n return left.size === right.size && [...left].every((value: TValue): boolean => right.has(value));\n}\n\n/** Включено ли «Применить»: черновик отличается от выбора и не пуст там, где пустой выбор запрещён. */\nexport function rtTreeSelectorCanApply<TValue>(\n draft: ReadonlyArray<TValue>,\n choice: ReadonlyArray<TValue>,\n emptyAllowed: boolean\n): boolean {\n if (!emptyAllowed && draft.length === 0) {\n return false;\n }\n return !rtTreeSelectorSame(draft, choice);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n linkedSignal,\n model,\n output,\n viewChild,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel, IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { RtToggleSwitchComponent } from '@rt-tools/ui-kit-v2/toggle-switch';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtHybridTreeComponent } from '@rt-tools/ui-kit-v2/hybrid-tree';\nimport { RtTreeComponent, RtTreeNodeEndDirective, RtTreeNodeMetaDirective } from '@rt-tools/ui-kit-v2/tree';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { RtTreeSelectorControlsDirective, RtTreeSelectorUnderSearchDirective } from './rt-tree-selector.directives';\nimport { rtTreeSelectorCanApply, rtTreeSelectorClear, rtTreeSelectorFilter, rtTreeSelectorSame } from './rt-tree-selector.logic';\nimport { IRtTreeSelector } from './rt-tree-selector.model';\n\nconst BEM_BLOCK: string = 'rt-tree-selector';\n\n/**\n * Выбор деревом с поиском: поле поиска, строка контролов и `rt-tree` под ними.\n *\n * Строки, отметки, клавиши и подсветку рисует `rt-tree`; селектор отбирает узлы по каждому слову\n * поиска и держит выбор. В прямой форме каждое изменение сразу пишется в `value`, в подтверждаемой —\n * копится в черновике до «Применить». Поле поиска не отдаёт фокус и передаёт клавиши дереву.\n */\n@Component({\n selector: 'rt-tree-selector',\n templateUrl: './rt-tree-selector.component.html',\n styleUrl: './rt-tree-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n FormsModule,\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtIconComponent,\n RtInputComponent,\n RtToggleSwitchComponent,\n RtTooltipDirective,\n RtTreeComponent,\n RtHybridTreeComponent,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtTreeSelectorComponent<TValue> {\n readonly #host: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector: Injector = inject(Injector);\n\n protected readonly searchLabel: Signal<string> = rtKitLabel('dynamicSelectorSearch');\n protected readonly expandAllLabel: Signal<string> = rtKitLabel('uiExpandAll');\n protected readonly collapseAllLabel: Signal<string> = rtKitLabel('uiCollapseAll');\n protected readonly clearLabel: Signal<string> = rtKitLabel('uiClearSelection');\n protected readonly revertLabel: Signal<string> = rtKitLabel('uiRevertSelection');\n protected readonly multiLabel: Signal<string> = rtKitLabel('dynamicSelectorMulti');\n protected readonly multiHintLabel: Signal<string> = rtKitLabel('dynamicSelectorMultiHint');\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly applyLabel: Signal<string> = rtKitLabel('uiApply');\n protected readonly nothingFoundLabel: Signal<string> = rtKitLabel('uiNothingFound');\n\n /** Гибридное ли дерево внутри. Ставит его наследник `rt-hybrid-tree-selector`. */\n protected readonly hybrid: boolean = false;\n\n protected readonly plainTree: Signal<RtTreeComponent<TValue> | undefined> = viewChild<RtTreeComponent<TValue>>(RtTreeComponent);\n\n protected readonly hybridTree: Signal<RtHybridTreeComponent<TValue> | undefined> =\n viewChild<RtHybridTreeComponent<TValue>>(RtHybridTreeComponent);\n\n /** Дерево внутри, какое бы ни стояло: у гибридного те же раскрытие и клавиши. */\n protected readonly tree: Signal<RtTreeComponent<TValue> | undefined> = computed(\n (): RtTreeComponent<TValue> | undefined => this.hybridTree() ?? this.plainTree()\n );\n\n protected readonly controlsTpl: Signal<RtTreeSelectorControlsDirective | undefined> = contentChild(RtTreeSelectorControlsDirective);\n\n protected readonly underSearchTpl: Signal<RtTreeSelectorUnderSearchDirective | undefined> =\n contentChild(RtTreeSelectorUnderSearchDirective);\n\n /** Разметка строк, отданная селектору: дерево внутри его содержимым не видит, и она уходит туда входом. */\n protected readonly nodeEnd: Signal<RtTreeNodeEndDirective<TValue> | undefined> = contentChild(RtTreeNodeEndDirective);\n\n protected readonly nodeMeta: Signal<RtTreeNodeMetaDirective<TValue> | undefined> = contentChild(RtTreeNodeMetaDirective);\n\n protected readonly endTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeEnd()?.templateRef ?? null\n );\n\n protected readonly metaTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeMeta()?.templateRef ?? null\n );\n\n /** Строка поиска: начинается с `searchTerm` и дальше живёт от набора в поле. */\n protected readonly term: WritableSignal<string> = linkedSignal((): string => this.searchTerm());\n\n /** Включён ли множественный выбор: без переключателя клик всегда добавляет. */\n protected readonly multiOn: WritableSignal<boolean> = linkedSignal((): boolean => this.multiDefault());\n\n /** Черновик выбора: начинается с выбора и сбрасывается к нему при каждой смене выбора снаружи. */\n protected readonly draft: WritableSignal<ReadonlyArray<TValue>> = linkedSignal((): ReadonlyArray<TValue> => this.value());\n\n protected readonly shownNodes: Signal<ReadonlyArray<IRtTree.Node<TValue>>> = computed((): ReadonlyArray<IRtTree.Node<TValue>> =>\n rtTreeSelectorFilter(this.nodes(), this.term())\n );\n\n /** Слово, которое дерево отмечает в строках: без подсветки — пустое, а отбор узлов идёт по `term`. */\n protected readonly markTerm: Signal<string> = computed((): string => (this.matchHighlight() ? this.term() : ''));\n\n protected readonly hasRows: Signal<boolean> = computed((): boolean => this.shownNodes().length > 0);\n\n /** Поиск ничего не нашёл. Дереву ушёл бы пустой список, и оно написало бы «нет вариантов». */\n protected readonly isNothingFound: Signal<boolean> = computed((): boolean => !this.hasRows() && this.nodes().length > 0);\n\n protected readonly isExpandShown: Signal<boolean> = computed((): boolean => this.expandControls() && this.hasRows());\n\n /** Откат стоит только в подтверждаемой форме: в прямой выбор уже записан, откатывать не к чему. */\n protected readonly isRevertShown: Signal<boolean> = computed(\n (): boolean => this.revertable() && this.confirm() && this.mode() !== 'none'\n );\n\n protected readonly isDraftChanged: Signal<boolean> = computed((): boolean => !rtTreeSelectorSame(this.draft(), this.value()));\n\n protected readonly isMultiToggleShown: Signal<boolean> = computed((): boolean => this.multiToggle() && this.mode() === 'multiple');\n\n protected readonly isExclusive: Signal<boolean> = computed((): boolean => this.isMultiToggleShown() && !this.multiOn());\n\n protected readonly isClearShown: Signal<boolean> = computed(\n (): boolean => this.clearable() && this.mode() !== 'none' && this.draft().length > 0\n );\n\n protected readonly isFooterShown: Signal<boolean> = computed((): boolean => this.confirm() && this.footer());\n\n public readonly nodes: InputSignal<ReadonlyArray<IRtTree.Node<TValue>>> = input.required<ReadonlyArray<IRtTree.Node<TValue>>>();\n public readonly value: ModelSignal<ReadonlyArray<TValue>> = model<ReadonlyArray<TValue>>([]);\n public readonly mode: InputSignal<IRtTree.Mode> = input<IRtTree.Mode>('multiple');\n public readonly cascade: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, { transform: booleanAttribute });\n public readonly branchMarks: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** «Выбрать все» — необязательная, как кнопки строки: по умолчанию её нет. */\n public readonly selectAll: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Подтверждаемая форма: выбор копится в черновике и уходит по «Применить». */\n public readonly confirm: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, { transform: booleanAttribute });\n /** Свой подвал с «Отмена» и «Применить». Без него приложение зовёт `apply()` и `cancel()` само. */\n public readonly footer: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, { transform: booleanAttribute });\n public readonly emptyAllowed: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Иконочные кнопки «Развернуть всё» и «Свернуть всё». */\n public readonly expandControls: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly clearable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Иконочная кнопка «Откатить выбор»: возвращает черновик к выбору, не закрывая селектор. */\n public readonly revertable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly multiToggle: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** С чего начинает переключатель множественного выбора. */\n public readonly multiDefault: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly expandOnStart: InputSignal<IRtTreeSelector.ExpandOnStart> = input<IRtTreeSelector.ExpandOnStart>('chosen');\n public readonly label: InputSignal<string> = input<string>('');\n /** Начальная строка поиска. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n /** Отмечать ли найденные слова в строках. Выключенная, подсветка не мешает отбору: узлы отбираются так же. */\n public readonly matchHighlight: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Значок кита над подписью «ничего не найдено» и над пустым деревом внутри. */\n public readonly emptyIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n /** Выключенный селектор не меняет выбор: поле поиска, кнопки, переключатель, дерево и подвал выключены. */\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly applied: OutputEmitterRef<ReadonlyArray<TValue>> = output<ReadonlyArray<TValue>>();\n public readonly cancelled: OutputEmitterRef<void> = output<void>();\n\n /** Можно ли применить черновик: он отличается от выбора и не пуст там, где пустой запрещён. */\n public readonly canApply: Signal<boolean> = computed(\n (): boolean => !this.disabled() && rtTreeSelectorCanApply(this.draft(), this.value(), this.emptyAllowed())\n );\n\n constructor() {\n afterNextRender((): void => {\n if (!this.disabled()) {\n this.#host.nativeElement.querySelector<HTMLInputElement>('.rt-tree-selector__search input')?.focus();\n }\n this.#expandOnStart();\n });\n }\n\n public apply(): void {\n if (!this.canApply()) {\n return;\n }\n const next: ReadonlyArray<TValue> = [...this.draft()];\n this.value.set(next);\n this.applied.emit(next);\n }\n\n public cancel(): void {\n this.draft.set(this.value());\n this.cancelled.emit();\n }\n\n protected onTerm(term: string): void {\n this.term.set(term);\n if (term.trim() !== '') {\n afterNextRender((): void => this.tree()?.expandAll(), { injector: this.#injector });\n }\n }\n\n protected onSearchKeydown(event: KeyboardEvent): void {\n this.tree()?.handleKeydown(event);\n }\n\n protected onTreeChange(next: ReadonlyArray<TValue>): void {\n this.#write(next);\n }\n\n /** Enter в выборе одного узла подтверждает: новый узел применяется, тот же — закрывает без изменений. */\n protected onPicked(): void {\n if (!this.confirm() || this.mode() !== 'single') {\n return;\n }\n if (this.canApply()) {\n this.apply();\n return;\n }\n this.cancel();\n }\n\n protected onClear(): void {\n this.#write(rtTreeSelectorClear(this.nodes(), this.draft()));\n }\n\n protected onRevert(): void {\n this.draft.set(this.value());\n }\n\n protected expandAll(): void {\n this.tree()?.expandAll();\n }\n\n protected collapseAll(): void {\n this.tree()?.collapseAll();\n }\n\n protected onMultiToggle(on: boolean): void {\n this.multiOn.set(on);\n }\n\n #write(next: ReadonlyArray<TValue>): void {\n this.draft.set(next);\n if (!this.confirm()) {\n this.value.set(next);\n }\n }\n\n #expandOnStart(): void {\n const start: IRtTreeSelector.ExpandOnStart = this.expandOnStart();\n if (start === 'all' || this.term().trim() !== '') {\n this.tree()?.expandAll();\n return;\n }\n if (start === 'none') {\n this.tree()?.collapseAll();\n }\n }\n}\n","<ng-container rtBlock=\"rt-tree-selector\">\n <div rtElem=\"head\">\n @if (label()) {\n <div rtElem=\"label\" qa-dataid=\"tree-selector-label\">{{ label() }}</div>\n }\n\n <rt-input\n rtElem=\"search\"\n qa-dataid=\"tree-selector-search\"\n iconLeft=\"search\"\n [disabled]=\"disabled()\"\n [placeholder]=\"searchLabel()\"\n [ariaLabel]=\"searchLabel()\"\n [ngModel]=\"term()\"\n (ngModelChange)=\"onTerm($event)\"\n (keydown)=\"onSearchKeydown($event)\" />\n\n @if (underSearchTpl(); as underSearch) {\n <div rtElem=\"under-search\" qa-dataid=\"tree-selector-under-search\">\n <ng-container [ngTemplateOutlet]=\"underSearch.templateRef\" />\n </div>\n }\n\n <div rtElem=\"controls\">\n <div rtElem=\"row\">\n @if (isExpandShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-expand-all\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"expand-all\"\n [rtTooltip]=\"expandAllLabel()\"\n [attr.aria-label]=\"expandAllLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"expandAll()\"></button>\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-collapse-all\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"collapse-all\"\n [rtTooltip]=\"collapseAllLabel()\"\n [attr.aria-label]=\"collapseAllLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"collapseAll()\"></button>\n }\n @if (isRevertShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-revert\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"undo\"\n [rtTooltip]=\"revertLabel()\"\n [attr.aria-label]=\"revertLabel()\"\n [disabled]=\"disabled() || !isDraftChanged()\"\n (click)=\"onRevert()\"></button>\n }\n @if (isClearShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-clear\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"danger\"\n size=\"sm\"\n icon=\"trash\"\n [rtTooltip]=\"clearLabel()\"\n [attr.aria-label]=\"clearLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClear()\"></button>\n }\n @if (controlsTpl(); as controls) {\n <div rtElem=\"own\">\n <ng-container [ngTemplateOutlet]=\"controls.templateRef\" />\n </div>\n }\n </div>\n\n @if (isMultiToggleShown()) {\n <div rtElem=\"multi\">\n <rt-toggle-switch\n qa-dataid=\"tree-selector-multi\"\n [ariaLabel]=\"multiLabel()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"multiOn()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onMultiToggle($event)\" />\n <span rtElem=\"multi-label\">{{ multiLabel() }}</span>\n <rt-icon rtElem=\"multi-hint-icon\" name=\"info-circle\" size=\"sm\" [rtTooltip]=\"multiHintLabel()\" />\n </div>\n }\n </div>\n </div>\n\n @if (isNothingFound()) {\n <div rtElem=\"empty\" qa-dataid=\"tree-selector-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"tree-selector-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ nothingFoundLabel() }}\n </div>\n } @else {\n @if (hybrid) {\n <rt-hybrid-tree\n rtElem=\"tree\"\n qa-dataid=\"tree-selector-tree\"\n [nodes]=\"shownNodes()\"\n [value]=\"draft()\"\n [mode]=\"mode()\"\n [cascade]=\"cascade()\"\n [branchMarks]=\"branchMarks()\"\n [exclusive]=\"isExclusive()\"\n [showSelectAll]=\"selectAll()\"\n [searchTerm]=\"markTerm()\"\n [filter]=\"false\"\n [emptyIcon]=\"emptyIcon()\"\n [nodeEndTemplate]=\"endTemplate()\"\n [nodeMetaTemplate]=\"metaTemplate()\"\n [ariaLabel]=\"ariaLabel()\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onTreeChange($event)\"\n (picked)=\"onPicked()\" />\n } @else {\n <rt-tree\n rtElem=\"tree\"\n qa-dataid=\"tree-selector-tree\"\n [nodes]=\"shownNodes()\"\n [value]=\"draft()\"\n [mode]=\"mode()\"\n [cascade]=\"cascade()\"\n [branchMarks]=\"branchMarks()\"\n [exclusive]=\"isExclusive()\"\n [showSelectAll]=\"selectAll()\"\n [searchTerm]=\"markTerm()\"\n [filter]=\"false\"\n [emptyIcon]=\"emptyIcon()\"\n [nodeEndTemplate]=\"endTemplate()\"\n [nodeMetaTemplate]=\"metaTemplate()\"\n [ariaLabel]=\"ariaLabel()\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onTreeChange($event)\"\n (picked)=\"onPicked()\" />\n }\n }\n\n @if (isFooterShown()) {\n <div rtElem=\"foot\">\n <button\n rtButton\n qa-dataid=\"tree-selector-cancel\"\n type=\"button\"\n appearance=\"text\"\n [label]=\"cancelLabel()\"\n [attr.aria-label]=\"cancelLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"cancel()\"></button>\n <button\n rtButton\n qa-dataid=\"tree-selector-apply\"\n type=\"button\"\n [label]=\"applyLabel()\"\n [attr.aria-label]=\"applyLabel()\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n </div>\n }\n</ng-container>\n"],"mappings":";;;;;;;;;;;;;;AAOA,IAAa,kCAAb,MAAa,gCAA+B;CAD5C,cAAA;EAEoB,KAAA,cAAoC,OAA6B,WAAW;CAC/F;CAFY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA+B,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA/B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA+B,cAAA;GAAA,UAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAA/B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA+B,YAAA,CAAA;EAD3C,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,sCAAqC,CAAE;;;AAU9D,IAAa,qCAAb,MAAa,mCAAkC;CAD/C,cAAA;EAEoB,KAAA,cAAoC,OAA6B,WAAW;CAC/F;CAFY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAkC,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAlC;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAkC,cAAA;GAAA,UAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAAlC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkC,YAAA,CAAA;EAD9C,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,yCAAwC,CAAE;;;ACVjE,SAAS,SAAiB,MAAmB;CACzC,MAAM,UAAkB,KAAK,UAAU,CAAA,EAAA,CAAI,KAAK,UAAiC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG;CACrG,OAAO,GAAG,KAAK,MAAK,GAAI,KAAK,eAAe,GAAE,GAAI;AACtD;AAEA,SAAS,aAAqB,OAAqC,MAAY;CAC3E,OAAO,MAAM,QAAQ,MAAuB,SAAwC;EAChF,IAAI,gBAAgB,SAAS,IAAI,GAAG,IAAI,GAAG;GACvC,KAAK,KAAK,IAAI;GACd,OAAO;EACX;EACA,MAAM,SAA0B,aAAa,KAAK,YAAY,CAAA,GAAI,IAAI;EACtE,IAAI,OAAO,SAAS,GAChB,KAAK,KAAK;GAAE,GAAG;GAAM,UAAU;EAAM,CAAE;EAE3C,OAAO;CACX,GAAG,CAAA,CAAE;AACT;AAOA,SAAgB,qBAA6B,OAAqC,MAAY;CAC1F,IAAI,cAAc,IAAI,CAAC,CAAC,WAAW,GAC/B,OAAO;CAEX,OAAO,aAAa,OAAO,IAAI;AACnC;AAGA,SAAS,eAAuB,OAAqC,MAAiB;CAClF,MAAM,SAAS,SAA6B;EACxC,IAAI,KAAK,UACL,KAAK,IAAI,KAAK,KAAK;EAEvB,eAAe,KAAK,YAAY,CAAA,GAAI,IAAI;CAC5C,CAAC;CACD,OAAO;AACX;AAGA,SAAgB,oBAA4B,OAAqC,QAA6B;CAC1G,MAAM,WAAwB,eAAe,uBAAO,IAAI,IAAG,CAAU;CACrE,OAAO,OAAO,QAAQ,UAA2B,SAAS,IAAI,KAAK,CAAC;AACxE;AAGA,SAAgB,mBAA2B,GAA0B,GAAwB;CACzF,MAAM,OAAoB,IAAI,IAAY,CAAC;CAC3C,MAAM,QAAqB,IAAI,IAAY,CAAC;CAC5C,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,UAA2B,MAAM,IAAI,KAAK,CAAC;AACnG;AAGA,SAAgB,uBACZ,OACA,QACA,cAAqB;CAErB,IAAI,CAAC,gBAAgB,MAAM,WAAW,GAClC,OAAO;CAEX,OAAO,CAAC,mBAAmB,OAAO,MAAM;AAC5C;AC5BA,MAAM,YAAoB;AA+B1B,IAAa,0BAAb,MAAa,wBAAuB;CACvB;CACA;CAgJT,cAAA;EAjJS,KAAA,QAAiC,OAAgC,UAAU;EAC3E,KAAA,YAAsB,OAAO,QAAQ;EAE3B,KAAA,cAA8B,WAAW,uBAAuB;EAChE,KAAA,iBAAiC,WAAW,aAAa;EACzD,KAAA,mBAAmC,WAAW,eAAe;EAC7D,KAAA,aAA6B,WAAW,kBAAkB;EAC1D,KAAA,cAA8B,WAAW,mBAAmB;EAC5D,KAAA,aAA6B,WAAW,sBAAsB;EAC9D,KAAA,iBAAiC,WAAW,0BAA0B;EACtE,KAAA,cAA8B,WAAW,UAAU;EACnD,KAAA,aAA6B,WAAW,SAAS;EACjD,KAAA,oBAAoC,WAAW,gBAAgB;EAG/D,KAAA,SAAkB;EAElB,KAAA,YAAyD,UAAmC,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAE5G,KAAA,aACf,UAAyC,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGhD,KAAA,OAAoD,eACxB,KAAK,WAAU,KAAM,KAAK,UAAS,GACjF,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,cAAmE,aAAa,iCAAgC,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEhH,KAAA,iBACf,aAAa,oCAAmC,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAGjC,KAAA,UAA8D,aAAa,wBAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAElG,KAAA,WAAgE,aAAa,yBAAwB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAErG,KAAA,cAAuE,eAC/B,KAAK,QAAO,CAAE,EAAE,eAAe,MACzF,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,eAAwE,eAChC,KAAK,SAAQ,CAAE,EAAE,eAAe,MAC1F,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,OAA+B,mBAA2B,KAAK,WAAU,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG5E,KAAA,UAAmC,mBAA4B,KAAK,aAAY,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGnF,KAAA,QAA+C,mBAA0C,KAAK,MAAK,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAEtG,KAAA,aAA0D,eACzE,qBAAqB,KAAK,MAAK,GAAI,KAAK,KAAI,CAAE,GACjD,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,WAA2B,eAAwB,KAAK,eAAc,IAAK,KAAK,KAAI,IAAK,IAAI,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAE7F,KAAA,UAA2B,eAAwB,KAAK,WAAU,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGhF,KAAA,iBAAkC,eAAwB,CAAC,KAAK,QAAO,KAAM,KAAK,MAAK,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAErG,KAAA,gBAAiC,eAAwB,KAAK,eAAc,KAAM,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAGjG,KAAA,gBAAiC,eACjC,KAAK,WAAU,KAAM,KAAK,QAAO,KAAM,KAAK,KAAI,MAAO,QACzE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,iBAAkC,eAAwB,CAAC,mBAAmB,KAAK,MAAK,GAAI,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAE1G,KAAA,qBAAsC,eAAwB,KAAK,YAAW,KAAM,KAAK,KAAI,MAAO,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,+BAAA,CAAA,CAAA;EAE/G,KAAA,cAA+B,eAAwB,KAAK,mBAAkB,KAAM,CAAC,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEpG,KAAA,eAAgC,eAChC,KAAK,UAAS,KAAM,KAAK,KAAI,MAAO,UAAU,KAAK,MAAK,CAAE,CAAC,SAAS,GACtF,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,gBAAiC,eAAwB,KAAK,QAAO,KAAM,KAAK,OAAM,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAE5F,KAAA,QAA0D,MAAM,SAA+C,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAC/G,KAAA,QAA4C,MAA6B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAC5E,KAAA,OAAkC,MAAoB,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EACjE,KAAA,UAAsD,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EACjH,KAAA,cAA0D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;GAClG,WAAW;EAAgB,CAAA;EAGf,KAAA,YAAwD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GACjG,WAAW;EAAgB,CAAA;EAGf,KAAA,UAAsD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EAElH,KAAA,SAAqD,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,SAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EAChH,KAAA,eAA2D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GACnG,WAAW;EAAgB,CAAA;EAGf,KAAA,iBAA6D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;GACtG,WAAW;EAAgB,CAAA;EAEf,KAAA,YAAwD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GACjG,WAAW;EAAgB,CAAA;EAGf,KAAA,aAAyD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;GAClG,WAAW;EAAgB,CAAA;EAEf,KAAA,cAA0D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;GACnG,WAAW;EAAgB,CAAA;EAGf,KAAA,eAA2D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GACpG,WAAW;EAAgB,CAAA;EAEf,KAAA,gBAA4D,MAAqC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAC1G,KAAA,QAA6B,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAE9C,KAAA,aAAkC,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EACnD,KAAA,YAAwC,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAElE,KAAA,iBAA6D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;GACrG,WAAW;EAAgB,CAAA;EAGf,KAAA,YAA8C,MAA2B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAE9E,KAAA,WAAuD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAChG,WAAW;EAAgB,CAAA;EAGf,KAAA,UAAmD,OAAM;EACzD,KAAA,YAAoC,OAAM;EAG1C,KAAA,WAA4B,eACzB,CAAC,KAAK,SAAQ,KAAM,uBAAuB,KAAK,MAAK,GAAI,KAAK,MAAK,GAAI,KAAK,aAAY,CAAE,GAC5G,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGG,sBAA2B;GACvB,IAAI,CAAC,KAAK,SAAQ,GACd,KAAK,MAAM,cAAc,cAAgC,iCAAiC,CAAC,EAAE,MAAK;GAEtG,KAAK,eAAc;EACvB,CAAC;CACL;CAEO,QAAK;EACR,IAAI,CAAC,KAAK,SAAQ,GACd;EAEJ,MAAM,OAA8B,CAAC,GAAG,KAAK,MAAK,CAAE;EACpD,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,QAAQ,KAAK,IAAI;CAC1B;CAEO,SAAM;EACT,KAAK,MAAM,IAAI,KAAK,MAAK,CAAE;EAC3B,KAAK,UAAU,KAAI;CACvB;CAEU,OAAO,MAAY;EACzB,KAAK,KAAK,IAAI,IAAI;EAClB,IAAI,KAAK,KAAI,MAAO,IAChB,sBAA4B,KAAK,KAAI,CAAE,EAAE,UAAS,GAAI,EAAE,UAAU,KAAK,UAAS,CAAE;CAE1F;CAEU,gBAAgB,OAAoB;EAC1C,KAAK,KAAI,CAAE,EAAE,cAAc,KAAK;CACpC;CAEU,aAAa,MAA2B;EAC9C,KAAK,OAAO,IAAI;CACpB;CAGU,WAAQ;EACd,IAAI,CAAC,KAAK,QAAO,KAAM,KAAK,KAAI,MAAO,UACnC;EAEJ,IAAI,KAAK,SAAQ,GAAI;GACjB,KAAK,MAAK;GACV;EACJ;EACA,KAAK,OAAM;CACf;CAEU,UAAO;EACb,KAAK,OAAO,oBAAoB,KAAK,MAAK,GAAI,KAAK,MAAK,CAAE,CAAC;CAC/D;CAEU,WAAQ;EACd,KAAK,MAAM,IAAI,KAAK,MAAK,CAAE;CAC/B;CAEU,YAAS;EACf,KAAK,KAAI,CAAE,EAAE,UAAS;CAC1B;CAEU,cAAW;EACjB,KAAK,KAAI,CAAE,EAAE,YAAW;CAC5B;CAEU,cAAc,IAAW;EAC/B,KAAK,QAAQ,IAAI,EAAE;CACvB;CAEA,OAAO,MAA2B;EAC9B,KAAK,MAAM,IAAI,IAAI;EACnB,IAAI,CAAC,KAAK,QAAO,GACb,KAAK,MAAM,IAAI,IAAI;CAE3B;CAEA,iBAAc;EACV,MAAM,QAAuC,KAAK,cAAa;EAC/D,IAAI,UAAU,SAAS,KAAK,KAAI,CAAE,CAAC,KAAI,MAAO,IAAI;GAC9C,KAAK,KAAI,CAAE,EAAE,UAAS;GACtB;EACJ;EACA,IAAI,UAAU,QACV,KAAK,KAAI,CAAE,EAAE,YAAW;CAEhC;CAxOS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,eAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA;IAAA,OAAA;IAAA,SAAA;IAAA,WAAA;GAAA;GAAA,MAAA,EAAA,gBAAA,mBAAA;GAAA,SAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WA4BmE;KAA+B,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAGjH;KAAkC,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAG2C;KAAsB,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAEpB;KAAuB,aAAA;KAAA,UAAA;IAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAlBR;IAAe,aAAA;IAAA,UAAA;GAAA,GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAGjF;IAAqB,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC9FtE;GAmLA,QAAA,CAAA,g/DAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDzHQ;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAAW;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA;KAAA,UAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACX;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;KAAuB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACvB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAClB;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA,QAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAqB,UAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAIhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAtBnC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAkB,iBAGX,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GAAA,MACK,EAAE,OAAO,UAAS;GAAE,UAAA;GAAA,QAAA,CAAA,g/DAAA;EAAA,CAAA;CAoBqF,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,eAAe,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAGjF,qBAAqB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAOiC,+BAA+B,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAGjH,kCAAkC,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAG2C,sBAAsB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAEpB,uBAAuB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,aAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,SAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,WAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-tree-selector.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.directives.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.component.ts","../../../projects/ui-kit-v2/src/lib/components/tree-selector/rt-tree-selector.component.html"],"sourcesContent":["import { inject, Directive, TemplateRef } from '@angular/core';\n\n/**\n * Свои контролы приложения в строке селектора — после «Развернуть всё» и «Свернуть всё». Так в\n * строку встаёт, например, выбор группировки.\n */\n@Directive({ selector: 'ng-template[rtTreeSelectorControls]' })\nexport class RtTreeSelectorControlsDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Разметка приложения сразу под полем поиска — между полем и строкой контролов. Так под поиском\n * встаёт, например, выбор области поиска или подсказка.\n */\n@Directive({ selector: 'ng-template[rtTreeSelectorUnderSearch]' })\nexport class RtTreeSelectorUnderSearchDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { rtSearchMatches, rtSearchWords } from '@rt-tools/ui-kit-v2/core';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\n\ntype TNode<TValue> = IRtTree.Node<TValue>;\n\nfunction nodeText<TValue>(node: TNode<TValue>): string {\n const badges: string = (node.badges ?? []).map((badge: IRtTree.Badge): string => badge.text).join(' ');\n return `${node.label} ${node.description ?? ''} ${badges}`;\n}\n\nfunction keepMatching<TValue>(nodes: ReadonlyArray<TNode<TValue>>, term: string): TNode<TValue>[] {\n return nodes.reduce((kept: TNode<TValue>[], node: TNode<TValue>): TNode<TValue>[] => {\n if (rtSearchMatches(nodeText(node), term)) {\n kept.push(node);\n return kept;\n }\n const inside: TNode<TValue>[] = keepMatching(node.children ?? [], term);\n if (inside.length > 0) {\n kept.push({ ...node, children: inside });\n }\n return kept;\n }, []);\n}\n\n/**\n * Узлы, в которых нашлось каждое слово поиска — в подписи, описании или метках. Совпавшая ветка\n * остаётся со всем поддеревом: без детей она выглядела бы листом. Несовпавшая ветка остаётся путём к\n * совпавшим внизу. Узлы не правятся: отобранная ветка — новый объект.\n */\nexport function rtTreeSelectorFilter<TValue>(nodes: ReadonlyArray<TNode<TValue>>, term: string): ReadonlyArray<TNode<TValue>> {\n if (rtSearchWords(term).length === 0) {\n return nodes;\n }\n return keepMatching(nodes, term);\n}\n\n/** Выключенные узлы дерева на любой глубине. */\nfunction disabledValues<TValue>(nodes: ReadonlyArray<TNode<TValue>>, into: Set<TValue>): Set<TValue> {\n nodes.forEach((node: TNode<TValue>): void => {\n if (node.disabled) {\n into.add(node.value);\n }\n disabledValues(node.children ?? [], into);\n });\n return into;\n}\n\n/** Выбор после «Очистить»: остаются только выключенные узлы — снять их человек не может. */\nexport function rtTreeSelectorClear<TValue>(nodes: ReadonlyArray<TNode<TValue>>, choice: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n const disabled: Set<TValue> = disabledValues(nodes, new Set<TValue>());\n return choice.filter((value: TValue): boolean => disabled.has(value));\n}\n\n/** Равны ли два выбора без учёта порядка. */\nexport function rtTreeSelectorSame<TValue>(a: ReadonlyArray<TValue>, b: ReadonlyArray<TValue>): boolean {\n const left: Set<TValue> = new Set<TValue>(a);\n const right: Set<TValue> = new Set<TValue>(b);\n return left.size === right.size && [...left].every((value: TValue): boolean => right.has(value));\n}\n\n/** Включено ли «Применить»: черновик отличается от выбора и не пуст там, где пустой выбор запрещён. */\nexport function rtTreeSelectorCanApply<TValue>(\n draft: ReadonlyArray<TValue>,\n choice: ReadonlyArray<TValue>,\n emptyAllowed: boolean\n): boolean {\n if (!emptyAllowed && draft.length === 0) {\n return false;\n }\n return !rtTreeSelectorSame(draft, choice);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n linkedSignal,\n model,\n output,\n viewChild,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel, IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { RtToggleSwitchComponent } from '@rt-tools/ui-kit-v2/toggle-switch';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtHybridTreeComponent } from '@rt-tools/ui-kit-v2/hybrid-tree';\nimport { RtTreeComponent, RtTreeNodeEndDirective, RtTreeNodeMetaDirective } from '@rt-tools/ui-kit-v2/tree';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { RtTreeSelectorControlsDirective, RtTreeSelectorUnderSearchDirective } from './rt-tree-selector.directives';\nimport { rtTreeSelectorCanApply, rtTreeSelectorClear, rtTreeSelectorFilter, rtTreeSelectorSame } from './rt-tree-selector.logic';\nimport { IRtTreeSelector } from './rt-tree-selector.model';\n\nconst BEM_BLOCK: string = 'rt-tree-selector';\n\n/**\n * Выбор деревом с поиском: поле поиска, строка контролов и `rt-tree` под ними.\n *\n * Строки, отметки, клавиши и подсветку рисует `rt-tree`; селектор отбирает узлы по каждому слову\n * поиска и держит выбор. В прямой форме каждое изменение сразу пишется в `value`, в подтверждаемой —\n * копится в черновике до «Применить». Поле поиска не отдаёт фокус и передаёт клавиши дереву.\n */\n@Component({\n selector: 'rt-tree-selector',\n templateUrl: './rt-tree-selector.component.html',\n styleUrl: './rt-tree-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n FormsModule,\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtIconComponent,\n RtInputComponent,\n RtToggleSwitchComponent,\n RtTooltipDirective,\n RtTreeComponent,\n RtHybridTreeComponent,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtTreeSelectorComponent<TValue> {\n readonly #host: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector: Injector = inject(Injector);\n\n protected readonly searchLabel: Signal<string> = rtKitLabel('dynamicSelectorSearch');\n protected readonly expandAllLabel: Signal<string> = rtKitLabel('uiExpandAll');\n protected readonly collapseAllLabel: Signal<string> = rtKitLabel('uiCollapseAll');\n protected readonly clearLabel: Signal<string> = rtKitLabel('uiClearSelection');\n protected readonly revertLabel: Signal<string> = rtKitLabel('uiRevertSelection');\n protected readonly multiLabel: Signal<string> = rtKitLabel('dynamicSelectorMulti');\n protected readonly multiHintLabel: Signal<string> = rtKitLabel('dynamicSelectorMultiHint');\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly applyLabel: Signal<string> = rtKitLabel('uiApply');\n protected readonly nothingFoundLabel: Signal<string> = rtKitLabel('uiNothingFound');\n\n /** Гибридное ли дерево внутри. Ставит его наследник `rt-hybrid-tree-selector`. */\n protected readonly hybrid: boolean = false;\n\n protected readonly plainTree: Signal<RtTreeComponent<TValue> | undefined> = viewChild<RtTreeComponent<TValue>>(RtTreeComponent);\n\n protected readonly hybridTree: Signal<RtHybridTreeComponent<TValue> | undefined> =\n viewChild<RtHybridTreeComponent<TValue>>(RtHybridTreeComponent);\n\n /** Дерево внутри, какое бы ни стояло: у гибридного те же раскрытие и клавиши. */\n protected readonly tree: Signal<RtTreeComponent<TValue> | undefined> = computed(\n (): RtTreeComponent<TValue> | undefined => this.hybridTree() ?? this.plainTree()\n );\n\n protected readonly controlsTpl: Signal<RtTreeSelectorControlsDirective | undefined> = contentChild(RtTreeSelectorControlsDirective);\n\n protected readonly underSearchTpl: Signal<RtTreeSelectorUnderSearchDirective | undefined> =\n contentChild(RtTreeSelectorUnderSearchDirective);\n\n /** Разметка строк, отданная селектору: дерево внутри его содержимым не видит, и она уходит туда входом. */\n protected readonly nodeEnd: Signal<RtTreeNodeEndDirective<TValue> | undefined> = contentChild(RtTreeNodeEndDirective);\n\n protected readonly nodeMeta: Signal<RtTreeNodeMetaDirective<TValue> | undefined> = contentChild(RtTreeNodeMetaDirective);\n\n protected readonly endTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeEnd()?.templateRef ?? null\n );\n\n protected readonly metaTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeMeta()?.templateRef ?? null\n );\n\n /** Строка поиска: начинается с `searchTerm` и дальше живёт от набора в поле. */\n protected readonly term: WritableSignal<string> = linkedSignal((): string => this.searchTerm());\n\n /** Включён ли множественный выбор: без переключателя клик всегда добавляет. */\n protected readonly multiOn: WritableSignal<boolean> = linkedSignal((): boolean => this.multiDefault());\n\n /** Черновик выбора: начинается с выбора и сбрасывается к нему при каждой смене выбора снаружи. */\n protected readonly draft: WritableSignal<ReadonlyArray<TValue>> = linkedSignal((): ReadonlyArray<TValue> => this.value());\n\n protected readonly shownNodes: Signal<ReadonlyArray<IRtTree.Node<TValue>>> = computed((): ReadonlyArray<IRtTree.Node<TValue>> =>\n rtTreeSelectorFilter(this.nodes(), this.term())\n );\n\n /** Слово, которое дерево отмечает в строках: без подсветки — пустое, а отбор узлов идёт по `term`. */\n protected readonly markTerm: Signal<string> = computed((): string => (this.matchHighlight() ? this.term() : ''));\n\n protected readonly hasRows: Signal<boolean> = computed((): boolean => this.shownNodes().length > 0);\n\n /** Поиск ничего не нашёл. Дереву ушёл бы пустой список, и оно написало бы «нет вариантов». */\n protected readonly isNothingFound: Signal<boolean> = computed((): boolean => !this.hasRows() && this.nodes().length > 0);\n\n protected readonly isExpandShown: Signal<boolean> = computed((): boolean => this.expandControls() && this.hasRows());\n\n /** Откат стоит только в подтверждаемой форме: в прямой выбор уже записан, откатывать не к чему. */\n protected readonly isRevertShown: Signal<boolean> = computed(\n (): boolean => this.revertable() && this.confirm() && this.mode() !== 'none'\n );\n\n protected readonly isDraftChanged: Signal<boolean> = computed((): boolean => !rtTreeSelectorSame(this.draft(), this.value()));\n\n protected readonly isMultiToggleShown: Signal<boolean> = computed((): boolean => this.multiToggle() && this.mode() === 'multiple');\n\n protected readonly isExclusive: Signal<boolean> = computed((): boolean => this.isMultiToggleShown() && !this.multiOn());\n\n protected readonly isClearShown: Signal<boolean> = computed(\n (): boolean => this.clearable() && this.mode() !== 'none' && this.draft().length > 0\n );\n\n protected readonly isFooterShown: Signal<boolean> = computed((): boolean => this.confirm() && this.footer());\n\n public readonly nodes: InputSignal<ReadonlyArray<IRtTree.Node<TValue>>> = input.required<ReadonlyArray<IRtTree.Node<TValue>>>();\n public readonly value: ModelSignal<ReadonlyArray<TValue>> = model<ReadonlyArray<TValue>>([]);\n public readonly mode: InputSignal<IRtTree.Mode> = input<IRtTree.Mode>('multiple');\n public readonly cascade: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, { transform: booleanAttribute });\n public readonly branchMarks: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** «Выбрать все» — необязательная, как кнопки строки: по умолчанию её нет. */\n public readonly selectAll: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Подтверждаемая форма: выбор копится в черновике и уходит по «Применить». */\n public readonly confirm: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, { transform: booleanAttribute });\n /** Свой подвал с «Отмена» и «Применить». Без него приложение зовёт `apply()` и `cancel()` само. */\n public readonly footer: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, { transform: booleanAttribute });\n public readonly emptyAllowed: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Иконочные кнопки «Развернуть всё» и «Свернуть всё». */\n public readonly expandControls: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly clearable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Иконочная кнопка «Откатить выбор»: возвращает черновик к выбору, не закрывая селектор. */\n public readonly revertable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly multiToggle: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** С чего начинает переключатель множественного выбора. */\n public readonly multiDefault: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly expandOnStart: InputSignal<IRtTreeSelector.ExpandOnStart> = input<IRtTreeSelector.ExpandOnStart>('chosen');\n public readonly label: InputSignal<string> = input<string>('');\n /** Начальная строка поиска. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n /** Отмечать ли найденные слова в строках. Выключенная, подсветка не мешает отбору: узлы отбираются так же. */\n public readonly matchHighlight: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Значок кита над подписью «ничего не найдено» и над пустым деревом внутри. */\n public readonly emptyIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n /** Выключенный селектор не меняет выбор: поле поиска, кнопки, переключатель, дерево и подвал выключены. */\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly applied: OutputEmitterRef<ReadonlyArray<TValue>> = output<ReadonlyArray<TValue>>();\n public readonly cancelled: OutputEmitterRef<void> = output<void>();\n\n /** Можно ли применить черновик: он отличается от выбора и не пуст там, где пустой запрещён. */\n public readonly canApply: Signal<boolean> = computed(\n (): boolean => !this.disabled() && rtTreeSelectorCanApply(this.draft(), this.value(), this.emptyAllowed())\n );\n\n constructor() {\n afterNextRender((): void => {\n if (!this.disabled()) {\n this.#host.nativeElement.querySelector<HTMLInputElement>('.rt-tree-selector__search input')?.focus();\n }\n this.#expandOnStart();\n });\n }\n\n public apply(): void {\n if (!this.canApply()) {\n return;\n }\n const next: ReadonlyArray<TValue> = [...this.draft()];\n this.value.set(next);\n this.applied.emit(next);\n }\n\n public cancel(): void {\n this.draft.set(this.value());\n this.cancelled.emit();\n }\n\n protected onTerm(term: string): void {\n this.term.set(term);\n if (term.trim() !== '') {\n afterNextRender((): void => this.tree()?.expandAll(), { injector: this.#injector });\n }\n }\n\n protected onSearchKeydown(event: KeyboardEvent): void {\n this.tree()?.handleKeydown(event);\n }\n\n protected onTreeChange(next: ReadonlyArray<TValue>): void {\n this.#write(next);\n }\n\n /** Enter в выборе одного узла подтверждает: новый узел применяется, тот же — закрывает без изменений. */\n protected onPicked(): void {\n if (!this.confirm() || this.mode() !== 'single') {\n return;\n }\n if (this.canApply()) {\n this.apply();\n return;\n }\n this.cancel();\n }\n\n protected onClear(): void {\n this.#write(rtTreeSelectorClear(this.nodes(), this.draft()));\n }\n\n protected onRevert(): void {\n this.draft.set(this.value());\n }\n\n protected expandAll(): void {\n this.tree()?.expandAll();\n }\n\n protected collapseAll(): void {\n this.tree()?.collapseAll();\n }\n\n protected onMultiToggle(on: boolean): void {\n this.multiOn.set(on);\n }\n\n #write(next: ReadonlyArray<TValue>): void {\n this.draft.set(next);\n if (!this.confirm()) {\n this.value.set(next);\n }\n }\n\n #expandOnStart(): void {\n const start: IRtTreeSelector.ExpandOnStart = this.expandOnStart();\n if (start === 'all' || this.term().trim() !== '') {\n this.tree()?.expandAll();\n return;\n }\n if (start === 'none') {\n this.tree()?.collapseAll();\n }\n }\n}\n","<ng-container rtBlock=\"rt-tree-selector\">\n <div rtElem=\"head\">\n @if (label()) {\n <div rtElem=\"label\" qa-dataid=\"tree-selector-label\">{{ label() }}</div>\n }\n\n <rt-input\n rtElem=\"search\"\n qa-dataid=\"tree-selector-search\"\n iconLeft=\"search\"\n [disabled]=\"disabled()\"\n [placeholder]=\"searchLabel()\"\n [ariaLabel]=\"searchLabel()\"\n [ngModel]=\"term()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onTerm($event)\"\n (keydown)=\"onSearchKeydown($event)\" />\n\n @if (underSearchTpl(); as underSearch) {\n <div rtElem=\"under-search\" qa-dataid=\"tree-selector-under-search\">\n <ng-container [ngTemplateOutlet]=\"underSearch.templateRef\" />\n </div>\n }\n\n <div rtElem=\"controls\">\n <div rtElem=\"row\">\n @if (isExpandShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-expand-all\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"expand-all\"\n [rtTooltip]=\"expandAllLabel()\"\n [attr.aria-label]=\"expandAllLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"expandAll()\"></button>\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-collapse-all\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"collapse-all\"\n [rtTooltip]=\"collapseAllLabel()\"\n [attr.aria-label]=\"collapseAllLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"collapseAll()\"></button>\n }\n @if (isRevertShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-revert\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"secondary\"\n size=\"sm\"\n icon=\"undo\"\n [rtTooltip]=\"revertLabel()\"\n [attr.aria-label]=\"revertLabel()\"\n [disabled]=\"disabled() || !isDraftChanged()\"\n (click)=\"onRevert()\"></button>\n }\n @if (isClearShown()) {\n <button\n rtButton\n rtElem=\"control\"\n qa-dataid=\"tree-selector-clear\"\n type=\"button\"\n appearance=\"outlined\"\n theme=\"danger\"\n size=\"sm\"\n icon=\"trash\"\n [rtTooltip]=\"clearLabel()\"\n [attr.aria-label]=\"clearLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClear()\"></button>\n }\n @if (controlsTpl(); as controls) {\n <div rtElem=\"own\">\n <ng-container [ngTemplateOutlet]=\"controls.templateRef\" />\n </div>\n }\n </div>\n\n @if (isMultiToggleShown()) {\n <div rtElem=\"multi\">\n <rt-toggle-switch\n qa-dataid=\"tree-selector-multi\"\n [ariaLabel]=\"multiLabel()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"multiOn()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onMultiToggle($event)\" />\n <span rtElem=\"multi-label\">{{ multiLabel() }}</span>\n <rt-icon rtElem=\"multi-hint-icon\" name=\"info-circle\" size=\"sm\" [rtTooltip]=\"multiHintLabel()\" />\n </div>\n }\n </div>\n </div>\n\n @if (isNothingFound()) {\n <div rtElem=\"empty\" qa-dataid=\"tree-selector-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"tree-selector-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ nothingFoundLabel() }}\n </div>\n } @else {\n @if (hybrid) {\n <rt-hybrid-tree\n rtElem=\"tree\"\n qa-dataid=\"tree-selector-tree\"\n [nodes]=\"shownNodes()\"\n [value]=\"draft()\"\n [mode]=\"mode()\"\n [cascade]=\"cascade()\"\n [branchMarks]=\"branchMarks()\"\n [exclusive]=\"isExclusive()\"\n [showSelectAll]=\"selectAll()\"\n [searchTerm]=\"markTerm()\"\n [filter]=\"false\"\n [emptyIcon]=\"emptyIcon()\"\n [nodeEndTemplate]=\"endTemplate()\"\n [nodeMetaTemplate]=\"metaTemplate()\"\n [ariaLabel]=\"ariaLabel()\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onTreeChange($event)\"\n (picked)=\"onPicked()\" />\n } @else {\n <rt-tree\n rtElem=\"tree\"\n qa-dataid=\"tree-selector-tree\"\n [nodes]=\"shownNodes()\"\n [value]=\"draft()\"\n [mode]=\"mode()\"\n [cascade]=\"cascade()\"\n [branchMarks]=\"branchMarks()\"\n [exclusive]=\"isExclusive()\"\n [showSelectAll]=\"selectAll()\"\n [searchTerm]=\"markTerm()\"\n [filter]=\"false\"\n [emptyIcon]=\"emptyIcon()\"\n [nodeEndTemplate]=\"endTemplate()\"\n [nodeMetaTemplate]=\"metaTemplate()\"\n [ariaLabel]=\"ariaLabel()\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onTreeChange($event)\"\n (picked)=\"onPicked()\" />\n }\n }\n\n @if (isFooterShown()) {\n <div rtElem=\"foot\">\n <button\n rtButton\n qa-dataid=\"tree-selector-cancel\"\n type=\"button\"\n appearance=\"text\"\n [label]=\"cancelLabel()\"\n [attr.aria-label]=\"cancelLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"cancel()\"></button>\n <button\n rtButton\n qa-dataid=\"tree-selector-apply\"\n type=\"button\"\n [label]=\"applyLabel()\"\n [attr.aria-label]=\"applyLabel()\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n </div>\n }\n</ng-container>\n"],"mappings":";;;;;;;;;;;;;;AAOA,IAAa,kCAAb,MAAa,gCAA+B;CAD5C,cAAA;EAEoB,KAAA,cAAoC,OAA6B,WAAW;CAC/F;CAFY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA+B,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA/B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA+B,cAAA;GAAA,UAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAA/B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA+B,YAAA,CAAA;EAD3C,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,sCAAqC,CAAE;;;AAU9D,IAAa,qCAAb,MAAa,mCAAkC;CAD/C,cAAA;EAEoB,KAAA,cAAoC,OAA6B,WAAW;CAC/F;CAFY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAkC,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAlC;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAkC,cAAA;GAAA,UAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAAlC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkC,YAAA,CAAA;EAD9C,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,yCAAwC,CAAE;;;ACVjE,SAAS,SAAiB,MAAmB;CACzC,MAAM,UAAkB,KAAK,UAAU,CAAA,EAAA,CAAI,KAAK,UAAiC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG;CACrG,OAAO,GAAG,KAAK,MAAK,GAAI,KAAK,eAAe,GAAE,GAAI;AACtD;AAEA,SAAS,aAAqB,OAAqC,MAAY;CAC3E,OAAO,MAAM,QAAQ,MAAuB,SAAwC;EAChF,IAAI,gBAAgB,SAAS,IAAI,GAAG,IAAI,GAAG;GACvC,KAAK,KAAK,IAAI;GACd,OAAO;EACX;EACA,MAAM,SAA0B,aAAa,KAAK,YAAY,CAAA,GAAI,IAAI;EACtE,IAAI,OAAO,SAAS,GAChB,KAAK,KAAK;GAAE,GAAG;GAAM,UAAU;EAAM,CAAE;EAE3C,OAAO;CACX,GAAG,CAAA,CAAE;AACT;AAOA,SAAgB,qBAA6B,OAAqC,MAAY;CAC1F,IAAI,cAAc,IAAI,CAAC,CAAC,WAAW,GAC/B,OAAO;CAEX,OAAO,aAAa,OAAO,IAAI;AACnC;AAGA,SAAS,eAAuB,OAAqC,MAAiB;CAClF,MAAM,SAAS,SAA6B;EACxC,IAAI,KAAK,UACL,KAAK,IAAI,KAAK,KAAK;EAEvB,eAAe,KAAK,YAAY,CAAA,GAAI,IAAI;CAC5C,CAAC;CACD,OAAO;AACX;AAGA,SAAgB,oBAA4B,OAAqC,QAA6B;CAC1G,MAAM,WAAwB,eAAe,uBAAO,IAAI,IAAG,CAAU;CACrE,OAAO,OAAO,QAAQ,UAA2B,SAAS,IAAI,KAAK,CAAC;AACxE;AAGA,SAAgB,mBAA2B,GAA0B,GAAwB;CACzF,MAAM,OAAoB,IAAI,IAAY,CAAC;CAC3C,MAAM,QAAqB,IAAI,IAAY,CAAC;CAC5C,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,UAA2B,MAAM,IAAI,KAAK,CAAC;AACnG;AAGA,SAAgB,uBACZ,OACA,QACA,cAAqB;CAErB,IAAI,CAAC,gBAAgB,MAAM,WAAW,GAClC,OAAO;CAEX,OAAO,CAAC,mBAAmB,OAAO,MAAM;AAC5C;AC5BA,MAAM,YAAoB;AA+B1B,IAAa,0BAAb,MAAa,wBAAuB;CACvB;CACA;CAgJT,cAAA;EAjJS,KAAA,QAAiC,OAAgC,UAAU;EAC3E,KAAA,YAAsB,OAAO,QAAQ;EAE3B,KAAA,cAA8B,WAAW,uBAAuB;EAChE,KAAA,iBAAiC,WAAW,aAAa;EACzD,KAAA,mBAAmC,WAAW,eAAe;EAC7D,KAAA,aAA6B,WAAW,kBAAkB;EAC1D,KAAA,cAA8B,WAAW,mBAAmB;EAC5D,KAAA,aAA6B,WAAW,sBAAsB;EAC9D,KAAA,iBAAiC,WAAW,0BAA0B;EACtE,KAAA,cAA8B,WAAW,UAAU;EACnD,KAAA,aAA6B,WAAW,SAAS;EACjD,KAAA,oBAAoC,WAAW,gBAAgB;EAG/D,KAAA,SAAkB;EAElB,KAAA,YAAyD,UAAmC,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAE5G,KAAA,aACf,UAAyC,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGhD,KAAA,OAAoD,eACxB,KAAK,WAAU,KAAM,KAAK,UAAS,GACjF,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,cAAmE,aAAa,iCAAgC,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEhH,KAAA,iBACf,aAAa,oCAAmC,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAGjC,KAAA,UAA8D,aAAa,wBAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAElG,KAAA,WAAgE,aAAa,yBAAwB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAErG,KAAA,cAAuE,eAC/B,KAAK,QAAO,CAAE,EAAE,eAAe,MACzF,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,eAAwE,eAChC,KAAK,SAAQ,CAAE,EAAE,eAAe,MAC1F,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,OAA+B,mBAA2B,KAAK,WAAU,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG5E,KAAA,UAAmC,mBAA4B,KAAK,aAAY,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGnF,KAAA,QAA+C,mBAA0C,KAAK,MAAK,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAEtG,KAAA,aAA0D,eACzE,qBAAqB,KAAK,MAAK,GAAI,KAAK,KAAI,CAAE,GACjD,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,WAA2B,eAAwB,KAAK,eAAc,IAAK,KAAK,KAAI,IAAK,IAAI,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAE7F,KAAA,UAA2B,eAAwB,KAAK,WAAU,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGhF,KAAA,iBAAkC,eAAwB,CAAC,KAAK,QAAO,KAAM,KAAK,MAAK,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAErG,KAAA,gBAAiC,eAAwB,KAAK,eAAc,KAAM,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAGjG,KAAA,gBAAiC,eACjC,KAAK,WAAU,KAAM,KAAK,QAAO,KAAM,KAAK,KAAI,MAAO,QACzE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,iBAAkC,eAAwB,CAAC,mBAAmB,KAAK,MAAK,GAAI,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAE1G,KAAA,qBAAsC,eAAwB,KAAK,YAAW,KAAM,KAAK,KAAI,MAAO,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,+BAAA,CAAA,CAAA;EAE/G,KAAA,cAA+B,eAAwB,KAAK,mBAAkB,KAAM,CAAC,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEpG,KAAA,eAAgC,eAChC,KAAK,UAAS,KAAM,KAAK,KAAI,MAAO,UAAU,KAAK,MAAK,CAAE,CAAC,SAAS,GACtF,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,gBAAiC,eAAwB,KAAK,QAAO,KAAM,KAAK,OAAM,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAE5F,KAAA,QAA0D,MAAM,SAA+C,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAC/G,KAAA,QAA4C,MAA6B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAC5E,KAAA,OAAkC,MAAoB,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EACjE,KAAA,UAAsD,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EACjH,KAAA,cAA0D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;GAClG,WAAW;EAAgB,CAAA;EAGf,KAAA,YAAwD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GACjG,WAAW;EAAgB,CAAA;EAGf,KAAA,UAAsD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EAElH,KAAA,SAAqD,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,SAAA,+BAAA,CAAA;GAAI,WAAW;EAAgB,CAAA;EAChH,KAAA,eAA2D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GACnG,WAAW;EAAgB,CAAA;EAGf,KAAA,iBAA6D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;GACtG,WAAW;EAAgB,CAAA;EAEf,KAAA,YAAwD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GACjG,WAAW;EAAgB,CAAA;EAGf,KAAA,aAAyD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;GAClG,WAAW;EAAgB,CAAA;EAEf,KAAA,cAA0D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;GACnG,WAAW;EAAgB,CAAA;EAGf,KAAA,eAA2D,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GACpG,WAAW;EAAgB,CAAA;EAEf,KAAA,gBAA4D,MAAqC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAC1G,KAAA,QAA6B,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAE9C,KAAA,aAAkC,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EACnD,KAAA,YAAwC,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAElE,KAAA,iBAA6D,MAAwB,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;GACrG,WAAW;EAAgB,CAAA;EAGf,KAAA,YAA8C,MAA2B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAE9E,KAAA,WAAuD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAChG,WAAW;EAAgB,CAAA;EAGf,KAAA,UAAmD,OAAM;EACzD,KAAA,YAAoC,OAAM;EAG1C,KAAA,WAA4B,eACzB,CAAC,KAAK,SAAQ,KAAM,uBAAuB,KAAK,MAAK,GAAI,KAAK,MAAK,GAAI,KAAK,aAAY,CAAE,GAC5G,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGG,sBAA2B;GACvB,IAAI,CAAC,KAAK,SAAQ,GACd,KAAK,MAAM,cAAc,cAAgC,iCAAiC,CAAC,EAAE,MAAK;GAEtG,KAAK,eAAc;EACvB,CAAC;CACL;CAEO,QAAK;EACR,IAAI,CAAC,KAAK,SAAQ,GACd;EAEJ,MAAM,OAA8B,CAAC,GAAG,KAAK,MAAK,CAAE;EACpD,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,QAAQ,KAAK,IAAI;CAC1B;CAEO,SAAM;EACT,KAAK,MAAM,IAAI,KAAK,MAAK,CAAE;EAC3B,KAAK,UAAU,KAAI;CACvB;CAEU,OAAO,MAAY;EACzB,KAAK,KAAK,IAAI,IAAI;EAClB,IAAI,KAAK,KAAI,MAAO,IAChB,sBAA4B,KAAK,KAAI,CAAE,EAAE,UAAS,GAAI,EAAE,UAAU,KAAK,UAAS,CAAE;CAE1F;CAEU,gBAAgB,OAAoB;EAC1C,KAAK,KAAI,CAAE,EAAE,cAAc,KAAK;CACpC;CAEU,aAAa,MAA2B;EAC9C,KAAK,OAAO,IAAI;CACpB;CAGU,WAAQ;EACd,IAAI,CAAC,KAAK,QAAO,KAAM,KAAK,KAAI,MAAO,UACnC;EAEJ,IAAI,KAAK,SAAQ,GAAI;GACjB,KAAK,MAAK;GACV;EACJ;EACA,KAAK,OAAM;CACf;CAEU,UAAO;EACb,KAAK,OAAO,oBAAoB,KAAK,MAAK,GAAI,KAAK,MAAK,CAAE,CAAC;CAC/D;CAEU,WAAQ;EACd,KAAK,MAAM,IAAI,KAAK,MAAK,CAAE;CAC/B;CAEU,YAAS;EACf,KAAK,KAAI,CAAE,EAAE,UAAS;CAC1B;CAEU,cAAW;EACjB,KAAK,KAAI,CAAE,EAAE,YAAW;CAC5B;CAEU,cAAc,IAAW;EAC/B,KAAK,QAAQ,IAAI,EAAE;CACvB;CAEA,OAAO,MAA2B;EAC9B,KAAK,MAAM,IAAI,IAAI;EACnB,IAAI,CAAC,KAAK,QAAO,GACb,KAAK,MAAM,IAAI,IAAI;CAE3B;CAEA,iBAAc;EACV,MAAM,QAAuC,KAAK,cAAa;EAC/D,IAAI,UAAU,SAAS,KAAK,KAAI,CAAE,CAAC,KAAI,MAAO,IAAI;GAC9C,KAAK,KAAI,CAAE,EAAE,UAAS;GACtB;EACJ;EACA,IAAI,UAAU,QACV,KAAK,KAAI,CAAE,EAAE,YAAW;CAEhC;CAxOS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,eAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA;IAAA,OAAA;IAAA,SAAA;IAAA,WAAA;GAAA;GAAA,MAAA,EAAA,gBAAA,mBAAA;GAAA,SAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WA4BmE;KAA+B,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAGjH;KAAkC,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAG2C;KAAsB,aAAA;KAAA,UAAA;IAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAEpB;KAAuB,aAAA;KAAA,UAAA;IAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAlBR;IAAe,aAAA;IAAA,UAAA;GAAA,GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAGjF;IAAqB,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC9FtE;GAoLA,QAAA,CAAA,g/DAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MD1HQ;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAAW;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA;KAAA,UAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACX;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,iBAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;KAAuB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACvB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAClB;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA,QAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAqB,UAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAIhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAtBnC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAkB,iBAGX,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GAAA,MACK,EAAE,OAAO,UAAS;GAAE,UAAA;GAAA,QAAA,CAAA,g/DAAA;EAAA,CAAA;CAoBqF,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,eAAe,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAGjF,qBAAqB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAOiC,+BAA+B,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAGjH,kCAAkC,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAG2C,sBAAsB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAEpB,uBAAuB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,aAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,SAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,WAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
@@ -493,7 +493,7 @@ var RtTreeComponent = class RtTreeComponent {
|
|
|
493
493
|
}],
|
|
494
494
|
ngImport: i0,
|
|
495
495
|
template: "<ng-container rtBlock=\"rt-tree\">\n <!--\n Строки выбираются мышью через (click); клавиатура — на самом дереве (handleKeydown), строки\n по отдельности фокус не берут: подсветка — третье состояние рядом с фокусом и выбором.\n -->\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n @if (isSelectAllShown()) {\n <div\n rtElem=\"select-all\"\n qa-dataid=\"tree-select-all\"\n role=\"presentation\"\n [rtMod]=\"{ disabled: disabled(), 'over-leaf': isSelectAllOverLeaf() }\"\n (click)=\"onSelectAll()\">\n @if (isSelectAllUnderMark()) {\n <span rtElem=\"toggle-space\"></span>\n }\n <rt-checkbox\n rtElem=\"check\"\n inert\n [disabled]=\"disabled()\"\n [indeterminate]=\"selectAllMark() === 'some'\"\n [ngModel]=\"selectAllMark() === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n <span rtElem=\"label\">{{ t().uiSelectAll }}</span>\n </div>\n }\n\n @for (view of views(); track view.row.option.value) {\n <div\n rtElem=\"row\"\n qa-dataid=\"tree-row\"\n role=\"treeitem\"\n [attr.data-value]=\"view.row.option.value\"\n [attr.aria-level]=\"view.row.level + 1\"\n [attr.aria-expanded]=\"view.row.branch ? view.row.open : null\"\n [attr.aria-selected]=\"view.marked ? view.mark === 'all' : null\"\n [attr.aria-disabled]=\"view.disabled\"\n [style.--rt-tree-level]=\"view.row.level\"\n [rtMod]=\"{ highlighted: view.highlighted, disabled: view.disabled, chosen: view.mark === 'all' }\"\n (click)=\"onRowClick(view.row, $event)\">\n @if (view.row.branch) {\n <button\n rtElem=\"toggle\"\n qa-dataid=\"tree-row-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.row.open ? t().uiCollapse : t().uiExpand\"\n (click)=\"onToggleClick($event, view.row.option.value)\">\n <rt-icon size=\"sm\" color=\"muted\" [name]=\"view.row.open ? 'chevron-down' : 'chevron-right'\" />\n </button>\n } @else {\n <span rtElem=\"toggle-space\"></span>\n }\n\n @if (view.marked && !view.radio) {\n <rt-checkbox\n rtElem=\"check\"\n qa-dataid=\"tree-row-checkbox\"\n inert\n [disabled]=\"view.disabled\"\n [indeterminate]=\"view.mark === 'some'\"\n [ngModel]=\"view.mark === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n } @else if (view.marked) {\n <rt-radio-button\n rtElem=\"check\"\n qa-dataid=\"tree-row-radio\"\n inert\n [value]=\"view.row.option.value\"\n [checked]=\"view.mark === 'all'\"\n [disabled]=\"view.disabled\" />\n }\n\n <span rtElem=\"text\">\n <span rtElem=\"label\" qa-dataid=\"tree-row-label\" rtTooltipWhenTruncated [rtTooltip]=\"view.row.option.label\">\n @for (part of view.parts.label; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n @if (view.parts.description.length > 0) {\n <span\n rtElem=\"description\"\n qa-dataid=\"tree-row-description\"\n rtTooltipWhenTruncated\n [rtTooltip]=\"view.row.option.description\">\n @for (part of view.parts.description; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n }\n @if (view.row.option.badges?.length || metaTemplate()) {\n <span rtElem=\"meta\" qa-dataid=\"tree-row-meta\">\n @for (badge of view.row.option.badges; track $index) {\n <rt-tag size=\"sm\" [value]=\"badge.text\" [severity]=\"badge.severity ?? 'neutral'\" [highlight]=\"searchTerm()\" />\n }\n @if (metaTemplate(); as meta) {\n <ng-container [ngTemplateOutlet]=\"meta\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n }\n </span>\n }\n </span>\n\n @if (view.count) {\n <span rtElem=\"count\" qa-dataid=\"tree-row-count\">{{ view.count }}</span>\n }\n\n @if (endTemplate(); as end) {\n <span rtElem=\"end\" qa-dataid=\"tree-row-end\">\n <ng-container [ngTemplateOutlet]=\"end\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n </span>\n }\n </div>\n } @empty {\n <div rtElem=\"empty\" qa-dataid=\"tree-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"tree-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ emptyText() }}\n </div>\n }\n</ng-container>\n",
|
|
496
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tree{--rt-tree-font-size: var(--rt-input-font-size);--rt-tree-color: var(--rt-color-text-primary);--rt-tree-indent: var(--rt-space-lg);--rt-tree-row-padding-block: var(--rt-space-sm);--rt-tree-row-padding-inline: var(--rt-space-md);--rt-tree-row-gap: var(--rt-space-sm);--rt-tree-row-spacing: var(--rt-space-0);--rt-tree-row-min-height: auto;--rt-tree-row-box-sizing: content-box;--rt-tree-row-radius: var(--rt-radius-none);--rt-tree-row-bg-hover: var(--rt-color-bg-hover);--rt-tree-row-bg-highlighted: var(--rt-color-bg-hover);--rt-tree-row-bg-chosen: var(--rt-color-action-primary-subtle);--rt-tree-guide-width: var(--rt-border-width-thin);--rt-tree-guide-color: transparent;--rt-tree-toggle-size: var(--rt-input-icon-size);--rt-tree-toggle-color: var(--rt-neutral-600);--rt-tree-leaf-space-display: inline-flex;--rt-tree-check-size: calc(var(--rt-size-4) + var(--rt-space-0-5));--rt-tree-check-border-color: var(--rt-color-border-strong);--rt-tree-match-bg: var(--rt-yellow-400);--rt-tree-match-color: var(--rt-neutral-950);--rt-tree-match-radius: var(--rt-radius-xs);--rt-tree-match-font-weight: var(--rt-font-weight-regular);--rt-tree-count-color: var(--rt-color-text-muted);--rt-tree-count-bg: transparent;--rt-tree-count-font-size: var(--rt-text-sm);--rt-tree-count-padding-inline: var(--rt-space-0);--rt-tree-count-min-size: auto;--rt-tree-count-radius: var(--rt-radius-none);--rt-tree-select-all-font-size: var(--rt-tree-font-size);--rt-tree-select-all-font-weight: var(--rt-font-weight-regular);--rt-tree-empty-color: var(--rt-color-text-muted);--rt-tree-empty-gap: var(--rt-space-sm);--rt-tree-focus-shadow: var(--rt-shadow-focus-ring);--rt-tree-border-width: var(--rt-border-width-thin);--rt-tree-bg: var(--rt-color-bg-surface);--rt-tree-select-all-bg: var(--rt-tree-bg);--rt-tree-select-all-z: var(--rt-z-sticky);display:block;background-color:var(--rt-tree-bg);color:var(--rt-tree-color);font-size:var(--rt-tree-font-size);isolation:isolate;outline:none}@media(pointer:coarse){.rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-indent: calc(var(--rt-size-12) - var(--rt-space-0-5));--rt-tree-row-padding-block: var(--rt-space-1);--rt-tree-row-padding-inline: calc(var(--rt-space-2) + var(--rt-space-1));--rt-tree-row-gap: calc(var(--rt-space-2) + var(--rt-space-0-5));--rt-tree-row-spacing: calc(var(--rt-space-1) + var(--rt-space-0-5) / 2);--rt-tree-row-min-height: var(--rt-size-8);--rt-tree-row-box-sizing: border-box;--rt-tree-row-radius: var(--rt-radius-ms);--rt-tree-guide-color: var(--
|
|
496
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tree{--rt-tree-font-size: var(--rt-input-font-size);--rt-tree-color: var(--rt-color-text-primary);--rt-tree-indent: var(--rt-space-lg);--rt-tree-row-padding-block: var(--rt-space-sm);--rt-tree-row-padding-inline: var(--rt-space-md);--rt-tree-row-gap: var(--rt-space-sm);--rt-tree-row-spacing: var(--rt-space-0);--rt-tree-row-min-height: auto;--rt-tree-row-box-sizing: content-box;--rt-tree-row-radius: var(--rt-radius-none);--rt-tree-row-bg-hover: var(--rt-color-bg-hover);--rt-tree-row-bg-highlighted: var(--rt-color-bg-hover);--rt-tree-row-bg-chosen: var(--rt-color-action-primary-subtle);--rt-tree-guide-width: var(--rt-border-width-thin);--rt-tree-guide-color: transparent;--rt-tree-toggle-size: var(--rt-input-icon-size);--rt-tree-toggle-color: var(--rt-neutral-600);--rt-tree-leaf-space-display: inline-flex;--rt-tree-check-size: calc(var(--rt-size-4) + var(--rt-space-0-5));--rt-tree-check-border-color: var(--rt-color-border-strong);--rt-tree-match-bg: var(--rt-yellow-400);--rt-tree-match-color: var(--rt-neutral-950);--rt-tree-match-radius: var(--rt-radius-xs);--rt-tree-match-font-weight: var(--rt-font-weight-regular);--rt-tree-count-color: var(--rt-color-text-muted);--rt-tree-count-bg: transparent;--rt-tree-count-font-size: var(--rt-text-sm);--rt-tree-count-padding-inline: var(--rt-space-0);--rt-tree-count-min-size: auto;--rt-tree-count-radius: var(--rt-radius-none);--rt-tree-select-all-font-size: var(--rt-tree-font-size);--rt-tree-select-all-font-weight: var(--rt-font-weight-regular);--rt-tree-empty-color: var(--rt-color-text-muted);--rt-tree-empty-gap: var(--rt-space-sm);--rt-tree-focus-shadow: var(--rt-shadow-focus-ring);--rt-tree-border-width: var(--rt-border-width-thin);--rt-tree-bg: var(--rt-color-bg-surface);--rt-tree-select-all-bg: var(--rt-tree-bg);--rt-tree-select-all-z: var(--rt-z-sticky);display:block;background-color:var(--rt-tree-bg);color:var(--rt-tree-color);font-size:var(--rt-tree-font-size);isolation:isolate;outline:none}@media(pointer:coarse){.rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-indent: calc(var(--rt-size-12) - var(--rt-space-0-5));--rt-tree-row-padding-block: var(--rt-space-1);--rt-tree-row-padding-inline: calc(var(--rt-space-2) + var(--rt-space-1));--rt-tree-row-gap: calc(var(--rt-space-2) + var(--rt-space-0-5));--rt-tree-row-spacing: calc(var(--rt-space-1) + var(--rt-space-0-5) / 2);--rt-tree-row-min-height: var(--rt-size-8);--rt-tree-row-box-sizing: border-box;--rt-tree-row-radius: var(--rt-radius-ms);--rt-tree-guide-color: var(--rt-sys-outline-variant, var(--rt-color-border-subtle));--rt-tree-toggle-color: var(--rt-color-action-primary);--rt-tree-leaf-space-display: none;--rt-tree-check-size: calc(var(--rt-size-4) - 2 * var(--rt-input-border-width));--rt-tree-check-border-color: var(--rt-mat-neutral-40);--rt-tree-match-bg: var(--rt-mat-yellow-100);--rt-tree-match-font-weight: var(--rt-font-weight-semibold);--rt-tree-count-bg: var(--rt-color-action-primary);--rt-tree-count-color: var(--rt-sys-on-primary, var(--rt-color-text-inverse));--rt-tree-count-font-size: var(--rt-text-xs);--rt-tree-count-padding-inline: calc(var(--rt-space-1) + var(--rt-space-0-5));--rt-tree-count-min-size: var(--rt-size-5);--rt-tree-count-radius: var(--rt-radius-full);--rt-tree-select-all-font-size: var(--rt-text-sm);--rt-tree-select-all-font-weight: var(--rt-font-weight-medium)}@media(pointer:coarse){:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}.rt-tree:focus-visible{box-shadow:var(--rt-tree-focus-shadow)}.rt-tree__select-all,.rt-tree__row{--rt-tree-level: 0;display:flex;box-sizing:var(--rt-tree-row-box-sizing);align-items:center;padding:var(--rt-tree-row-padding-block) var(--rt-tree-row-padding-inline);border-radius:var(--rt-tree-row-radius);cursor:pointer;gap:var(--rt-tree-row-gap);min-block-size:var(--rt-tree-row-min-height);padding-inline-start:calc(var(--rt-tree-row-padding-inline) + var(--rt-tree-indent) * var(--rt-tree-level))}.rt-tree__select-all:hover,.rt-tree__row:hover{background-color:var(--rt-tree-row-bg-hover)}.rt-tree__select-all{position:sticky;z-index:var(--rt-tree-select-all-z);top:0;border-bottom:var(--rt-tree-border-width) solid var(--rt-color-border-default);background-color:var(--rt-tree-select-all-bg)}.rt-tree__select-all:hover{background-color:var(--rt-tree-select-all-bg);background-image:linear-gradient(var(--rt-tree-row-bg-hover),var(--rt-tree-row-bg-hover))}.rt-tree__select-all--disabled{cursor:not-allowed;opacity:var(--rt-input-disabled-opacity)}.rt-tree__select-all .rt-tree__label{font-size:var(--rt-tree-select-all-font-size);font-weight:var(--rt-tree-select-all-font-weight)}.rt-tree__row{position:relative}.rt-tree__row+.rt-tree__row{margin-block-start:var(--rt-tree-row-spacing)}.rt-tree__row:before{position:absolute;background:repeating-linear-gradient(to right,var(--rt-tree-guide-color) 0 var(--rt-tree-guide-width),transparent var(--rt-tree-guide-width) var(--rt-tree-indent));content:\"\";inline-size:calc(var(--rt-tree-indent) * var(--rt-tree-level));inset-block:calc(-1 * var(--rt-tree-row-spacing)) 0;inset-inline-start:calc(var(--rt-tree-row-padding-inline) + (var(--rt-tree-toggle-size) - var(--rt-tree-guide-width)) / 2);pointer-events:none}.rt-tree__row--highlighted{background-color:var(--rt-tree-row-bg-highlighted)}.rt-tree__row--chosen{background-color:var(--rt-tree-row-bg-chosen)}.rt-tree__row--disabled{cursor:not-allowed;opacity:var(--rt-input-disabled-opacity)}.rt-tree__row--disabled:hover{background-color:transparent}.rt-tree__toggle,.rt-tree__toggle-space{display:inline-flex;flex-shrink:0;block-size:var(--rt-tree-toggle-size);inline-size:var(--rt-tree-toggle-size)}.rt-tree__row>.rt-tree__toggle-space,.rt-tree__select-all--over-leaf>.rt-tree__toggle-space{display:var(--rt-tree-leaf-space-display)}.rt-tree__toggle{--rt-icon-color-muted: var(--rt-tree-toggle-color);align-items:center;justify-content:center;padding:0;border:0;background:transparent;cursor:pointer}.rt-tree__check{--rt-checkbox-box-size: var(--rt-tree-check-size);--rt-checkbox-box-border-color: var(--rt-tree-check-border-color);flex-shrink:0;margin:0;pointer-events:none}.rt-tree__text{display:flex;min-width:0;flex:1 1 auto;flex-direction:column}.rt-tree__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rt-tree__description{overflow:hidden;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);text-overflow:ellipsis;white-space:nowrap}.rt-tree__meta{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--rt-space-1);margin-block-start:var(--rt-space-1)}.rt-tree__part--match{border-radius:var(--rt-tree-match-radius);background:var(--rt-tree-match-bg);color:var(--rt-tree-match-color);font-weight:var(--rt-tree-match-font-weight)}.rt-tree__count{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--rt-tree-count-radius);background:var(--rt-tree-count-bg);color:var(--rt-tree-count-color);font-size:var(--rt-tree-count-font-size);font-variant-numeric:tabular-nums;min-block-size:var(--rt-tree-count-min-size);min-inline-size:var(--rt-tree-count-min-size);padding-inline:var(--rt-tree-count-padding-inline)}.rt-tree__end{display:inline-flex;flex-shrink:0;align-items:center;margin-inline-start:auto}.rt-tree__empty{padding:var(--rt-space-md);color:var(--rt-tree-empty-color);text-align:center}.rt-tree__empty--with-icon{display:flex;flex-direction:column;align-items:center;gap:var(--rt-tree-empty-gap)}.rt-tree__empty-icon{flex-shrink:0}}\n"],
|
|
497
497
|
dependencies: [
|
|
498
498
|
{
|
|
499
499
|
kind: "directive",
|
|
@@ -535,8 +535,10 @@ var RtTreeComponent = class RtTreeComponent {
|
|
|
535
535
|
"inputId",
|
|
536
536
|
"ariaLabel",
|
|
537
537
|
"disabled",
|
|
538
|
+
"checked",
|
|
538
539
|
"indeterminate"
|
|
539
|
-
]
|
|
540
|
+
],
|
|
541
|
+
outputs: ["checkedChange"]
|
|
540
542
|
},
|
|
541
543
|
{
|
|
542
544
|
kind: "component",
|
|
@@ -591,6 +593,7 @@ var RtTreeComponent = class RtTreeComponent {
|
|
|
591
593
|
inputs: [
|
|
592
594
|
"rtTooltip",
|
|
593
595
|
"rtTooltipPlacement",
|
|
596
|
+
"rtTooltipShowDelay",
|
|
594
597
|
"rtTooltipWhenTruncated",
|
|
595
598
|
"rtTooltipHideOnClick"
|
|
596
599
|
],
|
|
@@ -652,7 +655,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
652
655
|
"(keydown)": "handleKeydown($event)"
|
|
653
656
|
},
|
|
654
657
|
template: "<ng-container rtBlock=\"rt-tree\">\n <!--\n Строки выбираются мышью через (click); клавиатура — на самом дереве (handleKeydown), строки\n по отдельности фокус не берут: подсветка — третье состояние рядом с фокусом и выбором.\n -->\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n @if (isSelectAllShown()) {\n <div\n rtElem=\"select-all\"\n qa-dataid=\"tree-select-all\"\n role=\"presentation\"\n [rtMod]=\"{ disabled: disabled(), 'over-leaf': isSelectAllOverLeaf() }\"\n (click)=\"onSelectAll()\">\n @if (isSelectAllUnderMark()) {\n <span rtElem=\"toggle-space\"></span>\n }\n <rt-checkbox\n rtElem=\"check\"\n inert\n [disabled]=\"disabled()\"\n [indeterminate]=\"selectAllMark() === 'some'\"\n [ngModel]=\"selectAllMark() === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n <span rtElem=\"label\">{{ t().uiSelectAll }}</span>\n </div>\n }\n\n @for (view of views(); track view.row.option.value) {\n <div\n rtElem=\"row\"\n qa-dataid=\"tree-row\"\n role=\"treeitem\"\n [attr.data-value]=\"view.row.option.value\"\n [attr.aria-level]=\"view.row.level + 1\"\n [attr.aria-expanded]=\"view.row.branch ? view.row.open : null\"\n [attr.aria-selected]=\"view.marked ? view.mark === 'all' : null\"\n [attr.aria-disabled]=\"view.disabled\"\n [style.--rt-tree-level]=\"view.row.level\"\n [rtMod]=\"{ highlighted: view.highlighted, disabled: view.disabled, chosen: view.mark === 'all' }\"\n (click)=\"onRowClick(view.row, $event)\">\n @if (view.row.branch) {\n <button\n rtElem=\"toggle\"\n qa-dataid=\"tree-row-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.row.open ? t().uiCollapse : t().uiExpand\"\n (click)=\"onToggleClick($event, view.row.option.value)\">\n <rt-icon size=\"sm\" color=\"muted\" [name]=\"view.row.open ? 'chevron-down' : 'chevron-right'\" />\n </button>\n } @else {\n <span rtElem=\"toggle-space\"></span>\n }\n\n @if (view.marked && !view.radio) {\n <rt-checkbox\n rtElem=\"check\"\n qa-dataid=\"tree-row-checkbox\"\n inert\n [disabled]=\"view.disabled\"\n [indeterminate]=\"view.mark === 'some'\"\n [ngModel]=\"view.mark === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n } @else if (view.marked) {\n <rt-radio-button\n rtElem=\"check\"\n qa-dataid=\"tree-row-radio\"\n inert\n [value]=\"view.row.option.value\"\n [checked]=\"view.mark === 'all'\"\n [disabled]=\"view.disabled\" />\n }\n\n <span rtElem=\"text\">\n <span rtElem=\"label\" qa-dataid=\"tree-row-label\" rtTooltipWhenTruncated [rtTooltip]=\"view.row.option.label\">\n @for (part of view.parts.label; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n @if (view.parts.description.length > 0) {\n <span\n rtElem=\"description\"\n qa-dataid=\"tree-row-description\"\n rtTooltipWhenTruncated\n [rtTooltip]=\"view.row.option.description\">\n @for (part of view.parts.description; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n }\n @if (view.row.option.badges?.length || metaTemplate()) {\n <span rtElem=\"meta\" qa-dataid=\"tree-row-meta\">\n @for (badge of view.row.option.badges; track $index) {\n <rt-tag size=\"sm\" [value]=\"badge.text\" [severity]=\"badge.severity ?? 'neutral'\" [highlight]=\"searchTerm()\" />\n }\n @if (metaTemplate(); as meta) {\n <ng-container [ngTemplateOutlet]=\"meta\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n }\n </span>\n }\n </span>\n\n @if (view.count) {\n <span rtElem=\"count\" qa-dataid=\"tree-row-count\">{{ view.count }}</span>\n }\n\n @if (endTemplate(); as end) {\n <span rtElem=\"end\" qa-dataid=\"tree-row-end\">\n <ng-container [ngTemplateOutlet]=\"end\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n </span>\n }\n </div>\n } @empty {\n <div rtElem=\"empty\" qa-dataid=\"tree-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"tree-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ emptyText() }}\n </div>\n }\n</ng-container>\n",
|
|
655
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tree{--rt-tree-font-size: var(--rt-input-font-size);--rt-tree-color: var(--rt-color-text-primary);--rt-tree-indent: var(--rt-space-lg);--rt-tree-row-padding-block: var(--rt-space-sm);--rt-tree-row-padding-inline: var(--rt-space-md);--rt-tree-row-gap: var(--rt-space-sm);--rt-tree-row-spacing: var(--rt-space-0);--rt-tree-row-min-height: auto;--rt-tree-row-box-sizing: content-box;--rt-tree-row-radius: var(--rt-radius-none);--rt-tree-row-bg-hover: var(--rt-color-bg-hover);--rt-tree-row-bg-highlighted: var(--rt-color-bg-hover);--rt-tree-row-bg-chosen: var(--rt-color-action-primary-subtle);--rt-tree-guide-width: var(--rt-border-width-thin);--rt-tree-guide-color: transparent;--rt-tree-toggle-size: var(--rt-input-icon-size);--rt-tree-toggle-color: var(--rt-neutral-600);--rt-tree-leaf-space-display: inline-flex;--rt-tree-check-size: calc(var(--rt-size-4) + var(--rt-space-0-5));--rt-tree-check-border-color: var(--rt-color-border-strong);--rt-tree-match-bg: var(--rt-yellow-400);--rt-tree-match-color: var(--rt-neutral-950);--rt-tree-match-radius: var(--rt-radius-xs);--rt-tree-match-font-weight: var(--rt-font-weight-regular);--rt-tree-count-color: var(--rt-color-text-muted);--rt-tree-count-bg: transparent;--rt-tree-count-font-size: var(--rt-text-sm);--rt-tree-count-padding-inline: var(--rt-space-0);--rt-tree-count-min-size: auto;--rt-tree-count-radius: var(--rt-radius-none);--rt-tree-select-all-font-size: var(--rt-tree-font-size);--rt-tree-select-all-font-weight: var(--rt-font-weight-regular);--rt-tree-empty-color: var(--rt-color-text-muted);--rt-tree-empty-gap: var(--rt-space-sm);--rt-tree-focus-shadow: var(--rt-shadow-focus-ring);--rt-tree-border-width: var(--rt-border-width-thin);--rt-tree-bg: var(--rt-color-bg-surface);--rt-tree-select-all-bg: var(--rt-tree-bg);--rt-tree-select-all-z: var(--rt-z-sticky);display:block;background-color:var(--rt-tree-bg);color:var(--rt-tree-color);font-size:var(--rt-tree-font-size);isolation:isolate;outline:none}@media(pointer:coarse){.rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-indent: calc(var(--rt-size-12) - var(--rt-space-0-5));--rt-tree-row-padding-block: var(--rt-space-1);--rt-tree-row-padding-inline: calc(var(--rt-space-2) + var(--rt-space-1));--rt-tree-row-gap: calc(var(--rt-space-2) + var(--rt-space-0-5));--rt-tree-row-spacing: calc(var(--rt-space-1) + var(--rt-space-0-5) / 2);--rt-tree-row-min-height: var(--rt-size-8);--rt-tree-row-box-sizing: border-box;--rt-tree-row-radius: var(--rt-radius-ms);--rt-tree-guide-color: var(--
|
|
658
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tree{--rt-tree-font-size: var(--rt-input-font-size);--rt-tree-color: var(--rt-color-text-primary);--rt-tree-indent: var(--rt-space-lg);--rt-tree-row-padding-block: var(--rt-space-sm);--rt-tree-row-padding-inline: var(--rt-space-md);--rt-tree-row-gap: var(--rt-space-sm);--rt-tree-row-spacing: var(--rt-space-0);--rt-tree-row-min-height: auto;--rt-tree-row-box-sizing: content-box;--rt-tree-row-radius: var(--rt-radius-none);--rt-tree-row-bg-hover: var(--rt-color-bg-hover);--rt-tree-row-bg-highlighted: var(--rt-color-bg-hover);--rt-tree-row-bg-chosen: var(--rt-color-action-primary-subtle);--rt-tree-guide-width: var(--rt-border-width-thin);--rt-tree-guide-color: transparent;--rt-tree-toggle-size: var(--rt-input-icon-size);--rt-tree-toggle-color: var(--rt-neutral-600);--rt-tree-leaf-space-display: inline-flex;--rt-tree-check-size: calc(var(--rt-size-4) + var(--rt-space-0-5));--rt-tree-check-border-color: var(--rt-color-border-strong);--rt-tree-match-bg: var(--rt-yellow-400);--rt-tree-match-color: var(--rt-neutral-950);--rt-tree-match-radius: var(--rt-radius-xs);--rt-tree-match-font-weight: var(--rt-font-weight-regular);--rt-tree-count-color: var(--rt-color-text-muted);--rt-tree-count-bg: transparent;--rt-tree-count-font-size: var(--rt-text-sm);--rt-tree-count-padding-inline: var(--rt-space-0);--rt-tree-count-min-size: auto;--rt-tree-count-radius: var(--rt-radius-none);--rt-tree-select-all-font-size: var(--rt-tree-font-size);--rt-tree-select-all-font-weight: var(--rt-font-weight-regular);--rt-tree-empty-color: var(--rt-color-text-muted);--rt-tree-empty-gap: var(--rt-space-sm);--rt-tree-focus-shadow: var(--rt-shadow-focus-ring);--rt-tree-border-width: var(--rt-border-width-thin);--rt-tree-bg: var(--rt-color-bg-surface);--rt-tree-select-all-bg: var(--rt-tree-bg);--rt-tree-select-all-z: var(--rt-z-sticky);display:block;background-color:var(--rt-tree-bg);color:var(--rt-tree-color);font-size:var(--rt-tree-font-size);isolation:isolate;outline:none}@media(pointer:coarse){.rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-indent: calc(var(--rt-size-12) - var(--rt-space-0-5));--rt-tree-row-padding-block: var(--rt-space-1);--rt-tree-row-padding-inline: calc(var(--rt-space-2) + var(--rt-space-1));--rt-tree-row-gap: calc(var(--rt-space-2) + var(--rt-space-0-5));--rt-tree-row-spacing: calc(var(--rt-space-1) + var(--rt-space-0-5) / 2);--rt-tree-row-min-height: var(--rt-size-8);--rt-tree-row-box-sizing: border-box;--rt-tree-row-radius: var(--rt-radius-ms);--rt-tree-guide-color: var(--rt-sys-outline-variant, var(--rt-color-border-subtle));--rt-tree-toggle-color: var(--rt-color-action-primary);--rt-tree-leaf-space-display: none;--rt-tree-check-size: calc(var(--rt-size-4) - 2 * var(--rt-input-border-width));--rt-tree-check-border-color: var(--rt-mat-neutral-40);--rt-tree-match-bg: var(--rt-mat-yellow-100);--rt-tree-match-font-weight: var(--rt-font-weight-semibold);--rt-tree-count-bg: var(--rt-color-action-primary);--rt-tree-count-color: var(--rt-sys-on-primary, var(--rt-color-text-inverse));--rt-tree-count-font-size: var(--rt-text-xs);--rt-tree-count-padding-inline: calc(var(--rt-space-1) + var(--rt-space-0-5));--rt-tree-count-min-size: var(--rt-size-5);--rt-tree-count-radius: var(--rt-radius-full);--rt-tree-select-all-font-size: var(--rt-text-sm);--rt-tree-select-all-font-weight: var(--rt-font-weight-medium)}@media(pointer:coarse){:is(.rt-preset-material,[data-preset=material]) .rt-tree{--rt-tree-row-min-height: var(--rt-control-height-lg)}}.rt-tree:focus-visible{box-shadow:var(--rt-tree-focus-shadow)}.rt-tree__select-all,.rt-tree__row{--rt-tree-level: 0;display:flex;box-sizing:var(--rt-tree-row-box-sizing);align-items:center;padding:var(--rt-tree-row-padding-block) var(--rt-tree-row-padding-inline);border-radius:var(--rt-tree-row-radius);cursor:pointer;gap:var(--rt-tree-row-gap);min-block-size:var(--rt-tree-row-min-height);padding-inline-start:calc(var(--rt-tree-row-padding-inline) + var(--rt-tree-indent) * var(--rt-tree-level))}.rt-tree__select-all:hover,.rt-tree__row:hover{background-color:var(--rt-tree-row-bg-hover)}.rt-tree__select-all{position:sticky;z-index:var(--rt-tree-select-all-z);top:0;border-bottom:var(--rt-tree-border-width) solid var(--rt-color-border-default);background-color:var(--rt-tree-select-all-bg)}.rt-tree__select-all:hover{background-color:var(--rt-tree-select-all-bg);background-image:linear-gradient(var(--rt-tree-row-bg-hover),var(--rt-tree-row-bg-hover))}.rt-tree__select-all--disabled{cursor:not-allowed;opacity:var(--rt-input-disabled-opacity)}.rt-tree__select-all .rt-tree__label{font-size:var(--rt-tree-select-all-font-size);font-weight:var(--rt-tree-select-all-font-weight)}.rt-tree__row{position:relative}.rt-tree__row+.rt-tree__row{margin-block-start:var(--rt-tree-row-spacing)}.rt-tree__row:before{position:absolute;background:repeating-linear-gradient(to right,var(--rt-tree-guide-color) 0 var(--rt-tree-guide-width),transparent var(--rt-tree-guide-width) var(--rt-tree-indent));content:\"\";inline-size:calc(var(--rt-tree-indent) * var(--rt-tree-level));inset-block:calc(-1 * var(--rt-tree-row-spacing)) 0;inset-inline-start:calc(var(--rt-tree-row-padding-inline) + (var(--rt-tree-toggle-size) - var(--rt-tree-guide-width)) / 2);pointer-events:none}.rt-tree__row--highlighted{background-color:var(--rt-tree-row-bg-highlighted)}.rt-tree__row--chosen{background-color:var(--rt-tree-row-bg-chosen)}.rt-tree__row--disabled{cursor:not-allowed;opacity:var(--rt-input-disabled-opacity)}.rt-tree__row--disabled:hover{background-color:transparent}.rt-tree__toggle,.rt-tree__toggle-space{display:inline-flex;flex-shrink:0;block-size:var(--rt-tree-toggle-size);inline-size:var(--rt-tree-toggle-size)}.rt-tree__row>.rt-tree__toggle-space,.rt-tree__select-all--over-leaf>.rt-tree__toggle-space{display:var(--rt-tree-leaf-space-display)}.rt-tree__toggle{--rt-icon-color-muted: var(--rt-tree-toggle-color);align-items:center;justify-content:center;padding:0;border:0;background:transparent;cursor:pointer}.rt-tree__check{--rt-checkbox-box-size: var(--rt-tree-check-size);--rt-checkbox-box-border-color: var(--rt-tree-check-border-color);flex-shrink:0;margin:0;pointer-events:none}.rt-tree__text{display:flex;min-width:0;flex:1 1 auto;flex-direction:column}.rt-tree__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rt-tree__description{overflow:hidden;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);text-overflow:ellipsis;white-space:nowrap}.rt-tree__meta{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--rt-space-1);margin-block-start:var(--rt-space-1)}.rt-tree__part--match{border-radius:var(--rt-tree-match-radius);background:var(--rt-tree-match-bg);color:var(--rt-tree-match-color);font-weight:var(--rt-tree-match-font-weight)}.rt-tree__count{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--rt-tree-count-radius);background:var(--rt-tree-count-bg);color:var(--rt-tree-count-color);font-size:var(--rt-tree-count-font-size);font-variant-numeric:tabular-nums;min-block-size:var(--rt-tree-count-min-size);min-inline-size:var(--rt-tree-count-min-size);padding-inline:var(--rt-tree-count-padding-inline)}.rt-tree__end{display:inline-flex;flex-shrink:0;align-items:center;margin-inline-start:auto}.rt-tree__empty{padding:var(--rt-space-md);color:var(--rt-tree-empty-color);text-align:center}.rt-tree__empty--with-icon{display:flex;flex-direction:column;align-items:center;gap:var(--rt-tree-empty-gap)}.rt-tree__empty-icon{flex-shrink:0}}\n"]
|
|
656
659
|
}]
|
|
657
660
|
}],
|
|
658
661
|
propDecorators: {
|