@rolatech/angular-automation 20.3.2-beta.4 → 20.3.3-beta.0
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.
|
|
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.
|
|
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.
|
|
191
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
230
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
332
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
373
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
447
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
496
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
541
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
767
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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.
|
|
843
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
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.
|
|
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: () => [] });
|