@rolatech/angular-automation 20.2.7-beta.2 → 20.2.8-beta.10

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.
@@ -150,10 +150,10 @@ class AutomationManageIndex {
150
150
  return 0;
151
151
  return Math.max(0, Math.min(100, Math.round((done / total) * 100)));
152
152
  }
153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
155
155
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageIndex, decorators: [{
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageIndex, decorators: [{
157
157
  type: Component,
158
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
159
  }], ctorParameters: () => [] });
@@ -186,10 +186,10 @@ class AutomationManageDetail {
186
186
  this.loading.set(false);
187
187
  });
188
188
  }
189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
189
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
191
191
  }
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDetail, decorators: [{
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDetail, decorators: [{
193
193
  type: Component,
194
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
195
  }], ctorParameters: () => [] });
@@ -225,10 +225,10 @@ class AutomationManageDefinitionIndex {
225
225
  },
226
226
  });
227
227
  }
228
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
228
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
230
230
  }
231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
231
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
232
232
  type: Component,
233
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
234
  }], ctorParameters: () => [] });
@@ -327,10 +327,10 @@ class AutomationManageDefinitionDetail {
327
327
  },
328
328
  });
329
329
  }
330
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
331
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
331
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
332
332
  }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
334
334
  type: Component,
335
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
336
  }], ctorParameters: () => [] });
@@ -368,10 +368,10 @@ class AutomationManageExecutionIndex {
368
368
  },
369
369
  });
370
370
  }
371
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
372
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
371
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
372
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
373
373
  }
374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
375
375
  type: Component,
376
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
377
  }], ctorParameters: () => [] });
@@ -442,10 +442,10 @@ class AutomationManageExecutionDetail {
442
442
  },
443
443
  });
444
444
  }
445
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
446
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
445
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
446
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
447
447
  }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
449
449
  type: Component,
450
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
451
  }], ctorParameters: () => [] });
@@ -491,10 +491,10 @@ class AutomationManageExecutionLog {
491
491
  },
492
492
  });
493
493
  }
494
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
495
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
495
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
496
496
  }
497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
498
498
  type: Component,
499
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
500
  }], ctorParameters: () => [] });
@@ -536,10 +536,10 @@ class AutomationManageScheduleIndex {
536
536
  },
537
537
  });
538
538
  }
539
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
540
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
539
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
540
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
541
541
  }
542
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
543
543
  type: Component,
544
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
545
  }], ctorParameters: () => [] });
@@ -709,10 +709,10 @@ class AutomationManageScheduleDetail {
709
709
  },
710
710
  });
711
711
  }
712
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
713
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
712
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
713
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
714
714
  }
715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
716
716
  type: Component,
717
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
718
  }], ctorParameters: () => [] });
@@ -759,10 +759,10 @@ class AutomationManageDefinitionCreate {
759
759
  },
760
760
  });
761
761
  }
762
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
763
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
762
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
763
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
764
764
  }
765
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
765
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
766
766
  type: Component,
767
767
  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"] }]
768
768
  }] });
@@ -832,10 +832,10 @@ class AutomationManageScheduleCreate {
832
832
  },
833
833
  });
834
834
  }
835
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
836
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", 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"] }] });
835
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
836
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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"] }] });
837
837
  }
838
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
838
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
839
839
  type: Component,
840
840
  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"] }]
841
841
  }], ctorParameters: () => [] });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolatech/angular-automation",
3
- "version": "20.2.7-beta.2",
3
+ "version": "20.2.8-beta.10",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",