@rt-tools/ui-kit-v2 0.19.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/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +14 -2
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +15 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-v2-0.19.1.tgz +0 -0
- package/src/lib/components/ai-run-status/CONTEXT.md +6 -1
- package/src/lib/components/ai-run-status/rt-ai-run-status.component.scss +41 -2
- package/src/lib/components/data-table/CONTEXT.md +5 -0
- package/src/lib/components/select/CONTEXT.md +2 -2
- package/types/rt-tools-ui-kit-v2-core.d.ts +1 -1
- package/types/rt-tools-ui-kit-v2-data-table.d.ts +7 -0
- package/types/rt-tools-ui-kit-v2-select.d.ts +6 -0
- package/rt-tools-ui-kit-v2-0.19.0.tgz +0 -0
|
@@ -65,7 +65,7 @@ class RtAiRunStatusComponent {
|
|
|
65
65
|
this.expanded.set(!this.expanded());
|
|
66
66
|
}
|
|
67
67
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtAiRunStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
68
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtAiRunStatusComponent, isStandalone: true, selector: "rt-ai-run-status", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { classAttribute: "rt-ai-run-status" }, ngImport: i0, template: "<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-ai-run-status{display:block}rt-ai-run-status .rt-ai-run-status{--rt-ai-run-status-radius: var(--rt-radius-sm);--rt-ai-run-status-focus-shadow: var(--rt-shadow-focus-ring);--rt-ai-run-status-shimmer-duration:
|
|
68
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtAiRunStatusComponent, isStandalone: true, selector: "rt-ai-run-status", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { classAttribute: "rt-ai-run-status" }, ngImport: i0, template: "<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-ai-run-status{display:block}rt-ai-run-status .rt-ai-run-status{--rt-ai-run-status-radius: var(--rt-radius-sm);--rt-ai-run-status-focus-shadow: var(--rt-shadow-focus-ring);--rt-ai-run-status-shimmer-duration: 2.4s;--rt-ai-run-status-shimmer-from: var(--rt-color-text-muted);--rt-ai-run-status-shimmer-to: var(--rt-color-action-primary-on-surface);--rt-ai-run-status-shimmer-2: var(--rt-info-500);--rt-ai-run-status-shimmer-3: var(--rt-success-400);--rt-ai-run-status-shimmer-4: var(--rt-amber-400);display:flex;flex-direction:column;gap:var(--rt-space-2xs)}rt-ai-run-status .rt-ai-run-status__row{display:inline-flex;align-items:center;align-self:flex-start;padding:var(--rt-space-2xs) 0;border:0;border-radius:var(--rt-ai-run-status-radius);margin:0;background:transparent;color:inherit;font:inherit;gap:var(--rt-space-sm);text-align:start}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row{cursor:pointer}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row:focus-visible{box-shadow:var(--rt-ai-run-status-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row:hover .rt-ai-run-status__chevron{color:var(--rt-color-text-primary)}rt-ai-run-status .rt-ai-run-status__mark{display:inline-flex;flex:none;align-items:center;justify-content:center;block-size:16px;inline-size:16px}rt-ai-run-status .rt-ai-run-status__mark .rt-spinner{--rt-spinner-progress-color: currentcolor}rt-ai-run-status .rt-ai-run-status--state--running .rt-ai-run-status__mark{animation:rt-ai-run-status-hue var(--rt-ai-run-status-shimmer-duration) linear infinite;color:var(--rt-ai-run-status-shimmer-to)}rt-ai-run-status .rt-ai-run-status__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);line-height:var(--rt-leading-snug)}rt-ai-run-status .rt-ai-run-status__label--state--running{animation:rt-ai-run-status-shimmer var(--rt-ai-run-status-shimmer-duration) linear infinite;background:linear-gradient(90deg,var(--rt-ai-run-status-shimmer-from) 0%,var(--rt-ai-run-status-shimmer-to) 20%,var(--rt-ai-run-status-shimmer-2) 35%,var(--rt-ai-run-status-shimmer-3) 50%,var(--rt-ai-run-status-shimmer-4) 65%,var(--rt-ai-run-status-shimmer-from) 80%,var(--rt-ai-run-status-shimmer-from) 100%);background-clip:text;background-size:200% 100%;color:transparent}rt-ai-run-status .rt-ai-run-status__label--state--stopped{color:var(--rt-color-text-muted)}rt-ai-run-status .rt-ai-run-status__label--state--failed{color:var(--rt-color-action-danger-on-surface)}rt-ai-run-status .rt-ai-run-status__meta{flex:none;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug)}rt-ai-run-status .rt-ai-run-status__chevron{flex:none;color:var(--rt-color-text-muted)}rt-ai-run-status .rt-ai-run-status__steps{padding-inline-start:var(--rt-space-2xs)}@keyframes rt-ai-run-status-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@keyframes rt-ai-run-status-hue{0%,to{color:var(--rt-ai-run-status-shimmer-to)}25%{color:var(--rt-ai-run-status-shimmer-2)}50%{color:var(--rt-ai-run-status-shimmer-3)}75%{color:var(--rt-ai-run-status-shimmer-4)}}@media(prefers-reduced-motion:reduce){.rt-ai-run-status--state--running .rt-ai-run-status__mark{animation:none}.rt-ai-run-status__label--state--running{animation:none;background:none;color:var(--rt-ai-run-status-shimmer-from)}}}\n"], dependencies: [{ kind: "directive", type:
|
|
69
69
|
// angular
|
|
70
70
|
NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type:
|
|
71
71
|
// standalone components / directives
|
|
@@ -86,7 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
86
86
|
RtTooltipDirective,
|
|
87
87
|
], host: {
|
|
88
88
|
class: BEM_BLOCK,
|
|
89
|
-
}, template: "<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-ai-run-status{display:block}rt-ai-run-status .rt-ai-run-status{--rt-ai-run-status-radius: var(--rt-radius-sm);--rt-ai-run-status-focus-shadow: var(--rt-shadow-focus-ring);--rt-ai-run-status-shimmer-duration:
|
|
89
|
+
}, template: "<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-ai-run-status{display:block}rt-ai-run-status .rt-ai-run-status{--rt-ai-run-status-radius: var(--rt-radius-sm);--rt-ai-run-status-focus-shadow: var(--rt-shadow-focus-ring);--rt-ai-run-status-shimmer-duration: 2.4s;--rt-ai-run-status-shimmer-from: var(--rt-color-text-muted);--rt-ai-run-status-shimmer-to: var(--rt-color-action-primary-on-surface);--rt-ai-run-status-shimmer-2: var(--rt-info-500);--rt-ai-run-status-shimmer-3: var(--rt-success-400);--rt-ai-run-status-shimmer-4: var(--rt-amber-400);display:flex;flex-direction:column;gap:var(--rt-space-2xs)}rt-ai-run-status .rt-ai-run-status__row{display:inline-flex;align-items:center;align-self:flex-start;padding:var(--rt-space-2xs) 0;border:0;border-radius:var(--rt-ai-run-status-radius);margin:0;background:transparent;color:inherit;font:inherit;gap:var(--rt-space-sm);text-align:start}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row{cursor:pointer}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row:focus-visible{box-shadow:var(--rt-ai-run-status-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-ai-run-status .rt-ai-run-status button.rt-ai-run-status__row:hover .rt-ai-run-status__chevron{color:var(--rt-color-text-primary)}rt-ai-run-status .rt-ai-run-status__mark{display:inline-flex;flex:none;align-items:center;justify-content:center;block-size:16px;inline-size:16px}rt-ai-run-status .rt-ai-run-status__mark .rt-spinner{--rt-spinner-progress-color: currentcolor}rt-ai-run-status .rt-ai-run-status--state--running .rt-ai-run-status__mark{animation:rt-ai-run-status-hue var(--rt-ai-run-status-shimmer-duration) linear infinite;color:var(--rt-ai-run-status-shimmer-to)}rt-ai-run-status .rt-ai-run-status__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);line-height:var(--rt-leading-snug)}rt-ai-run-status .rt-ai-run-status__label--state--running{animation:rt-ai-run-status-shimmer var(--rt-ai-run-status-shimmer-duration) linear infinite;background:linear-gradient(90deg,var(--rt-ai-run-status-shimmer-from) 0%,var(--rt-ai-run-status-shimmer-to) 20%,var(--rt-ai-run-status-shimmer-2) 35%,var(--rt-ai-run-status-shimmer-3) 50%,var(--rt-ai-run-status-shimmer-4) 65%,var(--rt-ai-run-status-shimmer-from) 80%,var(--rt-ai-run-status-shimmer-from) 100%);background-clip:text;background-size:200% 100%;color:transparent}rt-ai-run-status .rt-ai-run-status__label--state--stopped{color:var(--rt-color-text-muted)}rt-ai-run-status .rt-ai-run-status__label--state--failed{color:var(--rt-color-action-danger-on-surface)}rt-ai-run-status .rt-ai-run-status__meta{flex:none;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug)}rt-ai-run-status .rt-ai-run-status__chevron{flex:none;color:var(--rt-color-text-muted)}rt-ai-run-status .rt-ai-run-status__steps{padding-inline-start:var(--rt-space-2xs)}@keyframes rt-ai-run-status-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@keyframes rt-ai-run-status-hue{0%,to{color:var(--rt-ai-run-status-shimmer-to)}25%{color:var(--rt-ai-run-status-shimmer-2)}50%{color:var(--rt-ai-run-status-shimmer-3)}75%{color:var(--rt-ai-run-status-shimmer-4)}}@media(prefers-reduced-motion:reduce){.rt-ai-run-status--state--running .rt-ai-run-status__mark{animation:none}.rt-ai-run-status__label--state--running{animation:none;background:none;color:var(--rt-ai-run-status-shimmer-from)}}}\n"] }]
|
|
90
90
|
}], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: false }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }] } });
|
|
91
91
|
|
|
92
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-ai-run-status.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.ts","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.html","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-tools-ui-kit-v2-ai-run-status.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n model,\n ModelSignal,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { IRtTimeline, RtTimelineComponent } from '@rt-tools/ui-kit-v2/timeline';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { IRtAiRunStatus } from './rt-ai-run-status.model';\n\nconst BEM_BLOCK: string = 'rt-ai-run-status';\n\n/** Значок и его цвет по состоянию; у `running` значка нет — на его месте крутилка. */\nconst MARKS: Readonly<Record<Exclude<IRtAiRunStatus.State, 'running'>, { name: IRtIcon.Name; color: IRtIcon.Color }>> = {\n done: { name: 'check-circle', color: 'success' },\n stopped: { name: 'times-circle', color: 'muted' },\n failed: { name: 'exclamation-circle', color: 'danger' },\n};\n\nlet runStatusIdSeed: number = 0;\n\nfunction nextRunStatusId(): number {\n runStatusIdSeed += 1;\n return runStatusIdSeed;\n}\n\n/**\n * Строка хода работы ИИ-ассистента: значок состояния, подпись текущего шага или итога, мета\n * (время, число шагов) и раскрытие списка пройденных шагов. Пока модель работает, по подписи\n * бежит блик; при `prefers-reduced-motion` подпись стоит ровным цветом.\n *\n * Компонент презентационный: состояние, подпись и шаги приходят готовыми, разбор потока\n * событий модели остаётся в приложении.\n */\n@Component({\n selector: 'rt-ai-run-status',\n templateUrl: './rt-ai-run-status.component.html',\n styleUrl: './rt-ai-run-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtSpinnerComponent,\n RtTimelineComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtAiRunStatusComponent {\n readonly #t_aiShowSteps: Signal<string> = rtKitLabel('aiShowSteps');\n readonly #t_aiHideSteps: Signal<string> = rtKitLabel('aiHideSteps');\n\n protected readonly stepsId: string = `rt-ai-run-status-steps-${nextRunStatusId()}`;\n\n protected readonly hasSteps: Signal<boolean> = computed((): boolean => this.steps().length > 0);\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.hasSteps() && this.expanded());\n\n protected readonly mark: Signal<{ name: IRtIcon.Name; color: IRtIcon.Color } | null> = computed(\n (): { name: IRtIcon.Name; color: IRtIcon.Color } | null => {\n const state: IRtAiRunStatus.State = this.state();\n return state === 'running' ? null : MARKS[state];\n }\n );\n\n protected readonly toggleLabel: Signal<string> = computed((): string =>\n this.isOpen() ? this.#t_aiHideSteps() : this.#t_aiShowSteps()\n );\n\n public readonly state: InputSignal<IRtAiRunStatus.State> = input.required<IRtAiRunStatus.State>();\n\n /** Подпись: текущий шаг, пока модель работает, или итог — «Worked for 31s». */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Вторичная строка справа от подписи: время шага или число шагов. Пусто — не рисуется. */\n public readonly meta: InputSignal<string> = input<string>('');\n\n /** Пройденные шаги. Пустой список — строку нельзя раскрыть. */\n public readonly steps: InputSignal<readonly IRtTimeline.Step[]> = input<readonly IRtTimeline.Step[]>([]);\n\n /** Раскрыт ли список шагов. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n protected onToggle(): void {\n this.expanded.set(!this.expanded());\n }\n}\n","<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAuBA,MAAM,SAAS,GAAW,kBAAkB;AAE5C;AACA,MAAM,KAAK,GAA6G;IACpH,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;IAChD,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;CAC1D;AAED,IAAI,eAAe,GAAW,CAAC;AAE/B,SAAS,eAAe,GAAA;IACpB,eAAe,IAAI,CAAC;AACpB,IAAA,OAAO,eAAe;AAC1B;AAEA;;;;;;;AAOG;MAwBU,sBAAsB,CAAA;AAvBnC,IAAA,WAAA,GAAA;AAwBa,QAAA,IAAA,CAAA,cAAc,GAAmB,UAAU,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAA,CAAA,cAAc,GAAmB,UAAU,CAAC,aAAa,CAAC;AAEhD,QAAA,IAAA,CAAA,OAAO,GAAW,CAAA,uBAAA,EAA0B,eAAe,EAAE,EAAE;AAE/D,QAAA,IAAA,CAAA,QAAQ,GAAoB,QAAQ,CAAC,MAAe,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;qFAAC;AAE5E,QAAA,IAAA,CAAA,MAAM,GAAoB,QAAQ,CAAC,MAAe,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;mFAAC;AAErF,QAAA,IAAA,CAAA,IAAI,GAAgE,QAAQ,CAC3F,MAA0D;AACtD,YAAA,MAAM,KAAK,GAAyB,IAAI,CAAC,KAAK,EAAE;AAChD,YAAA,OAAO,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACpD,CAAC;iFACJ;QAEkB,IAAA,CAAA,WAAW,GAAmB,QAAQ,CAAC,MACtD,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;wFAChE;QAEe,IAAA,CAAA,KAAK,GAAsC,KAAK,CAAC,QAAQ;kFAAwB;;QAGjF,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAC,QAAQ;kFAAU;;QAGrD,IAAA,CAAA,IAAI,GAAwB,KAAK,CAAS,EAAE;iFAAC;;QAG7C,IAAA,CAAA,KAAK,GAA6C,KAAK,CAA8B,EAAE;kFAAC;;QAGxF,IAAA,CAAA,QAAQ,GAAyB,KAAK,CAAU,KAAK;qFAAC;AAKzE,IAAA;AArCY,IAAA,cAAc;AACd,IAAA,cAAc;IAiCb,QAAQ,GAAA;QACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvC;8GArCS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2wBCtEnC,+hDAqCA,EAAA,MAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-ai-run-status.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.ts","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.html","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-tools-ui-kit-v2-ai-run-status.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n model,\n ModelSignal,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { IRtTimeline, RtTimelineComponent } from '@rt-tools/ui-kit-v2/timeline';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { IRtAiRunStatus } from './rt-ai-run-status.model';\n\nconst BEM_BLOCK: string = 'rt-ai-run-status';\n\n/** Значок и его цвет по состоянию; у `running` значка нет — на его месте крутилка. */\nconst MARKS: Readonly<Record<Exclude<IRtAiRunStatus.State, 'running'>, { name: IRtIcon.Name; color: IRtIcon.Color }>> = {\n done: { name: 'check-circle', color: 'success' },\n stopped: { name: 'times-circle', color: 'muted' },\n failed: { name: 'exclamation-circle', color: 'danger' },\n};\n\nlet runStatusIdSeed: number = 0;\n\nfunction nextRunStatusId(): number {\n runStatusIdSeed += 1;\n return runStatusIdSeed;\n}\n\n/**\n * Строка хода работы ИИ-ассистента: значок состояния, подпись текущего шага или итога, мета\n * (время, число шагов) и раскрытие списка пройденных шагов. Пока модель работает, по подписи\n * бежит блик; при `prefers-reduced-motion` подпись стоит ровным цветом.\n *\n * Компонент презентационный: состояние, подпись и шаги приходят готовыми, разбор потока\n * событий модели остаётся в приложении.\n */\n@Component({\n selector: 'rt-ai-run-status',\n templateUrl: './rt-ai-run-status.component.html',\n styleUrl: './rt-ai-run-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtSpinnerComponent,\n RtTimelineComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtAiRunStatusComponent {\n readonly #t_aiShowSteps: Signal<string> = rtKitLabel('aiShowSteps');\n readonly #t_aiHideSteps: Signal<string> = rtKitLabel('aiHideSteps');\n\n protected readonly stepsId: string = `rt-ai-run-status-steps-${nextRunStatusId()}`;\n\n protected readonly hasSteps: Signal<boolean> = computed((): boolean => this.steps().length > 0);\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.hasSteps() && this.expanded());\n\n protected readonly mark: Signal<{ name: IRtIcon.Name; color: IRtIcon.Color } | null> = computed(\n (): { name: IRtIcon.Name; color: IRtIcon.Color } | null => {\n const state: IRtAiRunStatus.State = this.state();\n return state === 'running' ? null : MARKS[state];\n }\n );\n\n protected readonly toggleLabel: Signal<string> = computed((): string =>\n this.isOpen() ? this.#t_aiHideSteps() : this.#t_aiShowSteps()\n );\n\n public readonly state: InputSignal<IRtAiRunStatus.State> = input.required<IRtAiRunStatus.State>();\n\n /** Подпись: текущий шаг, пока модель работает, или итог — «Worked for 31s». */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Вторичная строка справа от подписи: время шага или число шагов. Пусто — не рисуется. */\n public readonly meta: InputSignal<string> = input<string>('');\n\n /** Пройденные шаги. Пустой список — строку нельзя раскрыть. */\n public readonly steps: InputSignal<readonly IRtTimeline.Step[]> = input<readonly IRtTimeline.Step[]>([]);\n\n /** Раскрыт ли список шагов. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n protected onToggle(): void {\n this.expanded.set(!this.expanded());\n }\n}\n","<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -183,7 +183,7 @@ const RT_KIT_LABELS_EN = {
|
|
|
183
183
|
dataTableFilterOperatorGreaterThan: 'More than',
|
|
184
184
|
dataTableFilterOperatorLessThan: 'Less than',
|
|
185
185
|
dataTableFilterOperatorNotEquals: 'Not equal',
|
|
186
|
-
dataTableFilterSelectPlaceholder: '
|
|
186
|
+
dataTableFilterSelectPlaceholder: 'Choose filter',
|
|
187
187
|
dataTableFilterValuePlaceholder: 'Type in filter value',
|
|
188
188
|
dataTableSelectPage: 'Select the rows of this page',
|
|
189
189
|
dataTableSelectRow: 'Select row',
|