@rt-tools/ui-kit-v2 0.18.0 → 0.19.1
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 +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +14 -8
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +97 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +10 -3
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +81 -0
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +99 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +5 -5
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +16 -4
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +124 -25
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +3 -3
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +64 -27
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +46 -0
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +336 -12
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +16 -2
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +3 -3
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +31 -5
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +3 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +13 -1
- package/rt-tools-ui-kit-v2-0.19.1.tgz +0 -0
- package/src/assets/icons/sparkle.svg +9 -0
- package/src/assets/icons/thumb-down.svg +10 -0
- package/src/assets/icons/thumb-up.svg +9 -0
- package/src/assets/icons/trash-x.svg +7 -0
- package/src/assets/icons-material/sparkle.fill.svg +5 -0
- package/src/assets/icons-material/sparkle.svg +5 -0
- package/src/assets/icons-material/thumb-down.fill.svg +5 -0
- package/src/assets/icons-material/thumb-down.svg +5 -0
- package/src/assets/icons-material/thumb-up.fill.svg +5 -0
- package/src/assets/icons-material/thumb-up.svg +5 -0
- package/src/assets/icons-material/trash-x.fill.svg +5 -0
- package/src/assets/icons-material/trash-x.svg +5 -0
- package/src/lib/components/action-bar/CONTEXT.md +8 -2
- package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +10 -7
- package/src/lib/components/action-bar/rt-action-bar.component.scss +82 -34
- package/src/lib/components/ai-run-status/CONTEXT.md +41 -0
- package/src/lib/components/ai-run-status/rt-ai-run-status.component.scss +158 -0
- package/src/lib/components/aside/CONTEXT.md +1 -0
- package/src/lib/components/aside/header/rt-aside-header.component.scss +27 -11
- package/src/lib/components/copy-value/CONTEXT.md +31 -0
- package/src/lib/components/copy-value/rt-copy-value.component.scss +39 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +5 -5
- package/src/lib/components/data-table/CONTEXT.md +5 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +18 -0
- package/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.scss +29 -1
- package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.scss +84 -25
- package/src/lib/components/empty-state/CONTEXT.md +2 -1
- package/src/lib/components/empty-state/rt-empty-state.component.scss +4 -2
- package/src/lib/components/icon/CONTEXT.md +16 -12
- package/src/lib/components/icon/rt-icon.component.scss +13 -3
- package/src/lib/components/prompt-suggestion/CONTEXT.md +29 -0
- package/src/lib/components/prompt-suggestion/rt-prompt-suggestion.component.scss +58 -0
- package/src/lib/components/select/CONTEXT.md +2 -2
- package/src/lib/components/thread-list/CONTEXT.md +4 -0
- package/src/lib/components/thread-list/rt-thread-list.component.scss +29 -0
- package/src/lib/components/toolbar/CONTEXT.md +4 -0
- package/src/lib/components/toolbar/rt-toolbar.component.scss +7 -0
- package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +58 -0
- package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +12 -0
- package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +222 -0
- package/src/rich-editor/lib/components/rich-editor/rt-rich-editor.component.scss +3 -0
- package/src/styles/_scrollbar.scss +9 -0
- package/styles/tokens.css +3 -0
- package/types/rt-tools-ui-kit-v2-action-bar.d.ts +11 -2
- package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +49 -0
- package/types/rt-tools-ui-kit-v2-aside.d.ts +9 -1
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-core.d.ts +94 -54
- package/types/rt-tools-ui-kit-v2-data-table.d.ts +7 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +44 -5
- package/types/rt-tools-ui-kit-v2-icon.d.ts +12 -4
- package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +21 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +186 -2
- package/types/rt-tools-ui-kit-v2-select.d.ts +6 -0
- package/types/rt-tools-ui-kit-v2-thread-list.d.ts +15 -2
- package/types/rt-tools-ui-kit-v2.d.ts +3 -0
- package/rt-tools-ui-kit-v2-0.18.0.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-dynamic-selector.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.directives.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.logic.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-tools-ui-kit-v2-dynamic-selector.ts"],"sourcesContent":["import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n inject,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\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 } from '@rt-tools/ui-kit-v2/core';\nimport { BreakpointsService } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector-list';\n\n/**\n * Список выбранного семьи динамических селекторов: строки с удалением, ручкой перетаскивания и\n * правкой, под ними полоса с кнопкой добавления вызывающего, сбросом и очисткой. Значения список\n * не держит: он сообщает, что человек сделал, а селектор и поле списка строк решают, что из этого\n * выходит.\n */\n@Component({\n selector: 'rt-dynamic-selector-list',\n templateUrl: './rt-dynamic-selector-list.component.html',\n styleUrl: './rt-dynamic-selector-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n NgTemplateOutlet,\n\n // CDK\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconButtonComponent,\n RtInputComponent,\n RtTooltipDirective,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorListComponent<TItem> {\n readonly #breakpoints: BreakpointsService = inject(BreakpointsService);\n\n /** На узком экране подсказки кнопок не показываются: наведения там нет. */\n protected readonly isNarrow: Signal<boolean> = this.#breakpoints.narrow;\n protected readonly dragLabel: Signal<string> = rtKitLabel('dynamicSelectorDrag');\n protected readonly removeLabel: Signal<string> = rtKitLabel('dynamicSelectorRemove');\n protected readonly editLabel: Signal<string> = rtKitLabel('dynamicSelectorEdit');\n protected readonly applyLabel: Signal<string> = rtKitLabel('dynamicSelectorApply');\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly resetLabel: Signal<string> = rtKitLabel('dynamicSelectorReset');\n protected readonly clearLabel: Signal<string> = rtKitLabel('dynamicSelectorClear');\n\n /** Строка, открытая для правки, и текст в её поле. */\n protected readonly editedIndex: WritableSignal<number | null> = signal<number | null>(null);\n protected readonly draft: WritableSignal<string> = signal<string>('');\n\n public readonly rows: InputSignal<ReadonlyArray<IRtDynamicSelector.ListRow<TItem>>> = input<\n ReadonlyArray<IRtDynamicSelector.ListRow<TItem>>\n >([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly editable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Полоса под строками; приглашение вызывающего встаёт на её место. */\n public readonly actionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка в полосе; без них в полосе остаётся кнопка добавления. */\n public readonly resetClearShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Корзина строк; без неё строки двигаются и правятся, но не убираются. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly resetDisabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly clearDisabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n public readonly titleTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null> = input<TemplateRef<\n IRtDynamicSelector.RowContext<TItem>\n > | null>(null);\n public readonly controlsTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null> = input<TemplateRef<\n IRtDynamicSelector.RowContext<TItem>\n > | null>(null);\n\n public readonly removed: OutputEmitterRef<unknown> = output<unknown>();\n public readonly moved: OutputEmitterRef<IRtDynamicSelector.Move> = output<IRtDynamicSelector.Move>();\n public readonly edited: OutputEmitterRef<IRtDynamicSelector.TextEdit> = output<IRtDynamicSelector.TextEdit>();\n public readonly resetClicked: OutputEmitterRef<void> = output<void>();\n public readonly cleared: OutputEmitterRef<void> = output<void>();\n\n /** Строка, взятая из чужого списка, ничего не меняет; брошенная на своё место — тоже. */\n protected onDrop(event: CdkDragDrop<unknown>): void {\n if (event.previousContainer !== event.container || event.previousIndex === event.currentIndex) {\n return;\n }\n\n this.moved.emit({ from: event.previousIndex, to: event.currentIndex });\n }\n\n protected onRemove(row: IRtDynamicSelector.ListRow<TItem>): void {\n if (!row.locked && !this.disabled()) {\n this.removed.emit(row.key);\n }\n }\n\n protected onEditStart(index: number, row: IRtDynamicSelector.ListRow<TItem>): void {\n this.draft.set(row.label);\n this.editedIndex.set(index);\n }\n\n protected onEditApply(row: IRtDynamicSelector.ListRow<TItem>): void {\n this.edited.emit({ previous: row.label, next: this.draft() });\n this.editedIndex.set(null);\n }\n\n protected onEditCancel(): void {\n this.editedIndex.set(null);\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector-list\">\n @if (rows().length > 0) {\n <div rtElem=\"rows\" cdkDropList qa-dataid=\"dynamic-selector-rows\" (cdkDropListDropped)=\"onDrop($event)\">\n @for (row of rows(); track row.key; let index = $index) {\n <div\n rtElem=\"row\"\n cdkDrag\n qa-dataid=\"dynamic-selector-row\"\n [rtMod]=\"{ locked: row.locked }\"\n [cdkDragDisabled]=\"!draggable() || disabled()\">\n @if (draggable()) {\n <span rtElem=\"handle\">\n <rt-icon-button\n cdkDragHandle\n qa-dataid=\"dynamic-selector-drag\"\n icon=\"arrows\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"dragLabel()\"\n [tooltip]=\"isNarrow() ? '' : dragLabel()\"\n [disabled]=\"disabled()\" />\n </span>\n }\n\n @if (editedIndex() === index) {\n <rt-input\n rtElem=\"field\"\n qa-dataid=\"dynamic-selector-edit-field\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event ?? '')\"\n (keydown.enter)=\"onEditApply(row)\" />\n } @else if (titleTpl(); as tpl) {\n <div rtElem=\"title\">\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\" />\n </div>\n } @else {\n <span rtElem=\"title\">{{ row.label }}</span>\n }\n\n <div rtElem=\"controls\">\n @if (controlsTpl(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\" />\n }\n\n @if (editable()) {\n @if (editedIndex() === index) {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit-cancel\"\n icon=\"undo\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"cancelLabel()\"\n [tooltip]=\"isNarrow() ? '' : cancelLabel()\"\n (clicked)=\"onEditCancel()\" />\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit-apply\"\n icon=\"check\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"applyLabel()\"\n [tooltip]=\"isNarrow() ? '' : applyLabel()\"\n (clicked)=\"onEditApply(row)\" />\n } @else {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit\"\n icon=\"pencil\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"editLabel()\"\n [tooltip]=\"isNarrow() ? '' : editLabel()\"\n [disabled]=\"disabled()\"\n (clicked)=\"onEditStart(index, row)\" />\n }\n }\n\n @if (removeShown()) {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-remove\"\n icon=\"trash\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"row.locked || disabled() ? 'muted' : 'danger'\"\n [ariaLabel]=\"removeLabel()\"\n [tooltip]=\"isNarrow() ? '' : removeLabel()\"\n [disabled]=\"row.locked || disabled()\"\n (clicked)=\"onRemove(row)\" />\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (actionsShown()) {\n <div rtElem=\"actions\">\n <div rtElem=\"add\">\n <ng-content />\n </div>\n\n @if (resetClearShown()) {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-reset\"\n icon=\"refresh\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"resetDisabled() || disabled() ? 'muted' : 'current'\"\n [ariaLabel]=\"resetLabel()\"\n [tooltip]=\"isNarrow() ? '' : resetLabel()\"\n [disabled]=\"resetDisabled() || disabled()\"\n (clicked)=\"resetClicked.emit()\" />\n <rt-icon-button\n qa-dataid=\"dynamic-selector-clear\"\n icon=\"close\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"clearDisabled() || disabled() ? 'muted' : 'danger'\"\n [ariaLabel]=\"clearLabel()\"\n [tooltip]=\"isNarrow() ? '' : clearLabel()\"\n [disabled]=\"clearDisabled() || disabled()\"\n (clicked)=\"cleared.emit()\" />\n }\n </div>\n }\n</ng-container>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\n/**\n * Маркеры частей строки списка выбранного — своим файлом, как у соседних семей.\n *\n * Маркер держит свой шаблон и о списке не знает ничего: селектор и поле списка строк читают его\n * среди своего содержимого и отдают шаблон списку. Удаление и ручка перетаскивания остаются\n * за китом.\n */\n\n/**\n * Свои кнопки у каждой строки: стоят перед кнопкой удаления.\n *\n * @example\n * ```html\n * <rt-dynamic-selector keyExp=\"id\" displayExp=\"name\" [entities]=\"people()\">\n * <ng-template rtDynamicSelectorRowControls let-person>\n * <rt-icon-button icon=\"info\" ariaLabel=\"About\" (clicked)=\"open(person)\" />\n * </ng-template>\n * </rt-dynamic-selector>\n * ```\n */\n@Directive({\n selector: '[rtDynamicSelectorRowControls]',\n})\nexport class RtDynamicSelectorRowControlsDirective<T = unknown> {\n public readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>> =\n inject<TemplateRef<IRtDynamicSelector.RowContext<T>>>(TemplateRef);\n}\n\n/** Своё название строки вместо подписи из поля записи. */\n@Directive({\n selector: '[rtDynamicSelectorRowTitle]',\n})\nexport class RtDynamicSelectorRowTitleDirective<T = unknown> {\n public readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>> =\n inject<TemplateRef<IRtDynamicSelector.RowContext<T>>>(TemplateRef);\n}\n","import { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\n/** Подпись пункта строкой: число приводится, всё прочее подписью не считается. */\nexport function dynamicSelectorLabel<T>(item: T, labelOf: (item: T) => unknown): string | null {\n const label: unknown = labelOf(item);\n\n return typeof label === 'string' || typeof label === 'number' ? String(label) : null;\n}\n\n/**\n * Совпадает ли подпись с запросом. Запрос режется по пробелам, и каждое слово обязано найтись в\n * подписи без учёта регистра: «отчёт март» находит «Март, отчёт по складу».\n */\nexport function dynamicSelectorMatches(label: string, query: string): boolean {\n const words: string[] = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n const text: string = label.toLowerCase();\n\n return words.every((word: string): boolean => text.includes(word));\n}\n\n/**\n * Пункты, которые можно выбрать: без уже выбранных, без пунктов без подписи и, если запрос есть,\n * только совпавшие. Порядок — функция сортировки приложения, а без неё — по алфавиту подписи.\n */\nexport function selectableDynamicItems<T, K>(\n items: ReadonlyArray<T>,\n chosenKeys: ReadonlyArray<K>,\n keyOf: (item: T) => K,\n labelOf: (item: T) => unknown,\n query: string,\n sortFn?: ((a: T, b: T) => number) | null\n): T[] {\n const chosen: Set<K> = new Set<K>(chosenKeys);\n const found: T[] = items.filter((item: T): boolean => {\n const label: string | null = dynamicSelectorLabel(item, labelOf);\n\n return label !== null && !chosen.has(keyOf(item)) && dynamicSelectorMatches(label, query);\n });\n\n return found.sort(\n sortFn ?? ((a: T, b: T): number => (dynamicSelectorLabel(a, labelOf) ?? '').localeCompare(dynamicSelectorLabel(b, labelOf) ?? ''))\n );\n}\n\n/** Ключ добавлен или снят. Повторно добавленный ключ не удваивается. */\nexport function toggleDynamicKey<K>(keys: ReadonlyArray<K>, key: K, checked: boolean): K[] {\n if (checked) {\n return keys.includes(key) ? [...keys] : [...keys, key];\n }\n\n return keys.filter((item: K): boolean => item !== key);\n}\n\n/** Состояние флажка «Выбрать всё» по видимым пунктам. */\nexport function dynamicSelectAllState<K>(visibleKeys: ReadonlyArray<K>, pickedKeys: ReadonlyArray<K>): IRtDynamicSelector.SelectAllState {\n const picked: number = visibleKeys.filter((key: K): boolean => pickedKeys.includes(key)).length;\n\n if (picked === 0) {\n return 'none';\n }\n\n return picked === visibleKeys.length ? 'all' : 'some';\n}\n\n/**\n * «Выбрать всё» добавляет к отмеченному все видимые пункты, снятие — убирает видимые и оставляет\n * отмеченное вне запроса.\n */\nexport function selectAllDynamicKeys<K>(visibleKeys: ReadonlyArray<K>, pickedKeys: ReadonlyArray<K>, checked: boolean): K[] {\n if (!checked) {\n return pickedKeys.filter((key: K): boolean => !visibleKeys.includes(key));\n }\n\n return [...pickedKeys, ...visibleKeys.filter((key: K): boolean => !pickedKeys.includes(key))];\n}\n\n/** «Очистить» оставляет только ключи только для чтения, в их прежнем порядке. */\nexport function clearDynamicKeys<K>(keys: ReadonlyArray<K>, readonlyKeys: ReadonlyArray<K>): K[] {\n return keys.filter((key: K): boolean => readonlyKeys.includes(key));\n}\n\n/** Строка перетащена на новое место. Индексы вне списка приводятся к его краям. */\nexport function moveDynamicKey<K>(keys: ReadonlyArray<K>, from: number, to: number): K[] {\n const list: K[] = [...keys];\n const last: number = list.length - 1;\n\n if (from < 0 || from > last) {\n return list;\n }\n\n const moved: K[] = list.splice(from, 1);\n\n list.splice(Math.min(Math.max(to, 0), last), 0, ...moved);\n\n return list;\n}\n\n/** Совпадают ли два набора ключей с учётом порядка: так «Сбросить» узнаёт, что сбрасывать нечего. */\nexport function sameDynamicKeys<K>(a: ReadonlyArray<K>, b: ReadonlyArray<K>): boolean {\n return a.length === b.length && a.every((key: K, index: number): boolean => key === b[index]);\n}\n\n/** Совпадают ли два набора ключей без учёта порядка: так «Очистить» узнаёт, что чистить нечего. */\nexport function sameDynamicKeySet<K>(a: ReadonlyArray<K>, b: ReadonlyArray<K>): boolean {\n const set: Set<K> = new Set<K>(b);\n\n return a.length === set.size && a.every((key: K): boolean => set.has(key));\n}\n\n/** Строка поля списка строк: пустая и повторная не добавляются, пробелы по краям срезаются. */\nexport function addDynamicText(values: ReadonlyArray<string>, raw: string | null | undefined): string[] {\n const text: string = (raw ?? '').trim();\n\n return text === '' || values.includes(text) ? [...values] : [...values, text];\n}\n\n/**\n * Строка поля списка строк исправлена на месте. Пустая правка и правка в уже существующую строку\n * список не меняют: иначе строка пропала бы или удвоилась.\n */\nexport function renameDynamicText(values: ReadonlyArray<string>, previous: string, next: string | null | undefined): string[] {\n const text: string = (next ?? '').trim();\n\n if (text === '' || text === previous || values.includes(text)) {\n return [...values];\n }\n\n return values.map((value: string): string => (value === previous ? text : value));\n}\n\n/** Ключ последней видимой закреплённой строки: под ней стоит разделитель. Порядок строк не меняется. */\nexport function lastPinnedDynamicKey<T, K>(rows: ReadonlyArray<T>, pinnedKeys: ReadonlyArray<K>, keyOf: (item: T) => K): K | null {\n for (let index: number = rows.length - 1; index >= 0; index -= 1) {\n const key: K = keyOf(rows[index]);\n\n if (pinnedKeys.includes(key)) {\n return key;\n }\n }\n\n return null;\n}\n\n/**\n * Строки всплывающего выбора во время поиска: отмеченные раньше стоят над найденными и не пропадают\n * оттого, что запрос перестал с ними совпадать. Без запроса отмеченные остаются на своих местах.\n */\nexport function dynamicPopupRows<T, K>(\n offered: ReadonlyArray<T>,\n found: ReadonlyArray<T>,\n ticked: ReadonlyArray<K>,\n keyOf: (item: T) => K,\n query: string\n): IRtDynamicSelector.PopupRows<T> {\n if (query.trim() === '') {\n return { ticked: [], found: [...found] };\n }\n\n const tickedRows: T[] = ticked\n .map((key: K): T | undefined => offered.find((item: T): boolean => keyOf(item) === key))\n .filter((item: T | undefined): item is T => item !== undefined);\n\n return { ticked: tickedRows, found: found.filter((item: T): boolean => !ticked.includes(keyOf(item))) };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFormControlBase } from '@rt-tools/ui-kit-v2/form-control';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtDynamicSelectorListComponent } from '../list/rt-dynamic-selector-list.component';\nimport { RtDynamicSelectorRowControlsDirective } from '../rt-dynamic-selector.directives';\nimport { addDynamicText, clearDynamicKeys, moveDynamicKey, renameDynamicText, sameDynamicKeys } from '../rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-input';\n\n/**\n * Поле списка строк: строки человек набирает сам. Значение — массив строк в порядке списка.\n * Enter или уход из поля добавляют срезанный по краям текст в конец; пустой и повторный не\n * добавляются. Сброс, очистка, удаление строки и перетаскивание — те же, что у селектора.\n *\n * @example\n * ```html\n * <rt-dynamic-input editable [formControl]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'rt-dynamic-input',\n templateUrl: './rt-dynamic-input.component.html',\n styleUrl: './rt-dynamic-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n RtButtonDirective,\n RtDynamicSelectorListComponent,\n RtEmptyStateComponent,\n RtInputComponent,\n ],\n providers: [\n // Алиас базового токена — для contentChild(RtFormControlBase) в rt-field.\n { provide: RtFormControlBase, useExisting: forwardRef(() => RtDynamicInputComponent) },\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicInputComponent extends RtFormControlBase<string[]> {\n readonly #injector: Injector = inject(Injector);\n /** Последнее значение, записанное формой: к нему возвращает сброс. */\n readonly #initial: WritableSignal<string[]> = signal<string[]>([]);\n\n protected readonly addLabel: Signal<string> = rtKitLabel('dynamicSelectorAdd');\n protected readonly placeholderLabel: Signal<string> = rtKitLabel('dynamicInputPlaceholder');\n\n protected readonly field: Signal<ElementRef<HTMLElement> | undefined> = viewChild('field', { read: ElementRef });\n protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<string> | undefined> = contentChild<\n RtDynamicSelectorRowControlsDirective<string>\n >(RtDynamicSelectorRowControlsDirective);\n protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<string>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<string>> | null => this.rowControls()?.templateRef ?? null\n );\n\n /** Поле набора открыто, и в нём текст. */\n protected readonly isFieldShown: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly draft: WritableSignal<string> = signal<string>('');\n /** Приглашение снимается нажатием его кнопки и до новой записи формы не возвращается. */\n protected readonly isInvitationDismissed: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly rows: Signal<IRtDynamicSelector.ListRow<string>[]> = computed((): IRtDynamicSelector.ListRow<string>[] => {\n const locked: ReadonlyArray<string> = this.readonlyKeys();\n\n return this.value().map((text: string): IRtDynamicSelector.ListRow<string> => ({\n item: text,\n key: text,\n label: text,\n locked: locked.includes(text),\n }));\n });\n protected readonly isInvitationShown: Signal<boolean> = computed((): boolean => this.invitation() && !this.isInvitationDismissed());\n protected readonly isAddShown: Signal<boolean> = computed((): boolean => !this.isFieldShown());\n protected readonly isKeysReset: Signal<boolean> = computed((): boolean => sameDynamicKeys(this.value(), this.#initial()));\n protected readonly isKeysClear: Signal<boolean> = computed(\n (): boolean => clearDynamicKeys(this.value(), this.readonlyKeys()).length === this.value().length\n );\n /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда строки не менялись. */\n protected readonly isResetDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysReset());\n protected readonly isClearDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysClear());\n protected readonly addTitle: Signal<string> = computed((): string => this.buttonTitle() || this.addLabel());\n protected readonly fieldPlaceholder: Signal<string> = computed((): string => this.placeholder() || this.placeholderLabel());\n\n protected readonly hasValue: Signal<boolean> = computed((): boolean => this.value().length > 0);\n\n public readonly buttonTitle: InputSignal<string> = input<string>('');\n public readonly placeholder: InputSignal<string> = input<string>('');\n /** Строки, которые нельзя убрать из списка. */\n public readonly readonlyKeys: InputSignal<ReadonlyArray<string>> = input<ReadonlyArray<string>>([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n public readonly editable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitation: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitationIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n public readonly invitationDescription: InputSignal<string> = input<string>('');\n /** Корзина строк; без неё строки убирает только очистка или сам вызывающий. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */\n public readonly listActionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /**\n * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда строки прежние.\n * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.\n */\n public readonly extraChanged: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly listReset: OutputEmitterRef<void> = output<void>();\n public readonly listCleared: OutputEmitterRef<void> = output<void>();\n\n public readonly displayText: Signal<string> = computed((): string => this.value().join(', '));\n\n /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */\n public override writeValue(value: string[] | null): void {\n super.writeValue(value === null ? null : [...value]);\n this.#initial.set([...this.value()]);\n this.isInvitationDismissed.set(false);\n }\n\n protected onAdd(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.isInvitationDismissed.set(true);\n this.draft.set('');\n this.isFieldShown.set(true);\n afterNextRender((): void => this.field()?.nativeElement.querySelector('input')?.focus(), { injector: this.#injector });\n }\n\n /** Enter или уход из поля: пустой текст поле не закрывает, повторный закрывает без изменений. */\n protected onCommit(): void {\n if (!this.isFieldShown() || this.draft().trim() === '') {\n return;\n }\n\n const next: string[] = addDynamicText(this.value(), this.draft());\n\n this.draft.set('');\n this.isFieldShown.set(false);\n this.markTouched();\n\n if (next.length !== this.value().length) {\n this.#change(next);\n }\n }\n\n protected onRemoved(key: unknown): void {\n if (!this.isDisabled() && typeof key === 'string' && !this.readonlyKeys().includes(key)) {\n this.#change(this.value().filter((text: string): boolean => text !== key));\n }\n }\n\n protected onMoved(move: IRtDynamicSelector.Move): void {\n if (!this.isDisabled()) {\n this.#change(moveDynamicKey(this.value(), move.from, move.to));\n }\n }\n\n protected onEdited(edit: IRtDynamicSelector.TextEdit): void {\n const next: string[] = renameDynamicText(this.value(), edit.previous, edit.next);\n\n if (!this.isDisabled() && !sameDynamicKeys(next, this.value())) {\n this.#change(next);\n }\n }\n\n protected onReset(): void {\n if (this.isDisabled() || this.isResetDisabled()) {\n return;\n }\n\n // Строки прежние, а правки только в шаблоне: значение не трогаем, сообщаем о сбросе.\n if (!this.isKeysReset()) {\n this.#change([...this.#initial()]);\n }\n this.listReset.emit();\n }\n\n protected onCleared(): void {\n if (this.isDisabled() || this.isClearDisabled()) {\n return;\n }\n\n if (!this.isKeysClear()) {\n this.#change(clearDynamicKeys(this.value(), this.readonlyKeys()));\n }\n this.listCleared.emit();\n }\n\n protected getEmptyValue(): string[] {\n return [];\n }\n\n protected focusAfterClear(): void {\n // Очистка крестиком у поля не ставится: фокус остаётся там, где был.\n }\n\n #change(values: string[]): void {\n this.value.set(values);\n this.emitChange(values);\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-input\">\n <rt-dynamic-selector-list\n [rows]=\"rows()\"\n [draggable]=\"draggable()\"\n [buttonRadius]=\"buttonRadius()\"\n [editable]=\"editable()\"\n [disabled]=\"isDisabled()\"\n [actionsShown]=\"!isInvitationShown()\"\n [resetClearShown]=\"listActionsShown()\"\n [removeShown]=\"removeShown()\"\n [resetDisabled]=\"isResetDisabled()\"\n [clearDisabled]=\"isClearDisabled()\"\n [controlsTpl]=\"controlsTpl()\"\n (removed)=\"onRemoved($event)\"\n (moved)=\"onMoved($event)\"\n (edited)=\"onEdited($event)\"\n (resetClicked)=\"onReset()\"\n (cleared)=\"onCleared()\">\n @if (isAddShown()) {\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-input-add\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onAdd()\"></button>\n }\n </rt-dynamic-selector-list>\n\n @if (isFieldShown()) {\n <rt-input\n #field\n rtElem=\"field\"\n qa-dataid=\"dynamic-input-field\"\n [placeholder]=\"fieldPlaceholder()\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event ?? '')\"\n (keydown.enter)=\"onCommit()\"\n (focusout)=\"onCommit()\" />\n }\n\n @if (isInvitationShown()) {\n <rt-empty-state\n rtElem=\"invitation\"\n qa-dataid=\"dynamic-input-invitation\"\n [icon]=\"invitationIcon()\"\n [description]=\"invitationDescription()\">\n <button\n rtButton\n appearance=\"outlined\"\n type=\"button\"\n qa-dataid=\"dynamic-input-invitation-add\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onAdd()\"></button>\n </rt-empty-state>\n }\n</ng-container>\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n inject,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { debounceTime, Subject } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtInfiniteScrollDirective } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtCheckboxComponent } from '@rt-tools/ui-kit-v2/checkbox';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { RtRadioButtonComponent } from '@rt-tools/ui-kit-v2/radio-button';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { RtToggleSwitchComponent } from '@rt-tools/ui-kit-v2/toggle-switch';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport {\n dynamicPopupRows,\n dynamicSelectAllState,\n dynamicSelectorLabel,\n dynamicSelectorMatches,\n lastPinnedDynamicKey,\n selectAllDynamicKeys,\n toggleDynamicKey,\n} from '../rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector-popup';\n\n/** Сколько ждёт поиск на сервере после последней нажатой клавиши. */\nexport const RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE: number = 500;\n\n/**\n * Всплывающий выбор динамического селектора: поиск, флажки или переключатели, «Выбрать всё»,\n * догрузка при прокрутке, «Отмена» и «Применить». Отметки живут в самом окне и уходят наружу\n * только по «Применить»: окно создаётся заново при каждом открытии, и закрытие их сбрасывает.\n */\n@Component({\n selector: 'rt-dynamic-selector-popup',\n templateUrl: './rt-dynamic-selector-popup.component.html',\n styleUrl: './rt-dynamic-selector-popup.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n RouterLink,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtCheckboxComponent,\n RtEmptyStateComponent,\n RtIconComponent,\n RtInfiniteScrollDirective,\n RtInputComponent,\n RtRadioButtonComponent,\n RtSpinnerComponent,\n RtToggleSwitchComponent,\n RtTooltipDirective,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorPopupComponent<TEntity extends object> implements OnInit {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #searchSource: Subject<string> = new Subject<string>();\n\n protected readonly searchLabel: Signal<string> = rtKitLabel('dynamicSelectorSearch');\n protected readonly selectAllLabel: Signal<string> = rtKitLabel('uiSelectAll');\n protected readonly multiLabel: Signal<string> = rtKitLabel('dynamicSelectorMulti');\n protected readonly multiHintLabel: Signal<string> = rtKitLabel('dynamicSelectorMultiHint');\n protected readonly noResultsLabel: Signal<string> = rtKitLabel('dynamicSelectorNoResults');\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly applyLabel: Signal<string> = rtKitLabel('dynamicSelectorApply');\n\n /** Отмеченные ключи — ещё не применённые. */\n protected readonly ticked: WritableSignal<unknown[]> = signal<unknown[]>([]);\n protected readonly query: WritableSignal<string> = signal<string>('');\n /** Выбор нескольких включён: без него простое нажатие оставляет одну отметку. */\n protected readonly isMultiOn: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Найденные строки: местный поиск отбирает сам, серверный отдаёт запрос наружу. */\n protected readonly found: Signal<TEntity[]> = computed((): TEntity[] => {\n const query: string = this.query();\n\n if (!this.localSearch() || query.trim() === '') {\n return [...this.entities()];\n }\n\n return this.entities().filter((item: TEntity): boolean => {\n const label: string | null = dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity));\n\n return label !== null && dynamicSelectorMatches(label, query);\n });\n });\n protected readonly rows: Signal<IRtDynamicSelector.PopupRows<TEntity>> = computed((): IRtDynamicSelector.PopupRows<TEntity> =>\n dynamicPopupRows(this.entities(), this.found(), this.ticked(), (item: TEntity): unknown => this.#keyOf(item), this.query())\n );\n protected readonly visibleKeys: Signal<unknown[]> = computed((): unknown[] =>\n [...this.rows().ticked, ...this.rows().found].map((item: TEntity): unknown => this.#keyOf(item))\n );\n /** Строки для разметки: отмеченные раньше над разделителем, найденные — под ним. */\n protected readonly rowItems: Signal<IRtDynamicSelector.PopupRow<TEntity>[]> = computed((): IRtDynamicSelector.PopupRow<TEntity>[] => {\n const ticked: ReadonlyArray<unknown> = this.ticked();\n const lastPinned: unknown = this.lastPinnedKey();\n const { ticked: above, found } = this.rows();\n const toRow: (item: TEntity, separated: boolean) => IRtDynamicSelector.PopupRow<TEntity> = (\n item: TEntity,\n separated: boolean\n ): IRtDynamicSelector.PopupRow<TEntity> => ({\n entity: item,\n key: this.#keyOf(item),\n label: dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity)) ?? '',\n ticked: ticked.includes(this.#keyOf(item)),\n separated,\n });\n\n return [\n ...above.map((item: TEntity, index: number): IRtDynamicSelector.PopupRow<TEntity> => toRow(item, index === above.length - 1)),\n ...found.map((item: TEntity): IRtDynamicSelector.PopupRow<TEntity> =>\n toRow(item, lastPinned !== null && this.#keyOf(item) === lastPinned)\n ),\n ];\n });\n protected readonly hasRows: Signal<boolean> = computed((): boolean => this.visibleKeys().length > 0);\n protected readonly selectAllState: Signal<IRtDynamicSelector.SelectAllState> = computed((): IRtDynamicSelector.SelectAllState =>\n dynamicSelectAllState(this.visibleKeys(), this.ticked())\n );\n protected readonly isSingle: Signal<boolean> = computed((): boolean => this.mode() === 'single');\n protected readonly isSelectAllShown: Signal<boolean> = computed(\n (): boolean => !this.isSingle() && this.selectAllShown() && this.visibleKeys().length > 1 && !this.loading()\n );\n protected readonly isMultiToggleVisible: Signal<boolean> = computed(\n (): boolean => !this.isSingle() && this.multiToggleShown() && this.visibleKeys().length > 1 && !this.loading()\n );\n protected readonly lastPinnedKey: Signal<unknown> = computed((): unknown =>\n lastPinnedDynamicKey(this.rows().found, this.pinnedKeys(), (item: TEntity): unknown => this.#keyOf(item))\n );\n protected readonly isApplyDisabled: Signal<boolean> = computed((): boolean => this.ticked().length === 0 || this.loading());\n protected readonly isNavShown: Signal<boolean> = computed((): boolean => !!this.navigateTitle() && !!this.navigateLink());\n\n /** Предлагаемые записи: ещё не выбранные, отсортированные селектором. */\n public readonly entities: InputSignal<ReadonlyArray<TEntity>> = input<ReadonlyArray<TEntity>>([]);\n public readonly keyExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly displayExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly mode: InputSignal<IRtDynamicSelector.Mode> = input<IRtDynamicSelector.Mode>('multi');\n public readonly multiToggleShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selectAllShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly localSearch: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly lazyLoad: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly loading: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly fetching: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n public readonly navigateTitle: InputSignal<string> = input<string>('');\n public readonly navigateLink: InputSignal<string> = input<string>('');\n /** Запрос, с которым выбор открывается; событием поиска он не уходит — вызывающий его знает. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n\n /** Применённые ключи в порядке отметок. */\n public readonly applied: OutputEmitterRef<unknown[]> = output<unknown[]>();\n public readonly cancelled: OutputEmitterRef<void> = output<void>();\n /** Запрос для поиска на сервере: через паузу после последней клавиши, стёртый — пустой строкой. */\n public readonly searchChange: OutputEmitterRef<string> = output<string>();\n public readonly loadMore: OutputEmitterRef<void> = output<void>();\n /** Отмеченные записи: пустой список при открытии и текущие отметки после каждого поиска. */\n public readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n\n public ngOnInit(): void {\n // Выбор живёт в шаблоне и создаётся заново при каждом открытии: запрос начинается с входа.\n this.query.set(this.searchTerm());\n this.temporaryChoiceChange.emit([]);\n this.#searchSource\n .pipe(debounceTime(RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE), takeUntilDestroyed(this.#destroyRef))\n .subscribe((query: string): void => this.searchChange.emit(query));\n }\n\n protected onQueryChange(value: string | null): void {\n const query: string = value ?? '';\n\n this.query.set(query);\n this.temporaryChoiceChange.emit(this.#tickedEntities());\n\n if (!this.localSearch()) {\n this.#searchSource.next(query);\n }\n }\n\n /** Нажатие строки флажков: при выключенном выборе нескольких без Ctrl или Cmd остаётся одна отметка. */\n protected onRowClick(event: MouseEvent, item: TEntity): void {\n const key: unknown = this.#keyOf(item);\n const checked: boolean = !this.ticked().includes(key);\n const addsToTicks: boolean = !this.multiToggleShown() || this.isMultiOn() || event.ctrlKey || event.metaKey;\n\n this.ticked.update((keys: unknown[]): unknown[] => toggleDynamicKey(addsToTicks ? keys : [], key, checked));\n }\n\n protected onRadioChange(item: TEntity): void {\n this.ticked.set([this.#keyOf(item)]);\n }\n\n protected onSelectAll(checked: boolean): void {\n this.ticked.update((keys: unknown[]): unknown[] => selectAllDynamicKeys(this.visibleKeys(), keys, checked));\n }\n\n protected onMultiToggle(value: boolean): void {\n this.isMultiOn.set(value);\n }\n\n protected onApply(): void {\n if (!this.isApplyDisabled()) {\n this.applied.emit([...this.ticked()]);\n }\n }\n\n protected onCancel(): void {\n this.cancelled.emit();\n }\n\n #tickedEntities(): TEntity[] {\n return this.ticked()\n .map((key: unknown): TEntity | undefined => this.entities().find((item: TEntity): boolean => this.#keyOf(item) === key))\n .filter((item: TEntity | undefined): item is TEntity => item !== undefined);\n }\n\n /** Ключ записи — по имени поля, которое назвал вызывающий. */\n #keyOf(item: TEntity): unknown {\n return item[this.keyExp()];\n }\n\n /** Подпись записи — по имени поля, которое назвал вызывающий. */\n #labelOf(item: TEntity): unknown {\n return item[this.displayExp()];\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector-popup\">\n <div rtElem=\"head\">\n <rt-input\n rtElem=\"search\"\n qa-dataid=\"dynamic-selector-search\"\n iconLeft=\"search\"\n [placeholder]=\"searchLabel()\"\n [ngModel]=\"query()\"\n (ngModelChange)=\"onQueryChange($event)\" />\n\n @if (isMultiToggleVisible() || isSelectAllShown()) {\n <div rtElem=\"controls\">\n @if (isMultiToggleVisible()) {\n <div rtElem=\"multi\">\n <rt-toggle-switch\n qa-dataid=\"dynamic-selector-multi\"\n [ariaLabel]=\"multiLabel()\"\n [ngModel]=\"isMultiOn()\"\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 <span rtElem=\"multi-hint\">{{ multiHintLabel() }}</span>\n </div>\n }\n\n @if (isSelectAllShown()) {\n <rt-checkbox\n rtElem=\"select-all\"\n qa-dataid=\"dynamic-selector-select-all\"\n [indeterminate]=\"selectAllState() === 'some'\"\n [ngModel]=\"selectAllState() === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onSelectAll($event)\">\n {{ selectAllLabel() }}\n </rt-checkbox>\n }\n </div>\n }\n </div>\n\n @if (loading()) {\n <div rtElem=\"state\" qa-dataid=\"dynamic-selector-loading\">\n <rt-spinner [diameter]=\"24\" />\n </div>\n } @else if (hasRows()) {\n <div rtElem=\"list\" qa-dataid=\"dynamic-selector-options\">\n @for (row of rowItems(); track row.key) {\n <div rtElem=\"row\" [rtMod]=\"{ separated: row.separated }\">\n @if (isSingle()) {\n <rt-radio-button\n rtElem=\"option\"\n qa-dataid=\"dynamic-selector-option\"\n [value]=\"row.key\"\n [checked]=\"row.ticked\"\n [label]=\"row.label\"\n (checkedChange)=\"onRadioChange(row.entity)\" />\n } @else {\n <rt-checkbox\n rtElem=\"option\"\n qa-dataid=\"dynamic-selector-option\"\n [ngModel]=\"row.ticked\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"onRowClick($event, row.entity)\">\n {{ row.label }}\n </rt-checkbox>\n }\n </div>\n }\n\n <div rtElem=\"sentinel\" rtInfiniteScroll [disabled]=\"!lazyLoad() || fetching()\" (loadMore)=\"loadMore.emit()\"></div>\n\n @if (fetching()) {\n <div rtElem=\"fetching\" qa-dataid=\"dynamic-selector-fetching\">\n <rt-spinner [diameter]=\"20\" />\n </div>\n }\n </div>\n } @else {\n <rt-empty-state rtElem=\"empty\" qa-dataid=\"dynamic-selector-no-results\" icon=\"search\" [title]=\"noResultsLabel()\" />\n }\n\n <div rtElem=\"foot\" [rtMod]=\"{ nav: isNavShown() }\">\n @if (isNavShown()) {\n <a rtElem=\"nav\" qa-dataid=\"dynamic-selector-nav\" [routerLink]=\"navigateLink()\" [rtTooltip]=\"navigateTitle()\">\n {{ navigateTitle() }}\n </a>\n }\n\n <div rtElem=\"actions\">\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-selector-cancel\"\n [label]=\"cancelLabel()\"\n [attr.aria-label]=\"cancelLabel()\"\n (click)=\"onCancel()\"></button>\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"dynamic-selector-apply\"\n [label]=\"applyLabel()\"\n [attr.aria-label]=\"applyLabel()\"\n [disabled]=\"isApplyDisabled()\"\n (click)=\"onApply()\"></button>\n </div>\n </div>\n</ng-container>\n","import {\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChildren,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFormControlBase } from '@rt-tools/ui-kit-v2/form-control';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtDynamicSelectorListComponent } from './list/rt-dynamic-selector-list.component';\nimport { RtDynamicSelectorPopupComponent } from './popup/rt-dynamic-selector-popup.component';\nimport { RtDynamicSelectorRowControlsDirective, RtDynamicSelectorRowTitleDirective } from './rt-dynamic-selector.directives';\nimport {\n clearDynamicKeys,\n dynamicSelectorLabel,\n moveDynamicKey,\n sameDynamicKeys,\n selectableDynamicItems,\n} from './rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector';\n\n/**\n * Динамический селектор: поле формы со списком выбранных записей. Значение — массив ключей в\n * порядке списка. Записи добавляются всплывающим выбором, убираются корзиной строки, список\n * возвращается к записанному формой сбросом и пустеет очисткой — кроме строк только для чтения.\n *\n * @example\n * ```html\n * <rt-dynamic-selector keyExp=\"id\" displayExp=\"name\" [entities]=\"people()\" [formControl]=\"team\" />\n * ```\n */\n@Component({\n selector: 'rt-dynamic-selector',\n templateUrl: './rt-dynamic-selector.component.html',\n styleUrl: './rt-dynamic-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n RtButtonDirective,\n RtDynamicSelectorListComponent,\n RtDynamicSelectorPopupComponent,\n RtEmptyStateComponent,\n RtPopoverDirective,\n ],\n providers: [\n // Алиас базового токена — для contentChild(RtFormControlBase) в rt-field.\n { provide: RtFormControlBase, useExisting: forwardRef(() => RtDynamicSelectorComponent) },\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorComponent<TEntity extends object> extends RtFormControlBase<unknown[]> {\n /** Последнее значение, записанное формой: к нему возвращает сброс. */\n readonly #initial: WritableSignal<unknown[]> = signal<unknown[]>([]);\n\n protected readonly addLabel: Signal<string> = rtKitLabel('dynamicSelectorAdd');\n protected readonly nothingToChooseLabel: Signal<string> = rtKitLabel('dynamicSelectorNothingToChoose');\n\n /** Всплывающий выбор открывается от нажатой кнопки добавления: у полосы и у приглашения — свой. */\n protected readonly popovers: Signal<readonly RtPopoverDirective[]> = viewChildren(RtPopoverDirective);\n protected readonly rowTitle: Signal<RtDynamicSelectorRowTitleDirective<TEntity> | undefined> =\n contentChild<RtDynamicSelectorRowTitleDirective<TEntity>>(RtDynamicSelectorRowTitleDirective);\n protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<TEntity> | undefined> = contentChild<\n RtDynamicSelectorRowControlsDirective<TEntity>\n >(RtDynamicSelectorRowControlsDirective);\n protected readonly titleTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null => this.rowTitle()?.templateRef ?? null\n );\n protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null => this.rowControls()?.templateRef ?? null\n );\n\n /** Выбранные записи в порядке значения; ключ, которого нет среди записей, строки не рисует. */\n protected readonly chosen: Signal<TEntity[]> = computed((): TEntity[] => this.#entitiesOf(this.value()));\n protected readonly rows: Signal<IRtDynamicSelector.ListRow<TEntity>[]> = computed((): IRtDynamicSelector.ListRow<TEntity>[] => {\n const locked: ReadonlyArray<unknown> = this.readonlyKeys();\n\n return this.chosen().map((item: TEntity): IRtDynamicSelector.ListRow<TEntity> => ({\n item,\n key: this.#keyOf(item),\n label: dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity)) ?? '',\n locked: locked.includes(this.#keyOf(item)),\n }));\n });\n /** Что предлагает всплывающий выбор: ещё не выбранное, в порядке вызывающего или по алфавиту. */\n protected readonly offered: Signal<TEntity[]> = computed((): TEntity[] =>\n selectableDynamicItems(\n this.entities(),\n this.value(),\n (item: TEntity): unknown => this.#keyOf(item),\n (item: TEntity): unknown => this.#labelOf(item),\n '',\n this.sortFn()\n )\n );\n protected readonly hasOffer: Signal<boolean> = computed((): boolean => this.offered().length > 0 || !this.localSearch());\n protected readonly isNothingToChoose: Signal<boolean> = computed((): boolean => this.value().length === 0 && !this.hasOffer());\n protected readonly isAddShown: Signal<boolean> = computed((): boolean => this.addShown() && this.hasOffer());\n protected readonly isKeysReset: Signal<boolean> = computed((): boolean => sameDynamicKeys(this.value(), this.#initial()));\n protected readonly isKeysClear: Signal<boolean> = computed(\n (): boolean => clearDynamicKeys(this.value(), this.readonlyKeys()).length === this.value().length\n );\n /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда ключи не менялись. */\n protected readonly isResetDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysReset());\n protected readonly isClearDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysClear());\n protected readonly addTitle: Signal<string> = computed((): string => this.buttonTitle() || this.addLabel());\n\n protected readonly hasValue: Signal<boolean> = computed((): boolean => this.value().length > 0);\n\n /** Записи, из которых выбирают; у каждой есть поле ключа и поле подписи. */\n public readonly entities: InputSignal<ReadonlyArray<TEntity>> = input<ReadonlyArray<TEntity>>([]);\n public readonly keyExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly displayExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly mode: InputSignal<IRtDynamicSelector.Mode> = input<IRtDynamicSelector.Mode>('multi');\n /** Название кнопки добавления; пустое — «Add» из словаря кита. */\n public readonly buttonTitle: InputSignal<string> = input<string>('');\n public readonly addShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Корзина строк; без неё записи убирает только очистка или сам вызывающий. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */\n public readonly listActionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /**\n * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда ключи прежние.\n * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.\n */\n public readonly extraChanged: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Запрос, с которым открывается всплывающий выбор; событием поиска он не уходит. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n /** Ключи, которые нельзя убрать из списка. */\n public readonly readonlyKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n /** Ключи строк всплывающего выбора, под последней из которых стоит разделитель. */\n public readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n /** Приглашение вместо полосы кнопок: значок, описание и кнопка добавления. */\n public readonly invitation: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitationIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n public readonly invitationDescription: InputSignal<string> = input<string>('');\n public readonly multiToggleShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selectAllShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly localSearch: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly lazyLoad: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly loading: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly fetching: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly navigateTitle: InputSignal<string> = input<string>('');\n public readonly navigateLink: InputSignal<string> = input<string>('');\n public readonly sortFn: InputSignal<((a: TEntity, b: TEntity) => number) | null> = input<((a: TEntity, b: TEntity) => number) | null>(\n null\n );\n\n /** Выбранные записи: те же, что уходят событием изменения выбора. */\n public readonly chosenEntities: ModelSignal<TEntity[]> = model<TEntity[]>([]);\n\n public readonly selectionChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n public readonly listReset: OutputEmitterRef<void> = output<void>();\n public readonly listCleared: OutputEmitterRef<void> = output<void>();\n /** Всплывающий выбор открылся или закрылся. */\n public readonly popupOpenChange: OutputEmitterRef<boolean> = output<boolean>();\n public readonly searchChange: OutputEmitterRef<string> = output<string>();\n public readonly loadMore: OutputEmitterRef<void> = output<void>();\n public readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n\n /** Открыт ли всплывающий выбор — от кнопки полосы или от кнопки приглашения. */\n public readonly popupOpen: Signal<boolean> = computed((): boolean =>\n this.popovers().some((popover: RtPopoverDirective): boolean => popover.isOpen())\n );\n\n public readonly displayText: Signal<string> = computed((): string =>\n this.rows()\n .map((row: IRtDynamicSelector.ListRow<TEntity>): string => row.label)\n .join(', ')\n );\n\n /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */\n public override writeValue(value: unknown[] | null): void {\n super.writeValue(value === null ? null : [...value]);\n this.#initial.set([...this.value()]);\n }\n\n protected onAdd(popover: RtPopoverDirective): void {\n if (!this.isDisabled()) {\n popover.open();\n }\n }\n\n protected onApplied(keys: unknown[]): void {\n this.#closePopup();\n this.#change(\n this.mode() === 'single'\n ? keys.slice(0, 1)\n : [...this.value(), ...keys.filter((key: unknown): boolean => !this.value().includes(key))]\n );\n }\n\n protected onCancelled(): void {\n this.#closePopup();\n }\n\n protected onRemoved(key: unknown): void {\n if (!this.isDisabled() && !this.readonlyKeys().includes(key)) {\n this.#change(this.value().filter((item: unknown): boolean => item !== key));\n }\n }\n\n protected onMoved(move: IRtDynamicSelector.Move): void {\n if (!this.isDisabled()) {\n this.#change(moveDynamicKey(this.value(), move.from, move.to));\n }\n }\n\n protected onReset(): void {\n if (this.isDisabled() || this.isResetDisabled()) {\n return;\n }\n\n // Ключи прежние, а правки только в строках: значение не трогаем, сообщаем о сбросе.\n if (!this.isKeysReset()) {\n this.#change([...this.#initial()]);\n }\n this.listReset.emit();\n }\n\n protected onCleared(): void {\n if (this.isDisabled() || this.isClearDisabled()) {\n return;\n }\n\n if (!this.isKeysClear()) {\n this.#change(clearDynamicKeys(this.value(), this.readonlyKeys()));\n }\n this.listCleared.emit();\n }\n\n protected onOpened(): void {\n this.popupOpenChange.emit(true);\n }\n\n protected onClosed(): void {\n this.markTouched();\n this.popupOpenChange.emit(false);\n }\n\n #closePopup(): void {\n for (const popover of this.popovers()) {\n popover.close();\n }\n }\n\n protected getEmptyValue(): unknown[] {\n return [];\n }\n\n protected focusAfterClear(): void {\n // Очистка крестиком у поля не ставится: фокус остаётся там, где был.\n }\n\n #change(keys: unknown[]): void {\n const entities: TEntity[] = this.#entitiesOf(keys);\n\n this.value.set(keys);\n this.emitChange(keys);\n this.chosenEntities.set(entities);\n this.selectionChange.emit(entities);\n }\n\n #entitiesOf(keys: ReadonlyArray<unknown>): TEntity[] {\n return keys\n .map((key: unknown): TEntity | undefined => this.entities().find((item: TEntity): boolean => this.#keyOf(item) === key))\n .filter((item: TEntity | undefined): item is TEntity => item !== undefined);\n }\n\n /** Ключ записи — по имени поля, которое назвал вызывающий. */\n #keyOf(item: TEntity): unknown {\n return item[this.keyExp()];\n }\n\n /** Подпись записи — по имени поля, которое назвал вызывающий. */\n #labelOf(item: TEntity): unknown {\n return item[this.displayExp()];\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector\">\n @if (isNothingToChoose()) {\n <rt-empty-state rtElem=\"nothing\" qa-dataid=\"dynamic-selector-nothing\" icon=\"warning\" [title]=\"nothingToChooseLabel()\" />\n } @else {\n <div rtElem=\"content\">\n <rt-dynamic-selector-list\n [rows]=\"rows()\"\n [draggable]=\"draggable()\"\n [buttonRadius]=\"buttonRadius()\"\n [disabled]=\"isDisabled()\"\n [actionsShown]=\"!invitation()\"\n [resetClearShown]=\"listActionsShown()\"\n [removeShown]=\"removeShown()\"\n [resetDisabled]=\"isResetDisabled()\"\n [clearDisabled]=\"isClearDisabled()\"\n [titleTpl]=\"titleTpl()\"\n [controlsTpl]=\"controlsTpl()\"\n (removed)=\"onRemoved($event)\"\n (moved)=\"onMoved($event)\"\n (resetClicked)=\"onReset()\"\n (cleared)=\"onCleared()\">\n @if (isAddShown()) {\n <button\n rtButton\n theme=\"secondary\"\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-selector-add\"\n rtPopoverTrigger=\"manual\"\n #addPopover=\"rtPopover\"\n [rtPopover]=\"popupTpl\"\n [rtPopoverDisabled]=\"isDisabled()\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (click)=\"onAdd(addPopover)\"></button>\n }\n </rt-dynamic-selector-list>\n\n @if (invitation()) {\n <rt-empty-state\n rtElem=\"invitation\"\n qa-dataid=\"dynamic-selector-invitation\"\n [icon]=\"invitationIcon()\"\n [description]=\"invitationDescription()\">\n @if (hasOffer()) {\n <button\n rtButton\n appearance=\"outlined\"\n type=\"button\"\n qa-dataid=\"dynamic-selector-invitation-add\"\n rtPopoverTrigger=\"manual\"\n #invitationPopover=\"rtPopover\"\n [rtPopover]=\"popupTpl\"\n [rtPopoverDisabled]=\"isDisabled()\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (click)=\"onAdd(invitationPopover)\"></button>\n }\n </rt-empty-state>\n }\n </div>\n }\n\n <ng-template #popupTpl>\n <rt-dynamic-selector-popup\n [entities]=\"offered()\"\n [keyExp]=\"keyExp()\"\n [displayExp]=\"displayExp()\"\n [mode]=\"mode()\"\n [multiToggleShown]=\"multiToggleShown()\"\n [selectAllShown]=\"selectAllShown()\"\n [localSearch]=\"localSearch()\"\n [lazyLoad]=\"lazyLoad()\"\n [loading]=\"loading()\"\n [fetching]=\"fetching()\"\n [pinnedKeys]=\"pinnedKeys()\"\n [navigateTitle]=\"navigateTitle()\"\n [navigateLink]=\"navigateLink()\"\n [searchTerm]=\"searchTerm()\"\n (applied)=\"onApplied($event)\"\n (cancelled)=\"onCancelled()\"\n (searchChange)=\"searchChange.emit($event)\"\n (loadMore)=\"loadMore.emit()\"\n (temporaryChoiceChange)=\"temporaryChoiceChange.emit($event)\" />\n </ng-template>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["BEM_BLOCK"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-dynamic-selector.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.directives.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.logic.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.component.ts","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-dynamic-selector.component.html","../../../projects/ui-kit-v2/src/lib/components/dynamic-selector/rt-tools-ui-kit-v2-dynamic-selector.ts"],"sourcesContent":["import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n inject,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\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 } from '@rt-tools/ui-kit-v2/core';\nimport { BreakpointsService } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { IRtIcon, TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector-list';\n\n/**\n * Список выбранного семьи динамических селекторов: строки с удалением, ручкой перетаскивания и\n * правкой, под ними полоса с кнопкой добавления вызывающего, сбросом и очисткой. Значения список\n * не держит: он сообщает, что человек сделал, а селектор и поле списка строк решают, что из этого\n * выходит.\n */\n@Component({\n selector: 'rt-dynamic-selector-list',\n templateUrl: './rt-dynamic-selector-list.component.html',\n styleUrl: './rt-dynamic-selector-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n NgTemplateOutlet,\n\n // CDK\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconButtonComponent,\n RtInputComponent,\n RtTooltipDirective,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorListComponent<TItem> {\n readonly #breakpoints: BreakpointsService = inject(BreakpointsService);\n\n /** На узком экране подсказки кнопок не показываются: наведения там нет. */\n protected readonly isNarrow: Signal<boolean> = this.#breakpoints.narrow;\n protected readonly dragLabel: Signal<string> = rtKitLabel('dynamicSelectorDrag');\n protected readonly removeLabel: Signal<string> = rtKitLabel('dynamicSelectorRemove');\n protected readonly editLabel: Signal<string> = rtKitLabel('dynamicSelectorEdit');\n protected readonly applyLabel: Signal<string> = rtKitLabel('dynamicSelectorApply');\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly resetLabel: Signal<string> = rtKitLabel('dynamicSelectorReset');\n protected readonly clearLabel: Signal<string> = rtKitLabel('dynamicSelectorClear');\n\n /** Строка, открытая для правки, и текст в её поле. */\n protected readonly editedIndex: WritableSignal<number | null> = signal<number | null>(null);\n protected readonly draft: WritableSignal<string> = signal<string>('');\n\n public readonly rows: InputSignal<ReadonlyArray<IRtDynamicSelector.ListRow<TItem>>> = input<\n ReadonlyArray<IRtDynamicSelector.ListRow<TItem>>\n >([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly editable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Полоса под строками; приглашение вызывающего встаёт на её место. */\n public readonly actionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка в полосе; без них в полосе остаётся кнопка добавления. */\n public readonly resetClearShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Корзина строк; без неё строки двигаются и правятся, но не убираются. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly resetDisabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly clearDisabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n /** Значок кнопки «Очистить список»; по умолчанию крестик. */\n public readonly clearIcon: InputSignal<IRtIcon.Name> = input<IRtIcon.Name>('close');\n /** Название строки переносится; `false` ведёт его одной строкой с многоточием и подсказкой при обрезке. */\n public readonly titleWrap: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly titleTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null> = input<TemplateRef<\n IRtDynamicSelector.RowContext<TItem>\n > | null>(null);\n public readonly controlsTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null> = input<TemplateRef<\n IRtDynamicSelector.RowContext<TItem>\n > | null>(null);\n\n public readonly removed: OutputEmitterRef<unknown> = output<unknown>();\n public readonly moved: OutputEmitterRef<IRtDynamicSelector.Move> = output<IRtDynamicSelector.Move>();\n public readonly edited: OutputEmitterRef<IRtDynamicSelector.TextEdit> = output<IRtDynamicSelector.TextEdit>();\n public readonly resetClicked: OutputEmitterRef<void> = output<void>();\n public readonly cleared: OutputEmitterRef<void> = output<void>();\n\n /** Строка, взятая из чужого списка, ничего не меняет; брошенная на своё место — тоже. */\n protected onDrop(event: CdkDragDrop<unknown>): void {\n if (event.previousContainer !== event.container || event.previousIndex === event.currentIndex) {\n return;\n }\n\n this.moved.emit({ from: event.previousIndex, to: event.currentIndex });\n }\n\n protected onRemove(row: IRtDynamicSelector.ListRow<TItem>): void {\n if (!row.locked && !this.disabled()) {\n this.removed.emit(row.key);\n }\n }\n\n protected onEditStart(index: number, row: IRtDynamicSelector.ListRow<TItem>): void {\n this.draft.set(row.label);\n this.editedIndex.set(index);\n }\n\n protected onEditApply(row: IRtDynamicSelector.ListRow<TItem>): void {\n this.edited.emit({ previous: row.label, next: this.draft() });\n this.editedIndex.set(null);\n }\n\n protected onEditCancel(): void {\n this.editedIndex.set(null);\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector-list\">\n @if (rows().length > 0) {\n <div rtElem=\"rows\" cdkDropList qa-dataid=\"dynamic-selector-rows\" (cdkDropListDropped)=\"onDrop($event)\">\n @for (row of rows(); track row.key; let index = $index) {\n <div\n rtElem=\"row\"\n cdkDrag\n qa-dataid=\"dynamic-selector-row\"\n [rtMod]=\"{ locked: row.locked }\"\n [cdkDragDisabled]=\"!draggable() || disabled()\">\n @if (draggable()) {\n <span rtElem=\"handle\">\n <rt-icon-button\n cdkDragHandle\n qa-dataid=\"dynamic-selector-drag\"\n icon=\"arrows\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"dragLabel()\"\n [tooltip]=\"isNarrow() ? '' : dragLabel()\"\n [disabled]=\"disabled()\" />\n </span>\n }\n\n @if (editedIndex() === index) {\n <rt-input\n rtElem=\"field\"\n qa-dataid=\"dynamic-selector-edit-field\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event ?? '')\"\n (keydown.enter)=\"onEditApply(row)\" />\n } @else if (titleTpl(); as tpl) {\n <div rtElem=\"title\">\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\" />\n </div>\n } @else {\n <span\n rtElem=\"title\"\n rtTooltipWhenTruncated\n [rtMod]=\"{ nowrap: !titleWrap() }\"\n [rtTooltip]=\"titleWrap() ? '' : row.label\">\n {{ row.label }}\n </span>\n }\n\n <div rtElem=\"controls\">\n @if (controlsTpl(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\" />\n }\n\n @if (editable()) {\n @if (editedIndex() === index) {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit-cancel\"\n icon=\"undo\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"cancelLabel()\"\n [tooltip]=\"isNarrow() ? '' : cancelLabel()\"\n (clicked)=\"onEditCancel()\" />\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit-apply\"\n icon=\"check\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"applyLabel()\"\n [tooltip]=\"isNarrow() ? '' : applyLabel()\"\n (clicked)=\"onEditApply(row)\" />\n } @else {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-edit\"\n icon=\"pencil\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [ariaLabel]=\"editLabel()\"\n [tooltip]=\"isNarrow() ? '' : editLabel()\"\n [disabled]=\"disabled()\"\n (clicked)=\"onEditStart(index, row)\" />\n }\n }\n\n @if (removeShown()) {\n <rt-icon-button\n qa-dataid=\"dynamic-selector-remove\"\n icon=\"trash\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"row.locked || disabled() ? 'muted' : 'danger'\"\n [ariaLabel]=\"removeLabel()\"\n [tooltip]=\"isNarrow() ? '' : removeLabel()\"\n [disabled]=\"row.locked || disabled()\"\n (clicked)=\"onRemove(row)\" />\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (actionsShown()) {\n <div rtElem=\"actions\">\n <div rtElem=\"add\">\n <ng-content />\n </div>\n\n @if (resetClearShown()) {\n <rt-icon-button\n rtElem=\"reset\"\n qa-dataid=\"dynamic-selector-reset\"\n icon=\"refresh\"\n size=\"sm\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"resetDisabled() || disabled() ? 'muted' : 'current'\"\n [ariaLabel]=\"resetLabel()\"\n [tooltip]=\"isNarrow() ? '' : resetLabel()\"\n [disabled]=\"resetDisabled() || disabled()\"\n (clicked)=\"resetClicked.emit()\" />\n <rt-icon-button\n rtElem=\"clear\"\n qa-dataid=\"dynamic-selector-clear\"\n size=\"sm\"\n [icon]=\"clearIcon()\"\n [radius]=\"buttonRadius()\"\n [iconColor]=\"clearDisabled() || disabled() ? 'muted' : 'danger'\"\n [ariaLabel]=\"clearLabel()\"\n [tooltip]=\"isNarrow() ? '' : clearLabel()\"\n [disabled]=\"clearDisabled() || disabled()\"\n (clicked)=\"cleared.emit()\" />\n }\n </div>\n }\n</ng-container>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\n/**\n * Маркеры частей строки списка выбранного — своим файлом, как у соседних семей.\n *\n * Маркер держит свой шаблон и о списке не знает ничего: селектор и поле списка строк читают его\n * среди своего содержимого и отдают шаблон списку. Удаление и ручка перетаскивания остаются\n * за китом.\n */\n\n/**\n * Свои кнопки у каждой строки: стоят перед кнопкой удаления.\n *\n * @example\n * ```html\n * <rt-dynamic-selector keyExp=\"id\" displayExp=\"name\" [entities]=\"people()\">\n * <ng-template rtDynamicSelectorRowControls let-person>\n * <rt-icon-button icon=\"info\" ariaLabel=\"About\" (clicked)=\"open(person)\" />\n * </ng-template>\n * </rt-dynamic-selector>\n * ```\n */\n@Directive({\n selector: '[rtDynamicSelectorRowControls]',\n})\nexport class RtDynamicSelectorRowControlsDirective<T = unknown> {\n public readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>> =\n inject<TemplateRef<IRtDynamicSelector.RowContext<T>>>(TemplateRef);\n}\n\n/** Своё название строки вместо подписи из поля записи. */\n@Directive({\n selector: '[rtDynamicSelectorRowTitle]',\n})\nexport class RtDynamicSelectorRowTitleDirective<T = unknown> {\n public readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>> =\n inject<TemplateRef<IRtDynamicSelector.RowContext<T>>>(TemplateRef);\n}\n","import { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\n/** Подпись пункта строкой: число приводится, всё прочее подписью не считается. */\nexport function dynamicSelectorLabel<T>(item: T, labelOf: (item: T) => unknown): string | null {\n const label: unknown = labelOf(item);\n\n return typeof label === 'string' || typeof label === 'number' ? String(label) : null;\n}\n\n/**\n * Совпадает ли подпись с запросом. Запрос режется по пробелам, и каждое слово обязано найтись в\n * подписи без учёта регистра: «отчёт март» находит «Март, отчёт по складу».\n */\nexport function dynamicSelectorMatches(label: string, query: string): boolean {\n const words: string[] = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n const text: string = label.toLowerCase();\n\n return words.every((word: string): boolean => text.includes(word));\n}\n\n/**\n * Пункты, которые можно выбрать: без уже выбранных, без пунктов без подписи и, если запрос есть,\n * только совпавшие. Порядок — функция сортировки приложения, а без неё — по алфавиту подписи.\n */\nexport function selectableDynamicItems<T, K>(\n items: ReadonlyArray<T>,\n chosenKeys: ReadonlyArray<K>,\n keyOf: (item: T) => K,\n labelOf: (item: T) => unknown,\n query: string,\n sortFn?: ((a: T, b: T) => number) | null\n): T[] {\n const chosen: Set<K> = new Set<K>(chosenKeys);\n const found: T[] = items.filter((item: T): boolean => {\n const label: string | null = dynamicSelectorLabel(item, labelOf);\n\n return label !== null && !chosen.has(keyOf(item)) && dynamicSelectorMatches(label, query);\n });\n\n return found.sort(\n sortFn ?? ((a: T, b: T): number => (dynamicSelectorLabel(a, labelOf) ?? '').localeCompare(dynamicSelectorLabel(b, labelOf) ?? ''))\n );\n}\n\n/** Ключ добавлен или снят. Повторно добавленный ключ не удваивается. */\nexport function toggleDynamicKey<K>(keys: ReadonlyArray<K>, key: K, checked: boolean): K[] {\n if (checked) {\n return keys.includes(key) ? [...keys] : [...keys, key];\n }\n\n return keys.filter((item: K): boolean => item !== key);\n}\n\n/** Состояние флажка «Выбрать всё» по видимым пунктам. */\nexport function dynamicSelectAllState<K>(visibleKeys: ReadonlyArray<K>, pickedKeys: ReadonlyArray<K>): IRtDynamicSelector.SelectAllState {\n const picked: number = visibleKeys.filter((key: K): boolean => pickedKeys.includes(key)).length;\n\n if (picked === 0) {\n return 'none';\n }\n\n return picked === visibleKeys.length ? 'all' : 'some';\n}\n\n/**\n * «Выбрать всё» добавляет к отмеченному все видимые пункты, снятие — убирает видимые и оставляет\n * отмеченное вне запроса.\n */\nexport function selectAllDynamicKeys<K>(visibleKeys: ReadonlyArray<K>, pickedKeys: ReadonlyArray<K>, checked: boolean): K[] {\n if (!checked) {\n return pickedKeys.filter((key: K): boolean => !visibleKeys.includes(key));\n }\n\n return [...pickedKeys, ...visibleKeys.filter((key: K): boolean => !pickedKeys.includes(key))];\n}\n\n/** «Очистить» оставляет только ключи только для чтения, в их прежнем порядке. */\nexport function clearDynamicKeys<K>(keys: ReadonlyArray<K>, readonlyKeys: ReadonlyArray<K>): K[] {\n return keys.filter((key: K): boolean => readonlyKeys.includes(key));\n}\n\n/** Строка перетащена на новое место. Индексы вне списка приводятся к его краям. */\nexport function moveDynamicKey<K>(keys: ReadonlyArray<K>, from: number, to: number): K[] {\n const list: K[] = [...keys];\n const last: number = list.length - 1;\n\n if (from < 0 || from > last) {\n return list;\n }\n\n const moved: K[] = list.splice(from, 1);\n\n list.splice(Math.min(Math.max(to, 0), last), 0, ...moved);\n\n return list;\n}\n\n/** Совпадают ли два набора ключей с учётом порядка: так «Сбросить» узнаёт, что сбрасывать нечего. */\nexport function sameDynamicKeys<K>(a: ReadonlyArray<K>, b: ReadonlyArray<K>): boolean {\n return a.length === b.length && a.every((key: K, index: number): boolean => key === b[index]);\n}\n\n/** Совпадают ли два набора ключей без учёта порядка: так «Очистить» узнаёт, что чистить нечего. */\nexport function sameDynamicKeySet<K>(a: ReadonlyArray<K>, b: ReadonlyArray<K>): boolean {\n const set: Set<K> = new Set<K>(b);\n\n return a.length === set.size && a.every((key: K): boolean => set.has(key));\n}\n\n/** Строка поля списка строк: пустая и повторная не добавляются, пробелы по краям срезаются. */\nexport function addDynamicText(values: ReadonlyArray<string>, raw: string | null | undefined): string[] {\n const text: string = (raw ?? '').trim();\n\n return text === '' || values.includes(text) ? [...values] : [...values, text];\n}\n\n/**\n * Строка поля списка строк исправлена на месте. Пустая правка и правка в уже существующую строку\n * список не меняют: иначе строка пропала бы или удвоилась.\n */\nexport function renameDynamicText(values: ReadonlyArray<string>, previous: string, next: string | null | undefined): string[] {\n const text: string = (next ?? '').trim();\n\n if (text === '' || text === previous || values.includes(text)) {\n return [...values];\n }\n\n return values.map((value: string): string => (value === previous ? text : value));\n}\n\n/** Ключ последней видимой закреплённой строки: под ней стоит разделитель. Порядок строк не меняется. */\nexport function lastPinnedDynamicKey<T, K>(rows: ReadonlyArray<T>, pinnedKeys: ReadonlyArray<K>, keyOf: (item: T) => K): K | null {\n for (let index: number = rows.length - 1; index >= 0; index -= 1) {\n const key: K = keyOf(rows[index]);\n\n if (pinnedKeys.includes(key)) {\n return key;\n }\n }\n\n return null;\n}\n\n/**\n * Строки всплывающего выбора во время поиска: отмеченные раньше стоят над найденными и не пропадают\n * оттого, что запрос перестал с ними совпадать. Без запроса отмеченные остаются на своих местах.\n */\nexport function dynamicPopupRows<T, K>(\n offered: ReadonlyArray<T>,\n found: ReadonlyArray<T>,\n ticked: ReadonlyArray<K>,\n keyOf: (item: T) => K,\n query: string\n): IRtDynamicSelector.PopupRows<T> {\n if (query.trim() === '') {\n return { ticked: [], found: [...found] };\n }\n\n const tickedRows: T[] = ticked\n .map((key: K): T | undefined => offered.find((item: T): boolean => keyOf(item) === key))\n .filter((item: T | undefined): item is T => item !== undefined);\n\n return { ticked: tickedRows, found: found.filter((item: T): boolean => !ticked.includes(keyOf(item))) };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFormControlBase } from '@rt-tools/ui-kit-v2/form-control';\nimport { IButton, IRtIcon, IRtInput, IRtKitConfig, rtKitDefault } from '@rt-tools/ui-kit-v2/core';\nimport { RtFieldComponent } from '@rt-tools/ui-kit-v2/field';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtDynamicSelectorListComponent } from '../list/rt-dynamic-selector-list.component';\nimport { RtDynamicSelectorRowControlsDirective } from '../rt-dynamic-selector.directives';\nimport { addDynamicText, clearDynamicKeys, moveDynamicKey, renameDynamicText, sameDynamicKeys } from '../rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-input';\n\n/**\n * Поле списка строк: строки человек набирает сам. Значение — массив строк в порядке списка.\n * Enter или уход из поля добавляют срезанный по краям текст в конец; пустой и повторный не\n * добавляются. Сброс, очистка, удаление строки и перетаскивание — те же, что у селектора.\n *\n * @example\n * ```html\n * <rt-dynamic-input editable [formControl]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'rt-dynamic-input',\n templateUrl: './rt-dynamic-input.component.html',\n styleUrl: './rt-dynamic-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n RtButtonDirective,\n RtDynamicSelectorListComponent,\n RtEmptyStateComponent,\n RtFieldComponent,\n RtInputComponent,\n ],\n providers: [\n // Алиас базового токена — для contentChild(RtFormControlBase) в rt-field.\n { provide: RtFormControlBase, useExisting: forwardRef(() => RtDynamicInputComponent) },\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicInputComponent extends RtFormControlBase<string[]> {\n readonly #injector: Injector = inject(Injector);\n /** Последнее значение, записанное формой: к нему возвращает сброс. */\n readonly #initial: WritableSignal<string[]> = signal<string[]>([]);\n /* Умолчания входов считаются из настроек кита при объявлении: вход в разметке перебивает их. */\n readonly #invitationButtonIconDefault: IRtIcon.Name | null = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IRtIcon.Name | null | undefined => it.invitationButtonIcon,\n null\n );\n readonly #invitationButtonAppearanceDefault: IButton.Appearance = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IButton.Appearance | undefined => it.invitationButtonAppearance,\n 'outlined'\n );\n readonly #clearIconDefault: IRtIcon.Name = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IRtIcon.Name | undefined => it.clearIcon,\n 'close'\n );\n readonly #titleWrapDefault: boolean = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): boolean | undefined => it.titleWrap,\n true\n );\n\n protected readonly addLabel: Signal<string> = rtKitLabel('dynamicSelectorAdd');\n protected readonly placeholderLabel: Signal<string> = rtKitLabel('dynamicInputPlaceholder');\n\n protected readonly field: Signal<ElementRef<HTMLElement> | undefined> = viewChild('field', { read: ElementRef });\n protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<string> | undefined> = contentChild<\n RtDynamicSelectorRowControlsDirective<string>\n >(RtDynamicSelectorRowControlsDirective);\n protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<string>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<string>> | null => this.rowControls()?.templateRef ?? null\n );\n\n /** Поле набора открыто, и в нём текст. */\n protected readonly isFieldShown: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly draft: WritableSignal<string> = signal<string>('');\n /** Приглашение снимается нажатием его кнопки и до новой записи формы не возвращается. */\n protected readonly isInvitationDismissed: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly rows: Signal<IRtDynamicSelector.ListRow<string>[]> = computed((): IRtDynamicSelector.ListRow<string>[] => {\n const locked: ReadonlyArray<string> = this.readonlyKeys();\n\n return this.value().map((text: string): IRtDynamicSelector.ListRow<string> => ({\n item: text,\n key: text,\n label: text,\n locked: locked.includes(text),\n }));\n });\n protected readonly isInvitationShown: Signal<boolean> = computed((): boolean => this.invitation() && !this.isInvitationDismissed());\n protected readonly isAddShown: Signal<boolean> = computed((): boolean => !this.isFieldShown());\n protected readonly isKeysReset: Signal<boolean> = computed((): boolean => sameDynamicKeys(this.value(), this.#initial()));\n protected readonly isKeysClear: Signal<boolean> = computed(\n (): boolean => clearDynamicKeys(this.value(), this.readonlyKeys()).length === this.value().length\n );\n /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда строки не менялись. */\n protected readonly isResetDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysReset());\n protected readonly isClearDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysClear());\n protected readonly addTitle: Signal<string> = computed((): string => this.buttonTitle() || this.addLabel());\n protected readonly fieldPlaceholder: Signal<string> = computed((): string => this.placeholder() || this.placeholderLabel());\n\n protected readonly hasValue: Signal<boolean> = computed((): boolean => this.value().length > 0);\n\n public readonly buttonTitle: InputSignal<string> = input<string>('');\n public readonly placeholder: InputSignal<string> = input<string>('');\n /** Строки, которые нельзя убрать из списка. */\n public readonly readonlyKeys: InputSignal<ReadonlyArray<string>> = input<ReadonlyArray<string>>([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n public readonly editable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitation: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitationIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n /** Имя Material вместо `invitationIcon` — уходит во вход `glyph` заглушки приглашения. */\n public readonly invitationGlyph: InputSignal<string | null> = input<string | null>(null);\n public readonly invitationDescription: InputSignal<string> = input<string>('');\n /** Значок кнопки приглашения; null — кнопка без значка. */\n public readonly invitationButtonIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(this.#invitationButtonIconDefault);\n /** Вид кнопки приглашения — тот же набор, что у кнопки кита. */\n public readonly invitationButtonAppearance: InputSignal<IButton.Appearance> = input<IButton.Appearance>(\n this.#invitationButtonAppearanceDefault\n );\n /** Значок кнопки «Очистить список». */\n public readonly clearIcon: InputSignal<IRtIcon.Name> = input<IRtIcon.Name>(this.#clearIconDefault);\n /** Название строки переносится; `false` ведёт его одной строкой с многоточием и подсказкой при обрезке. */\n public readonly titleWrap: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(this.#titleWrapDefault, {\n transform: booleanAttribute,\n });\n /** Вид поля, в которое вводят новую строку. */\n public readonly fieldAppearance: InputSignal<IRtInput.Appearance> = input<IRtInput.Appearance>('outline');\n /** Подпись поля новой строки; пустая — поле без подписи, как раньше. */\n public readonly fieldLabel: InputSignal<string> = input<string>('');\n /** Корзина строк; без неё строки убирает только очистка или сам вызывающий. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */\n public readonly listActionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /**\n * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда строки прежние.\n * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.\n */\n public readonly extraChanged: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly listReset: OutputEmitterRef<void> = output<void>();\n public readonly listCleared: OutputEmitterRef<void> = output<void>();\n\n public readonly displayText: Signal<string> = computed((): string => this.value().join(', '));\n\n /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */\n public override writeValue(value: string[] | null): void {\n super.writeValue(value === null ? null : [...value]);\n this.#initial.set([...this.value()]);\n this.isInvitationDismissed.set(false);\n }\n\n protected onAdd(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.isInvitationDismissed.set(true);\n this.draft.set('');\n this.isFieldShown.set(true);\n afterNextRender((): void => this.field()?.nativeElement.querySelector('input')?.focus(), { injector: this.#injector });\n }\n\n /** Enter или уход из поля: пустой текст поле не закрывает, повторный закрывает без изменений. */\n protected onCommit(): void {\n if (!this.isFieldShown() || this.draft().trim() === '') {\n return;\n }\n\n const next: string[] = addDynamicText(this.value(), this.draft());\n\n this.draft.set('');\n this.isFieldShown.set(false);\n this.markTouched();\n\n if (next.length !== this.value().length) {\n this.#change(next);\n }\n }\n\n protected onRemoved(key: unknown): void {\n if (!this.isDisabled() && typeof key === 'string' && !this.readonlyKeys().includes(key)) {\n this.#change(this.value().filter((text: string): boolean => text !== key));\n }\n }\n\n protected onMoved(move: IRtDynamicSelector.Move): void {\n if (!this.isDisabled()) {\n this.#change(moveDynamicKey(this.value(), move.from, move.to));\n }\n }\n\n protected onEdited(edit: IRtDynamicSelector.TextEdit): void {\n const next: string[] = renameDynamicText(this.value(), edit.previous, edit.next);\n\n if (!this.isDisabled() && !sameDynamicKeys(next, this.value())) {\n this.#change(next);\n }\n }\n\n protected onReset(): void {\n if (this.isDisabled() || this.isResetDisabled()) {\n return;\n }\n\n // Строки прежние, а правки только в шаблоне: значение не трогаем, сообщаем о сбросе.\n if (!this.isKeysReset()) {\n this.#change([...this.#initial()]);\n }\n this.listReset.emit();\n }\n\n protected onCleared(): void {\n if (this.isDisabled() || this.isClearDisabled()) {\n return;\n }\n\n if (!this.isKeysClear()) {\n this.#change(clearDynamicKeys(this.value(), this.readonlyKeys()));\n }\n this.listCleared.emit();\n }\n\n protected getEmptyValue(): string[] {\n return [];\n }\n\n protected focusAfterClear(): void {\n // Очистка крестиком у поля не ставится: фокус остаётся там, где был.\n }\n\n #change(values: string[]): void {\n this.value.set(values);\n this.emitChange(values);\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-input\">\n <rt-dynamic-selector-list\n [rows]=\"rows()\"\n [draggable]=\"draggable()\"\n [buttonRadius]=\"buttonRadius()\"\n [clearIcon]=\"clearIcon()\"\n [titleWrap]=\"titleWrap()\"\n [editable]=\"editable()\"\n [disabled]=\"isDisabled()\"\n [actionsShown]=\"!isInvitationShown()\"\n [resetClearShown]=\"listActionsShown()\"\n [removeShown]=\"removeShown()\"\n [resetDisabled]=\"isResetDisabled()\"\n [clearDisabled]=\"isClearDisabled()\"\n [controlsTpl]=\"controlsTpl()\"\n (removed)=\"onRemoved($event)\"\n (moved)=\"onMoved($event)\"\n (edited)=\"onEdited($event)\"\n (resetClicked)=\"onReset()\"\n (cleared)=\"onCleared()\">\n @if (isAddShown()) {\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-input-add\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onAdd()\"></button>\n }\n </rt-dynamic-selector-list>\n\n @if (isFieldShown()) {\n <!-- Подпись поля рисует rt-field: у rt-input своей нет. Обёртка стоит только при подписи —\n пустая добавила бы зазор под полем и сдвинула прежний вид. -->\n @if (fieldLabel(); as label) {\n <rt-field qa-dataid=\"dynamic-input-field-label\" [label]=\"label\">\n <rt-input\n #field\n rtElem=\"field\"\n qa-dataid=\"dynamic-input-field\"\n [appearance]=\"fieldAppearance()\"\n [controlId]=\"effectiveControlId()\"\n [placeholder]=\"fieldPlaceholder()\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event ?? '')\"\n (keydown.enter)=\"onCommit()\"\n (focusout)=\"onCommit()\" />\n </rt-field>\n } @else {\n <rt-input\n #field\n rtElem=\"field\"\n qa-dataid=\"dynamic-input-field\"\n [appearance]=\"fieldAppearance()\"\n [controlId]=\"effectiveControlId()\"\n [placeholder]=\"fieldPlaceholder()\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event ?? '')\"\n (keydown.enter)=\"onCommit()\"\n (focusout)=\"onCommit()\" />\n }\n }\n\n @if (isInvitationShown()) {\n <rt-empty-state\n rtElem=\"invitation\"\n qa-dataid=\"dynamic-input-invitation\"\n [icon]=\"invitationIcon()\"\n [glyph]=\"invitationGlyph()\"\n [description]=\"invitationDescription()\">\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"dynamic-input-invitation-add\"\n [appearance]=\"invitationButtonAppearance()\"\n [icon]=\"invitationButtonIcon()\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onAdd()\"></button>\n </rt-empty-state>\n }\n</ng-container>\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n inject,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { debounceTime, Subject } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel, IRtInput } from '@rt-tools/ui-kit-v2/core';\nimport { RtInfiniteScrollDirective } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtCheckboxComponent } from '@rt-tools/ui-kit-v2/checkbox';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtInputComponent } from '@rt-tools/ui-kit-v2/input';\nimport { RtRadioButtonComponent } from '@rt-tools/ui-kit-v2/radio-button';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { RtToggleSwitchComponent } from '@rt-tools/ui-kit-v2/toggle-switch';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport {\n dynamicPopupRows,\n dynamicSelectAllState,\n dynamicSelectorLabel,\n dynamicSelectorMatches,\n lastPinnedDynamicKey,\n selectAllDynamicKeys,\n toggleDynamicKey,\n} from '../rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from '../rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector-popup';\n\n/** Сколько ждёт поиск на сервере после последней нажатой клавиши. */\nexport const RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE: number = 500;\n\n/**\n * Всплывающий выбор динамического селектора: поиск, флажки или переключатели, «Выбрать всё»,\n * догрузка при прокрутке, «Отмена» и «Применить». Отметки живут в самом окне и уходят наружу\n * только по «Применить»: окно создаётся заново при каждом открытии, и закрытие их сбрасывает.\n */\n@Component({\n selector: 'rt-dynamic-selector-popup',\n templateUrl: './rt-dynamic-selector-popup.component.html',\n styleUrl: './rt-dynamic-selector-popup.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // Angular\n FormsModule,\n RouterLink,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtCheckboxComponent,\n RtEmptyStateComponent,\n RtIconComponent,\n RtInfiniteScrollDirective,\n RtInputComponent,\n RtRadioButtonComponent,\n RtSpinnerComponent,\n RtToggleSwitchComponent,\n RtTooltipDirective,\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorPopupComponent<TEntity extends object> implements OnInit {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #searchSource: Subject<string> = new Subject<string>();\n\n protected readonly searchLabel: Signal<string> = rtKitLabel('dynamicSelectorSearch');\n protected readonly selectAllLabel: Signal<string> = rtKitLabel('uiSelectAll');\n protected readonly multiLabel: Signal<string> = rtKitLabel('dynamicSelectorMulti');\n protected readonly multiHintLabel: Signal<string> = rtKitLabel('dynamicSelectorMultiHint');\n protected readonly noResultsLabel: Signal<string> = rtKitLabel('dynamicSelectorNoResults');\n /** Подпись пустого результата: своя у приложения, иначе словарь кита. */\n protected readonly emptyText: Signal<string> = computed((): string => this.emptyResultsText() || this.noResultsLabel());\n protected readonly cancelLabel: Signal<string> = rtKitLabel('uiCancel');\n protected readonly applyLabel: Signal<string> = rtKitLabel('dynamicSelectorApply');\n\n /** Отмеченные ключи — ещё не применённые. */\n protected readonly ticked: WritableSignal<unknown[]> = signal<unknown[]>([]);\n protected readonly query: WritableSignal<string> = signal<string>('');\n /** Выбор нескольких включён: без него простое нажатие оставляет одну отметку. */\n protected readonly isMultiOn: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Найденные строки: местный поиск отбирает сам, серверный отдаёт запрос наружу. */\n protected readonly found: Signal<TEntity[]> = computed((): TEntity[] => {\n const query: string = this.query();\n\n if (!this.localSearch() || query.trim() === '') {\n return [...this.entities()];\n }\n\n return this.entities().filter((item: TEntity): boolean => {\n const label: string | null = dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity));\n\n return label !== null && dynamicSelectorMatches(label, query);\n });\n });\n protected readonly rows: Signal<IRtDynamicSelector.PopupRows<TEntity>> = computed((): IRtDynamicSelector.PopupRows<TEntity> =>\n dynamicPopupRows(this.entities(), this.found(), this.ticked(), (item: TEntity): unknown => this.#keyOf(item), this.query())\n );\n protected readonly visibleKeys: Signal<unknown[]> = computed((): unknown[] =>\n [...this.rows().ticked, ...this.rows().found].map((item: TEntity): unknown => this.#keyOf(item))\n );\n /** Строки для разметки: отмеченные раньше над разделителем, найденные — под ним. */\n protected readonly rowItems: Signal<IRtDynamicSelector.PopupRow<TEntity>[]> = computed((): IRtDynamicSelector.PopupRow<TEntity>[] => {\n const ticked: ReadonlyArray<unknown> = this.ticked();\n const lastPinned: unknown = this.lastPinnedKey();\n const { ticked: above, found } = this.rows();\n const toRow: (item: TEntity, separated: boolean) => IRtDynamicSelector.PopupRow<TEntity> = (\n item: TEntity,\n separated: boolean\n ): IRtDynamicSelector.PopupRow<TEntity> => ({\n entity: item,\n key: this.#keyOf(item),\n label: dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity)) ?? '',\n ticked: ticked.includes(this.#keyOf(item)),\n separated,\n });\n\n return [\n ...above.map((item: TEntity, index: number): IRtDynamicSelector.PopupRow<TEntity> => toRow(item, index === above.length - 1)),\n ...found.map((item: TEntity): IRtDynamicSelector.PopupRow<TEntity> =>\n toRow(item, lastPinned !== null && this.#keyOf(item) === lastPinned)\n ),\n ];\n });\n protected readonly hasRows: Signal<boolean> = computed((): boolean => this.visibleKeys().length > 0);\n protected readonly selectAllState: Signal<IRtDynamicSelector.SelectAllState> = computed((): IRtDynamicSelector.SelectAllState =>\n dynamicSelectAllState(this.visibleKeys(), this.ticked())\n );\n protected readonly isSingle: Signal<boolean> = computed((): boolean => this.mode() === 'single');\n protected readonly isSelectAllShown: Signal<boolean> = computed(\n (): boolean => !this.isSingle() && this.selectAllShown() && this.visibleKeys().length > 1 && !this.loading()\n );\n protected readonly isMultiToggleVisible: Signal<boolean> = computed(\n (): boolean => !this.isSingle() && this.multiToggleShown() && this.visibleKeys().length > 1 && !this.loading()\n );\n protected readonly lastPinnedKey: Signal<unknown> = computed((): unknown =>\n lastPinnedDynamicKey(this.rows().found, this.pinnedKeys(), (item: TEntity): unknown => this.#keyOf(item))\n );\n protected readonly isApplyDisabled: Signal<boolean> = computed((): boolean => this.ticked().length === 0 || this.loading());\n protected readonly isNavShown: Signal<boolean> = computed((): boolean => !!this.navigateTitle() && !!this.navigateLink());\n\n /** Предлагаемые записи: ещё не выбранные, отсортированные селектором. */\n public readonly entities: InputSignal<ReadonlyArray<TEntity>> = input<ReadonlyArray<TEntity>>([]);\n public readonly keyExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly displayExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly mode: InputSignal<IRtDynamicSelector.Mode> = input<IRtDynamicSelector.Mode>('multi');\n public readonly multiToggleShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selectAllShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly localSearch: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly lazyLoad: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly loading: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly fetching: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n public readonly navigateTitle: InputSignal<string> = input<string>('');\n public readonly navigateLink: InputSignal<string> = input<string>('');\n /** Запрос, с которым выбор открывается; событием поиска он не уходит — вызывающий его знает. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n /** Вид поля поиска — тот же вход, что у поля кита. */\n public readonly searchAppearance: InputSignal<IRtInput.Appearance> = input<IRtInput.Appearance>('outline');\n /** Подпись пустого результата поиска; пустая строка оставляет подпись кита. */\n public readonly emptyResultsText: InputSignal<string> = input<string>('');\n\n /** Применённые ключи в порядке отметок. */\n public readonly applied: OutputEmitterRef<unknown[]> = output<unknown[]>();\n public readonly cancelled: OutputEmitterRef<void> = output<void>();\n /** Запрос для поиска на сервере: через паузу после последней клавиши, стёртый — пустой строкой. */\n public readonly searchChange: OutputEmitterRef<string> = output<string>();\n public readonly loadMore: OutputEmitterRef<void> = output<void>();\n /** Отмеченные записи: пустой список при открытии и текущие отметки после каждого поиска. */\n public readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n\n public ngOnInit(): void {\n // Выбор живёт в шаблоне и создаётся заново при каждом открытии: запрос начинается с входа.\n this.query.set(this.searchTerm());\n this.temporaryChoiceChange.emit([]);\n this.#searchSource\n .pipe(debounceTime(RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE), takeUntilDestroyed(this.#destroyRef))\n .subscribe((query: string): void => this.searchChange.emit(query));\n }\n\n protected onQueryChange(value: string | null): void {\n const query: string = value ?? '';\n\n this.query.set(query);\n this.temporaryChoiceChange.emit(this.#tickedEntities());\n\n if (!this.localSearch()) {\n this.#searchSource.next(query);\n }\n }\n\n /** Нажатие строки флажков: при выключенном выборе нескольких без Ctrl или Cmd остаётся одна отметка. */\n protected onRowClick(event: MouseEvent, item: TEntity): void {\n const key: unknown = this.#keyOf(item);\n const checked: boolean = !this.ticked().includes(key);\n const addsToTicks: boolean = !this.multiToggleShown() || this.isMultiOn() || event.ctrlKey || event.metaKey;\n\n this.ticked.update((keys: unknown[]): unknown[] => toggleDynamicKey(addsToTicks ? keys : [], key, checked));\n }\n\n protected onRadioChange(item: TEntity): void {\n this.ticked.set([this.#keyOf(item)]);\n }\n\n protected onSelectAll(checked: boolean): void {\n this.ticked.update((keys: unknown[]): unknown[] => selectAllDynamicKeys(this.visibleKeys(), keys, checked));\n }\n\n protected onMultiToggle(value: boolean): void {\n this.isMultiOn.set(value);\n }\n\n protected onApply(): void {\n if (!this.isApplyDisabled()) {\n this.applied.emit([...this.ticked()]);\n }\n }\n\n protected onCancel(): void {\n this.cancelled.emit();\n }\n\n #tickedEntities(): TEntity[] {\n return this.ticked()\n .map((key: unknown): TEntity | undefined => this.entities().find((item: TEntity): boolean => this.#keyOf(item) === key))\n .filter((item: TEntity | undefined): item is TEntity => item !== undefined);\n }\n\n /** Ключ записи — по имени поля, которое назвал вызывающий. */\n #keyOf(item: TEntity): unknown {\n return item[this.keyExp()];\n }\n\n /** Подпись записи — по имени поля, которое назвал вызывающий. */\n #labelOf(item: TEntity): unknown {\n return item[this.displayExp()];\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector-popup\">\n <div rtElem=\"head\">\n <rt-input\n rtElem=\"search\"\n qa-dataid=\"dynamic-selector-search\"\n iconLeft=\"search\"\n [appearance]=\"searchAppearance()\"\n [placeholder]=\"searchLabel()\"\n [ngModel]=\"query()\"\n (ngModelChange)=\"onQueryChange($event)\" />\n\n @if (isMultiToggleVisible() || isSelectAllShown()) {\n <div rtElem=\"controls\">\n @if (isMultiToggleVisible()) {\n <div rtElem=\"multi\">\n <rt-toggle-switch\n qa-dataid=\"dynamic-selector-multi\"\n [ariaLabel]=\"multiLabel()\"\n [ngModel]=\"isMultiOn()\"\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 <span rtElem=\"multi-hint\">{{ multiHintLabel() }}</span>\n </div>\n }\n\n @if (isSelectAllShown()) {\n <rt-checkbox\n rtElem=\"select-all\"\n qa-dataid=\"dynamic-selector-select-all\"\n [indeterminate]=\"selectAllState() === 'some'\"\n [ngModel]=\"selectAllState() === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onSelectAll($event)\">\n {{ selectAllLabel() }}\n </rt-checkbox>\n }\n </div>\n }\n </div>\n\n @if (loading()) {\n <div rtElem=\"state\" qa-dataid=\"dynamic-selector-loading\">\n <rt-spinner [diameter]=\"24\" />\n </div>\n } @else if (hasRows()) {\n <div rtElem=\"list\" qa-dataid=\"dynamic-selector-options\">\n @for (row of rowItems(); track row.key) {\n <div rtElem=\"row\" [rtMod]=\"{ separated: row.separated }\">\n @if (isSingle()) {\n <rt-radio-button\n rtElem=\"option\"\n qa-dataid=\"dynamic-selector-option\"\n [value]=\"row.key\"\n [checked]=\"row.ticked\"\n [label]=\"row.label\"\n (checkedChange)=\"onRadioChange(row.entity)\" />\n } @else {\n <rt-checkbox\n rtElem=\"option\"\n qa-dataid=\"dynamic-selector-option\"\n [ngModel]=\"row.ticked\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"onRowClick($event, row.entity)\">\n {{ row.label }}\n </rt-checkbox>\n }\n </div>\n }\n\n <div rtElem=\"sentinel\" rtInfiniteScroll [disabled]=\"!lazyLoad() || fetching()\" (loadMore)=\"loadMore.emit()\"></div>\n\n @if (fetching()) {\n <div rtElem=\"fetching\" qa-dataid=\"dynamic-selector-fetching\">\n <rt-spinner [diameter]=\"20\" />\n </div>\n }\n </div>\n } @else {\n <rt-empty-state rtElem=\"empty\" qa-dataid=\"dynamic-selector-no-results\" icon=\"search\" [title]=\"emptyText()\" />\n }\n\n <div rtElem=\"foot\" [rtMod]=\"{ nav: isNavShown() }\">\n @if (isNavShown()) {\n <a rtElem=\"nav\" qa-dataid=\"dynamic-selector-nav\" [routerLink]=\"navigateLink()\" [rtTooltip]=\"navigateTitle()\">\n {{ navigateTitle() }}\n </a>\n }\n\n <div rtElem=\"actions\">\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-selector-cancel\"\n [label]=\"cancelLabel()\"\n [attr.aria-label]=\"cancelLabel()\"\n (click)=\"onCancel()\"></button>\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"dynamic-selector-apply\"\n [label]=\"applyLabel()\"\n [attr.aria-label]=\"applyLabel()\"\n [disabled]=\"isApplyDisabled()\"\n (click)=\"onApply()\"></button>\n </div>\n </div>\n</ng-container>\n","import {\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChildren,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFormControlBase } from '@rt-tools/ui-kit-v2/form-control';\nimport { IButton, IRtIcon, IRtInput, IRtKitConfig, rtKitDefault } from '@rt-tools/ui-kit-v2/core';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtDynamicSelectorListComponent } from './list/rt-dynamic-selector-list.component';\nimport { RtDynamicSelectorPopupComponent } from './popup/rt-dynamic-selector-popup.component';\nimport { RtDynamicSelectorRowControlsDirective, RtDynamicSelectorRowTitleDirective } from './rt-dynamic-selector.directives';\nimport {\n clearDynamicKeys,\n dynamicSelectorLabel,\n moveDynamicKey,\n sameDynamicKeys,\n selectableDynamicItems,\n} from './rt-dynamic-selector.logic';\nimport { IRtDynamicSelector } from './rt-dynamic-selector.model';\n\nconst BEM_BLOCK: string = 'rt-dynamic-selector';\n\n/**\n * Динамический селектор: поле формы со списком выбранных записей. Значение — массив ключей в\n * порядке списка. Записи добавляются всплывающим выбором, убираются корзиной строки, список\n * возвращается к записанному формой сбросом и пустеет очисткой — кроме строк только для чтения.\n *\n * @example\n * ```html\n * <rt-dynamic-selector keyExp=\"id\" displayExp=\"name\" [entities]=\"people()\" [formControl]=\"team\" />\n * ```\n */\n@Component({\n selector: 'rt-dynamic-selector',\n templateUrl: './rt-dynamic-selector.component.html',\n styleUrl: './rt-dynamic-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n RtButtonDirective,\n RtDynamicSelectorListComponent,\n RtDynamicSelectorPopupComponent,\n RtEmptyStateComponent,\n RtPopoverDirective,\n ],\n providers: [\n // Алиас базового токена — для contentChild(RtFormControlBase) в rt-field.\n { provide: RtFormControlBase, useExisting: forwardRef(() => RtDynamicSelectorComponent) },\n ],\n host: { class: BEM_BLOCK },\n})\nexport class RtDynamicSelectorComponent<TEntity extends object> extends RtFormControlBase<unknown[]> {\n /** Последнее значение, записанное формой: к нему возвращает сброс. */\n readonly #initial: WritableSignal<unknown[]> = signal<unknown[]>([]);\n /* Умолчания входов считаются из настроек кита при объявлении: вход в разметке перебивает их. */\n readonly #invitationButtonIconDefault: IRtIcon.Name | null = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IRtIcon.Name | null | undefined => it.invitationButtonIcon,\n null\n );\n readonly #invitationButtonAppearanceDefault: IButton.Appearance = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IButton.Appearance | undefined => it.invitationButtonAppearance,\n 'outlined'\n );\n readonly #clearIconDefault: IRtIcon.Name = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IRtIcon.Name | undefined => it.clearIcon,\n 'close'\n );\n readonly #titleWrapDefault: boolean = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): boolean | undefined => it.titleWrap,\n true\n );\n readonly #searchAppearanceDefault: IRtInput.Appearance = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): IRtInput.Appearance | undefined => it.searchAppearance,\n 'outline'\n );\n readonly #emptyResultsTextDefault: string = rtKitDefault(\n 'dynamicSelector',\n (it: IRtKitConfig.DynamicSelector): string | undefined => it.emptyResultsText,\n ''\n );\n\n protected readonly addLabel: Signal<string> = rtKitLabel('dynamicSelectorAdd');\n protected readonly nothingToChooseLabel: Signal<string> = rtKitLabel('dynamicSelectorNothingToChoose');\n\n /** Всплывающий выбор открывается от нажатой кнопки добавления: у полосы и у приглашения — свой. */\n protected readonly popovers: Signal<readonly RtPopoverDirective[]> = viewChildren(RtPopoverDirective);\n protected readonly rowTitle: Signal<RtDynamicSelectorRowTitleDirective<TEntity> | undefined> =\n contentChild<RtDynamicSelectorRowTitleDirective<TEntity>>(RtDynamicSelectorRowTitleDirective);\n protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<TEntity> | undefined> = contentChild<\n RtDynamicSelectorRowControlsDirective<TEntity>\n >(RtDynamicSelectorRowControlsDirective);\n protected readonly titleTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null => this.rowTitle()?.templateRef ?? null\n );\n protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null> = computed(\n (): TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null => this.rowControls()?.templateRef ?? null\n );\n\n /** Выбранные записи в порядке значения; ключ, которого нет среди записей, строки не рисует. */\n protected readonly chosen: Signal<TEntity[]> = computed((): TEntity[] => this.#entitiesOf(this.value()));\n protected readonly rows: Signal<IRtDynamicSelector.ListRow<TEntity>[]> = computed((): IRtDynamicSelector.ListRow<TEntity>[] => {\n const locked: ReadonlyArray<unknown> = this.readonlyKeys();\n\n return this.chosen().map((item: TEntity): IRtDynamicSelector.ListRow<TEntity> => ({\n item,\n key: this.#keyOf(item),\n label: dynamicSelectorLabel(item, (entity: TEntity): unknown => this.#labelOf(entity)) ?? '',\n locked: locked.includes(this.#keyOf(item)),\n }));\n });\n /** Что предлагает всплывающий выбор: ещё не выбранное, в порядке вызывающего или по алфавиту. */\n protected readonly offered: Signal<TEntity[]> = computed((): TEntity[] =>\n selectableDynamicItems(\n this.entities(),\n this.value(),\n (item: TEntity): unknown => this.#keyOf(item),\n (item: TEntity): unknown => this.#labelOf(item),\n '',\n this.sortFn()\n )\n );\n protected readonly hasOffer: Signal<boolean> = computed((): boolean => this.offered().length > 0 || !this.localSearch());\n protected readonly isNothingToChoose: Signal<boolean> = computed((): boolean => this.value().length === 0 && !this.hasOffer());\n protected readonly isAddShown: Signal<boolean> = computed((): boolean => this.addShown() && this.hasOffer());\n protected readonly isKeysReset: Signal<boolean> = computed((): boolean => sameDynamicKeys(this.value(), this.#initial()));\n protected readonly isKeysClear: Signal<boolean> = computed(\n (): boolean => clearDynamicKeys(this.value(), this.readonlyKeys()).length === this.value().length\n );\n /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда ключи не менялись. */\n protected readonly isResetDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysReset());\n protected readonly isClearDisabled: Signal<boolean> = computed((): boolean => !this.extraChanged() && this.isKeysClear());\n protected readonly addTitle: Signal<string> = computed((): string => this.buttonTitle() || this.addLabel());\n\n protected readonly hasValue: Signal<boolean> = computed((): boolean => this.value().length > 0);\n\n /** Записи, из которых выбирают; у каждой есть поле ключа и поле подписи. */\n public readonly entities: InputSignal<ReadonlyArray<TEntity>> = input<ReadonlyArray<TEntity>>([]);\n public readonly keyExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly displayExp: InputSignal<keyof TEntity & string> = input.required<keyof TEntity & string>();\n public readonly mode: InputSignal<IRtDynamicSelector.Mode> = input<IRtDynamicSelector.Mode>('multi');\n /** Название кнопки добавления; пустое — «Add» из словаря кита. */\n public readonly buttonTitle: InputSignal<string> = input<string>('');\n public readonly addShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Корзина строк; без неё записи убирает только очистка или сам вызывающий. */\n public readonly removeShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */\n public readonly listActionsShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n /**\n * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда ключи прежние.\n * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.\n */\n public readonly extraChanged: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Запрос, с которым открывается всплывающий выбор; событием поиска он не уходит. */\n public readonly searchTerm: InputSignal<string> = input<string>('');\n /** Ключи, которые нельзя убрать из списка. */\n public readonly readonlyKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n /** Ключи строк всплывающего выбора, под последней из которых стоит разделитель. */\n public readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>> = input<ReadonlyArray<unknown>>([]);\n public readonly draggable: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */\n public readonly buttonRadius: InputSignal<TRtRadius | null> = input<TRtRadius | null>('full');\n /** Приглашение вместо полосы кнопок: значок, описание и кнопка добавления. */\n public readonly invitation: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly invitationIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n /** Имя Material вместо `invitationIcon` — уходит во вход `glyph` заглушки приглашения. */\n public readonly invitationGlyph: InputSignal<string | null> = input<string | null>(null);\n public readonly invitationDescription: InputSignal<string> = input<string>('');\n /** Значок кнопки приглашения; null — кнопка без значка. */\n public readonly invitationButtonIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(this.#invitationButtonIconDefault);\n /** Вид кнопки приглашения — тот же набор, что у кнопки кита. */\n public readonly invitationButtonAppearance: InputSignal<IButton.Appearance> = input<IButton.Appearance>(\n this.#invitationButtonAppearanceDefault\n );\n /** Значок кнопки «Очистить список». */\n public readonly clearIcon: InputSignal<IRtIcon.Name> = input<IRtIcon.Name>(this.#clearIconDefault);\n /** Название строки переносится; `false` ведёт его одной строкой с многоточием и подсказкой при обрезке. */\n public readonly titleWrap: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(this.#titleWrapDefault, {\n transform: booleanAttribute,\n });\n /** Вид поля поиска в окне выбора. */\n public readonly searchAppearance: InputSignal<IRtInput.Appearance> = input<IRtInput.Appearance>(this.#searchAppearanceDefault);\n /** Подпись пустого результата поиска; пустая строка оставляет подпись кита. */\n public readonly emptyResultsText: InputSignal<string> = input<string>(this.#emptyResultsTextDefault);\n public readonly multiToggleShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selectAllShown: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly localSearch: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n public readonly lazyLoad: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly loading: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly fetching: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly navigateTitle: InputSignal<string> = input<string>('');\n public readonly navigateLink: InputSignal<string> = input<string>('');\n public readonly sortFn: InputSignal<((a: TEntity, b: TEntity) => number) | null> = input<((a: TEntity, b: TEntity) => number) | null>(\n null\n );\n\n /** Выбранные записи: те же, что уходят событием изменения выбора. */\n public readonly chosenEntities: ModelSignal<TEntity[]> = model<TEntity[]>([]);\n\n public readonly selectionChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n public readonly listReset: OutputEmitterRef<void> = output<void>();\n public readonly listCleared: OutputEmitterRef<void> = output<void>();\n /** Всплывающий выбор открылся или закрылся. */\n public readonly popupOpenChange: OutputEmitterRef<boolean> = output<boolean>();\n public readonly searchChange: OutputEmitterRef<string> = output<string>();\n public readonly loadMore: OutputEmitterRef<void> = output<void>();\n public readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]> = output<TEntity[]>();\n\n /** Открыт ли всплывающий выбор — от кнопки полосы или от кнопки приглашения. */\n public readonly popupOpen: Signal<boolean> = computed((): boolean =>\n this.popovers().some((popover: RtPopoverDirective): boolean => popover.isOpen())\n );\n\n public readonly displayText: Signal<string> = computed((): string =>\n this.rows()\n .map((row: IRtDynamicSelector.ListRow<TEntity>): string => row.label)\n .join(', ')\n );\n\n constructor() {\n super();\n // Вход chosenEntities задаёт выбранное, как запись формы; эхо выбора, вернувшееся от родителя, его не трогает.\n toObservable(this.chosenEntities)\n .pipe(takeUntilDestroyed())\n .subscribe((list: TEntity[]): void => this.#takeChosen(list));\n }\n\n /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */\n public override writeValue(value: unknown[] | null): void {\n super.writeValue(value === null ? null : [...value]);\n this.#initial.set([...this.value()]);\n }\n\n protected onAdd(popover: RtPopoverDirective): void {\n if (!this.isDisabled()) {\n popover.open();\n }\n }\n\n protected onApplied(keys: unknown[]): void {\n this.#closePopup();\n this.#change(\n this.mode() === 'single'\n ? keys.slice(0, 1)\n : [...this.value(), ...keys.filter((key: unknown): boolean => !this.value().includes(key))]\n );\n }\n\n protected onCancelled(): void {\n this.#closePopup();\n }\n\n protected onRemoved(key: unknown): void {\n if (!this.isDisabled() && !this.readonlyKeys().includes(key)) {\n this.#change(this.value().filter((item: unknown): boolean => item !== key));\n }\n }\n\n protected onMoved(move: IRtDynamicSelector.Move): void {\n if (!this.isDisabled()) {\n this.#change(moveDynamicKey(this.value(), move.from, move.to));\n }\n }\n\n protected onReset(): void {\n if (this.isDisabled() || this.isResetDisabled()) {\n return;\n }\n\n // Ключи прежние, а правки только в строках: значение не трогаем, сообщаем о сбросе.\n if (!this.isKeysReset()) {\n this.#change([...this.#initial()]);\n }\n this.listReset.emit();\n }\n\n protected onCleared(): void {\n if (this.isDisabled() || this.isClearDisabled()) {\n return;\n }\n\n if (!this.isKeysClear()) {\n this.#change(clearDynamicKeys(this.value(), this.readonlyKeys()));\n }\n this.listCleared.emit();\n }\n\n protected onOpened(): void {\n this.popupOpenChange.emit(true);\n }\n\n protected onClosed(): void {\n this.markTouched();\n this.popupOpenChange.emit(false);\n }\n\n #closePopup(): void {\n for (const popover of this.popovers()) {\n popover.close();\n }\n }\n\n protected getEmptyValue(): unknown[] {\n return [];\n }\n\n protected focusAfterClear(): void {\n // Очистка крестиком у поля не ставится: фокус остаётся там, где был.\n }\n\n #change(keys: unknown[]): void {\n const entities: TEntity[] = this.#entitiesOf(keys);\n\n this.value.set(keys);\n this.emitChange(keys);\n this.chosenEntities.set(entities);\n this.selectionChange.emit(entities);\n }\n\n /**\n * Непустой список с другими ключами становится и значением, и исходным для сброса. Список с теми\n * же ключами — эхо `selectionChange` от родителя: исходный он не трогает, иначе сброс не включился бы.\n */\n #takeChosen(list: ReadonlyArray<TEntity>): void {\n const keys: unknown[] = list.map((item: TEntity): unknown => this.#keyOf(item));\n const shown: unknown[] = this.#entitiesOf(this.value()).map((item: TEntity): unknown => this.#keyOf(item));\n\n if (keys.length === 0 || sameDynamicKeys(keys, shown)) {\n return;\n }\n\n this.value.set(keys);\n this.#initial.set([...keys]);\n }\n\n /** Запись ищется среди предложенных, а затем среди пришедших входом `chosenEntities`. */\n #entitiesOf(keys: ReadonlyArray<unknown>): TEntity[] {\n const known: ReadonlyArray<TEntity> = [...this.entities(), ...this.chosenEntities()];\n\n return keys\n .map((key: unknown): TEntity | undefined => known.find((item: TEntity): boolean => this.#keyOf(item) === key))\n .filter((item: TEntity | undefined): item is TEntity => item !== undefined);\n }\n\n /** Ключ записи — по имени поля, которое назвал вызывающий. */\n #keyOf(item: TEntity): unknown {\n return item[this.keyExp()];\n }\n\n /** Подпись записи — по имени поля, которое назвал вызывающий. */\n #labelOf(item: TEntity): unknown {\n return item[this.displayExp()];\n }\n}\n","<ng-container rtBlock=\"rt-dynamic-selector\">\n @if (isNothingToChoose()) {\n <rt-empty-state rtElem=\"nothing\" qa-dataid=\"dynamic-selector-nothing\" icon=\"warning\" [title]=\"nothingToChooseLabel()\" />\n } @else {\n <div rtElem=\"content\">\n <rt-dynamic-selector-list\n [rows]=\"rows()\"\n [draggable]=\"draggable()\"\n [buttonRadius]=\"buttonRadius()\"\n [clearIcon]=\"clearIcon()\"\n [titleWrap]=\"titleWrap()\"\n [disabled]=\"isDisabled()\"\n [actionsShown]=\"!invitation()\"\n [resetClearShown]=\"listActionsShown()\"\n [removeShown]=\"removeShown()\"\n [resetDisabled]=\"isResetDisabled()\"\n [clearDisabled]=\"isClearDisabled()\"\n [titleTpl]=\"titleTpl()\"\n [controlsTpl]=\"controlsTpl()\"\n (removed)=\"onRemoved($event)\"\n (moved)=\"onMoved($event)\"\n (resetClicked)=\"onReset()\"\n (cleared)=\"onCleared()\">\n @if (isAddShown()) {\n <button\n rtButton\n theme=\"secondary\"\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"dynamic-selector-add\"\n rtPopoverTrigger=\"manual\"\n #addPopover=\"rtPopover\"\n [rtPopover]=\"popupTpl\"\n [rtPopoverDisabled]=\"isDisabled()\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (click)=\"onAdd(addPopover)\"></button>\n }\n </rt-dynamic-selector-list>\n\n @if (invitation()) {\n <rt-empty-state\n rtElem=\"invitation\"\n qa-dataid=\"dynamic-selector-invitation\"\n [icon]=\"invitationIcon()\"\n [glyph]=\"invitationGlyph()\"\n [description]=\"invitationDescription()\">\n @if (hasOffer()) {\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"dynamic-selector-invitation-add\"\n rtPopoverTrigger=\"manual\"\n #invitationPopover=\"rtPopover\"\n [appearance]=\"invitationButtonAppearance()\"\n [icon]=\"invitationButtonIcon()\"\n [rtPopover]=\"popupTpl\"\n [rtPopoverDisabled]=\"isDisabled()\"\n [label]=\"addTitle()\"\n [attr.aria-label]=\"addTitle()\"\n [disabled]=\"isDisabled()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (click)=\"onAdd(invitationPopover)\"></button>\n }\n </rt-empty-state>\n }\n </div>\n }\n\n <ng-template #popupTpl>\n <rt-dynamic-selector-popup\n [entities]=\"offered()\"\n [keyExp]=\"keyExp()\"\n [displayExp]=\"displayExp()\"\n [mode]=\"mode()\"\n [multiToggleShown]=\"multiToggleShown()\"\n [selectAllShown]=\"selectAllShown()\"\n [localSearch]=\"localSearch()\"\n [lazyLoad]=\"lazyLoad()\"\n [loading]=\"loading()\"\n [fetching]=\"fetching()\"\n [pinnedKeys]=\"pinnedKeys()\"\n [navigateTitle]=\"navigateTitle()\"\n [navigateLink]=\"navigateLink()\"\n [searchTerm]=\"searchTerm()\"\n [searchAppearance]=\"searchAppearance()\"\n [emptyResultsText]=\"emptyResultsText()\"\n (applied)=\"onApplied($event)\"\n (cancelled)=\"onCancelled()\"\n (searchChange)=\"searchChange.emit($event)\"\n (loadMore)=\"loadMore.emit()\"\n (temporaryChoiceChange)=\"temporaryChoiceChange.emit($event)\" />\n </ng-template>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["BEM_BLOCK"],"mappings":"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"}
|