@rolatech/angular-automation 20.3.2-beta.4 → 20.3.3-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,10 +67,10 @@ function trackByCode(index, item) {
67
67
  class AutomationManageIndex {
68
68
  svc = inject(AutomationService);
69
69
  destroyRef = inject(DestroyRef);
70
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
71
- definitions = signal([], ...(ngDevMode ? [{ debugName: "definitions" }] : []));
72
- schedules = signal([], ...(ngDevMode ? [{ debugName: "schedules" }] : []));
73
- executions = signal([], ...(ngDevMode ? [{ debugName: "executions" }] : []));
70
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
71
+ definitions = signal([], ...(ngDevMode ? [{ debugName: "definitions" }] : /* istanbul ignore next */ []));
72
+ schedules = signal([], ...(ngDevMode ? [{ debugName: "schedules" }] : /* istanbul ignore next */ []));
73
+ executions = signal([], ...(ngDevMode ? [{ debugName: "executions" }] : /* istanbul ignore next */ []));
74
74
  isoToLocal = isoToLocal;
75
75
  badgeClass = badgeClass;
76
76
  trackByStableId = trackByStableId;
@@ -101,49 +101,49 @@ class AutomationManageIndex {
101
101
  });
102
102
  }
103
103
  // --- computed helpers (cards) ---
104
- defCount = computed(() => this.definitions().length, ...(ngDevMode ? [{ debugName: "defCount" }] : []));
105
- defEnabledCount = computed(() => this.definitions().filter((d) => !!d.enabled).length, ...(ngDevMode ? [{ debugName: "defEnabledCount" }] : []));
104
+ defCount = computed(() => this.definitions().length, ...(ngDevMode ? [{ debugName: "defCount" }] : /* istanbul ignore next */ []));
105
+ defEnabledCount = computed(() => this.definitions().filter((d) => !!d.enabled).length, ...(ngDevMode ? [{ debugName: "defEnabledCount" }] : /* istanbul ignore next */ []));
106
106
  defLastUpdated = computed(() => {
107
107
  const d = [...this.definitions()]
108
108
  .filter((x) => x.updatedAt)
109
109
  .sort((a, b) => String(b.updatedAt).localeCompare(String(a.updatedAt)))[0];
110
110
  return d?.updatedAt ?? '—';
111
- }, ...(ngDevMode ? [{ debugName: "defLastUpdated" }] : []));
111
+ }, ...(ngDevMode ? [{ debugName: "defLastUpdated" }] : /* istanbul ignore next */ []));
112
112
  defHint = computed(() => {
113
113
  const d = this.definitions()[0];
114
114
  return d ? `Latest: ${d.code} → ${d.handlerKey}` : 'Create a definition to wire a Spring handler bean.';
115
- }, ...(ngDevMode ? [{ debugName: "defHint" }] : []));
116
- scheduleCount = computed(() => this.schedules().length, ...(ngDevMode ? [{ debugName: "scheduleCount" }] : []));
117
- scheduleEnabledCount = computed(() => this.schedules().filter((s) => !!s.enabled).length, ...(ngDevMode ? [{ debugName: "scheduleEnabledCount" }] : []));
115
+ }, ...(ngDevMode ? [{ debugName: "defHint" }] : /* istanbul ignore next */ []));
116
+ scheduleCount = computed(() => this.schedules().length, ...(ngDevMode ? [{ debugName: "scheduleCount" }] : /* istanbul ignore next */ []));
117
+ scheduleEnabledCount = computed(() => this.schedules().filter((s) => !!s.enabled).length, ...(ngDevMode ? [{ debugName: "scheduleEnabledCount" }] : /* istanbul ignore next */ []));
118
118
  nextRunLabel = computed(() => {
119
119
  const s = [...this.schedules()]
120
120
  .filter((x) => !!x.nextRunAt)
121
121
  .sort((a, b) => String(a.nextRunAt).localeCompare(String(b.nextRunAt)))[0];
122
122
  return s?.nextRunAt ? isoToLocal(s.nextRunAt) : '—';
123
- }, ...(ngDevMode ? [{ debugName: "nextRunLabel" }] : []));
123
+ }, ...(ngDevMode ? [{ debugName: "nextRunLabel" }] : /* istanbul ignore next */ []));
124
124
  scheduleHint = computed(() => {
125
125
  const s = this.schedules()[0];
126
126
  return s ? `Example: ${s.name} (${s.schedule})` : 'Create schedules to run definitions automatically.';
127
- }, ...(ngDevMode ? [{ debugName: "scheduleHint" }] : []));
128
- execCount = computed(() => this.executions().length, ...(ngDevMode ? [{ debugName: "execCount" }] : []));
129
- execRunningCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'RUNNING').length, ...(ngDevMode ? [{ debugName: "execRunningCount" }] : []));
130
- execQueuedCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'QUEUED').length, ...(ngDevMode ? [{ debugName: "execQueuedCount" }] : []));
131
- execFailedCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'FAILED').length, ...(ngDevMode ? [{ debugName: "execFailedCount" }] : []));
132
- execSucceededCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'SUCCEEDED').length, ...(ngDevMode ? [{ debugName: "execSucceededCount" }] : []));
127
+ }, ...(ngDevMode ? [{ debugName: "scheduleHint" }] : /* istanbul ignore next */ []));
128
+ execCount = computed(() => this.executions().length, ...(ngDevMode ? [{ debugName: "execCount" }] : /* istanbul ignore next */ []));
129
+ execRunningCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'RUNNING').length, ...(ngDevMode ? [{ debugName: "execRunningCount" }] : /* istanbul ignore next */ []));
130
+ execQueuedCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'QUEUED').length, ...(ngDevMode ? [{ debugName: "execQueuedCount" }] : /* istanbul ignore next */ []));
131
+ execFailedCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'FAILED').length, ...(ngDevMode ? [{ debugName: "execFailedCount" }] : /* istanbul ignore next */ []));
132
+ execSucceededCount = computed(() => this.executions().filter((e) => (e.status ?? '').toUpperCase() === 'SUCCEEDED').length, ...(ngDevMode ? [{ debugName: "execSucceededCount" }] : /* istanbul ignore next */ []));
133
133
  execLastUpdated = computed(() => {
134
134
  const e = [...this.executions()]
135
135
  .filter((x) => x.queuedAt || x.createdAt)
136
136
  .sort((a, b) => String(b.queuedAt ?? b.createdAt ?? '').localeCompare(String(a.queuedAt ?? a.createdAt ?? '')))[0];
137
137
  return e?.queuedAt ? isoToLocal(e.queuedAt) : (e?.createdAt ?? '—');
138
- }, ...(ngDevMode ? [{ debugName: "execLastUpdated" }] : []));
138
+ }, ...(ngDevMode ? [{ debugName: "execLastUpdated" }] : /* istanbul ignore next */ []));
139
139
  execHint = computed(() => {
140
140
  const e = this.executions()[0];
141
141
  return e ? `Latest: ${e.definitionCode ?? e.definitionId} • ${e.status}` : 'Trigger a run from a definition/schedule.';
142
- }, ...(ngDevMode ? [{ debugName: "execHint" }] : []));
142
+ }, ...(ngDevMode ? [{ debugName: "execHint" }] : /* istanbul ignore next */ []));
143
143
  recentExecutions = computed(() => {
144
144
  // already requested 20, keep top 8
145
145
  return (this.executions() ?? []).slice(0, 8);
146
- }, ...(ngDevMode ? [{ debugName: "recentExecutions" }] : []));
146
+ }, ...(ngDevMode ? [{ debugName: "recentExecutions" }] : /* istanbul ignore next */ []));
147
147
  progressPct(e) {
148
148
  const total = e.total ?? 0;
149
149
  const done = e.processed ?? 0;
@@ -151,10 +151,10 @@ class AutomationManageIndex {
151
151
  return 0;
152
152
  return Math.max(0, Math.min(100, Math.round((done / total) * 100)));
153
153
  }
154
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageIndex, isStandalone: true, selector: "rolatech-automation-manage-index", ngImport: i0, template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn cursor-pointer\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
154
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageIndex, isStandalone: true, selector: "rolatech-automation-manage-index", ngImport: i0, template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn cursor-pointer\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
156
156
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageIndex, decorators: [{
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageIndex, decorators: [{
158
158
  type: Component,
159
159
  args: [{ selector: 'rolatech-automation-manage-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-6 rt-page\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <div class=\"flex items-center gap-3\">\n <div class=\"h-11 w-11 rounded-2xl rt-soft grid place-items-center text-sm font-semibold\">A</div>\n <div>\n <h1 class=\"text-2xl font-semibold leading-tight\">Automation Center</h1>\n <p class=\"text-sm rt-muted\">Manage definitions, schedules, and executions (run history + logs).</p>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"executions\"> View executions </a>\n </div>\n </div>\n\n <!-- Top cards -->\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <!-- Definitions -->\n <a routerLink=\"definitions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Definitions</div>\n <div class=\"text-xs rt-muted\">Handlers + default input JSON</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\u2699\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ defCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ defEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Last updated:\n <span class=\"rt-strong font-medium\">{{ defLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ defHint() }}</div>\n </a>\n\n <!-- Schedules -->\n <a routerLink=\"schedules\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Schedules</div>\n <div class=\"text-xs rt-muted\">Cron presets + next run times</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDDD3\uFE0F</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ scheduleCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Enabled: <span class=\"font-medium rt-strong\">{{ scheduleEnabledCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Next run:\n <span class=\"rt-strong font-medium\">{{ nextRunLabel() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ scheduleHint() }}</div>\n </a>\n\n <!-- Executions -->\n <a routerLink=\"executions\" class=\"group rounded-2xl rt-panel p-4 hover:shadow-lg transition cursor-pointer\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Executions</div>\n <div class=\"text-xs rt-muted\">Run history + progress</div>\n </div>\n <div class=\"h-9 w-9 rounded-xl rt-soft grid place-items-center group-hover:shadow-sm transition\">\uD83D\uDE80</div>\n </div>\n\n <div class=\"mt-4 flex items-end justify-between\">\n <div class=\"text-3xl font-semibold\">{{ execCount() }}</div>\n <div class=\"text-xs rt-muted text-right\">\n Running: <span class=\"font-medium rt-strong\">{{ execRunningCount() }}</span>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Latest:\n <span class=\"rt-strong font-medium\">{{ execLastUpdated() }}</span>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted line-clamp-2\">{{ execHint() }}</div>\n </a>\n </div>\n\n <!-- Recent executions -->\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-medium\">Recent executions</div>\n <div class=\"text-xs rt-muted\">Latest runs (best-effort order: newest first)</div>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> Open list </a>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of recentExecutions(); track trackByStableId($index, e)) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['executions', e.id]\"> Open </a>\n </td>\n </tr>\n } @if (recentExecutions().length === 0) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions found.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bottom quick actions -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Quick actions</div>\n <div class=\"text-xs rt-muted mt-1\">Common admin tasks</div>\n\n <div class=\"mt-4 flex flex-wrap gap-2\">\n <a class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"definitions/create\"> Create definition </a>\n <a class=\"rt-btn cursor-pointer\" routerLink=\"schedules/create\"> Create schedule </a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"executions\"> View run history </a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium\">Health</div>\n <div class=\"text-xs rt-muted mt-1\">High-level snapshot</div>\n\n <div class=\"mt-4 grid grid-cols-3 gap-3 text-sm\">\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Queued</div>\n <div class=\"text-lg font-semibold\">{{ execQueuedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Failed</div>\n <div class=\"text-lg font-semibold\">{{ execFailedCount() }}</div>\n </div>\n\n <div class=\"rounded-xl rt-soft p-3\">\n <div class=\"text-xs rt-muted\">Succeeded</div>\n <div class=\"text-lg font-semibold\">{{ execSucceededCount() }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 text-xs rt-muted\">\n Tip: open an execution and use <span class=\"font-medium rt-strong\">Logs</span> for real-time troubleshooting.\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
160
160
  }], ctorParameters: () => [] });
@@ -164,7 +164,7 @@ class AutomationManageDetail {
164
164
  router = inject(Router);
165
165
  svc = inject(AutomationService);
166
166
  destroyRef = inject(DestroyRef);
167
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
167
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
168
168
  id() {
169
169
  return this.route.snapshot.params['id'];
170
170
  }
@@ -187,10 +187,10 @@ class AutomationManageDetail {
187
187
  this.loading.set(false);
188
188
  });
189
189
  }
190
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
191
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDetail, isStandalone: true, selector: "rolatech-automation-manage-detail", ngImport: i0, template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageDetail, isStandalone: true, selector: "rolatech-automation-manage-detail", ngImport: i0, template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
192
192
  }
193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDetail, decorators: [{
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDetail, decorators: [{
194
194
  type: Component,
195
195
  args: [{ selector: 'rolatech-automation-manage-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-2xl space-y-4 rt-page\">\n <h1 class=\"text-xl font-semibold\">Open Automation</h1>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Detecting resource type\u2026</div>\n } @else {\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm rt-muted\">\n Could not resolve id <span class=\"font-mono text-xs\">{{ id() }}</span> as a Definition / Schedule / Execution.\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/definitions\">Definitions</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/schedules\">Schedules</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations/executions\">Executions</a>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
196
196
  }], ctorParameters: () => [] });
@@ -198,15 +198,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
198
198
  class AutomationManageDefinitionIndex {
199
199
  svc = inject(AutomationService);
200
200
  destroyRef = inject(DestroyRef);
201
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
202
- items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
203
- q = signal('', ...(ngDevMode ? [{ debugName: "q" }] : []));
201
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
202
+ items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
203
+ q = signal('', ...(ngDevMode ? [{ debugName: "q" }] : /* istanbul ignore next */ []));
204
204
  filtered = computed(() => {
205
205
  const qq = this.q().trim().toLowerCase();
206
206
  if (!qq)
207
207
  return this.items();
208
208
  return this.items().filter((d) => (d.code + ' ' + d.name).toLowerCase().includes(qq));
209
- }, ...(ngDevMode ? [{ debugName: "filtered" }] : []));
209
+ }, ...(ngDevMode ? [{ debugName: "filtered" }] : /* istanbul ignore next */ []));
210
210
  constructor() {
211
211
  this.load();
212
212
  }
@@ -226,10 +226,10 @@ class AutomationManageDefinitionIndex {
226
226
  },
227
227
  });
228
228
  }
229
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionIndex, isStandalone: true, selector: "rolatech-automation-manage-definition-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
229
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageDefinitionIndex, isStandalone: true, selector: "rolatech-automation-manage-definition-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
231
231
  }
232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionIndex, decorators: [{
233
233
  type: Component,
234
234
  args: [{ selector: 'rolatech-automation-manage-definition-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definitions</h1>\n <p class=\"text-sm rt-muted\">Create and maintain automation definitions.</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n class=\"w-full max-w-md rt-input\"\n placeholder=\"Search code/name...\"\n [value]=\"q()\"\n (input)=\"q.set(($any($event.target).value ?? '').toString())\"\n />\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[900px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Code</th>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Handler</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Updated</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (d of filtered(); track d.id) {\n <tr>\n <td class=\"p-3 font-mono text-xs\">{{ d.code }}</td>\n <td class=\"p-3\">{{ d.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ d.handlerKey }}</td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"d.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ d.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ d.updatedAt ?? '\u2014' }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[d.id]\">Open</a>\n </td>\n </tr>\n } @if (!filtered().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No definitions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
235
235
  }], ctorParameters: () => [] });
@@ -239,11 +239,11 @@ class AutomationManageDefinitionDetail {
239
239
  route = inject(ActivatedRoute);
240
240
  fb = inject(FormBuilder);
241
241
  destroyRef = inject(DestroyRef);
242
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
243
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
244
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
245
- item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : []));
246
- prettyDefaultJson = signal('', ...(ngDevMode ? [{ debugName: "prettyDefaultJson" }] : []));
242
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
243
+ saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
244
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
245
+ item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
246
+ prettyDefaultJson = signal('', ...(ngDevMode ? [{ debugName: "prettyDefaultJson" }] : /* istanbul ignore next */ []));
247
247
  form = this.fb.group({
248
248
  name: ['', [Validators.required, Validators.maxLength(200)]],
249
249
  description: [''],
@@ -328,10 +328,10 @@ class AutomationManageDefinitionDetail {
328
328
  },
329
329
  });
330
330
  }
331
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
332
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionDetail, isStandalone: true, selector: "rolatech-automation-manage-definition-detail", ngImport: i0, template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
331
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
332
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageDefinitionDetail, isStandalone: true, selector: "rolatech-automation-manage-definition-detail", ngImport: i0, template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
333
333
  }
334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionDetail, decorators: [{
335
335
  type: Component,
336
336
  args: [{ selector: 'rolatech-automation-manage-definition-detail', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-4xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Definition</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.code ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"disable()\" [disabled]=\"saving() || !item()\">Disable</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" [value]=\"item()?.code\" disabled />\n </label>\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"defaultInputJson\"></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Save' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n\n <div class=\"rounded-2xl rt-panel p-4\">\n <div class=\"text-sm font-medium mb-2\">Preview: Default Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ prettyDefaultJson() }}</pre>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
337
337
  }], ctorParameters: () => [] });
@@ -339,8 +339,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
339
339
  class AutomationManageExecutionIndex {
340
340
  svc = inject(AutomationService);
341
341
  destroyRef = inject(DestroyRef);
342
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
343
- items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
342
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
343
+ items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
344
344
  badgeClass = badgeClass;
345
345
  isoToLocal = isoToLocal;
346
346
  constructor() {
@@ -369,10 +369,10 @@ class AutomationManageExecutionIndex {
369
369
  },
370
370
  });
371
371
  }
372
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
373
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionIndex, isStandalone: true, selector: "rolatech-automation-manage-execution-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
372
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
373
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageExecutionIndex, isStandalone: true, selector: "rolatech-automation-manage-execution-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
374
374
  }
375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionIndex, decorators: [{
376
376
  type: Component,
377
377
  args: [{ selector: 'rolatech-automation-manage-execution-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Executions</h1>\n <p class=\"text-sm rt-muted\">Review job runs, progress and errors.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[1000px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Status</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Progress</th>\n <th class=\"text-left p-3\">Queued</th>\n <th class=\"text-left p-3\">Finished</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (e of items(); track e.id) {\n <tr>\n <td class=\"p-3\">\n <span [class]=\"badgeClass(e.status)\"> {{ e.status }} </span>\n </td>\n <td class=\"p-3 font-mono text-xs\">{{ e.definitionCode ?? e.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"text-xs rt-muted\">{{ e.processed }} / {{ e.total }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct(e)\"></div>\n </div>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.queuedAt) }}</td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(e.finishedAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[e.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No executions.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
378
378
  }], ctorParameters: () => [] });
@@ -383,11 +383,11 @@ class AutomationManageExecutionDetail {
383
383
  destroyRef = inject(DestroyRef);
384
384
  badgeClass = badgeClass;
385
385
  isoToLocal = isoToLocal;
386
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
387
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
388
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
389
- item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : []));
390
- inputPretty = signal('', ...(ngDevMode ? [{ debugName: "inputPretty" }] : []));
386
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
387
+ saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
388
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
389
+ item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
390
+ inputPretty = signal('', ...(ngDevMode ? [{ debugName: "inputPretty" }] : /* istanbul ignore next */ []));
391
391
  constructor() {
392
392
  this.load();
393
393
  }
@@ -443,10 +443,10 @@ class AutomationManageExecutionDetail {
443
443
  },
444
444
  });
445
445
  }
446
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
447
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionDetail, isStandalone: true, selector: "rolatech-automation-manage-execution-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
446
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
447
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageExecutionDetail, isStandalone: true, selector: "rolatech-automation-manage-execution-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
448
448
  }
449
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionDetail, decorators: [{
450
450
  type: Component,
451
451
  args: [{ selector: 'rolatech-automation-manage-execution-detail', imports: [RouterLink], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ item()?.id ?? '\u2014' }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"['log']\">Logs</a>\n <button class=\"rt-btn rt-btn-danger\" (click)=\"cancel()\" [disabled]=\"saving() || !canCancel()\">Cancel</button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <div class=\"flex items-center justify-between\">\n <span [class]=\"badgeClass(item()?.status)\">{{ item()?.status }}</span>\n <button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule</div>\n <div class=\"font-mono text-xs\">{{ item()?.scheduleId ?? '\u2014' }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Queued</div>\n <div>{{ isoToLocal(item()?.queuedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Started</div>\n <div>{{ isoToLocal(item()?.startedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Finished</div>\n <div>{{ isoToLocal(item()?.finishedAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Idempotency</div>\n <div class=\"font-mono text-xs\">{{ item()?.idempotencyKey ?? '\u2014' }}</div>\n </div>\n </div>\n\n <div>\n <div class=\"text-xs rt-muted mb-1\">Progress</div>\n <div class=\"text-sm\">{{ item()?.processed ?? 0 }} / {{ item()?.total ?? 0 }}</div>\n <div class=\"rt-progress mt-1\">\n <div class=\"bar\" [style.width.%]=\"progressPct()\"></div>\n </div>\n </div>\n\n @if (item()?.errorMessage) {\n <div class=\"text-sm rt-alert-danger whitespace-pre-wrap\">{{ item()?.errorMessage }}</div>\n }\n </div>\n\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ inputPretty() }}</pre>\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
452
452
  }], ctorParameters: () => [] });
@@ -456,8 +456,8 @@ class AutomationManageExecutionLog {
456
456
  route = inject(ActivatedRoute);
457
457
  destroyRef = inject(DestroyRef);
458
458
  isoToLocal = isoToLocal;
459
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
460
- logs = signal([], ...(ngDevMode ? [{ debugName: "logs" }] : []));
459
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
460
+ logs = signal([], ...(ngDevMode ? [{ debugName: "logs" }] : /* istanbul ignore next */ []));
461
461
  id() {
462
462
  return this.route.snapshot.params['id'];
463
463
  }
@@ -492,10 +492,10 @@ class AutomationManageExecutionLog {
492
492
  },
493
493
  });
494
494
  }
495
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
496
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageExecutionLog, isStandalone: true, selector: "rolatech-automation-manage-execution-log", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionLog, deps: [], target: i0.ɵɵFactoryTarget.Component });
496
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageExecutionLog, isStandalone: true, selector: "rolatech-automation-manage-execution-log", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
497
497
  }
498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageExecutionLog, decorators: [{
499
499
  type: Component,
500
500
  args: [{ selector: 'rolatech-automation-manage-execution-log', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Execution Logs</h1>\n <div class=\"text-sm rt-muted font-mono\">{{ id() }}</div>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n @if (loading()) {\n <div class=\"p-4 text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"divide-y divide-[color:var(--rt-outline,rgba(0,0,0,0.08))]\">\n @for (l of logs(); track l.id) {\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span [class]=\"levelClass(l.level)\"> {{ l.level }} </span>\n <span class=\"text-xs rt-muted\">{{ isoToLocal(l.createdAt) }}</span>\n </div>\n <span class=\"text-xs rt-quiet font-mono\">{{ l.id }}</span>\n </div>\n <pre class=\"mt-2 text-xs rt-soft rounded-xl p-3 overflow-auto whitespace-pre-wrap\">{{ l.message }}</pre>\n </div>\n } @if (!logs().length) {\n <div class=\"p-4 text-sm rt-muted\">No logs.</div>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
501
501
  }], ctorParameters: () => [] });
@@ -503,9 +503,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
503
503
  class AutomationManageScheduleIndex {
504
504
  svc = inject(AutomationService);
505
505
  destroyRef = inject(DestroyRef);
506
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
507
- items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
508
- options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : []));
506
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
507
+ items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
508
+ options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
509
509
  isoToLocal = isoToLocal;
510
510
  constructor() {
511
511
  this.loadOptions();
@@ -537,10 +537,10 @@ class AutomationManageScheduleIndex {
537
537
  },
538
538
  });
539
539
  }
540
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
541
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleIndex, isStandalone: true, selector: "rolatech-automation-manage-schedule-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
540
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleIndex, deps: [], target: i0.ɵɵFactoryTarget.Component });
541
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageScheduleIndex, isStandalone: true, selector: "rolatech-automation-manage-schedule-index", ngImport: i0, template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
542
542
  }
543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleIndex, decorators: [{
544
544
  type: Component,
545
545
  args: [{ selector: 'rolatech-automation-manage-schedule-index', imports: [RouterLink, MatButtonModule], template: "<div class=\"p-6 space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedules</h1>\n <p class=\"text-sm rt-muted\">Enable/disable schedules and review next runs.</p>\n </div>\n <div class=\"flex gap-2\">\n <a mat-stroked-button class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"/automations\">Back</a>\n <button mat-stroked-button class=\"rt-btn rt-btn-ghost\" (click)=\"load()\">Refresh</button>\n <a mat-flat-button class=\"rt-btn rt-btn-primary cursor-pointer\" routerLink=\"create\">Create</a>\n </div>\n </div>\n\n <div class=\"rounded-2xl rt-panel overflow-hidden\">\n <div class=\"overflow-auto\">\n <table class=\"min-w-[980px] w-full text-sm rt-table\">\n <thead>\n <tr>\n <th class=\"text-left p-3\">Name</th>\n <th class=\"text-left p-3\">Definition</th>\n <th class=\"text-left p-3\">Schedule</th>\n <th class=\"text-left p-3\">Enabled</th>\n <th class=\"text-left p-3\">Next Run</th>\n <th class=\"text-right p-3\">Action</th>\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">Loading...</td>\n </tr>\n } @else { @for (s of items(); track s.id) {\n <tr>\n <td class=\"p-3\">{{ s.name }}</td>\n <td class=\"p-3 font-mono text-xs\">{{ s.definitionCode ?? s.definitionId }}</td>\n <td class=\"p-3\">\n <div class=\"font-mono text-xs\">{{ s.schedule }}</div>\n <div class=\"text-xs rt-muted\">{{ scheduleLabel(s.schedule) }}</div>\n </td>\n <td class=\"p-3\">\n <span class=\"rt-badge\" [class]=\"s.enabled ? 'rt-badge-success' : 'rt-badge-muted'\">\n {{ s.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n </td>\n <td class=\"p-3 rt-muted\">{{ isoToLocal(s.nextRunAt) }}</td>\n <td class=\"p-3 text-right\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" [routerLink]=\"[s.id]\">Open</a>\n </td>\n </tr>\n } @if (!items().length) {\n <tr>\n <td class=\"p-3 rt-muted\" colspan=\"6\">No schedules.</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
546
546
  }], ctorParameters: () => [] });
@@ -554,12 +554,12 @@ class AutomationManageScheduleDetail {
554
554
  isoToLocal = isoToLocal;
555
555
  trackByCode = trackByCode;
556
556
  trackByStableId = trackByStableId;
557
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
558
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
559
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
560
- item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : []));
561
- options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : []));
562
- jsonPreview = signal('', ...(ngDevMode ? [{ debugName: "jsonPreview" }] : []));
557
+ loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
558
+ saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
559
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
560
+ item = signal(null, ...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
561
+ options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
562
+ jsonPreview = signal('', ...(ngDevMode ? [{ debugName: "jsonPreview" }] : /* istanbul ignore next */ []));
563
563
  // ✅ IMPORTANT: don’t use [disabled] in template. disable control here if needed.
564
564
  form = this.fb.group({
565
565
  name: ['', [Validators.required, Validators.maxLength(200)]],
@@ -710,10 +710,10 @@ class AutomationManageScheduleDetail {
710
710
  },
711
711
  });
712
712
  }
713
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleDetail, isStandalone: true, selector: "rolatech-automation-manage-schedule-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageScheduleDetail, isStandalone: true, selector: "rolatech-automation-manage-schedule-detail", ngImport: i0, template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
715
715
  }
716
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleDetail, decorators: [{
717
717
  type: Component,
718
718
  args: [{ selector: 'rolatech-automation-manage-schedule-detail', imports: [RouterLink, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatButtonModule, MatCheckboxModule], template: "<div class=\"p-6 max-w-5xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-xl font-semibold\">Schedule</h1>\n <p class=\"text-sm rt-muted\">{{ item()?.name ?? '\u2014' }}</p>\n </div>\n\n <div class=\"flex gap-2\">\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"runNow()\"\n [disabled]=\"saving() || !item()?.definitionCode\"\n >\n Run now\n </button>\n\n <button mat-stroked-button class=\"rt-btn rt-btn-danger\" (click)=\"remove()\" [disabled]=\"saving() || !item()\">\n Delete\n </button>\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"text-sm rt-muted\">Loading...</div>\n } @else {\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Form -->\n <div class=\"lg:col-span-2 rounded-2xl rt-panel p-4 space-y-4\">\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\" class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div>\n <div class=\"text-xs rt-muted\">Definition</div>\n <div class=\"font-mono text-xs\">{{ item()?.definitionCode ?? item()?.definitionId }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Schedule ID</div>\n <div class=\"font-mono text-xs\">{{ item()?.id }}</div>\n </div>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" />\n </label>\n\n <!-- \u2705 mat-select, value = o.code -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Schedule</mat-label>\n\n <mat-select formControlName=\"schedule\">\n @for (o of options(); track trackByCode($index, o)) {\n <mat-option [value]=\"o.code\">\n <span class=\"text-sm\"> {{ o.label }}</span>\n </mat-option>\n }\n </mat-select>\n\n <mat-hint>{{ scheduleDesc() }}</mat-hint>\n\n @if (form.controls.schedule.invalid && form.controls.schedule.touched) {\n <mat-error>Schedule is required</mat-error>\n }\n </mat-form-field>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON</div>\n <textarea class=\"w-full rt-input font-mono text-xs min-h-[160px]\" formControlName=\"inputJson\"></textarea>\n </label>\n\n <mat-checkbox formControlName=\"enabled\">Enabled</mat-checkbox>\n\n <div class=\"flex items-center justify-end gap-2\">\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-ghost\"\n (click)=\"toggle(false)\"\n type=\"button\"\n [disabled]=\"saving() || !item()?.enabled\"\n >\n Disable\n </button>\n <button\n mat-stroked-button\n class=\"rt-btn rt-btn-primary\"\n (click)=\"toggle(true)\"\n type=\"button\"\n [disabled]=\"saving() || !!item()?.enabled\"\n >\n Enable\n </button>\n <button mat-flat-button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">\n {{ saving() ? 'Saving\u2026' : 'Save' }}\n </button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n </div>\n\n <!-- Side info -->\n <div class=\"rounded-2xl rt-panel p-4 space-y-3\">\n <div>\n <div class=\"text-xs rt-muted\">Next run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.nextRunAt) }}</div>\n </div>\n <div>\n <div class=\"text-xs rt-muted\">Last run</div>\n <div class=\"text-sm\">{{ isoToLocal(item()?.lastRunAt) }}</div>\n </div>\n\n <div class=\"pt-2\">\n <div class=\"text-sm font-medium mb-1\">Input JSON (preview)</div>\n <pre class=\"text-xs rt-soft rounded-xl p-3 overflow-auto\">{{ jsonPreview() }}</pre>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
719
719
  }], ctorParameters: () => [] });
@@ -723,8 +723,8 @@ class AutomationManageDefinitionCreate {
723
723
  fb = inject(FormBuilder);
724
724
  router = inject(Router);
725
725
  destroyRef = inject(DestroyRef);
726
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
727
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
726
+ saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
727
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
728
728
  form = this.fb.group({
729
729
  code: ['', [Validators.required, Validators.maxLength(120)]],
730
730
  name: ['', [Validators.required, Validators.maxLength(200)]],
@@ -763,10 +763,10 @@ class AutomationManageDefinitionCreate {
763
763
  },
764
764
  });
765
765
  }
766
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
767
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageDefinitionCreate, isStandalone: true, selector: "rolatech-automation-manage-definition-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
767
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageDefinitionCreate, isStandalone: true, selector: "rolatech-automation-manage-definition-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
768
768
  }
769
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageDefinitionCreate, decorators: [{
770
770
  type: Component,
771
771
  args: [{ selector: 'rolatech-automation-manage-definition-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Definition</h1>\n <p class=\"text-sm rt-muted\">Define a handler and default input JSON.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Code</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"code\" placeholder=\"PROPERTY_ALTO_SYNC\" />\n </label>\n\n <label class=\"space-y-1\">\n <div class=\"text-sm font-medium\">Name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Alto Sync\" />\n </label>\n </div>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Handler Key (Spring bean name)</div>\n <input class=\"w-full rt-input font-mono text-sm\" formControlName=\"handlerKey\" placeholder=\"altoSyncAutomationHandler\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Description</div>\n <textarea class=\"w-full rt-input min-h-[80px]\" formControlName=\"description\"></textarea>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Default Input JSON</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"defaultInputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
772
772
  }] });
@@ -778,10 +778,10 @@ class AutomationManageScheduleCreate {
778
778
  destroyRef = inject(DestroyRef);
779
779
  trackByStableId = trackByStableId;
780
780
  trackByValue = trackByValue;
781
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
782
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
783
- definitions = signal([], ...(ngDevMode ? [{ debugName: "definitions" }] : []));
784
- options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : []));
781
+ saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
782
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
783
+ definitions = signal([], ...(ngDevMode ? [{ debugName: "definitions" }] : /* istanbul ignore next */ []));
784
+ options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
785
785
  form = this.fb.group({
786
786
  definitionId: ['', Validators.required],
787
787
  name: ['', [Validators.required, Validators.maxLength(200)]],
@@ -839,10 +839,10 @@ class AutomationManageScheduleCreate {
839
839
  },
840
840
  });
841
841
  }
842
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
843
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AutomationManageScheduleCreate, isStandalone: true, selector: "rolatech-automation-manage-schedule-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
842
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleCreate, deps: [], target: i0.ɵɵFactoryTarget.Component });
843
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AutomationManageScheduleCreate, isStandalone: true, selector: "rolatech-automation-manage-schedule-create", ngImport: i0, template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
844
844
  }
845
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AutomationManageScheduleCreate, decorators: [{
846
846
  type: Component,
847
847
  args: [{ selector: 'rolatech-automation-manage-schedule-create', imports: [RouterLink, ReactiveFormsModule], template: "<div class=\"p-6 max-w-3xl space-y-4 rt-page\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-xl font-semibold\">Create Schedule</h1>\n <p class=\"text-sm rt-muted\">Attach a definition to a schedule cadence.</p>\n </div>\n <a class=\"rt-btn rt-btn-ghost cursor-pointer\" routerLink=\"../\">Back</a>\n </div>\n\n <form class=\"rounded-2xl rt-panel p-4 space-y-4\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Definition</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"definitionId\">\n <option value=\"\" disabled>Select a definition</option>\n @for (d of definitions(); track trackByStableId($index, d)) {\n <option [value]=\"d.id\">{{ d.code }} \u2014 {{ d.name }}</option>\n }\n </select>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Schedule name</div>\n <input class=\"w-full rt-input\" formControlName=\"name\" placeholder=\"Daily Alto Sync\" />\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Cron option</div>\n <select class=\"w-full rt-input font-mono text-sm\" formControlName=\"schedule\">\n <option value=\"\" disabled>Select schedule</option>\n @for (o of options(); track trackByValue($index, o)) {\n <option [value]=\"o.value\">{{ o.value }} \u2014 {{ o.label }}</option>\n }\n </select>\n <div class=\"text-xs rt-muted mt-1\">{{ scheduleDesc() }}</div>\n </label>\n\n <label class=\"space-y-1 block\">\n <div class=\"text-sm font-medium\">Input JSON (override)</div>\n <textarea\n class=\"w-full rt-input font-mono text-xs min-h-[160px]\"\n formControlName=\"inputJson\"\n placeholder='{\"dryRun\":false}'\n ></textarea>\n </label>\n\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" class=\"rounded\" formControlName=\"enabled\" />\n Enabled\n </label>\n\n <button class=\"rt-btn rt-btn-primary\" [disabled]=\"form.invalid || saving()\">{{ saving() ? 'Saving\u2026' : 'Create' }}</button>\n </div>\n\n @if (error()) {\n <div class=\"text-sm rt-alert-danger\">{{ error() }}</div>\n }\n </form>\n</div>\n", styles: [":host{color:var(--rt-text-primary, #0f0f0f)}.rt-page{min-height:100%;color:var(--rt-text-primary, #0f0f0f);background:var(--rt-base-background, #fff)}.rt-panel{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));box-shadow:0 16px 50px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent)}.rt-soft{background:color-mix(in srgb,var(--rt-raised-background, #fff) 80%,transparent);border:1px solid color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 60%,transparent)}.rt-muted{color:var(--rt-text-secondary, #606060)!important}.rt-quiet{color:color-mix(in srgb,var(--rt-text-secondary, #606060) 70%,transparent)!important}.rt-strong{color:var(--rt-text-primary, #0f0f0f)!important}.rt-ring{border-color:var(--rt-outline, rgba(0, 0, 0, .08))!important}.rt-pill{display:inline-flex;align-items:center;gap:6px;padding:.35rem .75rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-additive-background, rgba(0, 0, 0, .05));color:var(--rt-text-primary, #0f0f0f)}.rt-pill.brand{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 50%,transparent);color:#2b0a00}.rt-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:12px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));background:var(--rt-raised-background, #fff);color:var(--rt-text-primary, #0f0f0f);font-weight:600;transition:background .15s ease,border-color .15s ease,transform .15s ease,box-shadow .15s ease}.rt-btn:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,var(--rt-outline, rgba(0, 0, 0, .08)) 40%,transparent);transform:translateY(-1px);box-shadow:0 10px 30px color-mix(in srgb,var(--rt-base-background, #0f0f0f) 60%,transparent);text-decoration:none}.rt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.rt-btn-primary{background:var(--rt-static-brand-orange, #ea580b);border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,transparent);color:#fff}.rt-btn-primary:hover{background:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#000)}.rt-btn-ghost{background:transparent;color:var(--rt-text-primary, #0f0f0f)}.rt-btn-danger{background:color-mix(in srgb,#ef4444 20%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 42%,transparent);color:#7f1d1d}.rt-btn-danger:hover{background:color-mix(in srgb,#ef4444 32%,var(--rt-raised-background, #fff))}.rt-table{width:100%;background:var(--rt-raised-background, #fff);border-collapse:collapse;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table thead{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 85%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-table th,.rt-table td{border-bottom:1px solid var(--rt-outline, rgba(0, 0, 0, .08))}.rt-table tbody tr:hover{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 70%,var(--rt-raised-background, #fff))}.rt-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .65rem;border-radius:999px;border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));font-size:.8rem;font-weight:700;letter-spacing:.01em}.rt-badge-success{background:color-mix(in srgb,#22c55e 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#22c55e 40%,transparent);color:#166534}.rt-badge-warn{background:color-mix(in srgb,#f59e0b 24%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#f59e0b 40%,transparent);color:#7c2d12}.rt-badge-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d}.rt-badge-info{background:color-mix(in srgb,#38bdf8 18%,var(--rt-raised-background, #fff));border-color:color-mix(in srgb,#38bdf8 40%,transparent);color:#0f172a}.rt-badge-muted{background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 90%,var(--rt-raised-background, #fff));color:var(--rt-text-secondary, #606060)}.rt-alert-danger{background:color-mix(in srgb,#ef4444 22%,var(--rt-raised-background, #fff));border:1px solid color-mix(in srgb,#ef4444 40%,transparent);color:#7f1d1d;border-radius:14px;padding:.85rem 1rem}.rt-input{background:var(--rt-raised-background, #fff);border:1px solid var(--rt-outline, rgba(0, 0, 0, .08));border-radius:12px;color:var(--rt-text-primary, #0f0f0f);padding:.65rem .85rem;transition:border-color .15s ease,box-shadow .15s ease}.rt-input:focus{outline:none;border-color:color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 60%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 18%,transparent)}.rt-progress{height:8px;border-radius:999px;background:color-mix(in srgb,var(--rt-additive-background, rgba(0, 0, 0, .05)) 80%,var(--rt-raised-background, #fff));overflow:hidden}.rt-progress .bar{height:100%;background:linear-gradient(90deg,color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 82%,#fff),color-mix(in srgb,var(--rt-static-brand-orange, #ea580b) 70%,#000))}\n"] }]
848
848
  }], ctorParameters: () => [] });