@praxisui/dynamic-form 9.0.58 → 9.0.60

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
@@ -308,6 +308,10 @@ Common outputs:
308
308
 
309
309
  - `formSubmit`, `formCancel`, `formReset`
310
310
  - `formReady`, `valueChange`
311
+ - `payloadPreviewChange`: projects the current persistence payload through the
312
+ same synchronous normalization and submit-policy pipeline used by submit,
313
+ without running submit hooks or dispatching HTTP. `changedFields` contains
314
+ dirty control paths and remains independent from payload membership.
311
315
  - `configChange`, `configPatchChange`
312
316
  - `syncCompleted`, `schemaStatusChange`
313
317
  - `loadingStateChange`, `initializationError`
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-09-03T03:04:37.933Z",
3
+ "generatedAt": "2026-09-04T15:26:31.194Z",
4
4
  "packageName": "@praxisui/dynamic-form",
5
- "packageVersion": "9.0.58",
5
+ "packageVersion": "9.0.60",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -326,6 +326,13 @@
326
326
  "description": "Emite quando valores mudam",
327
327
  "label": "Valor alterado"
328
328
  },
329
+ {
330
+ "name": "payloadPreviewChange",
331
+ "type": "FormPayloadPreviewEvent",
332
+ "required": false,
333
+ "description": "Projeta o payload persistível atual sem hooks de submit nem HTTP",
334
+ "label": "Prévia do payload"
335
+ },
329
336
  {
330
337
  "name": "syncCompleted",
331
338
  "type": "SyncResult",
@@ -559,6 +566,306 @@
559
566
  "public": true,
560
567
  "group": "events"
561
568
  }
569
+ },
570
+ {
571
+ "id": "payloadPreviewChange",
572
+ "label": "Payload Preview Change",
573
+ "direction": "output",
574
+ "semanticKind": "event",
575
+ "schema": {
576
+ "id": "FormPayloadPreviewEvent",
577
+ "kind": "ts-type",
578
+ "ref": "FormPayloadPreviewEvent"
579
+ },
580
+ "cardinality": "stream",
581
+ "description": "Non-destructive projection of the current persistence payload without submit hooks or HTTP.",
582
+ "exposure": {
583
+ "public": true,
584
+ "group": "events"
585
+ }
586
+ }
587
+ ],
588
+ "runtimeProfiles": [
589
+ {
590
+ "id": "public-local-readonly",
591
+ "audience": "public-untrusted",
592
+ "description": "Formulário local somente-leitura, sem persistência, endpoints, rich content, hooks, comandos ou controles remotos.",
593
+ "constraints": [
594
+ {
595
+ "path": "$",
596
+ "operator": "keys-subset",
597
+ "values": [
598
+ "mode",
599
+ "readonlyModeGlobal",
600
+ "configPersistenceStrategy",
601
+ "enableCustomization",
602
+ "showAiAssistant",
603
+ "initialValue",
604
+ "config"
605
+ ]
606
+ },
607
+ {
608
+ "path": "resourcePath",
609
+ "operator": "absent-or-empty"
610
+ },
611
+ {
612
+ "path": "resourceId",
613
+ "operator": "absent-or-empty"
614
+ },
615
+ {
616
+ "path": "schemaUrl",
617
+ "operator": "absent-or-empty"
618
+ },
619
+ {
620
+ "path": "readUrl",
621
+ "operator": "absent-or-empty"
622
+ },
623
+ {
624
+ "path": "submitUrl",
625
+ "operator": "absent-or-empty"
626
+ },
627
+ {
628
+ "path": "submitMethod",
629
+ "operator": "absent-or-empty"
630
+ },
631
+ {
632
+ "path": "responseSchemaUrl",
633
+ "operator": "absent-or-empty"
634
+ },
635
+ {
636
+ "path": "apiEndpointKey",
637
+ "operator": "absent-or-empty"
638
+ },
639
+ {
640
+ "path": "apiUrlEntry",
641
+ "operator": "absent-or-empty"
642
+ },
643
+ {
644
+ "path": "formId",
645
+ "operator": "absent-or-empty"
646
+ },
647
+ {
648
+ "path": "componentInstanceId",
649
+ "operator": "absent-or-empty"
650
+ },
651
+ {
652
+ "path": "hooks",
653
+ "operator": "absent-or-empty"
654
+ },
655
+ {
656
+ "path": "backConfig",
657
+ "operator": "absent-or-empty"
658
+ },
659
+ {
660
+ "path": "customEndpoints",
661
+ "operator": "absent-or-empty"
662
+ },
663
+ {
664
+ "path": "layout",
665
+ "operator": "absent-or-empty"
666
+ },
667
+ {
668
+ "path": "layoutPolicy",
669
+ "operator": "absent-or-empty"
670
+ },
671
+ {
672
+ "path": "mode",
673
+ "operator": "equals",
674
+ "value": "view"
675
+ },
676
+ {
677
+ "path": "readonlyModeGlobal",
678
+ "operator": "equals",
679
+ "value": true
680
+ },
681
+ {
682
+ "path": "configPersistenceStrategy",
683
+ "operator": "equals",
684
+ "value": "input-first"
685
+ },
686
+ {
687
+ "path": "enableCustomization",
688
+ "operator": "not-true"
689
+ },
690
+ {
691
+ "path": "showAiAssistant",
692
+ "operator": "equals",
693
+ "value": false
694
+ },
695
+ {
696
+ "path": "config.sections",
697
+ "operator": "array"
698
+ },
699
+ {
700
+ "path": "config.fieldMetadata",
701
+ "operator": "array"
702
+ },
703
+ {
704
+ "path": "config",
705
+ "operator": "keys-subset",
706
+ "values": [
707
+ "sections",
708
+ "fieldMetadata"
709
+ ]
710
+ },
711
+ {
712
+ "path": "config.sections[*]",
713
+ "operator": "keys-subset",
714
+ "values": [
715
+ "id",
716
+ "title",
717
+ "description",
718
+ "icon",
719
+ "collapsible",
720
+ "expanded",
721
+ "rows"
722
+ ]
723
+ },
724
+ {
725
+ "path": "config.sections[*].rows[*]",
726
+ "operator": "keys-subset",
727
+ "values": [
728
+ "id",
729
+ "columns"
730
+ ]
731
+ },
732
+ {
733
+ "path": "config.sections[*].rows[*].columns[*]",
734
+ "operator": "keys-subset",
735
+ "values": [
736
+ "id",
737
+ "fields",
738
+ "width"
739
+ ]
740
+ },
741
+ {
742
+ "path": "config.fieldMetadata[*]",
743
+ "operator": "keys-subset",
744
+ "values": [
745
+ "name",
746
+ "label",
747
+ "controlType",
748
+ "dataType",
749
+ "order",
750
+ "required",
751
+ "readOnly",
752
+ "disabled",
753
+ "hidden",
754
+ "defaultValue",
755
+ "placeholder",
756
+ "hint",
757
+ "helpText",
758
+ "options",
759
+ "valueField",
760
+ "displayField",
761
+ "width",
762
+ "prefixIcon",
763
+ "suffixIcon",
764
+ "ariaLabel",
765
+ "validators",
766
+ "format",
767
+ "selectionMode"
768
+ ]
769
+ },
770
+ {
771
+ "path": "config.actions",
772
+ "operator": "absent-or-empty"
773
+ },
774
+ {
775
+ "path": "config.api",
776
+ "operator": "absent-or-empty"
777
+ },
778
+ {
779
+ "path": "config.hooks",
780
+ "operator": "absent-or-empty"
781
+ },
782
+ {
783
+ "path": "config.formRules",
784
+ "operator": "empty-array-or-absent"
785
+ },
786
+ {
787
+ "path": "config.formCommandRules",
788
+ "operator": "empty-array-or-absent"
789
+ },
790
+ {
791
+ "path": "config.formBlocksBefore",
792
+ "operator": "absent-or-empty"
793
+ },
794
+ {
795
+ "path": "config.formBlocksBeforeActions",
796
+ "operator": "absent-or-empty"
797
+ },
798
+ {
799
+ "path": "config.formBlocksAfter",
800
+ "operator": "absent-or-empty"
801
+ },
802
+ {
803
+ "path": "config.behavior.redirectAfterSave",
804
+ "operator": "absent-or-empty"
805
+ },
806
+ {
807
+ "path": "config.behavior.reactiveValidation",
808
+ "operator": "not-true"
809
+ },
810
+ {
811
+ "path": "config.sections[*].headerActions",
812
+ "operator": "empty-array-or-absent"
813
+ },
814
+ {
815
+ "path": "config.sections[*].rows[*].columns[*].items",
816
+ "operator": "empty-array-or-absent"
817
+ },
818
+ {
819
+ "path": "config.fieldMetadata[*].controlType",
820
+ "operator": "one-of",
821
+ "values": [
822
+ "input",
823
+ "textarea",
824
+ "number",
825
+ "numericTextBox",
826
+ "checkbox",
827
+ "toggle",
828
+ "date",
829
+ "time",
830
+ "currency",
831
+ "select",
832
+ "radio"
833
+ ]
834
+ },
835
+ {
836
+ "path": "config.fieldMetadata[*].endpoint",
837
+ "operator": "absent-or-empty"
838
+ },
839
+ {
840
+ "path": "config.fieldMetadata[*].resourcePath",
841
+ "operator": "absent-or-empty"
842
+ },
843
+ {
844
+ "path": "config.fieldMetadata[*].optionSource",
845
+ "operator": "absent-or-empty"
846
+ },
847
+ {
848
+ "path": "config.fieldMetadata[*].queryParams",
849
+ "operator": "absent-or-empty"
850
+ },
851
+ {
852
+ "path": "config.fieldMetadata[*].uploadUrl",
853
+ "operator": "absent-or-empty"
854
+ },
855
+ {
856
+ "path": "config.fieldMetadata[*].actions",
857
+ "operator": "absent-or-empty"
858
+ },
859
+ {
860
+ "path": "config.fieldMetadata[*].dialog",
861
+ "operator": "absent-or-empty"
862
+ },
863
+ {
864
+ "path": "config.fieldMetadata[*].globalAction",
865
+ "operator": "absent-or-empty"
866
+ }
867
+ ],
868
+ "effects": []
562
869
  }
563
870
  ],
564
871
  "configEditor": {
@@ -8852,9 +9159,9 @@
8852
9159
  {
8853
9160
  "chunkIndex": 0,
8854
9161
  "chunkKind": "summary",
8855
- "content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number | null)\n - initialValue (Record<string, unknown> | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view')\n - config (FormConfig)\n - schemaSource ('resource' | 'filter')\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - submitIdempotencyKey (string | null)\n - submitCorrelationId (string | null)\n - submitResourceVersion (string | number | null)\n - submitResourceVersionTargetResourceKey (string | null)\n - submitResourceVersionTargetIdField (string | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n - reactiveDeterminationExecuted (ReactiveDeterminationExecutionEvent)\n - reactiveDeterminationPendingChange (boolean)\n",
9162
+ "content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number | null)\n - initialValue (Record<string, unknown> | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view')\n - config (FormConfig)\n - schemaSource ('resource' | 'filter')\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - submitIdempotencyKey (string | null)\n - submitCorrelationId (string | null)\n - submitResourceVersion (string | number | null)\n - submitResourceVersionTargetResourceKey (string | null)\n - submitResourceVersionTargetIdField (string | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - payloadPreviewChange (FormPayloadPreviewEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n - reactiveDeterminationExecuted (ReactiveDeterminationExecutionEvent)\n - reactiveDeterminationPendingChange (boolean)\n",
8856
9163
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.metadata.ts",
8857
- "contentHash": "fb7532a375af1f3a2c22b9b065a431ee3a0fd4589f54da031ed32e912a389cd1",
9164
+ "contentHash": "7bfd89c61a21e276068405c94b0a38cc6c988d87f0a663e2e8e1f3d497fc5c93",
8858
9165
  "sourceKind": "component_definition",
8859
9166
  "sourceId": "praxis-dynamic-form",
8860
9167
  "corpusVersion": "1.0.0"