@praxisui/stepper 8.0.0-beta.11 → 8.0.0-beta.12

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.
package/README.md CHANGED
@@ -219,6 +219,12 @@ etapa com formulario, rich content ou widgets exige confirmacao explicita. Regra
219
219
  de validacao devem ser projetadas em `steps[].form.config` ou delegadas ao
220
220
  `serverValidate` do host; o stepper nao define uma DSL paralela de validacao.
221
221
 
222
+ Cada operacao declara `target.resolver`, `preconditions`, `validators`,
223
+ `affectedPaths`, `effects` e `submissionImpact` tipado. Edicoes de conteudo de
224
+ etapa podem afetar dados schema-backed porque `steps[].form.config` hospeda o
225
+ `FormConfig` do `praxis-dynamic-form`; widgets filhos continuam governados pelos
226
+ contratos dos respectivos componentes.
227
+
222
228
  ## Conteudo Editorial por Etapa
223
229
 
224
230
  O conteudo editorial do stepper usa a mesma base de rich content da plataforma:
@@ -4719,9 +4719,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4719
4719
  target: { kind: 'step', resolver: 'steps-array', ambiguityPolicy: 'fail', required: false },
4720
4720
  inputSchema: stepItemSchema,
4721
4721
  effects: [{ kind: 'append-unique', path: 'steps[]', key: 'id' }],
4722
+ destructive: false,
4723
+ requiresConfirmation: false,
4722
4724
  validators: ['step-id-unique', 'step-order-deterministic', 'step-content-valid'],
4723
- affectedPaths: ['steps[]', 'selectedIndex'],
4724
- submissionImpact: false,
4725
+ affectedPaths: ['steps[]'],
4726
+ submissionImpact: 'config-only',
4725
4727
  preconditions: ['config-initialized'],
4726
4728
  },
4727
4729
  {
@@ -4736,12 +4738,28 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4736
4738
  replacementStepId: { type: 'string' },
4737
4739
  },
4738
4740
  },
4739
- effects: [{ kind: 'remove-by-key', path: 'steps[]', key: 'id' }],
4741
+ effects: [{
4742
+ kind: 'compile-domain-patch',
4743
+ handler: 'stepper-step-remove',
4744
+ handlerContract: {
4745
+ reads: ['steps[]', 'selectedIndex'],
4746
+ writes: ['steps[]', 'selectedIndex'],
4747
+ identityKeys: ['steps[].id'],
4748
+ inputSchema: {
4749
+ type: 'object',
4750
+ properties: {
4751
+ replacementStepId: { type: 'string' },
4752
+ },
4753
+ },
4754
+ failureModes: ['step-not-found', 'replacement-step-not-found', 'content-removal-not-confirmed'],
4755
+ description: 'Removes the target step by stable id and recomputes selectedIndex to preserve deterministic navigation state.',
4756
+ },
4757
+ }],
4740
4758
  destructive: true,
4741
4759
  requiresConfirmation: true,
4742
4760
  validators: ['step-exists', 'selected-step-removal-safe', 'step-content-removal-confirmed'],
4743
4761
  affectedPaths: ['steps[]', 'selectedIndex'],
4744
- submissionImpact: false,
4762
+ submissionImpact: 'config-only',
4745
4763
  preconditions: ['config-initialized', 'target-step-exists', 'confirmation-collected'],
4746
4764
  },
4747
4765
  {
@@ -4752,9 +4770,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4752
4770
  target: { kind: 'stepLabel', resolver: 'step-by-id-or-label', ambiguityPolicy: 'fail', required: true },
4753
4771
  inputSchema: { type: 'object', required: ['label'], properties: { label: { type: 'string' } } },
4754
4772
  effects: [{ kind: 'merge-by-key', path: 'steps[]', key: 'id' }],
4773
+ destructive: false,
4774
+ requiresConfirmation: false,
4755
4775
  validators: ['step-exists', 'step-label-valid'],
4756
4776
  affectedPaths: ['steps[].label'],
4757
- submissionImpact: false,
4777
+ submissionImpact: 'config-only',
4758
4778
  preconditions: ['config-initialized', 'target-step-exists'],
4759
4779
  },
4760
4780
  {
@@ -4764,10 +4784,23 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4764
4784
  targetKind: 'step',
4765
4785
  target: { kind: 'step', resolver: 'step-by-id-or-label', ambiguityPolicy: 'fail', required: true },
4766
4786
  inputSchema: { type: 'object', required: ['beforeStepId'], properties: { beforeStepId: { type: 'string' } } },
4767
- effects: [{ kind: 'reorder-by-key', path: 'steps[]', key: 'id' }],
4787
+ effects: [{
4788
+ kind: 'compile-domain-patch',
4789
+ handler: 'stepper-step-reorder',
4790
+ handlerContract: {
4791
+ reads: ['steps[]', 'selectedIndex'],
4792
+ writes: ['steps[]', 'selectedIndex'],
4793
+ identityKeys: ['steps[].id'],
4794
+ inputSchema: { type: 'object', required: ['beforeStepId'], properties: { beforeStepId: { type: 'string' } } },
4795
+ failureModes: ['step-not-found', 'before-step-not-found', 'ambiguous-step-target'],
4796
+ description: 'Moves the target step before another stable step id and recomputes selectedIndex by preserving selected step identity.',
4797
+ },
4798
+ }],
4799
+ destructive: false,
4800
+ requiresConfirmation: false,
4768
4801
  validators: ['step-exists', 'step-order-deterministic', 'selected-index-preserved'],
4769
4802
  affectedPaths: ['steps[]', 'selectedIndex'],
4770
- submissionImpact: false,
4803
+ submissionImpact: 'config-only',
4771
4804
  preconditions: ['config-initialized', 'target-step-exists'],
4772
4805
  },
4773
4806
  {
@@ -4778,9 +4811,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4778
4811
  target: { kind: 'completionRule', resolver: 'step-by-id-or-label', ambiguityPolicy: 'fail', required: true },
4779
4812
  inputSchema: { type: 'object', required: ['optional'], properties: { optional: { type: 'boolean' } } },
4780
4813
  effects: [{ kind: 'merge-by-key', path: 'steps[]', key: 'id' }],
4814
+ destructive: false,
4815
+ requiresConfirmation: false,
4781
4816
  validators: ['step-exists', 'completion-rule-compatible'],
4782
4817
  affectedPaths: ['steps[].optional'],
4783
- submissionImpact: false,
4818
+ submissionImpact: 'config-only',
4784
4819
  preconditions: ['config-initialized', 'target-step-exists'],
4785
4820
  },
4786
4821
  {
@@ -4791,9 +4826,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4791
4826
  target: { kind: 'completionRule', resolver: 'step-by-id-or-label', ambiguityPolicy: 'fail', required: true },
4792
4827
  inputSchema: { type: 'object', required: ['completed'], properties: { completed: { type: 'boolean' }, hasError: { type: 'boolean' }, errorMessage: { type: 'string' } } },
4793
4828
  effects: [{ kind: 'merge-by-key', path: 'steps[]', key: 'id' }],
4829
+ destructive: false,
4830
+ requiresConfirmation: false,
4794
4831
  validators: ['step-exists', 'completion-rule-compatible', 'linear-completion-safe'],
4795
4832
  affectedPaths: ['steps[].completed', 'steps[].hasError', 'steps[].errorMessage'],
4796
- submissionImpact: false,
4833
+ submissionImpact: 'config-only',
4797
4834
  preconditions: ['config-initialized', 'target-step-exists'],
4798
4835
  },
4799
4836
  {
@@ -4817,9 +4854,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4817
4854
  },
4818
4855
  },
4819
4856
  effects: [{ kind: 'merge-object', path: 'navigation' }, { kind: 'set-value', path: 'linear' }],
4857
+ destructive: false,
4858
+ requiresConfirmation: false,
4820
4859
  validators: ['navigation-values-valid', 'linear-navigation-valid', 'editor-runtime-round-trip'],
4821
4860
  affectedPaths: ['navigation.visible', 'navigation.prevLabel', 'navigation.nextLabel', 'navigation.prevIcon', 'navigation.nextIcon', 'navigation.variant', 'navigation.color', 'navigation.align', 'linear'],
4822
- submissionImpact: false,
4861
+ submissionImpact: 'config-only',
4823
4862
  preconditions: ['config-initialized'],
4824
4863
  },
4825
4864
  {
@@ -4839,9 +4878,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4839
4878
  },
4840
4879
  },
4841
4880
  effects: [{ kind: 'set-value', path: 'orientation' }, { kind: 'set-value', path: 'headerPosition' }, { kind: 'set-value', path: 'labelPosition' }, { kind: 'set-value', path: 'density' }],
4881
+ destructive: false,
4882
+ requiresConfirmation: false,
4842
4883
  validators: ['orientation-values-valid', 'label-position-compatible', 'editor-runtime-round-trip'],
4843
4884
  affectedPaths: ['orientation', 'headerPosition', 'labelPosition', 'density'],
4844
- submissionImpact: false,
4885
+ submissionImpact: 'config-only',
4845
4886
  preconditions: ['config-initialized'],
4846
4887
  },
4847
4888
  {
@@ -4891,8 +4932,10 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4891
4932
  },
4892
4933
  }],
4893
4934
  validators: ['step-exists', 'validation-rule-target-exists', 'validation-rule-compatible', 'server-validation-delegated'],
4894
- affectedPaths: ['steps[].form.config', 'steps[].hasError', 'steps[].errorMessage', 'linear'],
4895
- submissionImpact: true,
4935
+ destructive: false,
4936
+ requiresConfirmation: false,
4937
+ affectedPaths: ['steps[].form.config', 'steps[].form.config.sections', 'steps[].form.config.fieldMetadata', 'steps[].hasError', 'steps[].errorMessage'],
4938
+ submissionImpact: 'affects-schema-backed-data',
4896
4939
  preconditions: ['config-initialized', 'target-step-exists'],
4897
4940
  },
4898
4941
  {
@@ -4903,9 +4946,11 @@ const PRAXIS_STEPPER_AUTHORING_MANIFEST = {
4903
4946
  target: { kind: 'stepContent', resolver: 'step-content-by-id', ambiguityPolicy: 'fail', required: true },
4904
4947
  inputSchema: stepPatchSchema,
4905
4948
  effects: [{ kind: 'merge-by-key', path: 'steps[]', key: 'id' }],
4949
+ destructive: false,
4950
+ requiresConfirmation: false,
4906
4951
  validators: ['step-exists', 'step-content-valid', 'nested-widget-contract-delegated'],
4907
4952
  affectedPaths: ['steps[].form', 'steps[].stepBlocksBeforeForm', 'steps[].stepBlocksAfterForm', 'steps[].widgets'],
4908
- submissionImpact: false,
4953
+ submissionImpact: 'affects-schema-backed-data',
4909
4954
  preconditions: ['config-initialized', 'target-step-exists'],
4910
4955
  },
4911
4956
  ],
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@praxisui/stepper",
3
- "version": "8.0.0-beta.11",
3
+ "version": "8.0.0-beta.12",
4
4
  "description": "Stepper workflows for Praxis UI with integrated forms, lists, uploads and page builder support.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/material": "^20.0.0",
9
9
  "@angular/cdk": "^20.0.0",
10
- "@praxisui/core": "^8.0.0-beta.11",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.11",
12
- "@praxisui/rich-content": "^8.0.0-beta.11",
13
- "@praxisui/settings-panel": "^8.0.0-beta.11",
14
- "@praxisui/list": "^8.0.0-beta.11",
15
- "@praxisui/files-upload": "^8.0.0-beta.11",
16
- "@praxisui/page-builder": "^8.0.0-beta.11"
10
+ "@praxisui/core": "^8.0.0-beta.12",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.12",
12
+ "@praxisui/rich-content": "^8.0.0-beta.12",
13
+ "@praxisui/settings-panel": "^8.0.0-beta.12",
14
+ "@praxisui/list": "^8.0.0-beta.12",
15
+ "@praxisui/files-upload": "^8.0.0-beta.12",
16
+ "@praxisui/page-builder": "^8.0.0-beta.12"
17
17
  },
18
18
  "dependencies": {
19
19
  "tslib": "^2.3.0"