@praxisui/editorial-forms 8.0.0-beta.7 → 8.0.0-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { makeEnvironmentProviders, InjectionToken, inject, DestroyRef, viewChild, ViewContainerRef, input, output, signal, computed, effect, ChangeDetectionStrategy, Component, reflectComponentType, Input } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { PraxisI18nService, PraxisIconDirective, DynamicWidgetLoaderDirective, providePraxisI18n } from '@praxisui/core';
2
+ import { InjectionToken, makeEnvironmentProviders, inject, DestroyRef, viewChild, ViewContainerRef, input, output, signal, computed, effect, ChangeDetectionStrategy, Component, ENVIRONMENT_INITIALIZER, reflectComponentType, Input } from '@angular/core';
3
+ import { PraxisI18nService, PraxisIconDirective, DynamicWidgetLoaderDirective, ComponentMetadataRegistry, providePraxisI18n } from '@praxisui/core';
5
4
  import * as i1 from '@angular/material/icon';
6
5
  import { MatIconModule } from '@angular/material/icon';
7
6
 
8
- /**
9
- * Root provider entrypoint for the editorial runtime package.
10
- *
11
- * Intentionally minimal in v1:
12
- * - no global singleton graph yet
13
- * - no dependency on @praxisui/dynamic-form
14
- * - safe to consume from apps without pulling generic form authoring
15
- */
16
- function providePraxisEditorialForms() {
17
- return makeEnvironmentProviders([]);
18
- }
19
-
20
7
  const DEFAULT_EDITORIAL_RUNTIME_HOST_CONFIG = {
21
8
  emitOperationalEvents: true,
22
9
  forwardAdapterOperationalEvents: true,
@@ -180,39 +167,39 @@ class EditorialDataCollectionBlockOutletComponent {
180
167
  }) ?? [];
181
168
  destroyRef = inject(DestroyRef);
182
169
  adapterRegistry = new EditorialDataBlockAdapterRegistry(this.adapters);
183
- adapterHost = viewChild('adapterHost', ...(ngDevMode ? [{ debugName: "adapterHost", read: ViewContainerRef }] : [{ read: ViewContainerRef }]));
170
+ adapterHost = viewChild('adapterHost', { ...(ngDevMode ? { debugName: "adapterHost" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
184
171
  loadVersion = 0;
185
172
  lastAdapterEventSignature = null;
186
173
  componentRef = null;
187
174
  renderedComponentType = null;
188
175
  componentOutputSubscriptions = [];
189
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
190
- runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : []));
191
- solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : []));
192
- instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : []));
176
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
177
+ runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : /* istanbul ignore next */ []));
178
+ solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : /* istanbul ignore next */ []));
179
+ instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : /* istanbul ignore next */ []));
193
180
  runtimeContextChange = output();
194
181
  operationalEvent = output();
195
- resolvedComponent = signal(null, ...(ngDevMode ? [{ debugName: "resolvedComponent" }] : []));
196
- state = signal({ kind: 'idle' }, ...(ngDevMode ? [{ debugName: "state" }] : []));
182
+ resolvedComponent = signal(null, ...(ngDevMode ? [{ debugName: "resolvedComponent" }] : /* istanbul ignore next */ []));
183
+ state = signal({ kind: 'idle' }, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
197
184
  adapterContext = computed(() => ({
198
185
  block: this.block(),
199
186
  runtimeContext: this.runtimeContext(),
200
187
  solution: this.solution(),
201
188
  instance: this.instance(),
202
189
  resolvedFormConfig: resolveEditorialDataBlockFormConfig(this.block(), this.instance()),
203
- }), ...(ngDevMode ? [{ debugName: "adapterContext" }] : []));
204
- resolution = computed(() => resolveEditorialDataBlockFormConfigDetails(this.block(), this.instance()), ...(ngDevMode ? [{ debugName: "resolution" }] : []));
205
- adapterResolution = computed(() => this.adapterRegistry.resolve(this.adapterContext()), ...(ngDevMode ? [{ debugName: "adapterResolution" }] : []));
206
- adapter = computed(() => this.adapterResolution().adapter, ...(ngDevMode ? [{ debugName: "adapter" }] : []));
207
- adapterComponent = computed(() => this.resolvedComponent() ?? this.adapter()?.component ?? null, ...(ngDevMode ? [{ debugName: "adapterComponent" }] : []));
190
+ }), ...(ngDevMode ? [{ debugName: "adapterContext" }] : /* istanbul ignore next */ []));
191
+ resolution = computed(() => resolveEditorialDataBlockFormConfigDetails(this.block(), this.instance()), ...(ngDevMode ? [{ debugName: "resolution" }] : /* istanbul ignore next */ []));
192
+ adapterResolution = computed(() => this.adapterRegistry.resolve(this.adapterContext()), ...(ngDevMode ? [{ debugName: "adapterResolution" }] : /* istanbul ignore next */ []));
193
+ adapter = computed(() => this.adapterResolution().adapter, ...(ngDevMode ? [{ debugName: "adapter" }] : /* istanbul ignore next */ []));
194
+ adapterComponent = computed(() => this.resolvedComponent() ?? this.adapter()?.component ?? null, ...(ngDevMode ? [{ debugName: "adapterComponent" }] : /* istanbul ignore next */ []));
208
195
  loadingState = computed(() => {
209
196
  const state = this.state();
210
197
  return state.kind === 'loading' ? state : null;
211
- }, ...(ngDevMode ? [{ debugName: "loadingState" }] : []));
198
+ }, ...(ngDevMode ? [{ debugName: "loadingState" }] : /* istanbul ignore next */ []));
212
199
  errorState = computed(() => {
213
200
  const state = this.state();
214
201
  return state.kind === 'error' ? state : null;
215
- }, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
202
+ }, ...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
216
203
  adapterInputs = computed(() => {
217
204
  const adapter = this.adapter();
218
205
  if (!adapter) {
@@ -226,7 +213,7 @@ class EditorialDataCollectionBlockOutletComponent {
226
213
  resolvedFormConfig: this.resolution().formConfig,
227
214
  ...(adapter.buildInputs?.(this.adapterContext()) ?? {}),
228
215
  };
229
- }, ...(ngDevMode ? [{ debugName: "adapterInputs" }] : []));
216
+ }, ...(ngDevMode ? [{ debugName: "adapterInputs" }] : /* istanbul ignore next */ []));
230
217
  fallbackMessage = computed(() => {
231
218
  const resolution = this.resolution();
232
219
  const block = this.block();
@@ -266,11 +253,11 @@ class EditorialDataCollectionBlockOutletComponent {
266
253
  formBlockId: block.formBlockId,
267
254
  source: resolution.source,
268
255
  });
269
- }, ...(ngDevMode ? [{ debugName: "fallbackMessage" }] : []));
270
- effectiveSurface = computed(() => this.block().surface === 'plain' ? 'plain' : 'card', ...(ngDevMode ? [{ debugName: "effectiveSurface" }] : []));
271
- showBlockTitle = computed(() => Boolean(this.block().title) && !this.shouldHideBlockTitle(), ...(ngDevMode ? [{ debugName: "showBlockTitle" }] : []));
272
- showBlockDescription = computed(() => Boolean(this.block().description) && !this.shouldHideBlockDescription(), ...(ngDevMode ? [{ debugName: "showBlockDescription" }] : []));
273
- showBlockHeader = computed(() => this.showBlockTitle() || this.showBlockDescription(), ...(ngDevMode ? [{ debugName: "showBlockHeader" }] : []));
256
+ }, ...(ngDevMode ? [{ debugName: "fallbackMessage" }] : /* istanbul ignore next */ []));
257
+ effectiveSurface = computed(() => this.block().surface === 'plain' ? 'plain' : 'card', ...(ngDevMode ? [{ debugName: "effectiveSurface" }] : /* istanbul ignore next */ []));
258
+ showBlockTitle = computed(() => Boolean(this.block().title) && !this.shouldHideBlockTitle(), ...(ngDevMode ? [{ debugName: "showBlockTitle" }] : /* istanbul ignore next */ []));
259
+ showBlockDescription = computed(() => Boolean(this.block().description) && !this.shouldHideBlockDescription(), ...(ngDevMode ? [{ debugName: "showBlockDescription" }] : /* istanbul ignore next */ []));
260
+ showBlockHeader = computed(() => this.showBlockTitle() || this.showBlockDescription(), ...(ngDevMode ? [{ debugName: "showBlockHeader" }] : /* istanbul ignore next */ []));
274
261
  constructor() {
275
262
  this.destroyRef.onDestroy(() => {
276
263
  this.destroyRenderedComponent();
@@ -539,8 +526,8 @@ class EditorialDataCollectionBlockOutletComponent {
539
526
  const [section] = sections;
540
527
  return section ?? null;
541
528
  }
542
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialDataCollectionBlockOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
543
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialDataCollectionBlockOutletComponent, isStandalone: true, selector: "praxis-editorial-data-collection-block-outlet", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", operationalEvent: "operationalEvent" }, viewQueries: [{ propertyName: "adapterHost", first: true, predicate: ["adapterHost"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
529
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialDataCollectionBlockOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
530
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialDataCollectionBlockOutletComponent, isStandalone: true, selector: "praxis-editorial-data-collection-block-outlet", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", operationalEvent: "operationalEvent" }, viewQueries: [{ propertyName: "adapterHost", first: true, predicate: ["adapterHost"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
544
531
  <section
545
532
  class="data-block"
546
533
  [class.block-card]="effectiveSurface() === 'card'"
@@ -583,11 +570,11 @@ class EditorialDataCollectionBlockOutletComponent {
583
570
  }
584
571
  </div>
585
572
  </section>
586
- `, isInline: true, styles: [":host{display:block;color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f))}.data-block{display:grid;gap:16px;font-family:var(--editorial-body-font-family, inherit)}.block-card{display:grid;gap:16px;padding:clamp(18px,2vw,24px);border-radius:var(--editorial-card-radius, 18px);background:var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa));border:var(--editorial-card-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 65%,transparent);box-shadow:var(--editorial-card-shadow, none)}.block-plain{padding:0;border:0;background:transparent;box-shadow:none;gap:0}.block-header{display:grid;gap:8px}.block-plain .block-header{margin-bottom:16px;padding-bottom:4px}.block-body{min-width:0}h3,p{margin:0}.block-title{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.15rem);line-height:1.15;color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f))}.description,.feedback{color:var(--editorial-text-secondary, var(--md-sys-color-on-surface-variant, #49454f));font-size:var(--editorial-body-size, .95rem);line-height:1.55}.feedback{display:grid;gap:6px;padding:12px 14px;border-radius:var(--editorial-card-radius, 14px);border:var(--editorial-card-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 70%,transparent);background:color-mix(in srgb,var(--editorial-surface-primary, var(--md-sys-color-surface, #fff)) 94%,var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa)) 6%)}.feedback strong{color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f));font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit))}.error{border-color:color-mix(in srgb,var(--md-sys-color-error, #b3261e) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container, #f9dedc) 35%,var(--md-sys-color-surface, #fff))}.details{font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
573
+ `, isInline: true, styles: [":host{display:block;color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f))}.data-block{display:grid;gap:16px;font-family:var(--editorial-body-font-family, inherit)}.block-card{display:grid;gap:16px;padding:clamp(18px,2vw,24px);border-radius:var(--editorial-card-radius, 18px);background:var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa));border:var(--editorial-card-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 65%,transparent);box-shadow:var(--editorial-card-shadow, none)}.block-plain{padding:0;border:0;background:transparent;box-shadow:none;gap:0}.block-header{display:grid;gap:8px}.block-plain .block-header{margin-bottom:16px;padding-bottom:4px}.block-body{min-width:0}h3,p{margin:0}.block-title{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.15rem);line-height:1.15;color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f))}.description,.feedback{color:var(--editorial-text-secondary, var(--md-sys-color-on-surface-variant, #49454f));font-size:var(--editorial-body-size, .95rem);line-height:1.55}.feedback{display:grid;gap:6px;padding:12px 14px;border-radius:var(--editorial-card-radius, 14px);border:var(--editorial-card-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 70%,transparent);background:color-mix(in srgb,var(--editorial-surface-primary, var(--md-sys-color-surface, #fff)) 94%,var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa)) 6%)}.feedback strong{color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f));font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit))}.error{border-color:color-mix(in srgb,var(--md-sys-color-error, #b3261e) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container, #f9dedc) 35%,var(--md-sys-color-surface, #fff))}.details{font-size:.9rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
587
574
  }
588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialDataCollectionBlockOutletComponent, decorators: [{
575
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialDataCollectionBlockOutletComponent, decorators: [{
589
576
  type: Component,
590
- args: [{ selector: 'praxis-editorial-data-collection-block-outlet', standalone: true, imports: [CommonModule], template: `
577
+ args: [{ selector: 'praxis-editorial-data-collection-block-outlet', standalone: true, imports: [], template: `
591
578
  <section
592
579
  class="data-block"
593
580
  [class.block-card]="effectiveSurface() === 'card'"
@@ -674,13 +661,13 @@ function normalizeComparableCopy(value) {
674
661
  }
675
662
 
676
663
  class EditorialIntroHeroBlockComponent {
677
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
664
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
678
665
  actionTriggered = output();
679
666
  triggerAction(action) {
680
667
  this.actionTriggered.emit(action.actionId);
681
668
  }
682
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialIntroHeroBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
683
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialIntroHeroBlockComponent, isStandalone: true, selector: "praxis-editorial-intro-hero-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
669
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialIntroHeroBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
670
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialIntroHeroBlockComponent, isStandalone: true, selector: "praxis-editorial-intro-hero-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
684
671
  <section class="intro-hero" [attr.data-align]="block().align ?? 'center'">
685
672
  @if (block().icon?.name) {
686
673
  <div class="hero-icon"><mat-icon aria-hidden="true" [praxisIcon]="block().icon?.name"></mat-icon></div>
@@ -742,11 +729,11 @@ class EditorialIntroHeroBlockComponent {
742
729
  </div>
743
730
  }
744
731
  </section>
745
- `, isInline: true, styles: [".intro-hero{display:grid;gap:18px;text-align:center}.intro-hero[data-align=left]{text-align:left}.hero-icon{width:64px;height:64px;border-radius:18px;background:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,#fff);color:var(--editorial-accent, #264a8a);display:grid;place-items:center;justify-self:center;font-weight:700}.hero-icon mat-icon,.highlight-icon{width:22px;height:22px;font-size:22px;line-height:22px}.intro-hero[data-align=left] .hero-icon{justify-self:start}.hero-copy{display:grid;gap:10px}.hero-copy h3,.hero-copy p{margin:0}.hero-copy h3{font-size:var(--editorial-hero-title-size, 1.75rem);line-height:1.15}.subtitle,.description{font-size:var(--editorial-body-size, 1rem);color:var(--editorial-text-secondary, #7b8aa0)}.hero-highlights{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.hero-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}.intro-hero[data-align=left] .hero-actions{justify-content:flex-start}.hero-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;border-radius:var(--editorial-button-radius, var(--editorial-card-radius, 18px));border:1px solid transparent;cursor:pointer;font:inherit;font-weight:600;transition:background-color .12s ease,color .12s ease,border-color .12s ease,box-shadow .12s ease}.hero-action mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.hero-action.primary{background:var(--editorial-cta-primary, var(--editorial-accent, #264a8a));color:var(--editorial-cta-primary-text, #fff);box-shadow:var(--editorial-card-shadow, none)}.hero-action.secondary{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 8%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 20%,transparent);color:var(--editorial-accent, #264a8a)}.highlight-card{display:grid;gap:6px;padding:14px;border-radius:var(--editorial-card-radius, 18px);background:var(--editorial-surface-primary, #fff);border:1px solid var(--editorial-border-color, #d9deea);box-shadow:var(--editorial-card-shadow, none)}.highlight-card p{margin:0;color:var(--editorial-text-secondary, #7b8aa0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
732
+ `, isInline: true, styles: [".intro-hero{display:grid;gap:18px;text-align:center}.intro-hero[data-align=left]{text-align:left}.hero-icon{width:64px;height:64px;border-radius:18px;background:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,#fff);color:var(--editorial-accent, #264a8a);display:grid;place-items:center;justify-self:center;font-weight:700}.hero-icon mat-icon,.highlight-icon{width:22px;height:22px;font-size:22px;line-height:22px}.intro-hero[data-align=left] .hero-icon{justify-self:start}.hero-copy{display:grid;gap:10px}.hero-copy h3,.hero-copy p{margin:0}.hero-copy h3{font-size:var(--editorial-hero-title-size, 1.75rem);line-height:1.15}.subtitle,.description{font-size:var(--editorial-body-size, 1rem);color:var(--editorial-text-secondary, #7b8aa0)}.hero-highlights{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.hero-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}.intro-hero[data-align=left] .hero-actions{justify-content:flex-start}.hero-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;border-radius:var(--editorial-button-radius, var(--editorial-card-radius, 18px));border:1px solid transparent;cursor:pointer;font:inherit;font-weight:600;transition:background-color .12s ease,color .12s ease,border-color .12s ease,box-shadow .12s ease}.hero-action mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.hero-action.primary{background:var(--editorial-cta-primary, var(--editorial-accent, #264a8a));color:var(--editorial-cta-primary-text, #fff);box-shadow:var(--editorial-card-shadow, none)}.hero-action.secondary{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 8%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 20%,transparent);color:var(--editorial-accent, #264a8a)}.highlight-card{display:grid;gap:6px;padding:14px;border-radius:var(--editorial-card-radius, 18px);background:var(--editorial-surface-primary, #fff);border:1px solid var(--editorial-border-color, #d9deea);box-shadow:var(--editorial-card-shadow, none)}.highlight-card p{margin:0;color:var(--editorial-text-secondary, #7b8aa0)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
746
733
  }
747
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialIntroHeroBlockComponent, decorators: [{
734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialIntroHeroBlockComponent, decorators: [{
748
735
  type: Component,
749
- args: [{ selector: 'praxis-editorial-intro-hero-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], template: `
736
+ args: [{ selector: 'praxis-editorial-intro-hero-block', standalone: true, imports: [MatIconModule, PraxisIconDirective], template: `
750
737
  <section class="intro-hero" [attr.data-align]="block().align ?? 'center'">
751
738
  @if (block().icon?.name) {
752
739
  <div class="hero-icon"><mat-icon aria-hidden="true" [praxisIcon]="block().icon?.name"></mat-icon></div>
@@ -813,8 +800,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
813
800
 
814
801
  class EditorialReviewSectionsBlockComponent {
815
802
  i18n = inject(PraxisI18nService);
816
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
817
- runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : []));
803
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
804
+ runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : /* istanbul ignore next */ []));
818
805
  visibleFields(fields) {
819
806
  return fields.filter((field) => {
820
807
  if (!field.hideWhenEmpty) {
@@ -893,8 +880,8 @@ class EditorialReviewSectionsBlockComponent {
893
880
  t(key, fallback) {
894
881
  return this.i18n.t(`praxis.editorialForms.${key}`, undefined, fallback);
895
882
  }
896
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialReviewSectionsBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
897
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialReviewSectionsBlockComponent, isStandalone: true, selector: "praxis-editorial-review-sections-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
883
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialReviewSectionsBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
884
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialReviewSectionsBlockComponent, isStandalone: true, selector: "praxis-editorial-review-sections-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
898
885
  <section class="review-sections">
899
886
  @if (block().title) {
900
887
  <header class="review-header">
@@ -926,11 +913,11 @@ class EditorialReviewSectionsBlockComponent {
926
913
  }
927
914
  </div>
928
915
  </section>
929
- `, isInline: true, styles: [".review-sections,.review-header{display:grid;gap:10px}.review-header h3,.review-header p,.review-section h4{margin:0}.review-header p{color:var(--editorial-text-secondary, #7b8aa0)}.review-sections-grid{display:grid;gap:14px}.review-section{display:grid;gap:12px;padding:18px;border-radius:var(--editorial-card-radius, 18px);border:1px solid var(--editorial-border-color, #d9deea);background:var(--editorial-surface-primary, #fff);box-shadow:var(--editorial-card-shadow, none)}.review-section-header{display:inline-flex;align-items:center;gap:10px}.section-icon{display:grid;place-items:center;width:18px;height:18px;color:var(--editorial-accent, #264a8a);font-size:18px;line-height:18px}.review-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin:0}.review-grid dt{margin-bottom:4px;color:var(--editorial-text-secondary, #7b8aa0);font-size:.82rem}.review-grid dd{margin:0;font-weight:600;color:var(--editorial-text-primary, #24324a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
916
+ `, isInline: true, styles: [".review-sections,.review-header{display:grid;gap:10px}.review-header h3,.review-header p,.review-section h4{margin:0}.review-header p{color:var(--editorial-text-secondary, #7b8aa0)}.review-sections-grid{display:grid;gap:14px}.review-section{display:grid;gap:12px;padding:18px;border-radius:var(--editorial-card-radius, 18px);border:1px solid var(--editorial-border-color, #d9deea);background:var(--editorial-surface-primary, #fff);box-shadow:var(--editorial-card-shadow, none)}.review-section-header{display:inline-flex;align-items:center;gap:10px}.section-icon{display:grid;place-items:center;width:18px;height:18px;color:var(--editorial-accent, #264a8a);font-size:18px;line-height:18px}.review-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin:0}.review-grid dt{margin-bottom:4px;color:var(--editorial-text-secondary, #7b8aa0);font-size:.82rem}.review-grid dd{margin:0;font-weight:600;color:var(--editorial-text-primary, #24324a)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
930
917
  }
931
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialReviewSectionsBlockComponent, decorators: [{
918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialReviewSectionsBlockComponent, decorators: [{
932
919
  type: Component,
933
- args: [{ selector: 'praxis-editorial-review-sections-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], template: `
920
+ args: [{ selector: 'praxis-editorial-review-sections-block', standalone: true, imports: [MatIconModule, PraxisIconDirective], template: `
934
921
  <section class="review-sections">
935
922
  @if (block().title) {
936
923
  <header class="review-header">
@@ -967,17 +954,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
967
954
 
968
955
  class EditorialSelectionCardsBlockComponent {
969
956
  i18n = inject(PraxisI18nService);
970
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
971
- runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : []));
957
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
958
+ runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : /* istanbul ignore next */ []));
972
959
  runtimeContextChange = output();
973
960
  valueChange = output();
974
- groupId = computed(() => `selection-group-${this.block().blockId}`, ...(ngDevMode ? [{ debugName: "groupId" }] : []));
961
+ groupId = computed(() => `selection-group-${this.block().blockId}`, ...(ngDevMode ? [{ debugName: "groupId" }] : /* istanbul ignore next */ []));
975
962
  gridTemplateColumns = computed(() => {
976
963
  const columns = this.block().columns ?? 2;
977
964
  return `repeat(${columns}, minmax(0, 1fr))`;
978
- }, ...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : []));
965
+ }, ...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : /* istanbul ignore next */ []));
979
966
  groupAriaLabel = computed(() => this.block().title
980
- || this.t('selection.group.label', 'Grupo de selecao'), ...(ngDevMode ? [{ debugName: "groupAriaLabel" }] : []));
967
+ || this.t('selection.group.label', 'Grupo de selecao'), ...(ngDevMode ? [{ debugName: "groupAriaLabel" }] : /* istanbul ignore next */ []));
981
968
  isSelected(value) {
982
969
  const currentValue = this.currentValue();
983
970
  if (Array.isArray(currentValue)) {
@@ -1097,8 +1084,8 @@ class EditorialSelectionCardsBlockComponent {
1097
1084
  t(key, fallback) {
1098
1085
  return this.i18n.t(`praxis.editorialForms.${key}`, undefined, fallback);
1099
1086
  }
1100
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialSelectionCardsBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialSelectionCardsBlockComponent, isStandalone: true, selector: "praxis-editorial-selection-cards-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", valueChange: "valueChange" }, ngImport: i0, template: `
1087
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialSelectionCardsBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1088
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialSelectionCardsBlockComponent, isStandalone: true, selector: "praxis-editorial-selection-cards-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", valueChange: "valueChange" }, ngImport: i0, template: `
1102
1089
  <section class="selection-block">
1103
1090
  @if (block().title) {
1104
1091
  <header class="selection-header">
@@ -1155,11 +1142,11 @@ class EditorialSelectionCardsBlockComponent {
1155
1142
  }
1156
1143
  </div>
1157
1144
  </section>
1158
- `, isInline: true, styles: [".selection-block,.selection-header{display:grid;gap:10px}.selection-header h3,.selection-header p{margin:0}.selection-header p{color:var(--editorial-text-secondary, #7b8aa0)}.selection-grid{display:grid;gap:14px}.selection-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;min-height:72px;padding:16px;border-radius:var(--editorial-card-radius, 18px);border:1px solid var(--editorial-border-color, #d9deea);background:var(--editorial-surface-primary, #fff);color:var(--editorial-text-primary, #24324a);box-shadow:var(--editorial-card-shadow, none);cursor:pointer;text-align:left;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform .12s ease}.selection-card:hover:not([disabled]){transform:translateY(-1px)}.selection-card.selected{border-color:var(--editorial-accent, #264a8a);box-shadow:0 0 0 2px color-mix(in srgb,var(--editorial-accent, #264a8a) 22%,transparent);background:color-mix(in srgb,var(--editorial-accent, #264a8a) 8%,#fff)}.selection-card[data-variant=accent]{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 4%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,transparent)}.selection-card[data-variant=outline]{box-shadow:none;background:transparent}.selection-card[data-tone=accent] .selection-icon{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,#fff);color:var(--editorial-accent, #264a8a)}.selection-card[data-tone=muted] .selection-icon{background:var(--editorial-surface-secondary, #eef2f8);color:var(--editorial-text-secondary, #7b8aa0)}.selection-card[disabled]{opacity:.5;cursor:not-allowed}.selection-leading{display:inline-flex;align-items:center;gap:12px;min-width:0;flex:1 1 auto}.selection-grid[data-icon-position=top] .selection-card{flex-direction:column;align-items:stretch}.selection-grid[data-icon-position=top] .selection-leading{display:grid;gap:10px}.selection-grid[data-icon-position=top] .selection-check{align-self:flex-end}.selection-icon,.selection-check{display:grid;place-items:center;width:28px;height:28px;border-radius:999px;background:color-mix(in srgb,var(--editorial-accent, #264a8a) 14%,#fff);color:var(--editorial-accent, #264a8a);font-size:.75rem;font-weight:700;flex:0 0 auto}.selection-icon,.selection-check mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.selection-copy{display:grid;gap:4px;min-width:0}.selection-copy span{color:var(--editorial-text-secondary, #7b8aa0);font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1145
+ `, isInline: true, styles: [".selection-block,.selection-header{display:grid;gap:10px}.selection-header h3,.selection-header p{margin:0}.selection-header p{color:var(--editorial-text-secondary, #7b8aa0)}.selection-grid{display:grid;gap:14px}.selection-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;min-height:72px;padding:16px;border-radius:var(--editorial-card-radius, 18px);border:1px solid var(--editorial-border-color, #d9deea);background:var(--editorial-surface-primary, #fff);color:var(--editorial-text-primary, #24324a);box-shadow:var(--editorial-card-shadow, none);cursor:pointer;text-align:left;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform .12s ease}.selection-card:hover:not([disabled]){transform:translateY(-1px)}.selection-card.selected{border-color:var(--editorial-accent, #264a8a);box-shadow:0 0 0 2px color-mix(in srgb,var(--editorial-accent, #264a8a) 22%,transparent);background:color-mix(in srgb,var(--editorial-accent, #264a8a) 8%,#fff)}.selection-card[data-variant=accent]{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 4%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,transparent)}.selection-card[data-variant=outline]{box-shadow:none;background:transparent}.selection-card[data-tone=accent] .selection-icon{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 18%,#fff);color:var(--editorial-accent, #264a8a)}.selection-card[data-tone=muted] .selection-icon{background:var(--editorial-surface-secondary, #eef2f8);color:var(--editorial-text-secondary, #7b8aa0)}.selection-card[disabled]{opacity:.5;cursor:not-allowed}.selection-leading{display:inline-flex;align-items:center;gap:12px;min-width:0;flex:1 1 auto}.selection-grid[data-icon-position=top] .selection-card{flex-direction:column;align-items:stretch}.selection-grid[data-icon-position=top] .selection-leading{display:grid;gap:10px}.selection-grid[data-icon-position=top] .selection-check{align-self:flex-end}.selection-icon,.selection-check{display:grid;place-items:center;width:28px;height:28px;border-radius:999px;background:color-mix(in srgb,var(--editorial-accent, #264a8a) 14%,#fff);color:var(--editorial-accent, #264a8a);font-size:.75rem;font-weight:700;flex:0 0 auto}.selection-icon,.selection-check mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.selection-copy{display:grid;gap:4px;min-width:0}.selection-copy span{color:var(--editorial-text-secondary, #7b8aa0);font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1159
1146
  }
1160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialSelectionCardsBlockComponent, decorators: [{
1147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialSelectionCardsBlockComponent, decorators: [{
1161
1148
  type: Component,
1162
- args: [{ selector: 'praxis-editorial-selection-cards-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], template: `
1149
+ args: [{ selector: 'praxis-editorial-selection-cards-block', standalone: true, imports: [MatIconModule, PraxisIconDirective], template: `
1163
1150
  <section class="selection-block">
1164
1151
  @if (block().title) {
1165
1152
  <header class="selection-header">
@@ -1220,13 +1207,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
1220
1207
  }], propDecorators: { block: [{ type: i0.Input, args: [{ isSignal: true, alias: "block", required: true }] }], runtimeContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "runtimeContext", required: false }] }], runtimeContextChange: [{ type: i0.Output, args: ["runtimeContextChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
1221
1208
 
1222
1209
  class EditorialSuccessPanelBlockComponent {
1223
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
1210
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
1224
1211
  actionTriggered = output();
1225
1212
  triggerAction(action) {
1226
1213
  this.actionTriggered.emit(action.actionId);
1227
1214
  }
1228
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialSuccessPanelBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialSuccessPanelBlockComponent, isStandalone: true, selector: "praxis-editorial-success-panel-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
1215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialSuccessPanelBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialSuccessPanelBlockComponent, isStandalone: true, selector: "praxis-editorial-success-panel-block", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
1230
1217
  <section class="success-panel" [attr.data-tone]="block().tone ?? 'success'">
1231
1218
  @if (block().icon?.name) {
1232
1219
  <div class="success-icon"><mat-icon aria-hidden="true" [praxisIcon]="block().icon?.name"></mat-icon></div>
@@ -1254,11 +1241,11 @@ class EditorialSuccessPanelBlockComponent {
1254
1241
  </button>
1255
1242
  }
1256
1243
  </section>
1257
- `, isInline: true, styles: [".success-panel{display:grid;gap:12px;text-align:center;padding:20px;border-radius:var(--editorial-card-radius, 18px);background:color-mix(in srgb,var(--editorial-success, #35b37e) 10%,#fff);border:1px solid color-mix(in srgb,var(--editorial-success, #35b37e) 32%,transparent);box-shadow:var(--editorial-card-shadow, none)}.success-panel[data-tone=accent]{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 10%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 24%,transparent)}.success-panel[data-tone=neutral]{background:var(--editorial-surface-primary, #fff);border-color:var(--editorial-border-color, #d9deea)}.success-panel h3,.success-panel p,.success-panel ul{margin:0}.success-panel ul{padding-left:20px;text-align:left}.secondary-message{color:var(--editorial-text-secondary, #7b8aa0);font-size:var(--editorial-body-size, 1rem)}.success-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:999px;background:var(--editorial-success, #35b37e);color:#fff;justify-self:center;font-weight:700}.success-panel[data-tone=accent] .success-icon{background:var(--editorial-accent, #264a8a)}.success-panel[data-tone=neutral] .success-icon{background:var(--editorial-surface-secondary, #eef2f8);color:var(--editorial-text-primary, #24324a)}.success-icon mat-icon{width:20px;height:20px;font-size:20px;line-height:20px}.success-action{justify-self:center;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;border:0;border-radius:var(--editorial-button-radius, var(--editorial-card-radius, 18px));background:var(--editorial-cta-primary, var(--editorial-success, #35b37e));color:var(--editorial-cta-primary-text, #fff);box-shadow:var(--editorial-card-shadow, none);cursor:pointer;font:inherit;font-weight:600}.success-action mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1244
+ `, isInline: true, styles: [".success-panel{display:grid;gap:12px;text-align:center;padding:20px;border-radius:var(--editorial-card-radius, 18px);background:color-mix(in srgb,var(--editorial-success, #35b37e) 10%,#fff);border:1px solid color-mix(in srgb,var(--editorial-success, #35b37e) 32%,transparent);box-shadow:var(--editorial-card-shadow, none)}.success-panel[data-tone=accent]{background:color-mix(in srgb,var(--editorial-accent, #264a8a) 10%,#fff);border-color:color-mix(in srgb,var(--editorial-accent, #264a8a) 24%,transparent)}.success-panel[data-tone=neutral]{background:var(--editorial-surface-primary, #fff);border-color:var(--editorial-border-color, #d9deea)}.success-panel h3,.success-panel p,.success-panel ul{margin:0}.success-panel ul{padding-left:20px;text-align:left}.secondary-message{color:var(--editorial-text-secondary, #7b8aa0);font-size:var(--editorial-body-size, 1rem)}.success-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:999px;background:var(--editorial-success, #35b37e);color:#fff;justify-self:center;font-weight:700}.success-panel[data-tone=accent] .success-icon{background:var(--editorial-accent, #264a8a)}.success-panel[data-tone=neutral] .success-icon{background:var(--editorial-surface-secondary, #eef2f8);color:var(--editorial-text-primary, #24324a)}.success-icon mat-icon{width:20px;height:20px;font-size:20px;line-height:20px}.success-action{justify-self:center;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;border:0;border-radius:var(--editorial-button-radius, var(--editorial-card-radius, 18px));background:var(--editorial-cta-primary, var(--editorial-success, #35b37e));color:var(--editorial-cta-primary-text, #fff);box-shadow:var(--editorial-card-shadow, none);cursor:pointer;font:inherit;font-weight:600}.success-action mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1258
1245
  }
1259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialSuccessPanelBlockComponent, decorators: [{
1246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialSuccessPanelBlockComponent, decorators: [{
1260
1247
  type: Component,
1261
- args: [{ selector: 'praxis-editorial-success-panel-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], template: `
1248
+ args: [{ selector: 'praxis-editorial-success-panel-block', standalone: true, imports: [MatIconModule, PraxisIconDirective], template: `
1262
1249
  <section class="success-panel" [attr.data-tone]="block().tone ?? 'success'">
1263
1250
  @if (block().icon?.name) {
1264
1251
  <div class="success-icon"><mat-icon aria-hidden="true" [praxisIcon]="block().icon?.name"></mat-icon></div>
@@ -1290,27 +1277,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
1290
1277
  }], propDecorators: { block: [{ type: i0.Input, args: [{ isSignal: true, alias: "block", required: true }] }], actionTriggered: [{ type: i0.Output, args: ["actionTriggered"] }] } });
1291
1278
 
1292
1279
  class EditorialBlockRendererComponent {
1293
- block = input.required(...(ngDevMode ? [{ debugName: "block" }] : []));
1294
- runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : []));
1295
- solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : []));
1296
- instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : []));
1280
+ block = input.required(...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
1281
+ runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : /* istanbul ignore next */ []));
1282
+ solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : /* istanbul ignore next */ []));
1283
+ instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : /* istanbul ignore next */ []));
1297
1284
  runtimeContextChange = output();
1298
1285
  operationalEvent = output();
1299
1286
  blockAction = output();
1300
- introHero = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "introHero" }] : []));
1301
- hero = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "hero" }] : []));
1302
- richText = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "richText" }] : []));
1303
- policyList = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "policyList" }] : []));
1304
- timeline = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "timeline" }] : []));
1305
- review = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "review" }] : []));
1306
- reviewSections = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "reviewSections" }] : []));
1307
- contextSummary = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "contextSummary" }] : []));
1308
- selectionCards = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "selectionCards" }] : []));
1309
- infoCards = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "infoCards" }] : []));
1310
- successPanel = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "successPanel" }] : []));
1311
- faq = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "faq" }] : []));
1312
- dataCollection = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "dataCollection" }] : []));
1313
- customWidget = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "customWidget" }] : []));
1287
+ introHero = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "introHero" }] : /* istanbul ignore next */ []));
1288
+ hero = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "hero" }] : /* istanbul ignore next */ []));
1289
+ richText = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "richText" }] : /* istanbul ignore next */ []));
1290
+ policyList = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "policyList" }] : /* istanbul ignore next */ []));
1291
+ timeline = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "timeline" }] : /* istanbul ignore next */ []));
1292
+ review = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "review" }] : /* istanbul ignore next */ []));
1293
+ reviewSections = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "reviewSections" }] : /* istanbul ignore next */ []));
1294
+ contextSummary = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "contextSummary" }] : /* istanbul ignore next */ []));
1295
+ selectionCards = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "selectionCards" }] : /* istanbul ignore next */ []));
1296
+ infoCards = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "infoCards" }] : /* istanbul ignore next */ []));
1297
+ successPanel = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "successPanel" }] : /* istanbul ignore next */ []));
1298
+ faq = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "faq" }] : /* istanbul ignore next */ []));
1299
+ dataCollection = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "dataCollection" }] : /* istanbul ignore next */ []));
1300
+ customWidget = computed(() => this.block(), ...(ngDevMode ? [{ debugName: "customWidget" }] : /* istanbul ignore next */ []));
1314
1301
  resolveValue(valuePath, fallback = '-') {
1315
1302
  if (!valuePath) {
1316
1303
  return fallback;
@@ -1325,8 +1312,8 @@ class EditorialBlockRendererComponent {
1325
1312
  }
1326
1313
  return valuePath ? `${contextPath}.${valuePath}` : contextPath;
1327
1314
  }
1328
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialBlockRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1329
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialBlockRendererComponent, isStandalone: true, selector: "praxis-editorial-block-renderer", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", operationalEvent: "operationalEvent", blockAction: "blockAction" }, ngImport: i0, template: `
1315
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialBlockRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1316
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialBlockRendererComponent, isStandalone: true, selector: "praxis-editorial-block-renderer", inputs: { block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: true, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { runtimeContextChange: "runtimeContextChange", operationalEvent: "operationalEvent", blockAction: "blockAction" }, ngImport: i0, template: `
1330
1317
  @switch (block().kind) {
1331
1318
  @case ('introHero') {
1332
1319
  <praxis-editorial-intro-hero-block
@@ -1500,18 +1487,17 @@ class EditorialBlockRendererComponent {
1500
1487
  />
1501
1488
  }
1502
1489
  }
1503
- `, isInline: true, styles: [":host{display:block}.block-card{display:grid;gap:12px;padding:18px;border-radius:18px;background:var(--md-sys-color-surface-container-low, #f7f2fa);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 65%,transparent)}.eyebrow{margin:0;font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--md-sys-color-primary, #6750a4)}h3,p,ul,ol,dl{margin:0}.description,.content,.timeline-item span,.policy-item p,.info-card p,.faq-item p{color:var(--md-sys-color-on-surface-variant, #49454f)}.hero-block h3 span{color:var(--md-sys-color-primary, #6750a4)}.review-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.review-grid dt{margin-bottom:4px;font-size:.78rem;color:var(--md-sys-color-on-surface-variant, #49454f)}.review-grid dd{margin:0;font-weight:600}.list-reset{list-style:none;padding:0;margin:0}.stack-sm{display:grid;gap:10px}.timeline{display:grid;gap:12px;padding-left:18px;margin:0}.timeline-item{display:grid;gap:4px}.policy-item,.faq-item,.info-card{padding:12px;border-radius:14px;background:var(--md-sys-color-surface, #fff)}.cards-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.notice-block{border-left:4px solid var(--md-sys-color-primary, #6750a4)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: EditorialDataCollectionBlockOutletComponent, selector: "praxis-editorial-data-collection-block-outlet", inputs: ["block", "runtimeContext", "solution", "instance"], outputs: ["runtimeContextChange", "operationalEvent"] }, { kind: "component", type: EditorialIntroHeroBlockComponent, selector: "praxis-editorial-intro-hero-block", inputs: ["block"], outputs: ["actionTriggered"] }, { kind: "component", type: EditorialSelectionCardsBlockComponent, selector: "praxis-editorial-selection-cards-block", inputs: ["block", "runtimeContext"], outputs: ["runtimeContextChange", "valueChange"] }, { kind: "component", type: EditorialReviewSectionsBlockComponent, selector: "praxis-editorial-review-sections-block", inputs: ["block", "runtimeContext"] }, { kind: "component", type: EditorialSuccessPanelBlockComponent, selector: "praxis-editorial-success-panel-block", inputs: ["block"], outputs: ["actionTriggered"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1490
+ `, isInline: true, styles: [":host{display:block}.block-card{display:grid;gap:12px;padding:18px;border-radius:18px;background:var(--md-sys-color-surface-container-low, #f7f2fa);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 65%,transparent)}.eyebrow{margin:0;font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--md-sys-color-primary, #6750a4)}h3,p,ul,ol,dl{margin:0}.description,.content,.timeline-item span,.policy-item p,.info-card p,.faq-item p{color:var(--md-sys-color-on-surface-variant, #49454f)}.hero-block h3 span{color:var(--md-sys-color-primary, #6750a4)}.review-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.review-grid dt{margin-bottom:4px;font-size:.78rem;color:var(--md-sys-color-on-surface-variant, #49454f)}.review-grid dd{margin:0;font-weight:600}.list-reset{list-style:none;padding:0;margin:0}.stack-sm{display:grid;gap:10px}.timeline{display:grid;gap:12px;padding-left:18px;margin:0}.timeline-item{display:grid;gap:4px}.policy-item,.faq-item,.info-card{padding:12px;border-radius:14px;background:var(--md-sys-color-surface, #fff)}.cards-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.notice-block{border-left:4px solid var(--md-sys-color-primary, #6750a4)}\n"], dependencies: [{ kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: EditorialDataCollectionBlockOutletComponent, selector: "praxis-editorial-data-collection-block-outlet", inputs: ["block", "runtimeContext", "solution", "instance"], outputs: ["runtimeContextChange", "operationalEvent"] }, { kind: "component", type: EditorialIntroHeroBlockComponent, selector: "praxis-editorial-intro-hero-block", inputs: ["block"], outputs: ["actionTriggered"] }, { kind: "component", type: EditorialSelectionCardsBlockComponent, selector: "praxis-editorial-selection-cards-block", inputs: ["block", "runtimeContext"], outputs: ["runtimeContextChange", "valueChange"] }, { kind: "component", type: EditorialReviewSectionsBlockComponent, selector: "praxis-editorial-review-sections-block", inputs: ["block", "runtimeContext"] }, { kind: "component", type: EditorialSuccessPanelBlockComponent, selector: "praxis-editorial-success-panel-block", inputs: ["block"], outputs: ["actionTriggered"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1504
1491
  }
1505
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialBlockRendererComponent, decorators: [{
1492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialBlockRendererComponent, decorators: [{
1506
1493
  type: Component,
1507
1494
  args: [{ selector: 'praxis-editorial-block-renderer', standalone: true, imports: [
1508
- CommonModule,
1509
1495
  DynamicWidgetLoaderDirective,
1510
1496
  EditorialDataCollectionBlockOutletComponent,
1511
1497
  EditorialIntroHeroBlockComponent,
1512
1498
  EditorialSelectionCardsBlockComponent,
1513
1499
  EditorialReviewSectionsBlockComponent,
1514
- EditorialSuccessPanelBlockComponent,
1500
+ EditorialSuccessPanelBlockComponent
1515
1501
  ], template: `
1516
1502
  @switch (block().kind) {
1517
1503
  @case ('introHero') {
@@ -1731,16 +1717,16 @@ function getStepDisplayState(step, steps, activeStepId, isBlocked) {
1731
1717
 
1732
1718
  class EditorialStepperComponent {
1733
1719
  i18n = inject(PraxisI18nService);
1734
- steps = input.required(...(ngDevMode ? [{ debugName: "steps" }] : []));
1735
- activeStepId = input(null, ...(ngDevMode ? [{ debugName: "activeStepId" }] : []));
1736
- config = input(null, ...(ngDevMode ? [{ debugName: "config" }] : []));
1737
- orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
1738
- progressionBlocked = input(false, ...(ngDevMode ? [{ debugName: "progressionBlocked" }] : []));
1739
- isStepSelectionBlocked = input(() => false, ...(ngDevMode ? [{ debugName: "isStepSelectionBlocked" }] : []));
1720
+ steps = input.required(...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
1721
+ activeStepId = input(null, ...(ngDevMode ? [{ debugName: "activeStepId" }] : /* istanbul ignore next */ []));
1722
+ config = input(null, ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
1723
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
1724
+ progressionBlocked = input(false, ...(ngDevMode ? [{ debugName: "progressionBlocked" }] : /* istanbul ignore next */ []));
1725
+ isStepSelectionBlocked = input(() => false, ...(ngDevMode ? [{ debugName: "isStepSelectionBlocked" }] : /* istanbul ignore next */ []));
1740
1726
  stepSelected = output();
1741
- effectiveOrientation = computed(() => this.config()?.orientation ?? this.orientation(), ...(ngDevMode ? [{ debugName: "effectiveOrientation" }] : []));
1742
- stepperVariant = computed(() => this.config()?.variant ?? 'icon-label', ...(ngDevMode ? [{ debugName: "stepperVariant" }] : []));
1743
- stepperAriaLabel = computed(() => this.t('stepper.ariaLabel', 'Etapas da jornada'), ...(ngDevMode ? [{ debugName: "stepperAriaLabel" }] : []));
1727
+ effectiveOrientation = computed(() => this.config()?.orientation ?? this.orientation(), ...(ngDevMode ? [{ debugName: "effectiveOrientation" }] : /* istanbul ignore next */ []));
1728
+ stepperVariant = computed(() => this.config()?.variant ?? 'icon-label', ...(ngDevMode ? [{ debugName: "stepperVariant" }] : /* istanbul ignore next */ []));
1729
+ stepperAriaLabel = computed(() => this.t('stepper.ariaLabel', 'Etapas da jornada'), ...(ngDevMode ? [{ debugName: "stepperAriaLabel" }] : /* istanbul ignore next */ []));
1744
1730
  stepState(step) {
1745
1731
  return getStepDisplayState(step, this.steps(), this.activeStepId(), this.progressionBlocked());
1746
1732
  }
@@ -1786,8 +1772,8 @@ class EditorialStepperComponent {
1786
1772
  t(key, fallback) {
1787
1773
  return this.i18n.t(`praxis.editorialForms.${key}`, undefined, fallback);
1788
1774
  }
1789
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1790
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialStepperComponent, isStandalone: true, selector: "praxis-editorial-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: true, transformFunction: null }, activeStepId: { classPropertyName: "activeStepId", publicName: "activeStepId", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, progressionBlocked: { classPropertyName: "progressionBlocked", publicName: "progressionBlocked", isSignal: true, isRequired: false, transformFunction: null }, isStepSelectionBlocked: { classPropertyName: "isStepSelectionBlocked", publicName: "isStepSelectionBlocked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepSelected: "stepSelected" }, ngImport: i0, template: `
1775
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1776
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialStepperComponent, isStandalone: true, selector: "praxis-editorial-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: true, transformFunction: null }, activeStepId: { classPropertyName: "activeStepId", publicName: "activeStepId", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, progressionBlocked: { classPropertyName: "progressionBlocked", publicName: "progressionBlocked", isSignal: true, isRequired: false, transformFunction: null }, isStepSelectionBlocked: { classPropertyName: "isStepSelectionBlocked", publicName: "isStepSelectionBlocked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepSelected: "stepSelected" }, ngImport: i0, template: `
1791
1777
  <ol
1792
1778
  class="steps-nav"
1793
1779
  [class.vertical]="effectiveOrientation() === 'vertical'"
@@ -1844,11 +1830,11 @@ class EditorialStepperComponent {
1844
1830
  </li>
1845
1831
  }
1846
1832
  </ol>
1847
- `, isInline: true, styles: [":host{display:block}.steps-nav{--step-indicator-size: 42px;--step-copy-padding-block: 12px;--step-copy-padding-inline: 14px;--step-copy-width: minmax(0, 176px);--step-gap: 16px;--step-connector-offset: 26px;--step-connector-size: 4px;display:flex;align-items:flex-start;gap:var(--step-gap);list-style:none;padding:0;margin:0;width:100%}.steps-nav.horizontal[data-align=center]{justify-content:center}.steps-nav.horizontal[data-align=space-between]{justify-content:space-between}.steps-nav.horizontal[data-align=space-between] .stepper-item{flex:1 1 0}.steps-nav.horizontal[data-align=start] .stepper-item,.steps-nav.horizontal[data-align=center] .stepper-item{flex:0 1 196px}.steps-nav.vertical{flex-direction:column;gap:14px}.stepper-item{display:flex;align-items:flex-start;gap:var(--step-gap);min-width:0}.steps-nav.vertical .stepper-item{align-items:stretch;flex-direction:column;gap:10px}.step-chip{position:relative;display:inline-flex;flex-direction:column;align-items:center;gap:12px;width:100%;min-width:0;padding:0;border:0;background:transparent;color:var(--editorial-text-primary, #24324a);cursor:pointer;text-align:center;transition:transform .18s ease,opacity .18s ease}.step-chip:hover:not([disabled]){transform:translateY(-1px)}.step-chip:focus-visible{outline:3px solid var(--editorial-step-active, var(--editorial-accent, #264a8a));outline:3px solid color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 32%,white);outline-offset:6px;border-radius:calc(var(--editorial-card-radius, 22px) + 4px)}.steps-nav[data-size=sm]{--step-indicator-size: 34px;--step-copy-padding-block: 9px;--step-copy-padding-inline: 12px;--step-copy-width: minmax(0, 132px);--step-gap: 12px;--step-connector-offset: 21px}.steps-nav[data-size=lg]{--step-indicator-size: 52px;--step-copy-padding-block: 15px;--step-copy-padding-inline: 18px;--step-copy-width: minmax(0, 220px);--step-gap: 20px;--step-connector-offset: 32px}.step-chip[disabled]{opacity:.72;cursor:not-allowed;transform:none}.step-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--step-indicator-size);height:var(--step-indicator-size);border-radius:999px;border:1px solid var(--editorial-border-color, #d9deea);border:1px solid color-mix(in srgb,var(--editorial-border-color, #d9deea) 74%,white);background:var(--editorial-step-pending, #eef1f7);background:radial-gradient(circle at 30% 30%,color-mix(in srgb,var(--editorial-surface-primary, #fff) 86%,white),color-mix(in srgb,var(--editorial-step-pending, #eef1f7) 92%,white));color:var(--editorial-text-secondary, #7b8aa0);font-size:.82rem;font-weight:700;flex:0 0 auto;box-shadow:inset 0 1px #ffffffeb,0 10px 22px #14274414;transition:background .18s ease,color .18s ease,box-shadow .18s ease,border-color .18s ease}.step-icon mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.steps-nav[data-size=lg] .step-icon mat-icon{width:22px;height:22px;font-size:22px;line-height:22px}.step-chip.active .step-icon{border-color:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:var(--editorial-step-active, var(--editorial-accent, #264a8a));border-color:color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 62%,white);color:var(--editorial-accent-contrast, #fff);box-shadow:0 0 0 var(--editorial-active-step-border-width, 2px) color-mix(in srgb,var(--editorial-accent, #264a8a) 20%,transparent),0 16px 28px color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 22%,transparent)}.step-chip.completed .step-icon{border-color:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:var(--editorial-step-completed, var(--editorial-success, #35b37e));border-color:color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 66%,white);color:#fff;box-shadow:0 14px 24px color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 20%,transparent)}.step-chip.blocked .step-icon{border-color:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));border-color:color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 66%,white);color:#fff;box-shadow:0 14px 24px color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 18%,transparent)}.step-copy{display:grid;gap:4px;min-width:0;width:var(--step-copy-width);padding:var(--step-copy-padding-block) var(--step-copy-padding-inline);border-radius:calc(var(--editorial-card-radius, 22px) - 4px);border:1px solid var(--editorial-border-color, #d9deea);border:1px solid color-mix(in srgb,var(--editorial-border-color, #d9deea) 92%,white);background:var(--editorial-surface-primary, #fff);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 96%,white),color-mix(in srgb,var(--editorial-surface-secondary, #f6f8fc) 74%,white));box-shadow:0 16px 32px #14274414;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease}.step-chip.active .step-copy{border-color:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 32%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 90%,white),color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 8%,var(--editorial-surface-primary, #fff)));box-shadow:0 18px 36px #1427441a,0 0 0 1px color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 12%,transparent)}.step-chip.completed .step-copy{border-color:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 34%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 88%,white),color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 8%,var(--editorial-surface-primary, #fff)))}.step-chip.blocked .step-copy{border-color:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 38%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 90%,white),color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 10%,var(--editorial-surface-primary, #fff)))}.step-label{font-weight:700;line-height:1.25;white-space:normal}.step-description{color:var(--editorial-text-secondary, #7b8aa0);font-size:.85rem;line-height:1.35}.step-connector{display:block;flex:1 1 auto;align-self:flex-start;min-width:40px;margin-top:var(--step-connector-offset);height:var(--step-connector-size);background:var(--editorial-connector, #8fd8c0);background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-border-color, #d9deea) 58%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 72%,white));border-radius:999px;opacity:.92}.steps-nav.vertical .step-connector{width:var(--step-connector-size);min-width:var(--step-connector-size);min-height:28px;margin-top:0;margin-left:calc((var(--step-indicator-size) / 2) - (var(--step-connector-size) / 2));height:32px}.step-connector[data-style=dashed]{background:repeating-linear-gradient(90deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.steps-nav.vertical .step-connector[data-style=dashed]{background:repeating-linear-gradient(180deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.step-connector[data-style=soft]{height:8px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}.steps-nav.vertical .step-connector[data-style=soft]{width:8px;min-width:8px;height:32px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}.step-connector[data-state=completed]{background:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 92%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 82%,white))}.step-connector[data-state=active]{background:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 86%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 84%,white) 60%,color-mix(in srgb,var(--editorial-border-color, #d9deea) 48%,white))}.step-connector[data-state=blocked]{background:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 78%,white),color-mix(in srgb,var(--editorial-border-color, #d9deea) 48%,white))}.steps-nav[data-variant=simple] .step-copy,.steps-nav[data-variant=simple] .step-description,.steps-nav[data-variant=icon] .step-description{display:none}.steps-nav[data-variant=simple] .step-chip,.steps-nav[data-variant=icon] .step-chip{gap:8px}.steps-nav.horizontal[data-variant=simple] .stepper-item,.steps-nav.horizontal[data-variant=icon] .stepper-item{align-items:center}.steps-nav[data-variant=rich] .step-copy{border-radius:var(--editorial-card-radius, 22px);box-shadow:0 20px 36px #14274417,0 0 0 1px #ffffff8c}.steps-nav.horizontal[data-variant=rich] .step-chip{align-items:stretch}.steps-nav.horizontal[data-variant=rich] .step-copy{text-align:left}.steps-nav.vertical .step-chip{flex-direction:row;align-items:center;justify-content:flex-start;text-align:left;gap:14px}.steps-nav.vertical .step-copy{width:100%}@media(max-width:860px){.steps-nav.horizontal{flex-direction:column;gap:12px}.steps-nav.horizontal .stepper-item{flex:none}.steps-nav.horizontal .step-chip{flex-direction:row;align-items:center;justify-content:flex-start;text-align:left}.steps-nav.horizontal .step-copy{width:100%}.steps-nav.horizontal .step-connector{width:var(--step-connector-size);min-width:var(--step-connector-size);min-height:24px;margin-top:0;margin-left:calc((var(--step-indicator-size) / 2) - (var(--step-connector-size) / 2));height:24px}.steps-nav.horizontal .step-connector[data-style=dashed]{background:repeating-linear-gradient(180deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.steps-nav.horizontal .step-connector[data-style=soft]{width:8px;min-width:8px;height:24px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}}@media(prefers-reduced-motion:reduce){.step-chip,.step-icon,.step-copy{transition:none}.step-chip:hover:not([disabled]){transform:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1833
+ `, isInline: true, styles: [":host{display:block}.steps-nav{--step-indicator-size: 42px;--step-copy-padding-block: 12px;--step-copy-padding-inline: 14px;--step-copy-width: minmax(0, 176px);--step-gap: 16px;--step-connector-offset: 26px;--step-connector-size: 4px;display:flex;align-items:flex-start;gap:var(--step-gap);list-style:none;padding:0;margin:0;width:100%}.steps-nav.horizontal[data-align=center]{justify-content:center}.steps-nav.horizontal[data-align=space-between]{justify-content:space-between}.steps-nav.horizontal[data-align=space-between] .stepper-item{flex:1 1 0}.steps-nav.horizontal[data-align=start] .stepper-item,.steps-nav.horizontal[data-align=center] .stepper-item{flex:0 1 196px}.steps-nav.vertical{flex-direction:column;gap:14px}.stepper-item{display:flex;align-items:flex-start;gap:var(--step-gap);min-width:0}.steps-nav.vertical .stepper-item{align-items:stretch;flex-direction:column;gap:10px}.step-chip{position:relative;display:inline-flex;flex-direction:column;align-items:center;gap:12px;width:100%;min-width:0;padding:0;border:0;background:transparent;color:var(--editorial-text-primary, #24324a);cursor:pointer;text-align:center;transition:transform .18s ease,opacity .18s ease}.step-chip:hover:not([disabled]){transform:translateY(-1px)}.step-chip:focus-visible{outline:3px solid var(--editorial-step-active, var(--editorial-accent, #264a8a));outline:3px solid color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 32%,white);outline-offset:6px;border-radius:calc(var(--editorial-card-radius, 22px) + 4px)}.steps-nav[data-size=sm]{--step-indicator-size: 34px;--step-copy-padding-block: 9px;--step-copy-padding-inline: 12px;--step-copy-width: minmax(0, 132px);--step-gap: 12px;--step-connector-offset: 21px}.steps-nav[data-size=lg]{--step-indicator-size: 52px;--step-copy-padding-block: 15px;--step-copy-padding-inline: 18px;--step-copy-width: minmax(0, 220px);--step-gap: 20px;--step-connector-offset: 32px}.step-chip[disabled]{opacity:.72;cursor:not-allowed;transform:none}.step-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--step-indicator-size);height:var(--step-indicator-size);border-radius:999px;border:1px solid var(--editorial-border-color, #d9deea);border:1px solid color-mix(in srgb,var(--editorial-border-color, #d9deea) 74%,white);background:var(--editorial-step-pending, #eef1f7);background:radial-gradient(circle at 30% 30%,color-mix(in srgb,var(--editorial-surface-primary, #fff) 86%,white),color-mix(in srgb,var(--editorial-step-pending, #eef1f7) 92%,white));color:var(--editorial-text-secondary, #7b8aa0);font-size:.82rem;font-weight:700;flex:0 0 auto;box-shadow:inset 0 1px #ffffffeb,0 10px 22px #14274414;transition:background .18s ease,color .18s ease,box-shadow .18s ease,border-color .18s ease}.step-icon mat-icon{width:18px;height:18px;font-size:18px;line-height:18px}.steps-nav[data-size=lg] .step-icon mat-icon{width:22px;height:22px;font-size:22px;line-height:22px}.step-chip.active .step-icon{border-color:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:var(--editorial-step-active, var(--editorial-accent, #264a8a));border-color:color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 62%,white);color:var(--editorial-accent-contrast, #fff);box-shadow:0 0 0 var(--editorial-active-step-border-width, 2px) color-mix(in srgb,var(--editorial-accent, #264a8a) 20%,transparent),0 16px 28px color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 22%,transparent)}.step-chip.completed .step-icon{border-color:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:var(--editorial-step-completed, var(--editorial-success, #35b37e));border-color:color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 66%,white);color:#fff;box-shadow:0 14px 24px color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 20%,transparent)}.step-chip.blocked .step-icon{border-color:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));border-color:color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 66%,white);color:#fff;box-shadow:0 14px 24px color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 18%,transparent)}.step-copy{display:grid;gap:4px;min-width:0;width:var(--step-copy-width);padding:var(--step-copy-padding-block) var(--step-copy-padding-inline);border-radius:calc(var(--editorial-card-radius, 22px) - 4px);border:1px solid var(--editorial-border-color, #d9deea);border:1px solid color-mix(in srgb,var(--editorial-border-color, #d9deea) 92%,white);background:var(--editorial-surface-primary, #fff);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 96%,white),color-mix(in srgb,var(--editorial-surface-secondary, #f6f8fc) 74%,white));box-shadow:0 16px 32px #14274414;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease}.step-chip.active .step-copy{border-color:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 32%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 90%,white),color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 8%,var(--editorial-surface-primary, #fff)));box-shadow:0 18px 36px #1427441a,0 0 0 1px color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 12%,transparent)}.step-chip.completed .step-copy{border-color:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 34%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 88%,white),color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 8%,var(--editorial-surface-primary, #fff)))}.step-chip.blocked .step-copy{border-color:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:var(--editorial-surface-primary, #fff);border-color:color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 38%,var(--editorial-border-color, #d9deea));background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-surface-primary, #fff) 90%,white),color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 10%,var(--editorial-surface-primary, #fff)))}.step-label{font-weight:700;line-height:1.25;white-space:normal}.step-description{color:var(--editorial-text-secondary, #7b8aa0);font-size:.85rem;line-height:1.35}.step-connector{display:block;flex:1 1 auto;align-self:flex-start;min-width:40px;margin-top:var(--step-connector-offset);height:var(--step-connector-size);background:var(--editorial-connector, #8fd8c0);background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-border-color, #d9deea) 58%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 72%,white));border-radius:999px;opacity:.92}.steps-nav.vertical .step-connector{width:var(--step-connector-size);min-width:var(--step-connector-size);min-height:28px;margin-top:0;margin-left:calc((var(--step-indicator-size) / 2) - (var(--step-connector-size) / 2));height:32px}.step-connector[data-style=dashed]{background:repeating-linear-gradient(90deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.steps-nav.vertical .step-connector[data-style=dashed]{background:repeating-linear-gradient(180deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.step-connector[data-style=soft]{height:8px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}.steps-nav.vertical .step-connector[data-style=soft]{width:8px;min-width:8px;height:32px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}.step-connector[data-state=completed]{background:var(--editorial-step-completed, var(--editorial-success, #35b37e));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-completed, var(--editorial-success, #35b37e)) 92%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 82%,white))}.step-connector[data-state=active]{background:var(--editorial-step-active, var(--editorial-accent, #264a8a));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-active, var(--editorial-accent, #264a8a)) 86%,white),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 84%,white) 60%,color-mix(in srgb,var(--editorial-border-color, #d9deea) 48%,white))}.step-connector[data-state=blocked]{background:var(--editorial-step-blocked, var(--editorial-warning, #f28c38));background:linear-gradient(90deg,color-mix(in srgb,var(--editorial-step-blocked, var(--editorial-warning, #f28c38)) 78%,white),color-mix(in srgb,var(--editorial-border-color, #d9deea) 48%,white))}.steps-nav[data-variant=simple] .step-copy,.steps-nav[data-variant=simple] .step-description,.steps-nav[data-variant=icon] .step-description{display:none}.steps-nav[data-variant=simple] .step-chip,.steps-nav[data-variant=icon] .step-chip{gap:8px}.steps-nav.horizontal[data-variant=simple] .stepper-item,.steps-nav.horizontal[data-variant=icon] .stepper-item{align-items:center}.steps-nav[data-variant=rich] .step-copy{border-radius:var(--editorial-card-radius, 22px);box-shadow:0 20px 36px #14274417,0 0 0 1px #ffffff8c}.steps-nav.horizontal[data-variant=rich] .step-chip{align-items:stretch}.steps-nav.horizontal[data-variant=rich] .step-copy{text-align:left}.steps-nav.vertical .step-chip{flex-direction:row;align-items:center;justify-content:flex-start;text-align:left;gap:14px}.steps-nav.vertical .step-copy{width:100%}@media(max-width:860px){.steps-nav.horizontal{flex-direction:column;gap:12px}.steps-nav.horizontal .stepper-item{flex:none}.steps-nav.horizontal .step-chip{flex-direction:row;align-items:center;justify-content:flex-start;text-align:left}.steps-nav.horizontal .step-copy{width:100%}.steps-nav.horizontal .step-connector{width:var(--step-connector-size);min-width:var(--step-connector-size);min-height:24px;margin-top:0;margin-left:calc((var(--step-indicator-size) / 2) - (var(--step-connector-size) / 2));height:24px}.steps-nav.horizontal .step-connector[data-style=dashed]{background:repeating-linear-gradient(180deg,var(--editorial-connector, #8fd8c0) 0 8px,transparent 8px 14px)}.steps-nav.horizontal .step-connector[data-style=soft]{width:8px;min-width:8px;height:24px;background:var(--editorial-connector, #8fd8c0);background:linear-gradient(180deg,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent),color-mix(in srgb,var(--editorial-connector, #8fd8c0) 88%,white) 55%,color-mix(in srgb,var(--editorial-connector, #8fd8c0) 24%,transparent))}}@media(prefers-reduced-motion:reduce){.step-chip,.step-icon,.step-copy{transition:none}.step-chip:hover:not([disabled]){transform:none}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1848
1834
  }
1849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialStepperComponent, decorators: [{
1835
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialStepperComponent, decorators: [{
1850
1836
  type: Component,
1851
- args: [{ selector: 'praxis-editorial-stepper', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], template: `
1837
+ args: [{ selector: 'praxis-editorial-stepper', standalone: true, imports: [MatIconModule, PraxisIconDirective], template: `
1852
1838
  <ol
1853
1839
  class="steps-nav"
1854
1840
  [class.vertical]="effectiveOrientation() === 'vertical'"
@@ -2640,8 +2626,8 @@ function isPlainObject(value) {
2640
2626
  }
2641
2627
 
2642
2628
  class EditorialRuntimeState {
2643
- journeyId = signal(null, ...(ngDevMode ? [{ debugName: "journeyId" }] : []));
2644
- stepId = signal(null, ...(ngDevMode ? [{ debugName: "stepId" }] : []));
2629
+ journeyId = signal(null, ...(ngDevMode ? [{ debugName: "journeyId" }] : /* istanbul ignore next */ []));
2630
+ stepId = signal(null, ...(ngDevMode ? [{ debugName: "stepId" }] : /* istanbul ignore next */ []));
2645
2631
  activeJourneyId = this.journeyId.asReadonly();
2646
2632
  activeStepId = this.stepId.asReadonly();
2647
2633
  connect(solution, instance, runtimeContext) {
@@ -2649,10 +2635,10 @@ class EditorialRuntimeState {
2649
2635
  solution: solution(),
2650
2636
  instance: instance(),
2651
2637
  runtimeContext: runtimeContext(),
2652
- }), ...(ngDevMode ? [{ debugName: "snapshot" }] : []));
2653
- const journeys = computed(() => snapshot().journeys, ...(ngDevMode ? [{ debugName: "journeys" }] : []));
2654
- const activeJourney = computed(() => resolveActiveJourney(journeys(), this.journeyId()), ...(ngDevMode ? [{ debugName: "activeJourney" }] : []));
2655
- const activeStep = computed(() => resolveActiveStep(activeJourney(), this.stepId()), ...(ngDevMode ? [{ debugName: "activeStep" }] : []));
2638
+ }), ...(ngDevMode ? [{ debugName: "snapshot" }] : /* istanbul ignore next */ []));
2639
+ const journeys = computed(() => snapshot().journeys, ...(ngDevMode ? [{ debugName: "journeys" }] : /* istanbul ignore next */ []));
2640
+ const activeJourney = computed(() => resolveActiveJourney(journeys(), this.journeyId()), ...(ngDevMode ? [{ debugName: "activeJourney" }] : /* istanbul ignore next */ []));
2641
+ const activeStep = computed(() => resolveActiveStep(activeJourney(), this.stepId()), ...(ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []));
2656
2642
  return {
2657
2643
  snapshot,
2658
2644
  journeys,
@@ -2809,68 +2795,68 @@ function toRgbTuple(value) {
2809
2795
 
2810
2796
  class EditorialFormRuntimeComponent {
2811
2797
  i18n = inject(PraxisI18nService);
2812
- solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : []));
2813
- instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : []));
2814
- runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : []));
2815
- hostConfig = input(null, ...(ngDevMode ? [{ debugName: "hostConfig" }] : []));
2798
+ solution = input(null, ...(ngDevMode ? [{ debugName: "solution" }] : /* istanbul ignore next */ []));
2799
+ instance = input(null, ...(ngDevMode ? [{ debugName: "instance" }] : /* istanbul ignore next */ []));
2800
+ runtimeContext = input(null, ...(ngDevMode ? [{ debugName: "runtimeContext" }] : /* istanbul ignore next */ []));
2801
+ hostConfig = input(null, ...(ngDevMode ? [{ debugName: "hostConfig" }] : /* istanbul ignore next */ []));
2816
2802
  snapshotChange = output();
2817
2803
  fallbackChange = output();
2818
2804
  operationalEvent = output();
2819
2805
  state = new EditorialRuntimeState();
2820
- solutionState = signal(null, ...(ngDevMode ? [{ debugName: "solutionState" }] : []));
2821
- instanceState = signal(null, ...(ngDevMode ? [{ debugName: "instanceState" }] : []));
2822
- runtimeContextState = signal(null, ...(ngDevMode ? [{ debugName: "runtimeContextState" }] : []));
2823
- compactViewport = signal(false, ...(ngDevMode ? [{ debugName: "compactViewport" }] : []));
2806
+ solutionState = signal(null, ...(ngDevMode ? [{ debugName: "solutionState" }] : /* istanbul ignore next */ []));
2807
+ instanceState = signal(null, ...(ngDevMode ? [{ debugName: "instanceState" }] : /* istanbul ignore next */ []));
2808
+ runtimeContextState = signal(null, ...(ngDevMode ? [{ debugName: "runtimeContextState" }] : /* istanbul ignore next */ []));
2809
+ compactViewport = signal(false, ...(ngDevMode ? [{ debugName: "compactViewport" }] : /* istanbul ignore next */ []));
2824
2810
  lastSnapshotSignature = null;
2825
2811
  lastDiagnosticsSignature = null;
2826
2812
  lastFallbackSignature = null;
2827
2813
  lastBlockingSignature = null;
2828
2814
  lastOverrideConflictSignature = null;
2829
2815
  runtime = this.state.connect(this.solutionState, this.instanceState, this.runtimeContextState);
2830
- snapshot = computed(() => this.runtime.snapshot(), ...(ngDevMode ? [{ debugName: "snapshot" }] : []));
2816
+ snapshot = computed(() => this.runtime.snapshot(), ...(ngDevMode ? [{ debugName: "snapshot" }] : /* istanbul ignore next */ []));
2831
2817
  resolvedHostConfig = computed(() => ({
2832
2818
  ...DEFAULT_EDITORIAL_RUNTIME_HOST_CONFIG,
2833
2819
  ...(this.hostConfig() ?? {}),
2834
- }), ...(ngDevMode ? [{ debugName: "resolvedHostConfig" }] : []));
2835
- journeys = computed(() => this.runtime.journeys(), ...(ngDevMode ? [{ debugName: "journeys" }] : []));
2836
- activeJourney = computed(() => this.runtime.activeJourney(), ...(ngDevMode ? [{ debugName: "activeJourney" }] : []));
2837
- activeStep = computed(() => this.runtime.activeStep(), ...(ngDevMode ? [{ debugName: "activeStep" }] : []));
2838
- resolvedContext = computed(() => this.snapshot().context, ...(ngDevMode ? [{ debugName: "resolvedContext" }] : []));
2839
- runtimeDiagnostics = computed(() => this.snapshot().diagnostics, ...(ngDevMode ? [{ debugName: "runtimeDiagnostics" }] : []));
2820
+ }), ...(ngDevMode ? [{ debugName: "resolvedHostConfig" }] : /* istanbul ignore next */ []));
2821
+ journeys = computed(() => this.runtime.journeys(), ...(ngDevMode ? [{ debugName: "journeys" }] : /* istanbul ignore next */ []));
2822
+ activeJourney = computed(() => this.runtime.activeJourney(), ...(ngDevMode ? [{ debugName: "activeJourney" }] : /* istanbul ignore next */ []));
2823
+ activeStep = computed(() => this.runtime.activeStep(), ...(ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []));
2824
+ resolvedContext = computed(() => this.snapshot().context, ...(ngDevMode ? [{ debugName: "resolvedContext" }] : /* istanbul ignore next */ []));
2825
+ runtimeDiagnostics = computed(() => this.snapshot().diagnostics, ...(ngDevMode ? [{ debugName: "runtimeDiagnostics" }] : /* istanbul ignore next */ []));
2840
2826
  fallbackState = computed(() => deriveRuntimeFallbackState(this.snapshot(), {
2841
2827
  journeyId: this.activeJourney()?.journeyId,
2842
2828
  stepId: this.activeStep()?.stepId,
2843
- }), ...(ngDevMode ? [{ debugName: "fallbackState" }] : []));
2844
- diagnosticItems = computed(() => sortDiagnostics(dedupeDiagnostics(this.runtimeDiagnostics().items)), ...(ngDevMode ? [{ debugName: "diagnosticItems" }] : []));
2845
- globalDiagnostics = computed(() => this.diagnosticItems().filter((item) => item.scopeKind === 'global'), ...(ngDevMode ? [{ debugName: "globalDiagnostics" }] : []));
2846
- contextualDiagnostics = computed(() => this.diagnosticItems().filter((item) => item.scopeKind !== 'global'), ...(ngDevMode ? [{ debugName: "contextualDiagnostics" }] : []));
2847
- diagnosticsErrorCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'error').length, ...(ngDevMode ? [{ debugName: "diagnosticsErrorCount" }] : []));
2848
- diagnosticsWarningCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'warning').length, ...(ngDevMode ? [{ debugName: "diagnosticsWarningCount" }] : []));
2849
- diagnosticsInfoCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'info').length, ...(ngDevMode ? [{ debugName: "diagnosticsInfoCount" }] : []));
2850
- activeStepDiagnostics = computed(() => this.diagnosticItems().filter((item) => isDiagnosticInActiveStep(item, this.activeJourney()?.journeyId, this.activeStep()?.stepId)), ...(ngDevMode ? [{ debugName: "activeStepDiagnostics" }] : []));
2851
- activeStepHasErrors = computed(() => this.activeStepDiagnostics().some((item) => item.severity === 'error'), ...(ngDevMode ? [{ debugName: "activeStepHasErrors" }] : []));
2852
- activeStepHasWarnings = computed(() => this.activeStepDiagnostics().some((item) => item.severity === 'warning'), ...(ngDevMode ? [{ debugName: "activeStepHasWarnings" }] : []));
2829
+ }), ...(ngDevMode ? [{ debugName: "fallbackState" }] : /* istanbul ignore next */ []));
2830
+ diagnosticItems = computed(() => sortDiagnostics(dedupeDiagnostics(this.runtimeDiagnostics().items)), ...(ngDevMode ? [{ debugName: "diagnosticItems" }] : /* istanbul ignore next */ []));
2831
+ globalDiagnostics = computed(() => this.diagnosticItems().filter((item) => item.scopeKind === 'global'), ...(ngDevMode ? [{ debugName: "globalDiagnostics" }] : /* istanbul ignore next */ []));
2832
+ contextualDiagnostics = computed(() => this.diagnosticItems().filter((item) => item.scopeKind !== 'global'), ...(ngDevMode ? [{ debugName: "contextualDiagnostics" }] : /* istanbul ignore next */ []));
2833
+ diagnosticsErrorCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'error').length, ...(ngDevMode ? [{ debugName: "diagnosticsErrorCount" }] : /* istanbul ignore next */ []));
2834
+ diagnosticsWarningCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'warning').length, ...(ngDevMode ? [{ debugName: "diagnosticsWarningCount" }] : /* istanbul ignore next */ []));
2835
+ diagnosticsInfoCount = computed(() => this.diagnosticItems().filter((item) => item.severity === 'info').length, ...(ngDevMode ? [{ debugName: "diagnosticsInfoCount" }] : /* istanbul ignore next */ []));
2836
+ activeStepDiagnostics = computed(() => this.diagnosticItems().filter((item) => isDiagnosticInActiveStep(item, this.activeJourney()?.journeyId, this.activeStep()?.stepId)), ...(ngDevMode ? [{ debugName: "activeStepDiagnostics" }] : /* istanbul ignore next */ []));
2837
+ activeStepHasErrors = computed(() => this.activeStepDiagnostics().some((item) => item.severity === 'error'), ...(ngDevMode ? [{ debugName: "activeStepHasErrors" }] : /* istanbul ignore next */ []));
2838
+ activeStepHasWarnings = computed(() => this.activeStepDiagnostics().some((item) => item.severity === 'warning'), ...(ngDevMode ? [{ debugName: "activeStepHasWarnings" }] : /* istanbul ignore next */ []));
2853
2839
  diagnosticsMessage = computed(() => this.fallbackState().mode === 'blocked'
2854
2840
  ? this.t('runtime.diagnostics.message.blocked', 'Existem inconsistencias bloqueadoras que impedem a progressao segura do fluxo editorial.')
2855
2841
  : this.fallbackState().mode === 'degraded'
2856
2842
  ? this.t('runtime.diagnostics.message.degraded', 'O runtime esta operando de forma degradada e requer atencao operacional.')
2857
2843
  : this.runtimeDiagnostics().hasErrors
2858
2844
  ? this.t('runtime.diagnostics.message.error', 'Existem inconsistencias que podem comprometer a experiencia editorial.')
2859
- : this.t('runtime.diagnostics.message.warning', 'Existem avisos operacionais para revisar nesta instancia editorial.'), ...(ngDevMode ? [{ debugName: "diagnosticsMessage" }] : []));
2860
- activeGlobalDiagnostics = computed(() => this.globalDiagnostics().filter((item) => item.severity === 'error'), ...(ngDevMode ? [{ debugName: "activeGlobalDiagnostics" }] : []));
2861
- visibleBlocks = computed(() => getVisibleBlocks(this.activeStep()?.blocks, this.resolvedContext()), ...(ngDevMode ? [{ debugName: "visibleBlocks" }] : []));
2862
- runtimeTitle = computed(() => this.snapshot().title, ...(ngDevMode ? [{ debugName: "runtimeTitle" }] : []));
2863
- runtimeDescription = computed(() => this.snapshot().description, ...(ngDevMode ? [{ debugName: "runtimeDescription" }] : []));
2864
- runtimeEyebrow = computed(() => this.snapshot().problemType, ...(ngDevMode ? [{ debugName: "runtimeEyebrow" }] : []));
2865
- presentation = computed(() => this.snapshot().presentation, ...(ngDevMode ? [{ debugName: "presentation" }] : []));
2866
- runtimeCssVars = computed(() => buildRuntimeCssVars(this.presentation()?.theme), ...(ngDevMode ? [{ debugName: "runtimeCssVars" }] : []));
2867
- runtimeLayoutCss = computed(() => buildRuntimeLayoutCss(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "runtimeLayoutCss" }] : []));
2868
- runtimeStyleAttr = computed(() => [this.runtimeCssVars(), this.runtimeLayoutCss()].filter(Boolean).join(';'), ...(ngDevMode ? [{ debugName: "runtimeStyleAttr" }] : []));
2869
- effectiveOrientation = computed(() => resolveRuntimeOrientation(this.presentation()?.layout, this.presentation()?.stepper, this.compactViewport()), ...(ngDevMode ? [{ debugName: "effectiveOrientation" }] : []));
2870
- shellVariant = computed(() => resolveShellVariant(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "shellVariant" }] : []));
2871
- effectiveDensity = computed(() => resolveDensity(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "effectiveDensity" }] : []));
2872
- stepperConfig = computed(() => this.presentation()?.stepper ?? null, ...(ngDevMode ? [{ debugName: "stepperConfig" }] : []));
2873
- stepperVisible = computed(() => this.stepperConfig()?.visible !== false, ...(ngDevMode ? [{ debugName: "stepperVisible" }] : []));
2845
+ : this.t('runtime.diagnostics.message.warning', 'Existem avisos operacionais para revisar nesta instancia editorial.'), ...(ngDevMode ? [{ debugName: "diagnosticsMessage" }] : /* istanbul ignore next */ []));
2846
+ activeGlobalDiagnostics = computed(() => this.globalDiagnostics().filter((item) => item.severity === 'error'), ...(ngDevMode ? [{ debugName: "activeGlobalDiagnostics" }] : /* istanbul ignore next */ []));
2847
+ visibleBlocks = computed(() => getVisibleBlocks(this.activeStep()?.blocks, this.resolvedContext()), ...(ngDevMode ? [{ debugName: "visibleBlocks" }] : /* istanbul ignore next */ []));
2848
+ runtimeTitle = computed(() => this.snapshot().title, ...(ngDevMode ? [{ debugName: "runtimeTitle" }] : /* istanbul ignore next */ []));
2849
+ runtimeDescription = computed(() => this.snapshot().description, ...(ngDevMode ? [{ debugName: "runtimeDescription" }] : /* istanbul ignore next */ []));
2850
+ runtimeEyebrow = computed(() => this.snapshot().problemType, ...(ngDevMode ? [{ debugName: "runtimeEyebrow" }] : /* istanbul ignore next */ []));
2851
+ presentation = computed(() => this.snapshot().presentation, ...(ngDevMode ? [{ debugName: "presentation" }] : /* istanbul ignore next */ []));
2852
+ runtimeCssVars = computed(() => buildRuntimeCssVars(this.presentation()?.theme), ...(ngDevMode ? [{ debugName: "runtimeCssVars" }] : /* istanbul ignore next */ []));
2853
+ runtimeLayoutCss = computed(() => buildRuntimeLayoutCss(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "runtimeLayoutCss" }] : /* istanbul ignore next */ []));
2854
+ runtimeStyleAttr = computed(() => [this.runtimeCssVars(), this.runtimeLayoutCss()].filter(Boolean).join(';'), ...(ngDevMode ? [{ debugName: "runtimeStyleAttr" }] : /* istanbul ignore next */ []));
2855
+ effectiveOrientation = computed(() => resolveRuntimeOrientation(this.presentation()?.layout, this.presentation()?.stepper, this.compactViewport()), ...(ngDevMode ? [{ debugName: "effectiveOrientation" }] : /* istanbul ignore next */ []));
2856
+ shellVariant = computed(() => resolveShellVariant(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "shellVariant" }] : /* istanbul ignore next */ []));
2857
+ effectiveDensity = computed(() => resolveDensity(this.presentation()?.layout), ...(ngDevMode ? [{ debugName: "effectiveDensity" }] : /* istanbul ignore next */ []));
2858
+ stepperConfig = computed(() => this.presentation()?.stepper ?? null, ...(ngDevMode ? [{ debugName: "stepperConfig" }] : /* istanbul ignore next */ []));
2859
+ stepperVisible = computed(() => this.stepperConfig()?.visible !== false, ...(ngDevMode ? [{ debugName: "stepperVisible" }] : /* istanbul ignore next */ []));
2874
2860
  stepSelectionBlocker = (stepId) => this.isStepSelectionBlocked(stepId);
2875
2861
  fallbackLabel = computed(() => {
2876
2862
  if (this.fallbackState().mode === 'blocked') {
@@ -2883,7 +2869,7 @@ class EditorialFormRuntimeComponent {
2883
2869
  return this.t('runtime.fallback.warning', 'Runtime com aviso');
2884
2870
  }
2885
2871
  return this.t('runtime.fallback.healthy', 'Runtime saudavel');
2886
- }, ...(ngDevMode ? [{ debugName: "fallbackLabel" }] : []));
2872
+ }, ...(ngDevMode ? [{ debugName: "fallbackLabel" }] : /* istanbul ignore next */ []));
2887
2873
  currentStepIndex = computed(() => {
2888
2874
  const journey = this.activeJourney();
2889
2875
  const step = this.activeStep();
@@ -2891,12 +2877,12 @@ class EditorialFormRuntimeComponent {
2891
2877
  return 0;
2892
2878
  }
2893
2879
  return Math.max(0, journey.steps.findIndex((candidate) => candidate.stepId === step.stepId));
2894
- }, ...(ngDevMode ? [{ debugName: "currentStepIndex" }] : []));
2895
- hasPreviousStep = computed(() => this.currentStepIndex() > 0, ...(ngDevMode ? [{ debugName: "hasPreviousStep" }] : []));
2880
+ }, ...(ngDevMode ? [{ debugName: "currentStepIndex" }] : /* istanbul ignore next */ []));
2881
+ hasPreviousStep = computed(() => this.currentStepIndex() > 0, ...(ngDevMode ? [{ debugName: "hasPreviousStep" }] : /* istanbul ignore next */ []));
2896
2882
  hasNextStep = computed(() => {
2897
2883
  const journey = this.activeJourney();
2898
2884
  return !!journey && this.currentStepIndex() < journey.steps.length - 1;
2899
- }, ...(ngDevMode ? [{ debugName: "hasNextStep" }] : []));
2885
+ }, ...(ngDevMode ? [{ debugName: "hasNextStep" }] : /* istanbul ignore next */ []));
2900
2886
  constructor() {
2901
2887
  effect(() => {
2902
2888
  this.solutionState.set(this.solution());
@@ -3136,8 +3122,8 @@ class EditorialFormRuntimeComponent {
3136
3122
  t(key, fallback, params) {
3137
3123
  return this.i18n.t(`praxis.editorialForms.${key}`, params, fallback);
3138
3124
  }
3139
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialFormRuntimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3140
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: EditorialFormRuntimeComponent, isStandalone: true, selector: "praxis-editorial-form-runtime", inputs: { solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, hostConfig: { classPropertyName: "hostConfig", publicName: "hostConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { snapshotChange: "snapshotChange", fallbackChange: "fallbackChange", operationalEvent: "operationalEvent" }, ngImport: i0, template: `
3125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialFormRuntimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3126
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: EditorialFormRuntimeComponent, isStandalone: true, selector: "praxis-editorial-form-runtime", inputs: { solution: { classPropertyName: "solution", publicName: "solution", isSignal: true, isRequired: false, transformFunction: null }, instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: false, transformFunction: null }, runtimeContext: { classPropertyName: "runtimeContext", publicName: "runtimeContext", isSignal: true, isRequired: false, transformFunction: null }, hostConfig: { classPropertyName: "hostConfig", publicName: "hostConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { snapshotChange: "snapshotChange", fallbackChange: "fallbackChange", operationalEvent: "operationalEvent" }, ngImport: i0, template: `
3141
3127
  <section
3142
3128
  class="editorial-runtime"
3143
3129
  [class.orientation-horizontal]="effectiveOrientation() === 'horizontal'"
@@ -3408,11 +3394,11 @@ class EditorialFormRuntimeComponent {
3408
3394
  </section>
3409
3395
  }
3410
3396
  </section>
3411
- `, isInline: true, styles: [":host{display:block}.editorial-runtime{display:grid;gap:24px;padding:var(--editorial-page-padding, 24px);color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f));background:var(--editorial-page-background, var(--md-sys-color-surface, #fdf8fd));font-family:var(--editorial-body-font-family, inherit)}.runtime-header,.journey-card,.empty-state,.diagnostics-panel{border:var(--editorial-shell-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 70%,transparent);border-radius:var(--editorial-shell-radius, 20px);background:var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa));padding:var(--editorial-shell-padding, 20px);box-shadow:var(--editorial-shell-shadow, none)}.diagnostics-panel{display:grid;gap:10px}.diagnostics-panel.warning{border-color:color-mix(in srgb,#b26a00 55%,var(--md-sys-color-outline-variant, #cac4d0));background:color-mix(in srgb,#fff4de 78%,var(--md-sys-color-surface-container-low, #f7f2fa))}.diagnostics-panel.error{border-color:color-mix(in srgb,#b3261e 60%,var(--md-sys-color-outline-variant, #cac4d0));background:color-mix(in srgb,#fde7e9 78%,var(--md-sys-color-surface-container-low, #f7f2fa))}.diagnostics-list{margin:0;padding-left:18px;display:grid;gap:8px}.diagnostics-summary{display:flex;flex-wrap:wrap;gap:8px}.summary-pill{display:inline-flex;align-items:center;min-height:32px;padding:6px 10px;border-radius:999px;font-size:.85rem;border:1px solid transparent;background:color-mix(in srgb,var(--md-sys-color-surface, #fff) 85%,transparent)}.summary-pill.error{border-color:color-mix(in srgb,#b3261e 45%,transparent)}.summary-pill.warning{border-color:color-mix(in srgb,#b26a00 45%,transparent)}.summary-pill.info{border-color:color-mix(in srgb,#00639b 45%,transparent)}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-width:22px;min-height:22px;padding:0 6px;border-radius:999px;font-size:.75rem;font-weight:700;background:var(--md-sys-color-surface, #fff)}.status-badge.error{color:#8c1d18;background:#fde7e9}.status-badge.warning{color:#7a4b00;background:#fff4de}.diagnostics-details summary{cursor:pointer;font-weight:600}.diagnostic-group{display:grid;gap:8px;padding:12px 0}.diagnostic-group.global{border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 65%,transparent);margin-bottom:12px}.step-panel.error{border-left:4px solid #b3261e}.step-panel.warning{border-left:4px solid #b26a00}.step-diagnostics{display:grid;gap:8px;padding:14px 16px;border-radius:16px}.step-diagnostics.error{background:#fde7e9;color:#5b1210}.step-diagnostics.warning{background:#fff4de;color:#6b4300}.step-diagnostics.global{background:#fde7e9;color:#5b1210;border:1px solid color-mix(in srgb,#b3261e 35%,transparent)}.diagnostics-list.contextual{padding-left:16px}.diagnostic-location{display:block;margin-top:4px;font-size:.82rem;opacity:.85}.step-blocking-note{font-size:.9rem;color:#8c1d18}.eyebrow{margin:0 0 8px;text-transform:uppercase;letter-spacing:.08em;font-size:var(--editorial-caption-size, .75rem);color:var(--editorial-accent, var(--md-sys-color-primary, #6750a4));font-weight:700}.runtime-state-pill{justify-self:start;display:inline-flex;align-items:center;min-height:30px;padding:4px 10px;border-radius:999px;font-size:.8rem;font-weight:700;background:color-mix(in srgb,var(--md-sys-color-surface, #fff) 88%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 70%,transparent)}.runtime-state-pill[data-mode=warning]{color:#7a4b00;background:#fff4de}.runtime-state-pill[data-mode=degraded]{color:#8c1d18;background:#fde7e9}.runtime-state-pill[data-mode=blocked]{color:#8c1d18;background:#fde7e9;border-color:color-mix(in srgb,#b3261e 55%,transparent)}h1,h2,h3,p{margin:0}h1{font-size:var(--editorial-hero-title-size, 2rem);line-height:1.1}.step-header h3{font-size:var(--editorial-step-title-size, 1.25rem);line-height:1.2}.runtime-header,.journey-card,.journey-header,.step-panel{display:grid;gap:12px}.editorial-runtime[data-shell-variant=sidebar-journey] .journey-card,.orientation-vertical .journey-card{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start}.description,.journey-header p,.step-header p,.step-counter,.empty-state p{font-size:var(--editorial-body-size, 1rem);color:var(--editorial-text-secondary, var(--md-sys-color-on-surface-variant, #49454f))}.journey-tabs,.step-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.journey-tab,.step-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:10px 12px;border-radius:var(--editorial-button-radius, 999px);border:1px solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 75%,transparent);background:var(--editorial-surface-primary, var(--md-sys-color-surface, #fff));color:inherit;box-shadow:var(--editorial-card-shadow, none);cursor:pointer}.journey-tab.active,.step-actions button.primary{background:var(--editorial-cta-primary, var(--editorial-accent, var(--md-sys-color-primary, #6750a4)));color:var(--editorial-cta-primary-text, var(--editorial-accent-contrast, var(--md-sys-color-on-primary, #fff)));border-color:transparent}.step-actions button.secondary{color:var(--editorial-cta-primary, var(--editorial-accent, var(--md-sys-color-primary, #6750a4)))}.step-header{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.block-stack{display:grid;gap:var(--editorial-block-gap, 16px)}.step-actions button[disabled]{opacity:.5;cursor:not-allowed}.density-compact{--editorial-page-padding: 16px;--editorial-shell-padding: 16px;--editorial-block-gap: 12px}.density-comfortable{--editorial-page-padding: 24px;--editorial-shell-padding: 20px;--editorial-block-gap: 16px}.density-relaxed{--editorial-page-padding: 32px;--editorial-shell-padding: 28px;--editorial-block-gap: 20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: EditorialBlockRendererComponent, selector: "praxis-editorial-block-renderer", inputs: ["block", "runtimeContext", "solution", "instance"], outputs: ["runtimeContextChange", "operationalEvent", "blockAction"] }, { kind: "component", type: EditorialStepperComponent, selector: "praxis-editorial-stepper", inputs: ["steps", "activeStepId", "config", "orientation", "progressionBlocked", "isStepSelectionBlocked"], outputs: ["stepSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3397
+ `, isInline: true, styles: [":host{display:block}.editorial-runtime{display:grid;gap:24px;padding:var(--editorial-page-padding, 24px);color:var(--editorial-text-primary, var(--md-sys-color-on-surface, #1b1b1f));background:var(--editorial-page-background, var(--md-sys-color-surface, #fdf8fd));font-family:var(--editorial-body-font-family, inherit)}.runtime-header,.journey-card,.empty-state,.diagnostics-panel{border:var(--editorial-shell-border-width, 1px) solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 70%,transparent);border-radius:var(--editorial-shell-radius, 20px);background:var(--editorial-surface-secondary, var(--md-sys-color-surface-container-low, #f7f2fa));padding:var(--editorial-shell-padding, 20px);box-shadow:var(--editorial-shell-shadow, none)}.diagnostics-panel{display:grid;gap:10px}.diagnostics-panel.warning{border-color:color-mix(in srgb,#b26a00 55%,var(--md-sys-color-outline-variant, #cac4d0));background:color-mix(in srgb,#fff4de 78%,var(--md-sys-color-surface-container-low, #f7f2fa))}.diagnostics-panel.error{border-color:color-mix(in srgb,#b3261e 60%,var(--md-sys-color-outline-variant, #cac4d0));background:color-mix(in srgb,#fde7e9 78%,var(--md-sys-color-surface-container-low, #f7f2fa))}.diagnostics-list{margin:0;padding-left:18px;display:grid;gap:8px}.diagnostics-summary{display:flex;flex-wrap:wrap;gap:8px}.summary-pill{display:inline-flex;align-items:center;min-height:32px;padding:6px 10px;border-radius:999px;font-size:.85rem;border:1px solid transparent;background:color-mix(in srgb,var(--md-sys-color-surface, #fff) 85%,transparent)}.summary-pill.error{border-color:color-mix(in srgb,#b3261e 45%,transparent)}.summary-pill.warning{border-color:color-mix(in srgb,#b26a00 45%,transparent)}.summary-pill.info{border-color:color-mix(in srgb,#00639b 45%,transparent)}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-width:22px;min-height:22px;padding:0 6px;border-radius:999px;font-size:.75rem;font-weight:700;background:var(--md-sys-color-surface, #fff)}.status-badge.error{color:#8c1d18;background:#fde7e9}.status-badge.warning{color:#7a4b00;background:#fff4de}.diagnostics-details summary{cursor:pointer;font-weight:600}.diagnostic-group{display:grid;gap:8px;padding:12px 0}.diagnostic-group.global{border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 65%,transparent);margin-bottom:12px}.step-panel.error{border-left:4px solid #b3261e}.step-panel.warning{border-left:4px solid #b26a00}.step-diagnostics{display:grid;gap:8px;padding:14px 16px;border-radius:16px}.step-diagnostics.error{background:#fde7e9;color:#5b1210}.step-diagnostics.warning{background:#fff4de;color:#6b4300}.step-diagnostics.global{background:#fde7e9;color:#5b1210;border:1px solid color-mix(in srgb,#b3261e 35%,transparent)}.diagnostics-list.contextual{padding-left:16px}.diagnostic-location{display:block;margin-top:4px;font-size:.82rem;opacity:.85}.step-blocking-note{font-size:.9rem;color:#8c1d18}.eyebrow{margin:0 0 8px;text-transform:uppercase;letter-spacing:.08em;font-size:var(--editorial-caption-size, .75rem);color:var(--editorial-accent, var(--md-sys-color-primary, #6750a4));font-weight:700}.runtime-state-pill{justify-self:start;display:inline-flex;align-items:center;min-height:30px;padding:4px 10px;border-radius:999px;font-size:.8rem;font-weight:700;background:color-mix(in srgb,var(--md-sys-color-surface, #fff) 88%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 70%,transparent)}.runtime-state-pill[data-mode=warning]{color:#7a4b00;background:#fff4de}.runtime-state-pill[data-mode=degraded]{color:#8c1d18;background:#fde7e9}.runtime-state-pill[data-mode=blocked]{color:#8c1d18;background:#fde7e9;border-color:color-mix(in srgb,#b3261e 55%,transparent)}h1,h2,h3,p{margin:0}h1{font-size:var(--editorial-hero-title-size, 2rem);line-height:1.1}.step-header h3{font-size:var(--editorial-step-title-size, 1.25rem);line-height:1.2}.runtime-header,.journey-card,.journey-header,.step-panel{display:grid;gap:12px}.editorial-runtime[data-shell-variant=sidebar-journey] .journey-card,.orientation-vertical .journey-card{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start}.description,.journey-header p,.step-header p,.step-counter,.empty-state p{font-size:var(--editorial-body-size, 1rem);color:var(--editorial-text-secondary, var(--md-sys-color-on-surface-variant, #49454f))}.journey-tabs,.step-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.journey-tab,.step-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:10px 12px;border-radius:var(--editorial-button-radius, 999px);border:1px solid color-mix(in srgb,var(--editorial-border-color, var(--md-sys-color-outline-variant, #cac4d0)) 75%,transparent);background:var(--editorial-surface-primary, var(--md-sys-color-surface, #fff));color:inherit;box-shadow:var(--editorial-card-shadow, none);cursor:pointer}.journey-tab.active,.step-actions button.primary{background:var(--editorial-cta-primary, var(--editorial-accent, var(--md-sys-color-primary, #6750a4)));color:var(--editorial-cta-primary-text, var(--editorial-accent-contrast, var(--md-sys-color-on-primary, #fff)));border-color:transparent}.step-actions button.secondary{color:var(--editorial-cta-primary, var(--editorial-accent, var(--md-sys-color-primary, #6750a4)))}.step-header{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.block-stack{display:grid;gap:var(--editorial-block-gap, 16px)}.step-actions button[disabled]{opacity:.5;cursor:not-allowed}.density-compact{--editorial-page-padding: 16px;--editorial-shell-padding: 16px;--editorial-block-gap: 12px}.density-comfortable{--editorial-page-padding: 24px;--editorial-shell-padding: 20px;--editorial-block-gap: 16px}.density-relaxed{--editorial-page-padding: 32px;--editorial-shell-padding: 28px;--editorial-block-gap: 20px}\n"], dependencies: [{ kind: "component", type: EditorialBlockRendererComponent, selector: "praxis-editorial-block-renderer", inputs: ["block", "runtimeContext", "solution", "instance"], outputs: ["runtimeContextChange", "operationalEvent", "blockAction"] }, { kind: "component", type: EditorialStepperComponent, selector: "praxis-editorial-stepper", inputs: ["steps", "activeStepId", "config", "orientation", "progressionBlocked", "isStepSelectionBlocked"], outputs: ["stepSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3412
3398
  }
3413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: EditorialFormRuntimeComponent, decorators: [{
3399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EditorialFormRuntimeComponent, decorators: [{
3414
3400
  type: Component,
3415
- args: [{ selector: 'praxis-editorial-form-runtime', standalone: true, imports: [CommonModule, EditorialBlockRendererComponent, EditorialStepperComponent], template: `
3401
+ args: [{ selector: 'praxis-editorial-form-runtime', standalone: true, imports: [EditorialBlockRendererComponent, EditorialStepperComponent], template: `
3416
3402
  <section
3417
3403
  class="editorial-runtime"
3418
3404
  [class.orientation-horizontal]="effectiveOrientation() === 'horizontal'"
@@ -3775,6 +3761,522 @@ function formatScopeLabel(labelName, label, id) {
3775
3761
  return null;
3776
3762
  }
3777
3763
 
3764
+ const EDITORIAL_FORM_RUNTIME_PORTS = [
3765
+ {
3766
+ id: 'solution',
3767
+ label: 'Editorial solution',
3768
+ direction: 'input',
3769
+ semanticKind: 'config-fragment',
3770
+ schema: {
3771
+ id: 'EditorialSolutionDefinition',
3772
+ kind: 'ts-type',
3773
+ ref: 'EditorialSolutionDefinition',
3774
+ },
3775
+ description: 'Canonical editorial solution definition consumed by the runtime.',
3776
+ exposure: { public: true, group: 'config' },
3777
+ },
3778
+ {
3779
+ id: 'instance',
3780
+ label: 'Editorial instance',
3781
+ direction: 'input',
3782
+ semanticKind: 'config-fragment',
3783
+ schema: {
3784
+ id: 'EditorialTemplateInstance',
3785
+ kind: 'ts-type',
3786
+ ref: 'EditorialTemplateInstance',
3787
+ },
3788
+ description: 'Runtime instance with persisted context, overrides and selected template reference.',
3789
+ exposure: { public: true, group: 'config' },
3790
+ },
3791
+ {
3792
+ id: 'runtimeContext',
3793
+ label: 'Runtime context',
3794
+ direction: 'input',
3795
+ semanticKind: 'view-context',
3796
+ schema: {
3797
+ id: 'Record<string, unknown>',
3798
+ kind: 'ts-type',
3799
+ ref: 'Record<string, unknown>',
3800
+ },
3801
+ description: 'Host-provided context merged with the editorial instance context.',
3802
+ exposure: { public: true, group: 'context' },
3803
+ },
3804
+ {
3805
+ id: 'snapshotChange',
3806
+ label: 'Snapshot change',
3807
+ direction: 'output',
3808
+ semanticKind: 'event',
3809
+ cardinality: 'stream',
3810
+ schema: {
3811
+ id: 'EditorialRuntimeSnapshot',
3812
+ kind: 'ts-type',
3813
+ ref: 'EditorialRuntimeSnapshot',
3814
+ },
3815
+ description: 'Resolved editorial runtime snapshot emitted when solution, instance or context changes.',
3816
+ exposure: { public: true, group: 'events' },
3817
+ },
3818
+ {
3819
+ id: 'fallbackChange',
3820
+ label: 'Fallback change',
3821
+ direction: 'output',
3822
+ semanticKind: 'status',
3823
+ cardinality: 'stream',
3824
+ schema: {
3825
+ id: 'EditorialRuntimeFallbackState',
3826
+ kind: 'ts-type',
3827
+ ref: 'EditorialRuntimeFallbackState',
3828
+ },
3829
+ description: 'Operational fallback state emitted when diagnostics affect runtime health.',
3830
+ exposure: { public: true, group: 'status' },
3831
+ },
3832
+ {
3833
+ id: 'operationalEvent',
3834
+ label: 'Operational event',
3835
+ direction: 'output',
3836
+ semanticKind: 'diagnostic',
3837
+ cardinality: 'stream',
3838
+ schema: {
3839
+ id: 'EditorialRuntimeOperationalEvent',
3840
+ kind: 'ts-type',
3841
+ ref: 'EditorialRuntimeOperationalEvent',
3842
+ },
3843
+ description: 'Technical event stream for diagnostics, blocking errors and adapter state.',
3844
+ exposure: { public: true, advanced: true, group: 'diagnostics' },
3845
+ },
3846
+ ];
3847
+ const EDITORIAL_FORM_RUNTIME_COMPONENT_METADATA = {
3848
+ id: 'praxis-editorial-form-runtime',
3849
+ componentType: 'praxis-editorial-form-runtime',
3850
+ selector: 'praxis-editorial-form-runtime',
3851
+ component: EditorialFormRuntimeComponent,
3852
+ friendlyName: 'Praxis Editorial Form Runtime',
3853
+ displayName: 'Praxis Editorial Form Runtime',
3854
+ description: 'Guided editorial runtime for solution and instance driven form experiences.',
3855
+ icon: 'article',
3856
+ lib: '@praxisui/editorial-forms',
3857
+ tags: ['widget', 'editorial', 'forms', 'runtime', 'guided-flow'],
3858
+ inputs: [
3859
+ {
3860
+ name: 'solution',
3861
+ type: 'EditorialSolutionDefinition | null',
3862
+ description: 'Canonical editorial solution definition.',
3863
+ },
3864
+ {
3865
+ name: 'instance',
3866
+ type: 'EditorialTemplateInstance | null',
3867
+ description: 'Editorial instance with context and overrides.',
3868
+ },
3869
+ {
3870
+ name: 'runtimeContext',
3871
+ type: 'Record<string, unknown> | null',
3872
+ description: 'Host context merged into the resolved runtime context.',
3873
+ },
3874
+ {
3875
+ name: 'hostConfig',
3876
+ type: 'EditorialRuntimeHostConfig | null',
3877
+ description: 'Host controls for operational event forwarding.',
3878
+ },
3879
+ ],
3880
+ outputs: [
3881
+ {
3882
+ name: 'snapshotChange',
3883
+ type: 'EditorialRuntimeSnapshot',
3884
+ description: 'Resolved snapshot emitted by the editorial runtime.',
3885
+ },
3886
+ {
3887
+ name: 'fallbackChange',
3888
+ type: 'EditorialRuntimeFallbackState',
3889
+ description: 'Fallback state emitted when diagnostics affect runtime health.',
3890
+ },
3891
+ {
3892
+ name: 'operationalEvent',
3893
+ type: 'EditorialRuntimeOperationalEvent',
3894
+ description: 'Operational diagnostics event stream.',
3895
+ },
3896
+ ],
3897
+ ports: EDITORIAL_FORM_RUNTIME_PORTS,
3898
+ layoutHints: {
3899
+ recommendedCols: 6,
3900
+ recommendedRows: 6,
3901
+ minCols: 4,
3902
+ minRows: 4,
3903
+ },
3904
+ };
3905
+ function providePraxisEditorialFormRuntimeMetadata() {
3906
+ return {
3907
+ provide: ENVIRONMENT_INITIALIZER,
3908
+ multi: true,
3909
+ useFactory: (registry) => () => {
3910
+ registry.register(EDITORIAL_FORM_RUNTIME_COMPONENT_METADATA);
3911
+ },
3912
+ deps: [ComponentMetadataRegistry],
3913
+ };
3914
+ }
3915
+
3916
+ /**
3917
+ * Root provider entrypoint for the editorial runtime package.
3918
+ *
3919
+ * Registers the public DynamicWidgetLoader metadata for
3920
+ * praxis-editorial-form-runtime in ComponentMetadataRegistry. This is the
3921
+ * canonical setup hook for hosts that render editorial forms through dynamic
3922
+ * composition; it does not introduce a separate global runtime singleton graph.
3923
+ */
3924
+ function providePraxisEditorialForms() {
3925
+ return makeEnvironmentProviders([
3926
+ providePraxisEditorialFormRuntimeMetadata(),
3927
+ ]);
3928
+ }
3929
+
3930
+ const snapshotSetSchema = {
3931
+ type: 'object',
3932
+ required: ['solutionId'],
3933
+ properties: {
3934
+ solutionId: { type: 'string' },
3935
+ instanceId: { type: 'string' },
3936
+ journeyId: { type: 'string' },
3937
+ stepId: { type: 'string' },
3938
+ runtimeContextPatch: { type: 'object' },
3939
+ instanceContextPatch: { type: 'object' },
3940
+ preserveDiagnostics: { type: 'boolean' },
3941
+ },
3942
+ };
3943
+ const fallbackConfigureSchema = {
3944
+ type: 'object',
3945
+ required: ['mode'],
3946
+ properties: {
3947
+ mode: { enum: ['normal', 'warning', 'degraded', 'blocked'] },
3948
+ diagnosticCode: { type: 'string' },
3949
+ progressionBlocked: { type: 'boolean' },
3950
+ requiresEngineAttention: { type: 'boolean' },
3951
+ scope: {
3952
+ type: 'object',
3953
+ properties: {
3954
+ journeyId: { type: 'string' },
3955
+ stepId: { type: 'string' },
3956
+ blockId: { type: 'string' },
3957
+ },
3958
+ },
3959
+ },
3960
+ };
3961
+ const presentationConfigureSchema = {
3962
+ type: 'object',
3963
+ minProperties: 1,
3964
+ properties: {
3965
+ layout: {
3966
+ type: 'object',
3967
+ properties: {
3968
+ orientation: { enum: ['horizontal', 'vertical'] },
3969
+ density: { enum: ['compact', 'comfortable', 'relaxed'] },
3970
+ maxWidth: { type: 'string' },
3971
+ shellVariant: { type: 'string' },
3972
+ spacing: { type: 'object' },
3973
+ responsive: { type: 'object' },
3974
+ },
3975
+ },
3976
+ theme: { type: 'object' },
3977
+ stepper: {
3978
+ type: 'object',
3979
+ properties: {
3980
+ visible: { type: 'boolean' },
3981
+ orientation: { enum: ['horizontal', 'vertical'] },
3982
+ showLabels: { type: 'boolean' },
3983
+ showDescriptions: { type: 'boolean' },
3984
+ showConnectors: { type: 'boolean' },
3985
+ connectorStyle: { type: 'string' },
3986
+ allowStepJump: { type: 'boolean' },
3987
+ },
3988
+ },
3989
+ },
3990
+ };
3991
+ const adapterBindSchema = {
3992
+ type: 'object',
3993
+ required: ['adapterId', 'dataBlockType'],
3994
+ properties: {
3995
+ adapterId: { type: 'string' },
3996
+ dataBlockType: { enum: ['dataCollection'] },
3997
+ componentRef: { type: 'string' },
3998
+ requiredInputs: {
3999
+ type: 'array',
4000
+ items: { type: 'string' },
4001
+ },
4002
+ forwardOperationalEvents: { type: 'boolean' },
4003
+ fallbackModeWhenMissing: { enum: ['warning', 'degraded', 'blocked'] },
4004
+ },
4005
+ };
4006
+ const dataBlockAddSchema = {
4007
+ type: 'object',
4008
+ required: ['journeyId', 'stepId', 'block'],
4009
+ properties: {
4010
+ journeyId: { type: 'string' },
4011
+ stepId: { type: 'string' },
4012
+ insert: {
4013
+ type: 'object',
4014
+ properties: {
4015
+ mode: { enum: ['append', 'insertBefore', 'insertAfter'] },
4016
+ relativeToBlockId: { type: 'string' },
4017
+ },
4018
+ },
4019
+ block: {
4020
+ type: 'object',
4021
+ required: ['blockId', 'kind'],
4022
+ properties: {
4023
+ blockId: { type: 'string' },
4024
+ kind: { enum: ['dataCollection', 'introHero', 'selectionCards', 'reviewSections', 'successPanel'] },
4025
+ formBlockId: { type: 'string' },
4026
+ formConfigRef: { type: 'string' },
4027
+ title: { type: 'string' },
4028
+ description: { type: 'string' },
4029
+ visibility: { type: 'array' },
4030
+ },
4031
+ },
4032
+ },
4033
+ };
4034
+ const dataBlockRemoveSchema = {
4035
+ type: 'object',
4036
+ required: ['journeyId', 'stepId', 'blockId'],
4037
+ properties: {
4038
+ journeyId: { type: 'string' },
4039
+ stepId: { type: 'string' },
4040
+ blockId: { type: 'string' },
4041
+ requireNoFieldBindings: { type: 'boolean' },
4042
+ },
4043
+ };
4044
+ const fieldBindingSetSchema = {
4045
+ type: 'object',
4046
+ required: ['blockId', 'fieldName', 'contextPath'],
4047
+ properties: {
4048
+ blockId: { type: 'string' },
4049
+ fieldName: { type: 'string' },
4050
+ contextPath: { type: 'string' },
4051
+ mode: { enum: ['read', 'write', 'readWrite'] },
4052
+ valueMode: { enum: ['merge', 'replace'] },
4053
+ delegateFieldMetadataTo: { enum: ['praxis-metadata-editor'] },
4054
+ },
4055
+ };
4056
+ const PRAXIS_EDITORIAL_FORMS_AUTHORING_MANIFEST = {
4057
+ schemaVersion: '1.0.0',
4058
+ componentId: 'praxis-editorial-forms',
4059
+ ownerPackage: '@praxisui/editorial-forms',
4060
+ configSchemaId: 'EditorialRuntimeInput',
4061
+ manifestVersion: '1.0.0',
4062
+ runtimeInputs: [
4063
+ { name: 'solution', type: 'EditorialSolutionDefinition | null', description: 'Canonical editorial solution definition with journeys, steps, blocks and presentation.' },
4064
+ { name: 'instance', type: 'EditorialTemplateInstance | null', description: 'Runtime instance with selected journey, context, overrides and compatibility form configs.' },
4065
+ { name: 'runtimeContext', type: 'Record<string, unknown> | null', description: 'Host-provided immutable context merged into the resolved editorial snapshot.' },
4066
+ { name: 'hostConfig', type: 'EditorialRuntimeHostConfig | null', description: 'Host controls for operational event and adapter event forwarding.' },
4067
+ { name: 'snapshotChange', type: 'EditorialRuntimeSnapshot', description: 'Resolved runtime snapshot emitted to hosts for product UX and audit derivation.' },
4068
+ { name: 'fallbackChange', type: 'EditorialRuntimeFallbackState', description: 'Operational fallback state emitted when diagnostics affect runtime health.' },
4069
+ { name: 'operationalEvent', type: 'EditorialRuntimeOperationalEvent', description: 'Technical diagnostics event stream for logs, monitoring and runbooks.' },
4070
+ ],
4071
+ editableTargets: [
4072
+ { kind: 'snapshot', resolver: 'editorial-runtime-snapshot', description: 'Resolved editorial state from solution, instance and runtime context.' },
4073
+ { kind: 'fallback', resolver: 'editorial-runtime-fallback-state', description: 'Explicit operational fallback state derived from runtime diagnostics.' },
4074
+ { kind: 'presentation', resolver: 'editorial-solution-presentation', description: 'Editorial presentation contract under solution.presentation.' },
4075
+ { kind: 'adapter', resolver: 'editorial-data-block-adapter-registry', description: 'Optional dataCollection adapter binding and compatibility requirements.' },
4076
+ { kind: 'dataBlock', resolver: 'editorial-journey-step-block-by-id', description: 'Editorial blocks inside journey steps, including dataCollection and presentational blocks.' },
4077
+ { kind: 'fieldBinding', resolver: 'editorial-data-block-field-binding', description: 'Field-to-runtime-context binding for dataCollection blocks without redefining FieldMetadata.' },
4078
+ ],
4079
+ operations: [
4080
+ {
4081
+ operationId: 'snapshot.set',
4082
+ title: 'Set editorial snapshot inputs',
4083
+ scope: 'global',
4084
+ targetKind: 'snapshot',
4085
+ target: { kind: 'snapshot', resolver: 'editorial-runtime-snapshot', ambiguityPolicy: 'fail', required: false },
4086
+ inputSchema: snapshotSetSchema,
4087
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-snapshot-set', handlerContract: {
4088
+ reads: ['EditorialSolutionDefinition', 'EditorialTemplateInstance', 'runtimeContext', 'resolveEditorialRuntimeSnapshot'],
4089
+ writes: ['solution.solutionId', 'instance.instanceId', 'instance.context', 'runtimeContext'],
4090
+ identityKeys: ['solutionId', 'instanceId', 'journeyId'],
4091
+ inputSchema: snapshotSetSchema,
4092
+ failureModes: ['solution-not-found', 'journey-not-found', 'step-not-found', 'snapshot-shape-invalid', 'diagnostics-lost'],
4093
+ description: 'Compiles a deterministic patch to editorial runtime inputs, validates the requested journey/step against the resolved snapshot and requires diagnostics to be preserved.',
4094
+ } }],
4095
+ validators: ['snapshot-shape-canonical', 'journey-exists', 'step-exists', 'diagnostics-preserved', 'editorial-round-trip'],
4096
+ affectedPaths: ['solution.solutionId', 'instance.instanceId', 'instance.context', 'runtimeContext'],
4097
+ submissionImpact: 'config-only',
4098
+ preconditions: ['editorial-runtime-inputs-loaded'],
4099
+ destructive: false,
4100
+ requiresConfirmation: false,
4101
+ },
4102
+ {
4103
+ operationId: 'fallback.configure',
4104
+ title: 'Configure explicit fallback behavior',
4105
+ scope: 'meta',
4106
+ targetKind: 'fallback',
4107
+ target: { kind: 'fallback', resolver: 'editorial-runtime-fallback-state', ambiguityPolicy: 'fail', required: false },
4108
+ inputSchema: fallbackConfigureSchema,
4109
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-fallback-configure', handlerContract: {
4110
+ reads: ['EditorialRuntimeDiagnostics', 'deriveRuntimeFallbackState', 'EditorialRuntimeFallbackScope'],
4111
+ writes: ['hostConfig.emitOperationalEvents', 'snapshot.diagnostics.items'],
4112
+ identityKeys: ['mode', 'diagnosticCode', 'scope.journeyId', 'scope.stepId'],
4113
+ inputSchema: fallbackConfigureSchema,
4114
+ failureModes: ['fallback-mode-invalid', 'blocking-diagnostic-missing', 'scope-not-found', 'implicit-degradation-not-allowed'],
4115
+ description: 'Requires fallback policy to be explicit and tied to snapshot diagnostics, because fallback state is derived by deriveRuntimeFallbackState instead of persisted as domain data.',
4116
+ } }],
4117
+ validators: ['fallback-explicit', 'fallback-diagnostic-backed', 'fallback-scope-exists', 'editorial-round-trip'],
4118
+ affectedPaths: ['hostConfig.emitOperationalEvents', 'snapshot.diagnostics.items'],
4119
+ submissionImpact: 'config-only',
4120
+ preconditions: ['snapshot-resolved'],
4121
+ destructive: false,
4122
+ requiresConfirmation: false,
4123
+ },
4124
+ {
4125
+ operationId: 'presentation.configure',
4126
+ title: 'Configure editorial presentation',
4127
+ scope: 'skin',
4128
+ targetKind: 'presentation',
4129
+ target: { kind: 'presentation', resolver: 'editorial-solution-presentation', ambiguityPolicy: 'fail', required: false },
4130
+ inputSchema: presentationConfigureSchema,
4131
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-presentation-configure', handlerContract: {
4132
+ reads: ['solution.presentation', 'buildRuntimeLayoutCss', 'buildRuntimeCssVars', 'resolveRuntimeOrientation'],
4133
+ writes: ['solution.presentation.layout', 'solution.presentation.theme', 'solution.presentation.stepper'],
4134
+ identityKeys: ['solutionId', 'presentation.layout.orientation', 'presentation.stepper.orientation'],
4135
+ inputSchema: presentationConfigureSchema,
4136
+ failureModes: ['presentation-key-unsupported', 'theme-token-invalid', 'domain-data-mutation-detected', 'renderer-coverage-missing'],
4137
+ description: 'Applies presentation-only changes under solution.presentation and rejects changes that mutate editorial domain data.',
4138
+ } }],
4139
+ validators: ['presentation-supported-by-runtime', 'presentation-does-not-mutate-domain-data', 'theme-tokens-valid', 'editorial-round-trip'],
4140
+ affectedPaths: ['solution.presentation.layout', 'solution.presentation.theme', 'solution.presentation.stepper'],
4141
+ submissionImpact: 'visual-only',
4142
+ preconditions: ['solution-loaded'],
4143
+ destructive: false,
4144
+ requiresConfirmation: false,
4145
+ },
4146
+ {
4147
+ operationId: 'adapter.bind',
4148
+ title: 'Bind data block adapter',
4149
+ scope: 'dataBinding',
4150
+ targetKind: 'adapter',
4151
+ target: { kind: 'adapter', resolver: 'editorial-data-block-adapter-registry', ambiguityPolicy: 'fail', required: true },
4152
+ inputSchema: adapterBindSchema,
4153
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-adapter-bind', handlerContract: {
4154
+ reads: ['EDITORIAL_DATA_BLOCK_ADAPTER', 'EditorialDataBlockAdapterRegistry', 'EditorialDataBlockContext', 'ComponentDocMeta'],
4155
+ writes: ['hostConfig.forwardAdapterOperationalEvents', 'snapshot.diagnostics.items'],
4156
+ identityKeys: ['adapterId', 'dataBlockType'],
4157
+ inputSchema: adapterBindSchema,
4158
+ failureModes: ['adapter-not-registered', 'adapter-does-not-support-data-block', 'adapter-component-invalid', 'fallback-policy-missing'],
4159
+ description: 'Validates the external provider binding for a dataCollection adapter and records the host operational-event policy required when the adapter is missing or incompatible.',
4160
+ } }],
4161
+ validators: ['adapter-exists', 'adapter-supports-data-block', 'adapter-component-valid', 'fallback-explicit', 'editorial-round-trip'],
4162
+ affectedPaths: ['hostConfig.forwardAdapterOperationalEvents', 'snapshot.diagnostics.items'],
4163
+ submissionImpact: 'config-only',
4164
+ preconditions: ['adapter-registry-loaded'],
4165
+ destructive: false,
4166
+ requiresConfirmation: false,
4167
+ },
4168
+ {
4169
+ operationId: 'dataBlock.add',
4170
+ title: 'Add editorial data block',
4171
+ scope: 'section',
4172
+ targetKind: 'dataBlock',
4173
+ target: { kind: 'dataBlock', resolver: 'editorial-journey-step-block-by-id', ambiguityPolicy: 'fail', required: true },
4174
+ inputSchema: dataBlockAddSchema,
4175
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-data-block-add', handlerContract: {
4176
+ reads: ['EditorialSolutionDefinition.journeys', 'EditorialResolvedStep.blocks', 'EditorialDataBlockAdapterRegistry'],
4177
+ writes: ['solution.journeys[].steps[].blocks'],
4178
+ identityKeys: ['journeyId', 'stepId', 'block.blockId'],
4179
+ inputSchema: dataBlockAddSchema,
4180
+ failureModes: ['journey-not-found', 'step-not-found', 'duplicate-block-id', 'data-collection-config-unresolved', 'adapter-not-registered'],
4181
+ description: 'Adds a canonical editorial block to a step and validates dataCollection readiness without redefining Dynamic Form config semantics.',
4182
+ } }],
4183
+ validators: ['data-block-id-unique', 'journey-exists', 'step-exists', 'adapter-supports-data-block', 'editorial-round-trip'],
4184
+ affectedPaths: ['solution.journeys[].steps[].blocks'],
4185
+ submissionImpact: 'config-only',
4186
+ preconditions: ['solution-loaded'],
4187
+ destructive: false,
4188
+ requiresConfirmation: false,
4189
+ },
4190
+ {
4191
+ operationId: 'dataBlock.remove',
4192
+ title: 'Remove editorial data block',
4193
+ scope: 'section',
4194
+ targetKind: 'dataBlock',
4195
+ target: { kind: 'dataBlock', resolver: 'editorial-journey-step-block-by-id', ambiguityPolicy: 'fail', required: true },
4196
+ inputSchema: dataBlockRemoveSchema,
4197
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-data-block-remove', handlerContract: {
4198
+ reads: ['EditorialSolutionDefinition.journeys', 'EditorialResolvedStep.blocks', 'fieldBinding'],
4199
+ writes: ['solution.journeys[].steps[].blocks'],
4200
+ identityKeys: ['journeyId', 'stepId', 'blockId'],
4201
+ inputSchema: dataBlockRemoveSchema,
4202
+ failureModes: ['journey-not-found', 'step-not-found', 'block-not-found', 'field-bindings-still-reference-block'],
4203
+ description: 'Removes a block by stable id and rejects removal when governed field bindings still reference the block.',
4204
+ } }],
4205
+ destructive: true,
4206
+ requiresConfirmation: true,
4207
+ validators: ['data-block-exists', 'field-binding-target-exists', 'editorial-round-trip'],
4208
+ affectedPaths: ['solution.journeys[].steps[].blocks'],
4209
+ submissionImpact: 'config-only',
4210
+ preconditions: ['solution-loaded', 'explicit-confirmation-provided'],
4211
+ },
4212
+ {
4213
+ operationId: 'fieldBinding.set',
4214
+ title: 'Set editorial field binding',
4215
+ scope: 'fieldMetadataPath',
4216
+ targetKind: 'fieldBinding',
4217
+ target: { kind: 'fieldBinding', resolver: 'editorial-data-block-field-binding', ambiguityPolicy: 'fail', required: true },
4218
+ inputSchema: fieldBindingSetSchema,
4219
+ effects: [{ kind: 'compile-domain-patch', handler: 'editorial-field-binding-set', handlerContract: {
4220
+ reads: ['EditorialDataCollectionBlock', 'resolvedFormConfig.fieldMetadata', 'runtimeContext.formData', 'PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST'],
4221
+ writes: ['runtimeContext.formData'],
4222
+ identityKeys: ['blockId', 'fieldName', 'contextPath'],
4223
+ inputSchema: fieldBindingSetSchema,
4224
+ failureModes: ['block-not-found', 'field-not-found', 'context-path-invalid', 'field-metadata-delegation-required', 'domain-data-mutation-detected'],
4225
+ description: 'Sets the governed runtimeContext.formData path used by dataCollection adapters and delegates FieldMetadata shape changes to the metadata-editor manifest.',
4226
+ } }],
4227
+ validators: ['field-binding-target-exists', 'field-binding-path-valid', 'delegates-field-metadata', 'editorial-round-trip'],
4228
+ affectedPaths: ['runtimeContext.formData'],
4229
+ submissionImpact: 'affects-schema-backed-data',
4230
+ preconditions: ['data-block-resolved', 'field-metadata-loaded'],
4231
+ destructive: false,
4232
+ requiresConfirmation: false,
4233
+ },
4234
+ ],
4235
+ validators: [
4236
+ { validatorId: 'snapshot-shape-canonical', level: 'error', code: 'EDITORIAL_SNAPSHOT_SHAPE_CANONICAL', description: 'Resolved snapshot must remain compatible with EditorialRuntimeSnapshot.' },
4237
+ { validatorId: 'journey-exists', level: 'error', code: 'EDITORIAL_JOURNEY_EXISTS', description: 'Target journey must exist in the editorial solution.' },
4238
+ { validatorId: 'step-exists', level: 'error', code: 'EDITORIAL_STEP_EXISTS', description: 'Target step must exist in the selected journey.' },
4239
+ { validatorId: 'diagnostics-preserved', level: 'error', code: 'EDITORIAL_DIAGNOSTICS_PRESERVED', description: 'Patch compilation must not drop runtime diagnostics.' },
4240
+ { validatorId: 'fallback-explicit', level: 'error', code: 'EDITORIAL_FALLBACK_EXPLICIT', description: 'Fallback behavior must be explicit instead of implied by missing adapter or hidden diagnostics.' },
4241
+ { validatorId: 'fallback-diagnostic-backed', level: 'error', code: 'EDITORIAL_FALLBACK_DIAGNOSTIC_BACKED', description: 'Warning, degraded and blocked fallback states must be backed by diagnostics.' },
4242
+ { validatorId: 'fallback-scope-exists', level: 'error', code: 'EDITORIAL_FALLBACK_SCOPE_EXISTS', description: 'Fallback scope must resolve to an existing journey, step or block.' },
4243
+ { validatorId: 'presentation-supported-by-runtime', level: 'error', code: 'EDITORIAL_PRESENTATION_SUPPORTED', description: 'Presentation keys must be supported by the runtime or intentionally diagnosed as unsupported.' },
4244
+ { validatorId: 'presentation-does-not-mutate-domain-data', level: 'error', code: 'EDITORIAL_PRESENTATION_DOMAIN_SAFE', description: 'Presentation changes must not mutate solution journeys, blocks, field metadata or runtime context data.' },
4245
+ { validatorId: 'theme-tokens-valid', level: 'error', code: 'EDITORIAL_THEME_TOKENS_VALID', description: 'Theme tokens must be valid runtime CSS variable inputs.' },
4246
+ { validatorId: 'adapter-exists', level: 'error', code: 'EDITORIAL_ADAPTER_EXISTS', description: 'Requested adapter must exist in EditorialDataBlockAdapterRegistry.' },
4247
+ { validatorId: 'adapter-supports-data-block', level: 'error', code: 'EDITORIAL_ADAPTER_SUPPORTS_DATA_BLOCK', description: 'Requested adapter must support the target data block context.' },
4248
+ { validatorId: 'adapter-component-valid', level: 'error', code: 'EDITORIAL_ADAPTER_COMPONENT_VALID', description: 'Adapter component must expose the inputs required by the adapter contract.' },
4249
+ { validatorId: 'data-block-id-unique', level: 'error', code: 'EDITORIAL_DATA_BLOCK_ID_UNIQUE', description: 'Block ids must be unique within the resolved editorial step.' },
4250
+ { validatorId: 'data-block-exists', level: 'error', code: 'EDITORIAL_DATA_BLOCK_EXISTS', description: 'Target data block must exist before destructive or binding operations.' },
4251
+ { validatorId: 'field-binding-target-exists', level: 'error', code: 'EDITORIAL_FIELD_BINDING_TARGET_EXISTS', description: 'Field binding must target an existing dataCollection block and field.' },
4252
+ { validatorId: 'field-binding-path-valid', level: 'error', code: 'EDITORIAL_FIELD_BINDING_PATH_VALID', description: 'Field binding context path must be deterministic and inside governed runtime context data.' },
4253
+ { validatorId: 'delegates-field-metadata', level: 'error', code: 'EDITORIAL_DELEGATES_FIELD_METADATA', description: 'FieldMetadata shape changes must be delegated to the metadata-editor manifest instead of duplicated here.' },
4254
+ { validatorId: 'editorial-round-trip', level: 'error', code: 'EDITORIAL_ROUND_TRIP', description: 'Open, edit, apply/save, reopen and runtime consume must preserve the editorial document.' },
4255
+ ],
4256
+ roundTripRequirements: [
4257
+ 'EditorialRuntimeInput is the package-level authoring document; solution, instance and runtimeContext must resolve into EditorialRuntimeSnapshot without drift.',
4258
+ 'Fallback behavior must be explicit and backed by diagnostics; missing adapters cannot be hidden as successful rendering.',
4259
+ 'Presentation changes are constrained to solution.presentation and must not mutate journeys, blocks, FormConfig, FieldMetadata or runtimeContext domain data.',
4260
+ 'dataCollection blocks require an adapter that exists and supports the requested context, while Dynamic Form config semantics remain owned by @praxisui/dynamic-form.',
4261
+ 'FieldMetadata authoring is delegated to praxis-metadata-editor and dynamic-fields discovery; this manifest only governs editorial binding and orchestration.',
4262
+ 'Destructive block removal requires confirmation and must reject references from existing field bindings.',
4263
+ ],
4264
+ examples: [
4265
+ { id: 'select-journey', request: 'Set the onboarding journey as the active editorial path.', operationId: 'snapshot.set', params: { solutionId: 'customer-onboarding', journeyId: 'onboarding' }, isPositive: true },
4266
+ { id: 'merge-runtime-context', request: 'Prefill the runtime context with the selected plan.', operationId: 'snapshot.set', params: { solutionId: 'plan-signup', runtimeContextPatch: { selectedPlan: 'pro' } }, isPositive: true },
4267
+ { id: 'configure-blocked-fallback', request: 'Block progression when the required dataCollection adapter is missing.', operationId: 'fallback.configure', params: { mode: 'blocked', diagnosticCode: 'data-collection-adapter-missing', progressionBlocked: true }, isPositive: true },
4268
+ { id: 'configure-stepper', request: 'Use a vertical compact stepper with hidden descriptions.', operationId: 'presentation.configure', params: { layout: { orientation: 'vertical', density: 'compact' }, stepper: { showDescriptions: false } }, isPositive: true },
4269
+ { id: 'bind-dynamic-form-adapter', request: 'Bind the dynamic-form adapter for dataCollection blocks.', operationId: 'adapter.bind', params: { adapterId: 'dynamic-form', dataBlockType: 'dataCollection', requiredInputs: ['config', 'formId', 'editorialContext'], fallbackModeWhenMissing: 'blocked' }, isPositive: true },
4270
+ { id: 'add-data-block', request: 'Add a consent form block to the review step.', operationId: 'dataBlock.add', params: { journeyId: 'privacy', stepId: 'review', block: { blockId: 'consent-form', kind: 'dataCollection', formBlockId: 'consent-form' } }, isPositive: true },
4271
+ { id: 'remove-block', request: 'Remove the unused legacy consent block.', operationId: 'dataBlock.remove', params: { journeyId: 'privacy', stepId: 'review', blockId: 'legacy-consent', requireNoFieldBindings: true }, isPositive: true },
4272
+ { id: 'set-field-binding', request: 'Bind the email field into runtimeContext.formData.email.', operationId: 'fieldBinding.set', params: { blockId: 'contact-form', fieldName: 'email', contextPath: 'formData.email', mode: 'readWrite', delegateFieldMetadataTo: 'praxis-metadata-editor' }, isPositive: true },
4273
+ { id: 'reject-presentation-domain-mutation', request: 'Change presentation and also rewrite the collected email value.', operationId: 'presentation.configure', params: { layout: { density: 'relaxed' }, runtimeContextPatch: { formData: { email: 'changed@example.com' } } }, isPositive: false },
4274
+ { id: 'reject-missing-adapter', request: 'Render a dataCollection block with an adapter that is not registered.', operationId: 'adapter.bind', params: { adapterId: 'unknown-form-engine', dataBlockType: 'dataCollection' }, isPositive: false },
4275
+ { id: 'reject-duplicate-block', request: 'Add another block using the existing consent-form id.', operationId: 'dataBlock.add', params: { journeyId: 'privacy', stepId: 'review', block: { blockId: 'consent-form', kind: 'dataCollection', formBlockId: 'consent-form-copy' } }, isPositive: false },
4276
+ { id: 'reject-field-metadata-duplication', request: 'Change the control type inside editorial forms instead of metadata editor.', operationId: 'fieldBinding.set', params: { blockId: 'contact-form', fieldName: 'email', contextPath: 'formData.email', controlType: 'select' }, isPositive: false },
4277
+ ],
4278
+ };
4279
+
3778
4280
  const REQUIRED_DYNAMIC_FORM_INPUTS = ['config', 'formId', 'editorialContext'];
3779
4281
  function readRuntimeFormData(runtimeContext) {
3780
4282
  const formData = runtimeContext?.['formData'];
@@ -4060,10 +4562,10 @@ class HarnessDataEngineComponent {
4060
4562
  solution = null;
4061
4563
  instance = null;
4062
4564
  resolvedFormConfig = null;
4063
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HarnessDataEngineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4064
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HarnessDataEngineComponent, isStandalone: true, selector: "praxis-editorial-harness-data-engine", inputs: { config: "config", formId: "formId", editorialContext: "editorialContext", block: "block", runtimeContext: "runtimeContext", solution: "solution", instance: "instance", resolvedFormConfig: "resolvedFormConfig" }, ngImport: i0, template: '<p>Harness data engine</p>', isInline: true });
4565
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: HarnessDataEngineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4566
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: HarnessDataEngineComponent, isStandalone: true, selector: "praxis-editorial-harness-data-engine", inputs: { config: "config", formId: "formId", editorialContext: "editorialContext", block: "block", runtimeContext: "runtimeContext", solution: "solution", instance: "instance", resolvedFormConfig: "resolvedFormConfig" }, ngImport: i0, template: '<p>Harness data engine</p>', isInline: true });
4065
4567
  }
4066
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HarnessDataEngineComponent, decorators: [{
4568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: HarnessDataEngineComponent, decorators: [{
4067
4569
  type: Component,
4068
4570
  args: [{
4069
4571
  standalone: true,
@@ -4301,4 +4803,4 @@ function getHarnessDataEngineComponent() {
4301
4803
  * Generated bundle index. Do not edit.
4302
4804
  */
4303
4805
 
4304
- export { DEFAULT_EDITORIAL_RUNTIME_HOST_CONFIG, EDITORIAL_DATA_BLOCK_ADAPTER, EditorialBlockRendererComponent, EditorialDataBlockAdapterRegistry, EditorialDataCollectionBlockOutletComponent, EditorialFormRuntimeComponent, EditorialIntroHeroBlockComponent, EditorialReviewSectionsBlockComponent, EditorialRuntimeState, EditorialSelectionCardsBlockComponent, EditorialStepperComponent, EditorialSuccessPanelBlockComponent, HarnessDataEngineComponent, PRAXIS_EDITORIAL_FORMS_EN_US, PRAXIS_EDITORIAL_FORMS_PT_BR, buildRuntimeCssVars, buildRuntimeLayoutCss, createEditorialDynamicFormAdapter, createEditorialRuntimeHarnessCatalog, createPraxisEditorialFormsI18nConfig, deriveRuntimeFallbackState, getHarnessDataEngineComponent, getStepDisplayState, getValueAtPath, getVisibleBlocks, isBlockVisible, matchesVisibilityRule, provideEditorialDataBlockAdapter, provideEditorialDynamicFormAdapter, providePraxisEditorialForms, providePraxisEditorialFormsI18n, resolveActiveJourney, resolveActiveStep, resolveDensity, resolveEditorialDataBlockAdapter, resolveEditorialDataBlockFormConfig, resolveEditorialDataBlockFormConfigDetails, resolveEditorialRuntimeSnapshot, resolveRuntimeOrientation, resolveShellVariant };
4806
+ export { DEFAULT_EDITORIAL_RUNTIME_HOST_CONFIG, EDITORIAL_DATA_BLOCK_ADAPTER, EDITORIAL_FORM_RUNTIME_COMPONENT_METADATA, EditorialBlockRendererComponent, EditorialDataBlockAdapterRegistry, EditorialDataCollectionBlockOutletComponent, EditorialFormRuntimeComponent, EditorialIntroHeroBlockComponent, EditorialReviewSectionsBlockComponent, EditorialRuntimeState, EditorialSelectionCardsBlockComponent, EditorialStepperComponent, EditorialSuccessPanelBlockComponent, HarnessDataEngineComponent, PRAXIS_EDITORIAL_FORMS_AUTHORING_MANIFEST, PRAXIS_EDITORIAL_FORMS_EN_US, PRAXIS_EDITORIAL_FORMS_PT_BR, buildRuntimeCssVars, buildRuntimeLayoutCss, createEditorialDynamicFormAdapter, createEditorialRuntimeHarnessCatalog, createPraxisEditorialFormsI18nConfig, deriveRuntimeFallbackState, getHarnessDataEngineComponent, getStepDisplayState, getValueAtPath, getVisibleBlocks, isBlockVisible, matchesVisibilityRule, provideEditorialDataBlockAdapter, provideEditorialDynamicFormAdapter, providePraxisEditorialFormRuntimeMetadata, providePraxisEditorialForms, providePraxisEditorialFormsI18n, resolveActiveJourney, resolveActiveStep, resolveDensity, resolveEditorialDataBlockAdapter, resolveEditorialDataBlockFormConfig, resolveEditorialDataBlockFormConfigDetails, resolveEditorialRuntimeSnapshot, resolveRuntimeOrientation, resolveShellVariant };