@rolatech/angular-automation 20.2.9-beta.7 → 20.3.0-beta.3

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, DestroyRef, signal, computed, Component } from '@angular/core';
2
+ import { inject, DestroyRef, signal, computed, Component, makeEnvironmentProviders } from '@angular/core';
3
3
  import { AutomationService } from '@rolatech/angular-services';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { RouterLink, ActivatedRoute, Router } from '@angular/router';
@@ -14,6 +14,7 @@ import * as i2 from '@angular/material/form-field';
14
14
  import { MatFormFieldModule } from '@angular/material/form-field';
15
15
  import * as i5 from '@angular/material/checkbox';
16
16
  import { MatCheckboxModule } from '@angular/material/checkbox';
17
+ import { ORGANIZATION_OWNER_ROLES, ORGANIZATION_ADMIN_ROLES, ORGANIZATION_STAFF_ROLES, APPLICATION_OWNER_ROLES, APPLICATION_ADMIN_ROLES, PLATFORM_ADMIN_ROLES, provideRoleAwareFeature, accessMatchGuard } from '@rolatech/angular-auth';
17
18
 
18
19
  // angular-automation/src/lib/ui/automation-ui.util.ts
19
20
  function safeJsonPretty(input) {
@@ -150,12 +151,12 @@ class AutomationManageIndex {
150
151
  return 0;
151
152
  return Math.max(0, Math.min(100, Math.round((done / total) * 100)));
152
153
  }
153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageIndex, isStandalone: true, selector: "rolatech-automation-manage-index", ngImport: i0, template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
154
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageIndex, isStandalone: true, selector: "rolatech-automation-manage-index", ngImport: i0, template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn cursor-pointer\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
155
156
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageIndex, decorators: [{
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageIndex, decorators: [{
157
158
  type: Component,
158
- args: [{ selector: 'rolatech-automation-manage-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
159
+ args: [{ selector: 'rolatech-automation-manage-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn cursor-pointer\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
159
160
  }], ctorParameters: () => [] });
160
161
 
161
162
  class AutomationManageDetail {
@@ -186,12 +187,12 @@ class AutomationManageDetail {
186
187
  this.loading.set(false);
187
188
  });
188
189
  }
189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageDetail, isStandalone: true, selector: "rolatech-automation-manage-detail", ngImport: i0, template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDetail, isStandalone: true, selector: "rolatech-automation-manage-detail", ngImport: i0, template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
191
192
  }
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDetail, decorators: [{
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDetail, decorators: [{
193
194
  type: Component,
194
- args: [{ selector: 'rolatech-automation-manage-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
195
+ args: [{ selector: 'rolatech-automation-manage-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
195
196
  }], ctorParameters: () => [] });
196
197
 
197
198
  class AutomationManageDefinitionIndex {
@@ -225,12 +226,12 @@ class AutomationManageDefinitionIndex {
225
226
  },
226
227
  });
227
228
  }
228
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageDefinitionIndex, isStandalone: true, selector: "rolatech-automation-manage-definition-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
229
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionIndex, isStandalone: true, selector: "rolatech-automation-manage-definition-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
230
231
  }
231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
232
233
  type: Component,
233
- args: [{ selector: 'rolatech-automation-manage-definition-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
234
+ args: [{ selector: 'rolatech-automation-manage-definition-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
234
235
  }], ctorParameters: () => [] });
235
236
 
236
237
  class AutomationManageDefinitionDetail {
@@ -327,12 +328,12 @@ class AutomationManageDefinitionDetail {
327
328
  },
328
329
  });
329
330
  }
330
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
331
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageDefinitionDetail, isStandalone: true, selector: "rolatech-automation-manage-definition-detail", ngImport: i0, template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
331
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
332
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionDetail, isStandalone: true, selector: "rolatech-automation-manage-definition-detail", ngImport: i0, template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
332
333
  }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
334
335
  type: Component,
335
- args: [{ selector: 'rolatech-automation-manage-definition-detail', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
336
+ args: [{ selector: 'rolatech-automation-manage-definition-detail', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
336
337
  }], ctorParameters: () => [] });
337
338
 
338
339
  class AutomationManageExecutionIndex {
@@ -368,12 +369,12 @@ class AutomationManageExecutionIndex {
368
369
  },
369
370
  });
370
371
  }
371
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
372
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageExecutionIndex, isStandalone: true, selector: "rolatech-automation-manage-execution-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
372
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
373
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionIndex, isStandalone: true, selector: "rolatech-automation-manage-execution-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
373
374
  }
374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
375
376
  type: Component,
376
- args: [{ selector: 'rolatech-automation-manage-execution-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
377
+ args: [{ selector: 'rolatech-automation-manage-execution-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
377
378
  }], ctorParameters: () => [] });
378
379
 
379
380
  class AutomationManageExecutionDetail {
@@ -442,12 +443,12 @@ class AutomationManageExecutionDetail {
442
443
  },
443
444
  });
444
445
  }
445
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
446
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageExecutionDetail, isStandalone: true, selector: "rolatech-automation-manage-execution-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
446
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
447
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionDetail, isStandalone: true, selector: "rolatech-automation-manage-execution-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
447
448
  }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
449
450
  type: Component,
450
- args: [{ selector: 'rolatech-automation-manage-execution-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
451
+ args: [{ selector: 'rolatech-automation-manage-execution-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
451
452
  }], ctorParameters: () => [] });
452
453
 
453
454
  class AutomationManageExecutionLog {
@@ -491,12 +492,12 @@ class AutomationManageExecutionLog {
491
492
  },
492
493
  });
493
494
  }
494
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
495
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageExecutionLog, isStandalone: true, selector: "rolatech-automation-manage-execution-log", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
496
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionLog, isStandalone: true, selector: "rolatech-automation-manage-execution-log", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
496
497
  }
497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
498
499
  type: Component,
499
- args: [{ selector: 'rolatech-automation-manage-execution-log', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
500
+ args: [{ selector: 'rolatech-automation-manage-execution-log', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
500
501
  }], ctorParameters: () => [] });
501
502
 
502
503
  class AutomationManageScheduleIndex {
@@ -536,12 +537,12 @@ class AutomationManageScheduleIndex {
536
537
  },
537
538
  });
538
539
  }
539
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
540
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageScheduleIndex, isStandalone: true, selector: "rolatech-automation-manage-schedule-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
540
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
541
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleIndex, isStandalone: true, selector: "rolatech-automation-manage-schedule-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
541
542
  }
542
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
543
544
  type: Component,
544
- args: [{ selector: 'rolatech-automation-manage-schedule-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
545
+ args: [{ selector: 'rolatech-automation-manage-schedule-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
545
546
  }], ctorParameters: () => [] });
546
547
 
547
548
  class AutomationManageScheduleDetail {
@@ -709,12 +710,12 @@ class AutomationManageScheduleDetail {
709
710
  },
710
711
  });
711
712
  }
712
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
713
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageScheduleDetail, isStandalone: true, selector: "rolatech-automation-manage-schedule-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleDetail, isStandalone: true, selector: "rolatech-automation-manage-schedule-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
714
715
  }
715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
716
717
  type: Component,
717
- args: [{ selector: 'rolatech-automation-manage-schedule-detail', imports: [RouterLink, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatButtonModule, MatCheckboxModule], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
718
+ args: [{ selector: 'rolatech-automation-manage-schedule-detail', imports: [RouterLink, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatButtonModule, MatCheckboxModule], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
718
719
  }], ctorParameters: () => [] });
719
720
 
720
721
  class AutomationManageDefinitionCreate {
@@ -762,12 +763,12 @@ class AutomationManageDefinitionCreate {
762
763
  },
763
764
  });
764
765
  }
765
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
766
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageDefinitionCreate, isStandalone: true, selector: "rolatech-automation-manage-definition-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
767
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionCreate, isStandalone: true, selector: "rolatech-automation-manage-definition-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
767
768
  }
768
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
769
770
  type: Component,
770
- args: [{ selector: 'rolatech-automation-manage-definition-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
771
+ args: [{ selector: 'rolatech-automation-manage-definition-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
771
772
  }] });
772
773
 
773
774
  class AutomationManageScheduleCreate {
@@ -838,12 +839,12 @@ class AutomationManageScheduleCreate {
838
839
  },
839
840
  });
840
841
  }
841
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
842
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AutomationManageScheduleCreate, isStandalone: true, selector: "rolatech-automation-manage-schedule-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
842
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
843
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleCreate, isStandalone: true, selector: "rolatech-automation-manage-schedule-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
843
844
  }
844
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
845
846
  type: Component,
846
- args: [{ selector: 'rolatech-automation-manage-schedule-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
847
+ args: [{ selector: 'rolatech-automation-manage-schedule-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
847
848
  }], ctorParameters: () => [] });
848
849
 
849
850
  const automationManageRoutes = [
@@ -860,6 +861,11 @@ const automationManageRoutes = [
860
861
  { path: ':id', component: AutomationManageDetail },
861
862
  ];
862
863
 
864
+ var automationManage_routes = /*#__PURE__*/Object.freeze({
865
+ __proto__: null,
866
+ automationManageRoutes: automationManageRoutes
867
+ });
868
+
863
869
  // angular-automation/src/lib/models/automation.models.ts
864
870
  const SCHEDULE_CRON_META = [
865
871
  { value: 'EVERY_5_MINUTES', label: 'Every 5 minutes', description: 'Runs every 5 minutes' },
@@ -869,9 +875,68 @@ const SCHEDULE_CRON_META = [
869
875
  { value: 'WEEKLY', label: 'Weekly', description: 'Runs once per week' },
870
876
  ];
871
877
 
878
+ const AUTOMATION_ACCESS = {
879
+ authenticated: true,
880
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
881
+ anyApplicationRole: [...APPLICATION_OWNER_ROLES, ...APPLICATION_ADMIN_ROLES],
882
+ anyOrganizationRole: [...ORGANIZATION_OWNER_ROLES, ...ORGANIZATION_ADMIN_ROLES, ...ORGANIZATION_STAFF_ROLES],
883
+ };
884
+ function provideAngularAutomationFeature() {
885
+ return makeEnvironmentProviders([
886
+ provideRoleAwareFeature({
887
+ routes: [
888
+ {
889
+ path: 'automations',
890
+ canMatch: [accessMatchGuard(AUTOMATION_ACCESS)],
891
+ loadChildren: () => Promise.resolve().then(function () { return automationManage_routes; }).then((m) => m.automationManageRoutes),
892
+ },
893
+ ],
894
+ navigation: [
895
+ {
896
+ id: 'automation',
897
+ title: 'Automation',
898
+ icon: 'smart_toy',
899
+ order: 330,
900
+ access: AUTOMATION_ACCESS,
901
+ children: [
902
+ {
903
+ id: 'automation-overview',
904
+ title: 'Automations',
905
+ icon: 'smart_toy',
906
+ routerLink: '/automations',
907
+ access: AUTOMATION_ACCESS,
908
+ },
909
+ {
910
+ id: 'automation-definitions',
911
+ title: 'Definitions',
912
+ icon: 'account_tree',
913
+ routerLink: '/automations/definitions',
914
+ access: AUTOMATION_ACCESS,
915
+ },
916
+ {
917
+ id: 'automation-schedules',
918
+ title: 'Schedules',
919
+ icon: 'event_repeat',
920
+ routerLink: '/automations/schedules',
921
+ access: AUTOMATION_ACCESS,
922
+ },
923
+ {
924
+ id: 'automation-executions',
925
+ title: 'Executions',
926
+ icon: 'play_circle',
927
+ routerLink: '/automations/executions',
928
+ access: AUTOMATION_ACCESS,
929
+ },
930
+ ],
931
+ },
932
+ ],
933
+ }),
934
+ ]);
935
+ }
936
+
872
937
  /**
873
938
  * Generated bundle index. Do not edit.
874
939
  */
875
940
 
876
- export { SCHEDULE_CRON_META, automationManageRoutes };
941
+ export { SCHEDULE_CRON_META, automationManageRoutes, provideAngularAutomationFeature };
877
942
  //# sourceMappingURL=rolatech-angular-automation.mjs.map