@praxisui/manual-form 9.0.0-beta.85 → 9.0.0-beta.88
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/ai/component-registry.json +309 -18
- package/fesm2022/praxisui-manual-form.mjs +93 -102
- package/package.json +6 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-23T02:50:28.389Z",
|
|
4
4
|
"packageName": "@praxisui/manual-form",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.88",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -3402,6 +3402,42 @@
|
|
|
3402
3402
|
"identityKeys": [
|
|
3403
3403
|
"fieldName"
|
|
3404
3404
|
],
|
|
3405
|
+
"inputSchema": {
|
|
3406
|
+
"type": "object",
|
|
3407
|
+
"required": [
|
|
3408
|
+
"fieldName",
|
|
3409
|
+
"controlType"
|
|
3410
|
+
],
|
|
3411
|
+
"properties": {
|
|
3412
|
+
"fieldName": {
|
|
3413
|
+
"type": "string"
|
|
3414
|
+
},
|
|
3415
|
+
"controlType": {
|
|
3416
|
+
"type": "string"
|
|
3417
|
+
},
|
|
3418
|
+
"label": {
|
|
3419
|
+
"type": "string"
|
|
3420
|
+
},
|
|
3421
|
+
"required": {
|
|
3422
|
+
"type": "boolean"
|
|
3423
|
+
},
|
|
3424
|
+
"sectionId": {
|
|
3425
|
+
"type": "string"
|
|
3426
|
+
},
|
|
3427
|
+
"source": {
|
|
3428
|
+
"enum": [
|
|
3429
|
+
"manual-template",
|
|
3430
|
+
"detected-component",
|
|
3431
|
+
"metadata-bridge"
|
|
3432
|
+
]
|
|
3433
|
+
},
|
|
3434
|
+
"delegateFieldMetadataTo": {
|
|
3435
|
+
"enum": [
|
|
3436
|
+
"praxis-metadata-editor"
|
|
3437
|
+
]
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
},
|
|
3405
3441
|
"failureModes": [
|
|
3406
3442
|
"duplicate-manual-field-id",
|
|
3407
3443
|
"control-type-not-discovered",
|
|
@@ -3479,6 +3515,23 @@
|
|
|
3479
3515
|
"identityKeys": [
|
|
3480
3516
|
"fieldName"
|
|
3481
3517
|
],
|
|
3518
|
+
"inputSchema": {
|
|
3519
|
+
"type": "object",
|
|
3520
|
+
"required": [
|
|
3521
|
+
"fieldName"
|
|
3522
|
+
],
|
|
3523
|
+
"properties": {
|
|
3524
|
+
"fieldName": {
|
|
3525
|
+
"type": "string"
|
|
3526
|
+
},
|
|
3527
|
+
"removeFromLayout": {
|
|
3528
|
+
"type": "boolean"
|
|
3529
|
+
},
|
|
3530
|
+
"clearPersistedValue": {
|
|
3531
|
+
"type": "boolean"
|
|
3532
|
+
}
|
|
3533
|
+
}
|
|
3534
|
+
},
|
|
3482
3535
|
"failureModes": [
|
|
3483
3536
|
"manual-field-not-found",
|
|
3484
3537
|
"field-still-referenced-by-layout",
|
|
@@ -3554,6 +3607,24 @@
|
|
|
3554
3607
|
"identityKeys": [
|
|
3555
3608
|
"fieldName"
|
|
3556
3609
|
],
|
|
3610
|
+
"inputSchema": {
|
|
3611
|
+
"type": "object",
|
|
3612
|
+
"required": [
|
|
3613
|
+
"fieldName",
|
|
3614
|
+
"label"
|
|
3615
|
+
],
|
|
3616
|
+
"properties": {
|
|
3617
|
+
"fieldName": {
|
|
3618
|
+
"type": "string"
|
|
3619
|
+
},
|
|
3620
|
+
"label": {
|
|
3621
|
+
"type": "string"
|
|
3622
|
+
},
|
|
3623
|
+
"updatePlaceholderWhenEmpty": {
|
|
3624
|
+
"type": "boolean"
|
|
3625
|
+
}
|
|
3626
|
+
}
|
|
3627
|
+
},
|
|
3557
3628
|
"failureModes": [
|
|
3558
3629
|
"manual-field-not-found",
|
|
3559
3630
|
"label-empty",
|
|
@@ -3642,6 +3713,35 @@
|
|
|
3642
3713
|
"columnId",
|
|
3643
3714
|
"fieldName"
|
|
3644
3715
|
],
|
|
3716
|
+
"inputSchema": {
|
|
3717
|
+
"type": "object",
|
|
3718
|
+
"minProperties": 1,
|
|
3719
|
+
"properties": {
|
|
3720
|
+
"usePathNames": {
|
|
3721
|
+
"type": "boolean"
|
|
3722
|
+
},
|
|
3723
|
+
"sections": {
|
|
3724
|
+
"type": "array"
|
|
3725
|
+
},
|
|
3726
|
+
"rows": {
|
|
3727
|
+
"type": "array"
|
|
3728
|
+
},
|
|
3729
|
+
"columns": {
|
|
3730
|
+
"type": "array"
|
|
3731
|
+
},
|
|
3732
|
+
"fieldOrder": {
|
|
3733
|
+
"type": "array",
|
|
3734
|
+
"items": {
|
|
3735
|
+
"type": "string"
|
|
3736
|
+
}
|
|
3737
|
+
},
|
|
3738
|
+
"delegateAdvancedFormConfigTo": {
|
|
3739
|
+
"enum": [
|
|
3740
|
+
"praxis-dynamic-form"
|
|
3741
|
+
]
|
|
3742
|
+
}
|
|
3743
|
+
}
|
|
3744
|
+
},
|
|
3645
3745
|
"failureModes": [
|
|
3646
3746
|
"layout-field-reference-missing",
|
|
3647
3747
|
"advanced-form-config-delegation-required",
|
|
@@ -3716,6 +3816,27 @@
|
|
|
3716
3816
|
"identityKeys": [
|
|
3717
3817
|
"formId"
|
|
3718
3818
|
],
|
|
3819
|
+
"inputSchema": {
|
|
3820
|
+
"type": "object",
|
|
3821
|
+
"minProperties": 1,
|
|
3822
|
+
"properties": {
|
|
3823
|
+
"enableCustomization": {
|
|
3824
|
+
"type": "boolean"
|
|
3825
|
+
},
|
|
3826
|
+
"editableFlags": {
|
|
3827
|
+
"type": "array",
|
|
3828
|
+
"items": {
|
|
3829
|
+
"enum": [
|
|
3830
|
+
"required",
|
|
3831
|
+
"readOnly",
|
|
3832
|
+
"hidden",
|
|
3833
|
+
"disabled",
|
|
3834
|
+
"openMetadataEditor"
|
|
3835
|
+
]
|
|
3836
|
+
}
|
|
3837
|
+
}
|
|
3838
|
+
}
|
|
3839
|
+
},
|
|
3719
3840
|
"failureModes": [
|
|
3720
3841
|
"toolbar-disabled-with-required-bridge",
|
|
3721
3842
|
"unsupported-toolbar-flag"
|
|
@@ -3799,6 +3920,32 @@
|
|
|
3799
3920
|
"tenantId",
|
|
3800
3921
|
"profileId"
|
|
3801
3922
|
],
|
|
3923
|
+
"inputSchema": {
|
|
3924
|
+
"type": "object",
|
|
3925
|
+
"required": [
|
|
3926
|
+
"enabled"
|
|
3927
|
+
],
|
|
3928
|
+
"properties": {
|
|
3929
|
+
"enabled": {
|
|
3930
|
+
"type": "boolean"
|
|
3931
|
+
},
|
|
3932
|
+
"debounceMs": {
|
|
3933
|
+
"type": "number"
|
|
3934
|
+
},
|
|
3935
|
+
"storageKey": {
|
|
3936
|
+
"type": "string"
|
|
3937
|
+
},
|
|
3938
|
+
"namespace": {
|
|
3939
|
+
"type": "string"
|
|
3940
|
+
},
|
|
3941
|
+
"tenantId": {
|
|
3942
|
+
"type": "string"
|
|
3943
|
+
},
|
|
3944
|
+
"profileId": {
|
|
3945
|
+
"type": "string"
|
|
3946
|
+
}
|
|
3947
|
+
}
|
|
3948
|
+
},
|
|
3802
3949
|
"failureModes": [
|
|
3803
3950
|
"autosave-storage-missing",
|
|
3804
3951
|
"unsafe-debounce",
|
|
@@ -3892,6 +4039,38 @@
|
|
|
3892
4039
|
"formId",
|
|
3893
4040
|
"action"
|
|
3894
4041
|
],
|
|
4042
|
+
"inputSchema": {
|
|
4043
|
+
"type": "object",
|
|
4044
|
+
"minProperties": 1,
|
|
4045
|
+
"properties": {
|
|
4046
|
+
"action": {
|
|
4047
|
+
"enum": [
|
|
4048
|
+
"submit",
|
|
4049
|
+
"saveDraft",
|
|
4050
|
+
"reset",
|
|
4051
|
+
"cancel",
|
|
4052
|
+
"custom"
|
|
4053
|
+
]
|
|
4054
|
+
},
|
|
4055
|
+
"clearAfterSave": {
|
|
4056
|
+
"type": "boolean"
|
|
4057
|
+
},
|
|
4058
|
+
"focusFirstError": {
|
|
4059
|
+
"type": "boolean"
|
|
4060
|
+
},
|
|
4061
|
+
"scrollToErrors": {
|
|
4062
|
+
"type": "boolean"
|
|
4063
|
+
},
|
|
4064
|
+
"confirmOnUnsavedChanges": {
|
|
4065
|
+
"type": "boolean"
|
|
4066
|
+
},
|
|
4067
|
+
"delegateFormSubmitTo": {
|
|
4068
|
+
"enum": [
|
|
4069
|
+
"praxis-dynamic-form"
|
|
4070
|
+
]
|
|
4071
|
+
}
|
|
4072
|
+
}
|
|
4073
|
+
},
|
|
3895
4074
|
"failureModes": [
|
|
3896
4075
|
"submit-action-unsupported",
|
|
3897
4076
|
"advanced-form-submit-delegation-required",
|
|
@@ -3983,6 +4162,38 @@
|
|
|
3983
4162
|
"fieldName",
|
|
3984
4163
|
"openMode"
|
|
3985
4164
|
],
|
|
4165
|
+
"inputSchema": {
|
|
4166
|
+
"type": "object",
|
|
4167
|
+
"minProperties": 1,
|
|
4168
|
+
"properties": {
|
|
4169
|
+
"enabled": {
|
|
4170
|
+
"type": "boolean"
|
|
4171
|
+
},
|
|
4172
|
+
"fieldName": {
|
|
4173
|
+
"type": "string"
|
|
4174
|
+
},
|
|
4175
|
+
"openMode": {
|
|
4176
|
+
"enum": [
|
|
4177
|
+
"field-toolbar",
|
|
4178
|
+
"double-click",
|
|
4179
|
+
"programmatic"
|
|
4180
|
+
]
|
|
4181
|
+
},
|
|
4182
|
+
"persistDraftAfterPatch": {
|
|
4183
|
+
"type": "boolean"
|
|
4184
|
+
},
|
|
4185
|
+
"delegateFieldMetadataTo": {
|
|
4186
|
+
"enum": [
|
|
4187
|
+
"praxis-metadata-editor"
|
|
4188
|
+
]
|
|
4189
|
+
},
|
|
4190
|
+
"delegateControlDiscoveryTo": {
|
|
4191
|
+
"enum": [
|
|
4192
|
+
"praxis-dynamic-fields"
|
|
4193
|
+
]
|
|
4194
|
+
}
|
|
4195
|
+
}
|
|
4196
|
+
},
|
|
3986
4197
|
"failureModes": [
|
|
3987
4198
|
"metadata-editor-unavailable",
|
|
3988
4199
|
"field-metadata-delegation-required",
|
|
@@ -4342,6 +4553,86 @@
|
|
|
4342
4553
|
{
|
|
4343
4554
|
"chunkIndex": 6,
|
|
4344
4555
|
"chunkKind": "authoring_manifest",
|
|
4556
|
+
"content": "{\"operationId\":\"manualField.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add manual field metadata Effects: compile-domain-patch. Add a manual text field for customer name. Add another customerName field with a different label.\",\"scope\":\"field\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"required\":true},\"inputContract\":{\"required\":[\"fieldName\",\"controlType\"],\"properties\":[\"fieldName\",\"controlType\",\"label\",\"required\",\"sectionId\",\"source\",\"delegateFieldMetadataTo\"],\"semanticTerms\":[\"fieldName\",\"controlType\",\"label\",\"required\",\"sectionId\",\"source\",\"delegateFieldMetadataTo\",\"manual-template\",\"detected-component\",\"metadata-bridge\",\"praxis-metadata-editor\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"validators\":[{\"validatorId\":\"manual-field-id-unique\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_ID_UNIQUE\",\"description\":\"Manual field names must be unique in the instance metadata map.\"},{\"validatorId\":\"control-type-discovered\",\"level\":\"error\",\"code\":\"MANUAL_FORM_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must be discovered through dynamic-fields mappings or delegated discovery.\"},{\"validatorId\":\"host-template-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_HOST_FIELD_EXISTS\",\"description\":\"Manual field metadata must correspond to a host template control or declared metadata bridge target.\"},{\"validatorId\":\"metadata-bridge-does-not-redefine-schema\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\"description\":\"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-text-field\",\"request\":\"Add a manual text field for customer name.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Customer name\",\"source\":\"manual-template\",\"delegateFieldMetadataTo\":\"praxis-metadata-editor\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-duplicate-field\",\"request\":\"Add another customerName field with a different label.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Duplicate customer\"},\"isPositive\":false}]}",
|
|
4557
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4558
|
+
"contentHash": "4eb6255754636c4069553ff544b43719fe82f576b63fee8da197f58c121b7c96",
|
|
4559
|
+
"sourceKind": "component_definition",
|
|
4560
|
+
"sourceId": "praxis-manual-form",
|
|
4561
|
+
"corpusVersion": "1.0.0"
|
|
4562
|
+
},
|
|
4563
|
+
{
|
|
4564
|
+
"chunkIndex": 7,
|
|
4565
|
+
"chunkKind": "authoring_manifest",
|
|
4566
|
+
"content": "{\"operationId\":\"manualField.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remove manual field metadata Effects: compile-domain-patch. Remove the obsolete nickname field from the manual form. Remove email and clear its saved value without confirmation.\",\"scope\":\"field\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"required\":true},\"inputContract\":{\"required\":[\"fieldName\"],\"properties\":[\"fieldName\",\"removeFromLayout\",\"clearPersistedValue\"],\"semanticTerms\":[\"fieldName\",\"removeFromLayout\",\"clearPersistedValue\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"validators\":[{\"validatorId\":\"manual-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_EXISTS\",\"description\":\"Target manual field must exist before patching or removing it.\"},{\"validatorId\":\"field-removal-confirmed\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_REMOVAL_CONFIRMED\",\"description\":\"Removing a field or its persisted value requires explicit confirmation.\"},{\"validatorId\":\"layout-field-references-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_FIELD_REFERENCES_VALID\",\"description\":\"Layout field references must resolve to manual fields.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\",\"explicit-confirmation-provided\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"remove-obsolete-field\",\"request\":\"Remove the obsolete nickname field from the manual form.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"nickname\",\"removeFromLayout\":true,\"clearPersistedValue\":true},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unconfirmed-removal\",\"request\":\"Remove email and clear its saved value without confirmation.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"email\",\"clearPersistedValue\":true},\"isPositive\":false}]}",
|
|
4567
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4568
|
+
"contentHash": "ab01e30577d930ded56a131aec541dcece24a55a584c17acd995027a5f70888a",
|
|
4569
|
+
"sourceKind": "component_definition",
|
|
4570
|
+
"sourceId": "praxis-manual-form",
|
|
4571
|
+
"corpusVersion": "1.0.0"
|
|
4572
|
+
},
|
|
4573
|
+
{
|
|
4574
|
+
"chunkIndex": 8,
|
|
4575
|
+
"chunkKind": "authoring_manifest",
|
|
4576
|
+
"content": "{\"operationId\":\"manualField.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set manual field label Effects: compile-domain-patch. Change the label of cpf to CPF/CNPJ.\",\"scope\":\"field\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"required\":true},\"inputContract\":{\"required\":[\"fieldName\",\"label\"],\"properties\":[\"fieldName\",\"label\",\"updatePlaceholderWhenEmpty\"],\"semanticTerms\":[\"fieldName\",\"label\",\"updatePlaceholderWhenEmpty\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"validators\":[{\"validatorId\":\"manual-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_EXISTS\",\"description\":\"Target manual field must exist before patching or removing it.\"},{\"validatorId\":\"field-label-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_LABEL_VALID\",\"description\":\"Manual field label must be a non-empty user-facing string.\"},{\"validatorId\":\"metadata-bridge-does-not-redefine-schema\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\"description\":\"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"rename-label\",\"request\":\"Change the label of cpf to CPF/CNPJ.\",\"operationId\":\"manualField.label.set\",\"params\":{\"fieldName\":\"cpf\",\"label\":\"CPF/CNPJ\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
4577
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4578
|
+
"contentHash": "40ab840d2c94e136721c346c475ed0c7c23fba7a9f3ff98fa59359778879e24c",
|
|
4579
|
+
"sourceKind": "component_definition",
|
|
4580
|
+
"sourceId": "praxis-manual-form",
|
|
4581
|
+
"corpusVersion": "1.0.0"
|
|
4582
|
+
},
|
|
4583
|
+
{
|
|
4584
|
+
"chunkIndex": 9,
|
|
4585
|
+
"chunkKind": "authoring_manifest",
|
|
4586
|
+
"content": "{\"operationId\":\"layout.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure manual form layout Effects: compile-domain-patch. Use nested form paths as field names.\",\"scope\":\"layout\",\"target\":{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"usePathNames\",\"sections\",\"rows\",\"columns\",\"fieldOrder\",\"delegateAdvancedFormConfigTo\"],\"semanticTerms\":[\"usePathNames\",\"sections\",\"rows\",\"columns\",\"fieldOrder\",\"delegateAdvancedFormConfigTo\",\"praxis-dynamic-form\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"currentConfig.sections\",\"usePathNames\"],\"validators\":[{\"validatorId\":\"layout-field-references-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_FIELD_REFERENCES_VALID\",\"description\":\"Layout field references must resolve to manual fields.\"},{\"validatorId\":\"manual-layout-does-not-replace-host-template\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_HOST_TEMPLATE_SAFE\",\"description\":\"Manual layout metadata must not pretend to rewrite host-owned HTML template structure.\"},{\"validatorId\":\"delegates-form-config\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FORM_CONFIG\",\"description\":\"Advanced FormConfig semantics must be delegated to the dynamic-form manifest.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"enable-path-names\",\"request\":\"Use nested form paths as field names.\",\"operationId\":\"layout.configure\",\"params\":{\"usePathNames\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
4587
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4588
|
+
"contentHash": "24174e63182f5bcf2bbf5a3f0db970a56060ec9ba3a571095d76f61a50606f18",
|
|
4589
|
+
"sourceKind": "component_definition",
|
|
4590
|
+
"sourceId": "praxis-manual-form",
|
|
4591
|
+
"corpusVersion": "1.0.0"
|
|
4592
|
+
},
|
|
4593
|
+
{
|
|
4594
|
+
"chunkIndex": 10,
|
|
4595
|
+
"chunkKind": "authoring_manifest",
|
|
4596
|
+
"content": "{\"operationId\":\"toolbar.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure manual form customization toolbar Effects: compile-domain-patch. Enable customization toolbar with required and hidden toggles.\",\"scope\":\"toolbarUi\",\"target\":{\"kind\":\"toolbar\",\"resolver\":\"manual-form-customization-toolbar\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"enableCustomization\",\"editableFlags\"],\"semanticTerms\":[\"enableCustomization\",\"editableFlags\",\"required\",\"readOnly\",\"hidden\",\"disabled\",\"openMetadataEditor\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"enableCustomization\"],\"validators\":[{\"validatorId\":\"toolbar-flags-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_TOOLBAR_FLAGS_SUPPORTED\",\"description\":\"Toolbar quick edit flags must be supported by the manual field toolbar.\"},{\"validatorId\":\"metadata-bridge-gated-by-customization\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_GATED\",\"description\":\"Metadata bridge entry points must respect enableCustomization.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-component-loaded\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-toolbar\",\"request\":\"Enable customization toolbar with required and hidden toggles.\",\"operationId\":\"toolbar.configure\",\"params\":{\"enableCustomization\":true,\"editableFlags\":[\"required\",\"hidden\",\"openMetadataEditor\"]},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
4597
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4598
|
+
"contentHash": "413a0134b45ef84b46acb60bdaba2453e9bca24cf91bc1f00125c245e6024ebb",
|
|
4599
|
+
"sourceKind": "component_definition",
|
|
4600
|
+
"sourceId": "praxis-manual-form",
|
|
4601
|
+
"corpusVersion": "1.0.0"
|
|
4602
|
+
},
|
|
4603
|
+
{
|
|
4604
|
+
"chunkIndex": 11,
|
|
4605
|
+
"chunkKind": "authoring_manifest",
|
|
4606
|
+
"content": "{\"operationId\":\"autosave.enabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set manual form autosave policy Effects: compile-domain-patch. Enable autosave every second for this tenant profile. Autosave every millisecond with no storage identity.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"required\":false},\"inputContract\":{\"required\":[\"enabled\"],\"properties\":[\"enabled\",\"debounceMs\",\"storageKey\",\"namespace\",\"tenantId\",\"profileId\"],\"semanticTerms\":[\"enabled\",\"debounceMs\",\"storageKey\",\"namespace\",\"tenantId\",\"profileId\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"validators\":[{\"validatorId\":\"autosave-explicit\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_EXPLICIT\",\"description\":\"Autosave enablement and persistence policy must be explicit.\"},{\"validatorId\":\"autosave-debounce-safe\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_DEBOUNCE_SAFE\",\"description\":\"Autosave debounce must be positive and safe for storage backends.\"},{\"validatorId\":\"autosave-storage-available\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_STORAGE_AVAILABLE\",\"description\":\"Autosave requires a valid AsyncConfigStorage implementation.\"},{\"validatorId\":\"persistence-key-deterministic\",\"level\":\"error\",\"code\":\"MANUAL_FORM_PERSISTENCE_KEY_DETERMINISTIC\",\"description\":\"Persistence key composition must be deterministic across reopen/reload.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"enable-autosave\",\"request\":\"Enable autosave every second for this tenant profile.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1000,\"namespace\":\"sales\",\"tenantId\":\"acme\",\"profileId\":\"admin\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unsafe-autosave\",\"request\":\"Autosave every millisecond with no storage identity.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1},\"isPositive\":false}]}",
|
|
4607
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4608
|
+
"contentHash": "b8468e1981fac43da569b47aa6bfc2ebffcb970d28bb3a16ef91f3965e6316ee",
|
|
4609
|
+
"sourceKind": "component_definition",
|
|
4610
|
+
"sourceId": "praxis-manual-form",
|
|
4611
|
+
"corpusVersion": "1.0.0"
|
|
4612
|
+
},
|
|
4613
|
+
{
|
|
4614
|
+
"chunkIndex": 12,
|
|
4615
|
+
"chunkKind": "authoring_manifest",
|
|
4616
|
+
"content": "{\"operationId\":\"submitBehavior.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set manual form submit behavior Effects: compile-domain-patch. Focus the first invalid field and scroll to errors on submit.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"action\",\"clearAfterSave\",\"focusFirstError\",\"scrollToErrors\",\"confirmOnUnsavedChanges\",\"delegateFormSubmitTo\"],\"semanticTerms\":[\"action\",\"clearAfterSave\",\"focusFirstError\",\"scrollToErrors\",\"confirmOnUnsavedChanges\",\"delegateFormSubmitTo\",\"submit\",\"saveDraft\",\"reset\",\"cancel\",\"custom\",\"praxis-dynamic-form\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"validators\":[{\"validatorId\":\"submit-behavior-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_SUBMIT_BEHAVIOR_SUPPORTED\",\"description\":\"Submit behavior must map to supported manual form outputs or delegated dynamic-form semantics.\"},{\"validatorId\":\"delegates-form-config\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FORM_CONFIG\",\"description\":\"Advanced FormConfig semantics must be delegated to the dynamic-form manifest.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-submit-behavior\",\"request\":\"Focus the first invalid field and scroll to errors on submit.\",\"operationId\":\"submitBehavior.set\",\"params\":{\"action\":\"submit\",\"focusFirstError\":true,\"scrollToErrors\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
4617
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4618
|
+
"contentHash": "f516755f4671d68a72d351a48a3dc27311b9f57d6ade0fe9971dc5453fa49a0f",
|
|
4619
|
+
"sourceKind": "component_definition",
|
|
4620
|
+
"sourceId": "praxis-manual-form",
|
|
4621
|
+
"corpusVersion": "1.0.0"
|
|
4622
|
+
},
|
|
4623
|
+
{
|
|
4624
|
+
"chunkIndex": 13,
|
|
4625
|
+
"chunkKind": "authoring_manifest",
|
|
4626
|
+
"content": "{\"operationId\":\"metadataBridge.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure manual metadata bridge Effects: compile-domain-patch. Open metadata editor from the toolbar and persist draft after patch. Use manual form metadata bridge to replace the backend schema for cpf.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"enabled\",\"fieldName\",\"openMode\",\"persistDraftAfterPatch\",\"delegateFieldMetadataTo\",\"delegateControlDiscoveryTo\"],\"semanticTerms\":[\"enabled\",\"fieldName\",\"openMode\",\"persistDraftAfterPatch\",\"delegateFieldMetadataTo\",\"delegateControlDiscoveryTo\",\"field-toolbar\",\"double-click\",\"programmatic\",\"praxis-metadata-editor\",\"praxis-dynamic-fields\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"validators\":[{\"validatorId\":\"metadata-bridge-does-not-redefine-schema\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\"description\":\"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"},{\"validatorId\":\"delegates-field-metadata\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FIELD_METADATA\",\"description\":\"Advanced FieldMetadata edits must be delegated to the metadata-editor manifest.\"},{\"validatorId\":\"control-type-discovered\",\"level\":\"error\",\"code\":\"MANUAL_FORM_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must be discovered through dynamic-fields mappings or delegated discovery.\"},{\"validatorId\":\"metadata-bridge-gated-by-customization\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_GATED\",\"description\":\"Metadata bridge entry points must respect enableCustomization.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}],\"preconditions\":[\"manual-form-instance-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-metadata-bridge\",\"request\":\"Open metadata editor from the toolbar and persist draft after patch.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"openMode\":\"field-toolbar\",\"persistDraftAfterPatch\":true,\"delegateFieldMetadataTo\":\"praxis-metadata-editor\",\"delegateControlDiscoveryTo\":\"praxis-dynamic-fields\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-schema-redefinition\",\"request\":\"Use manual form metadata bridge to replace the backend schema for cpf.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"fieldName\":\"cpf\",\"backendSchemaOverride\":{\"type\":\"number\"}},\"isPositive\":false}]}",
|
|
4627
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4628
|
+
"contentHash": "a39e54367bd8f4a294d8abfb8e12c97f8f58c8a8164ce922e0bbce5ddf70ec78",
|
|
4629
|
+
"sourceKind": "component_definition",
|
|
4630
|
+
"sourceId": "praxis-manual-form",
|
|
4631
|
+
"corpusVersion": "1.0.0"
|
|
4632
|
+
},
|
|
4633
|
+
{
|
|
4634
|
+
"chunkIndex": 14,
|
|
4635
|
+
"chunkKind": "authoring_manifest",
|
|
4345
4636
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"identity\"}",
|
|
4346
4637
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4347
4638
|
"contentHash": "056e0a638a87c288dfb507ff43b2305d203406cd7a972f10c4dd16a0218cbb04",
|
|
@@ -4350,7 +4641,7 @@
|
|
|
4350
4641
|
"corpusVersion": "1.0.0"
|
|
4351
4642
|
},
|
|
4352
4643
|
{
|
|
4353
|
-
"chunkIndex":
|
|
4644
|
+
"chunkIndex": 15,
|
|
4354
4645
|
"chunkKind": "authoring_manifest",
|
|
4355
4646
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Required manual form id used for runtime state and persistence key composition.\"},{\"name\":\"formGroup\",\"type\":\"FormGroup | null\",\"description\":\"Host-owned typed FormGroup adopted by the manual form runtime when provided.\"},{\"name\":\"formTitle\",\"type\":\"string | null\",\"description\":\"Manual form title override.\"},{\"name\":\"formDescription\",\"type\":\"string | null\",\"description\":\"Manual form description override.\"},{\"name\":\"actions\",\"type\":\"FormActionsLayout | null\",\"description\":\"Manual toolbar/actions layout.\"},{\"name\":\"enableAutoSave\",\"type\":\"boolean\",\"description\":\"Enables draft persistence through ManualFormInstance.saveDraft.\"},{\"name\":\"autoSaveDebounceMs\",\"type\":\"number\",\"description\":\"Autosave debounce in milliseconds.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Enables field toolbar and metadata editor bridge.\"},{\"name\":\"persistenceOptions\",\"type\":\"ManualFormPersistenceOptions | null\",\"description\":\"Namespace, tenant, profile, locale and storage key controls.\"},{\"name\":\"usePathNames\",\"type\":\"boolean\",\"description\":\"Uses FormControlName.path as FieldMetadata.name for nested manual forms.\"}]}",
|
|
4356
4647
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
@@ -4360,7 +4651,7 @@
|
|
|
4360
4651
|
"corpusVersion": "1.0.0"
|
|
4361
4652
|
},
|
|
4362
4653
|
{
|
|
4363
|
-
"chunkIndex":
|
|
4654
|
+
"chunkIndex": 16,
|
|
4364
4655
|
"chunkKind": "authoring_manifest",
|
|
4365
4656
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"description\":\"Detected or declared manual field tracked by ManualFormInstance field metadata.\"},{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"description\":\"Manual layout ownership: host template layout plus optional FormConfig sections for authored structure.\"},{\"kind\":\"toolbar\",\"resolver\":\"manual-form-customization-toolbar\",\"description\":\"Customization toolbar and quick metadata toggles.\"},{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"description\":\"Autosave enablement, debounce and persistence key controls.\"},{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"description\":\"Bridge from manual fields to @praxisui/metadata-editor patches.\"},{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"description\":\"Submit, reset, validation focus and unsaved-change behavior.\"}]}",
|
|
4366
4657
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
@@ -4370,27 +4661,27 @@
|
|
|
4370
4661
|
"corpusVersion": "1.0.0"
|
|
4371
4662
|
},
|
|
4372
4663
|
{
|
|
4373
|
-
"chunkIndex":
|
|
4664
|
+
"chunkIndex": 17,
|
|
4374
4665
|
"chunkKind": "authoring_manifest",
|
|
4375
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"manualField.add\",\"title\":\"Add manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"controlType\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"sectionId\":{\"type\":\"string\"},\"source\":{\"enum\":[\"manual-template\",\"detected-component\",\"metadata-bridge\"]},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-add\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldKeyService\",\"dynamic-fields-control-discovery\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"duplicate-manual-field-id\",\"control-type-not-discovered\",\"host-template-field-missing\",\"field-metadata-delegation-required\"],\"description\":\"Adds metadata for a manual field while preserving host-owned template layout and delegating advanced FieldMetadata edits.\"}}],\"validators\":[\"manual-field-id-unique\",\"control-type-discovered\",\"host-template-field-exists\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"manualField.remove\",\"title\":\"Remove manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"removeFromLayout\":{\"type\":\"boolean\"},\"clearPersistedValue\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-remove\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFormInstance.form\",\"FormConfig.sections\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"manual-field-not-found\",\"field-still-referenced-by-layout\",\"persisted-value-removal-not-confirmed\"],\"description\":\"Removes a manual field by stable field name and requires explicit confirmation before metadata, layout or value loss.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"manual-field-exists\",\"field-removal-confirmed\",\"layout-field-references-valid\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\",\"explicit-confirmation-provided\"]},{\"operationId\":\"manualField.label.set\",\"title\":\"Set manual field label\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"label\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"updatePlaceholderWhenEmpty\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-label-set\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldMetadataBridgeService\"],\"writes\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"manual-field-not-found\",\"label-empty\",\"metadata-patch-rejected\"],\"description\":\"Sets a manual field label through the metadata bridge without redefining backend schema semantics.\"}}],\"validators\":[\"manual-field-exists\",\"field-label-valid\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"layout.configure\",\"title\":\"Configure manual form layout\",\"scope\":\"layout\",\"targetKind\":\"layout\",\"target\":{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"usePathNames\":{\"type\":\"boolean\"},\"sections\":{\"type\":\"array\"},\"rows\":{\"type\":\"array\"},\"columns\":{\"type\":\"array\"},\"fieldOrder\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"delegateAdvancedFormConfigTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-layout-configure\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"FormConfig.sections\",\"host-template-layout\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.sections\",\"usePathNames\"],\"identityKeys\":[\"sectionId\",\"rowId\",\"columnId\",\"fieldName\"],\"
|
|
4666
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"manualField.add\",\"title\":\"Add manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"controlType\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"sectionId\":{\"type\":\"string\"},\"source\":{\"enum\":[\"manual-template\",\"detected-component\",\"metadata-bridge\"]},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-add\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldKeyService\",\"dynamic-fields-control-discovery\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"controlType\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"sectionId\":{\"type\":\"string\"},\"source\":{\"enum\":[\"manual-template\",\"detected-component\",\"metadata-bridge\"]},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]}}},\"failureModes\":[\"duplicate-manual-field-id\",\"control-type-not-discovered\",\"host-template-field-missing\",\"field-metadata-delegation-required\"],\"description\":\"Adds metadata for a manual field while preserving host-owned template layout and delegating advanced FieldMetadata edits.\"}}],\"validators\":[\"manual-field-id-unique\",\"control-type-discovered\",\"host-template-field-exists\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"manualField.remove\",\"title\":\"Remove manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"removeFromLayout\":{\"type\":\"boolean\"},\"clearPersistedValue\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-remove\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFormInstance.form\",\"FormConfig.sections\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"removeFromLayout\":{\"type\":\"boolean\"},\"clearPersistedValue\":{\"type\":\"boolean\"}}},\"failureModes\":[\"manual-field-not-found\",\"field-still-referenced-by-layout\",\"persisted-value-removal-not-confirmed\"],\"description\":\"Removes a manual field by stable field name and requires explicit confirmation before metadata, layout or value loss.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"manual-field-exists\",\"field-removal-confirmed\",\"layout-field-references-valid\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\",\"explicit-confirmation-provided\"]},{\"operationId\":\"manualField.label.set\",\"title\":\"Set manual field label\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"label\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"updatePlaceholderWhenEmpty\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-label-set\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldMetadataBridgeService\"],\"writes\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"identityKeys\":[\"fieldName\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"label\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"updatePlaceholderWhenEmpty\":{\"type\":\"boolean\"}}},\"failureModes\":[\"manual-field-not-found\",\"label-empty\",\"metadata-patch-rejected\"],\"description\":\"Sets a manual field label through the metadata bridge without redefining backend schema semantics.\"}}],\"validators\":[\"manual-field-exists\",\"field-label-valid\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"layout.configure\",\"title\":\"Configure manual form layout\",\"scope\":\"layout\",\"targetKind\":\"layout\",\"target\":{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"usePathNames\":{\"type\":\"boolean\"},\"sections\":{\"type\":\"array\"},\"rows\":{\"type\":\"array\"},\"columns\":{\"type\":\"array\"},\"fieldOrder\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"delegateAdvancedFormConfigTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-layout-configure\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"FormConfig.sections\",\"host-template-layout\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.sections\",\"usePathNames\"],\"identityKeys\":[\"sectionId\",\"rowId\",\"columnId\",\"fieldName\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"usePathNames\":{\"type\":\"boolean\"},\"sections\":{\"type\":\"array\"},\"rows\":{\"type\":\"array\"},\"columns\":{\"type\":\"array\"},\"fieldOrder\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"delegateAdvancedFormConfigTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"failureModes\":[\"layout-field-reference-missing\",\"advanced-form-config-delegation-required\",\"host-template-layout-conflict\"],\"description\":\"Configures manual layout metadata and delegates advanced FormConfig layout semantics to the dynamic-form manifest.\"}}],\"validators\":[\"layout-field-references-valid\",\"manual-layout-does-not-replace-host-template\",\"delegates-form-config\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.sections\",\"usePathNames\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false}]}",
|
|
4376
4667
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4377
|
-
"contentHash": "
|
|
4668
|
+
"contentHash": "8f6f72537b599421ded0743c8c34cde702b1ba05aeabac67faf4cb3d78353c81",
|
|
4378
4669
|
"sourceKind": "component_definition",
|
|
4379
4670
|
"sourceId": "praxis-manual-form",
|
|
4380
4671
|
"corpusVersion": "1.0.0"
|
|
4381
4672
|
},
|
|
4382
4673
|
{
|
|
4383
|
-
"chunkIndex":
|
|
4674
|
+
"chunkIndex": 18,
|
|
4384
4675
|
"chunkKind": "authoring_manifest",
|
|
4385
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"autosave.enabled.set\",\"title\":\"Set manual form autosave policy\",\"scope\":\"interaction\",\"targetKind\":\"autosave\",\"target\":{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"debounceMs\":{\"type\":\"number\"},\"storageKey\":{\"type\":\"string\"},\"namespace\":{\"type\":\"string\"},\"tenantId\":{\"type\":\"string\"},\"profileId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-autosave-enabled-set\",\"handlerContract\":{\"reads\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"ManualFormPersistenceOptions\",\"ASYNC_CONFIG_STORAGE\"],\"writes\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"identityKeys\":[\"formId\",\"storageKey\",\"namespace\",\"tenantId\",\"profileId\"],\"failureModes\":[\"autosave-storage-missing\",\"unsafe-debounce\",\"ambiguous-storage-key\",\"ssr-storage-not-safe\"],\"description\":\"Sets autosave explicitly and requires safe debounce plus deterministic persistence key composition.\"}}],\"validators\":[\"autosave-explicit\",\"autosave-debounce-safe\",\"autosave-storage-available\",\"persistence-key-deterministic\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"submitBehavior.set\",\"title\":\"Set manual form submit behavior\",\"scope\":\"interaction\",\"targetKind\":\"submitBehavior\",\"target\":{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"action\":{\"enum\":[\"submit\",\"saveDraft\",\"reset\",\"cancel\",\"custom\"]},\"clearAfterSave\":{\"type\":\"boolean\"},\"focusFirstError\":{\"type\":\"boolean\"},\"scrollToErrors\":{\"type\":\"boolean\"},\"confirmOnUnsavedChanges\":{\"type\":\"boolean\"},\"delegateFormSubmitTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-submit-behavior-set\",\"handlerContract\":{\"reads\":[\"ManualFormComponent.submitted\",\"ManualFormInstance.form\",\"FormConfig.behavior\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"identityKeys\":[\"formId\",\"action\"],\"failureModes\":[\"submit-action-unsupported\",\"advanced-form-submit-delegation-required\",\"validation-focus-target-missing\"],\"description\":\"Configures manual submit/reset behavior and delegates dynamic-form submit payload semantics to the dynamic-form manifest.\"}}],\"validators\":[\"submit-behavior-supported\",\"delegates-form-config\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"metadataBridge.configure\",\"title\":\"Configure manual metadata bridge\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"metadataBridge\",\"target\":{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"fieldName\":{\"type\":\"string\"},\"openMode\":{\"enum\":[\"field-toolbar\",\"double-click\",\"programmatic\"]},\"persistDraftAfterPatch\":{\"type\":\"boolean\"},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]},\"delegateControlDiscoveryTo\":{\"enum\":[\"praxis-dynamic-fields\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-metadata-bridge-configure\",\"handlerContract\":{\"reads\":[\"ManualFieldMetadataBridgeService\",\"SettingsPanelService\",\"PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST\",\"dynamic-fields-discovery\"],\"writes\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"identityKeys\":[\"formId\",\"fieldName\",\"openMode\"],\"failureModes\":[\"metadata-editor-unavailable\",\"field-metadata-delegation-required\",\"control-discovery-delegation-required\",\"draft-persistence-failed\"],\"description\":\"Configures the bridge that opens metadata-editor for manual fields and persists accepted patches through ManualFormInstance.\"}}],\"validators\":[\"metadata-bridge-does-not-redefine-schema\",\"delegates-field-metadata\",\"control-type-discovered\",\"metadata-bridge-gated-by-customization\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false}]}",
|
|
4676
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"toolbar.configure\",\"title\":\"Configure manual form customization toolbar\",\"scope\":\"toolbarUi\",\"targetKind\":\"toolbar\",\"target\":{\"kind\":\"toolbar\",\"resolver\":\"manual-form-customization-toolbar\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enableCustomization\":{\"type\":\"boolean\"},\"editableFlags\":{\"type\":\"array\",\"items\":{\"enum\":[\"required\",\"readOnly\",\"hidden\",\"disabled\",\"openMetadataEditor\"]}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-toolbar-configure\",\"handlerContract\":{\"reads\":[\"ManualFormComponent.enableCustomization\",\"ManualFieldToolbarComponent\",\"ManualFieldEditorOnDblclickDirective\"],\"writes\":[\"enableCustomization\"],\"identityKeys\":[\"formId\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enableCustomization\":{\"type\":\"boolean\"},\"editableFlags\":{\"type\":\"array\",\"items\":{\"enum\":[\"required\",\"readOnly\",\"hidden\",\"disabled\",\"openMetadataEditor\"]}}}},\"failureModes\":[\"toolbar-disabled-with-required-bridge\",\"unsupported-toolbar-flag\"],\"description\":\"Configures the manual customization toolbar and keeps metadata edit entry points behind enableCustomization.\"}}],\"validators\":[\"toolbar-flags-supported\",\"metadata-bridge-gated-by-customization\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableCustomization\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"manual-form-component-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"autosave.enabled.set\",\"title\":\"Set manual form autosave policy\",\"scope\":\"interaction\",\"targetKind\":\"autosave\",\"target\":{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"debounceMs\":{\"type\":\"number\"},\"storageKey\":{\"type\":\"string\"},\"namespace\":{\"type\":\"string\"},\"tenantId\":{\"type\":\"string\"},\"profileId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-autosave-enabled-set\",\"handlerContract\":{\"reads\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"ManualFormPersistenceOptions\",\"ASYNC_CONFIG_STORAGE\"],\"writes\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"identityKeys\":[\"formId\",\"storageKey\",\"namespace\",\"tenantId\",\"profileId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"debounceMs\":{\"type\":\"number\"},\"storageKey\":{\"type\":\"string\"},\"namespace\":{\"type\":\"string\"},\"tenantId\":{\"type\":\"string\"},\"profileId\":{\"type\":\"string\"}}},\"failureModes\":[\"autosave-storage-missing\",\"unsafe-debounce\",\"ambiguous-storage-key\",\"ssr-storage-not-safe\"],\"description\":\"Sets autosave explicitly and requires safe debounce plus deterministic persistence key composition.\"}}],\"validators\":[\"autosave-explicit\",\"autosave-debounce-safe\",\"autosave-storage-available\",\"persistence-key-deterministic\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"submitBehavior.set\",\"title\":\"Set manual form submit behavior\",\"scope\":\"interaction\",\"targetKind\":\"submitBehavior\",\"target\":{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"action\":{\"enum\":[\"submit\",\"saveDraft\",\"reset\",\"cancel\",\"custom\"]},\"clearAfterSave\":{\"type\":\"boolean\"},\"focusFirstError\":{\"type\":\"boolean\"},\"scrollToErrors\":{\"type\":\"boolean\"},\"confirmOnUnsavedChanges\":{\"type\":\"boolean\"},\"delegateFormSubmitTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-submit-behavior-set\",\"handlerContract\":{\"reads\":[\"ManualFormComponent.submitted\",\"ManualFormInstance.form\",\"FormConfig.behavior\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"identityKeys\":[\"formId\",\"action\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"action\":{\"enum\":[\"submit\",\"saveDraft\",\"reset\",\"cancel\",\"custom\"]},\"clearAfterSave\":{\"type\":\"boolean\"},\"focusFirstError\":{\"type\":\"boolean\"},\"scrollToErrors\":{\"type\":\"boolean\"},\"confirmOnUnsavedChanges\":{\"type\":\"boolean\"},\"delegateFormSubmitTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"failureModes\":[\"submit-action-unsupported\",\"advanced-form-submit-delegation-required\",\"validation-focus-target-missing\"],\"description\":\"Configures manual submit/reset behavior and delegates dynamic-form submit payload semantics to the dynamic-form manifest.\"}}],\"validators\":[\"submit-behavior-supported\",\"delegates-form-config\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"metadataBridge.configure\",\"title\":\"Configure manual metadata bridge\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"metadataBridge\",\"target\":{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"fieldName\":{\"type\":\"string\"},\"openMode\":{\"enum\":[\"field-toolbar\",\"double-click\",\"programmatic\"]},\"persistDraftAfterPatch\":{\"type\":\"boolean\"},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]},\"delegateControlDiscoveryTo\":{\"enum\":[\"praxis-dynamic-fields\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-metadata-bridge-configure\",\"handlerContract\":{\"reads\":[\"ManualFieldMetadataBridgeService\",\"SettingsPanelService\",\"PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST\",\"dynamic-fields-discovery\"],\"writes\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"identityKeys\":[\"formId\",\"fieldName\",\"openMode\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"fieldName\":{\"type\":\"string\"},\"openMode\":{\"enum\":[\"field-toolbar\",\"double-click\",\"programmatic\"]},\"persistDraftAfterPatch\":{\"type\":\"boolean\"},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]},\"delegateControlDiscoveryTo\":{\"enum\":[\"praxis-dynamic-fields\"]}}},\"failureModes\":[\"metadata-editor-unavailable\",\"field-metadata-delegation-required\",\"control-discovery-delegation-required\",\"draft-persistence-failed\"],\"description\":\"Configures the bridge that opens metadata-editor for manual fields and persists accepted patches through ManualFormInstance.\"}}],\"validators\":[\"metadata-bridge-does-not-redefine-schema\",\"delegates-field-metadata\",\"control-type-discovered\",\"metadata-bridge-gated-by-customization\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false}]}",
|
|
4386
4677
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4387
|
-
"contentHash": "
|
|
4678
|
+
"contentHash": "4f0ace5ad3317b0021b77cfddc80d8e4d12d6aab8bb19aa7ac68fae70381b6bf",
|
|
4388
4679
|
"sourceKind": "component_definition",
|
|
4389
4680
|
"sourceId": "praxis-manual-form",
|
|
4390
4681
|
"corpusVersion": "1.0.0"
|
|
4391
4682
|
},
|
|
4392
4683
|
{
|
|
4393
|
-
"chunkIndex":
|
|
4684
|
+
"chunkIndex": 19,
|
|
4394
4685
|
"chunkKind": "authoring_manifest",
|
|
4395
4686
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"manual-field-id-unique\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_ID_UNIQUE\",\"description\":\"Manual field names must be unique in the instance metadata map.\"},{\"validatorId\":\"manual-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_EXISTS\",\"description\":\"Target manual field must exist before patching or removing it.\"},{\"validatorId\":\"field-removal-confirmed\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_REMOVAL_CONFIRMED\",\"description\":\"Removing a field or its persisted value requires explicit confirmation.\"},{\"validatorId\":\"field-label-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_LABEL_VALID\",\"description\":\"Manual field label must be a non-empty user-facing string.\"},{\"validatorId\":\"host-template-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_HOST_FIELD_EXISTS\",\"description\":\"Manual field metadata must correspond to a host template control or declared metadata bridge target.\"},{\"validatorId\":\"control-type-discovered\",\"level\":\"error\",\"code\":\"MANUAL_FORM_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must be discovered through dynamic-fields mappings or delegated discovery.\"},{\"validatorId\":\"metadata-bridge-does-not-redefine-schema\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\"description\":\"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"},{\"validatorId\":\"delegates-field-metadata\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FIELD_METADATA\",\"description\":\"Advanced FieldMetadata edits must be delegated to the metadata-editor manifest.\"},{\"validatorId\":\"delegates-form-config\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FORM_CONFIG\",\"description\":\"Advanced FormConfig semantics must be delegated to the dynamic-form manifest.\"},{\"validatorId\":\"layout-field-references-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_FIELD_REFERENCES_VALID\",\"description\":\"Layout field references must resolve to manual fields.\"},{\"validatorId\":\"manual-layout-does-not-replace-host-template\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_HOST_TEMPLATE_SAFE\",\"description\":\"Manual layout metadata must not pretend to rewrite host-owned HTML template structure.\"},{\"validatorId\":\"toolbar-flags-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_TOOLBAR_FLAGS_SUPPORTED\",\"description\":\"Toolbar quick edit flags must be supported by the manual field toolbar.\"},{\"validatorId\":\"metadata-bridge-gated-by-customization\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_GATED\",\"description\":\"Metadata bridge entry points must respect enableCustomization.\"},{\"validatorId\":\"autosave-explicit\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_EXPLICIT\",\"description\":\"Autosave enablement and persistence policy must be explicit.\"},{\"validatorId\":\"autosave-debounce-safe\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_DEBOUNCE_SAFE\",\"description\":\"Autosave debounce must be positive and safe for storage backends.\"},{\"validatorId\":\"autosave-storage-available\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_STORAGE_AVAILABLE\",\"description\":\"Autosave requires a valid AsyncConfigStorage implementation.\"},{\"validatorId\":\"persistence-key-deterministic\",\"level\":\"error\",\"code\":\"MANUAL_FORM_PERSISTENCE_KEY_DETERMINISTIC\",\"description\":\"Persistence key composition must be deterministic across reopen/reload.\"},{\"validatorId\":\"submit-behavior-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_SUBMIT_BEHAVIOR_SUPPORTED\",\"description\":\"Submit behavior must map to supported manual form outputs or delegated dynamic-form semantics.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}]}",
|
|
4396
4687
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
@@ -4400,7 +4691,7 @@
|
|
|
4400
4691
|
"corpusVersion": "1.0.0"
|
|
4401
4692
|
},
|
|
4402
4693
|
{
|
|
4403
|
-
"chunkIndex":
|
|
4694
|
+
"chunkIndex": 20,
|
|
4404
4695
|
"chunkKind": "authoring_manifest",
|
|
4405
4696
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"ManualFormInstance is the package-level runtime document: config, field metadata map, FormGroup and persistence key must remain coherent.\",\"Manual field ids are stable field names; array indexes are not canonical identity.\",\"Field removal is destructive and requires confirmation before metadata, layout references or persisted values are removed.\",\"Autosave must be explicit, have a safe debounce and use deterministic persistence key composition through ManualFormPersistenceOptions.\",\"The metadata bridge may apply metadata-editor patches but must not silently redefine backend schema or duplicate FieldMetadata semantics.\",\"Advanced FormConfig authoring belongs to praxis-dynamic-form; this manifest governs manual form orchestration and delegates deeper FormConfig semantics.\"]}",
|
|
4406
4697
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
@@ -4410,7 +4701,7 @@
|
|
|
4410
4701
|
"corpusVersion": "1.0.0"
|
|
4411
4702
|
},
|
|
4412
4703
|
{
|
|
4413
|
-
"chunkIndex":
|
|
4704
|
+
"chunkIndex": 21,
|
|
4414
4705
|
"chunkKind": "authoring_manifest",
|
|
4415
4706
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-text-field\",\"request\":\"Add a manual text field for customer name.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Customer name\",\"source\":\"manual-template\",\"delegateFieldMetadataTo\":\"praxis-metadata-editor\"},\"isPositive\":true},{\"id\":\"remove-obsolete-field\",\"request\":\"Remove the obsolete nickname field from the manual form.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"nickname\",\"removeFromLayout\":true,\"clearPersistedValue\":true},\"isPositive\":true},{\"id\":\"rename-label\",\"request\":\"Change the label of cpf to CPF/CNPJ.\",\"operationId\":\"manualField.label.set\",\"params\":{\"fieldName\":\"cpf\",\"label\":\"CPF/CNPJ\"},\"isPositive\":true},{\"id\":\"enable-path-names\",\"request\":\"Use nested form paths as field names.\",\"operationId\":\"layout.configure\",\"params\":{\"usePathNames\":true},\"isPositive\":true},{\"id\":\"configure-toolbar\",\"request\":\"Enable customization toolbar with required and hidden toggles.\",\"operationId\":\"toolbar.configure\",\"params\":{\"enableCustomization\":true,\"editableFlags\":[\"required\",\"hidden\",\"openMetadataEditor\"]},\"isPositive\":true},{\"id\":\"enable-autosave\",\"request\":\"Enable autosave every second for this tenant profile.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1000,\"namespace\":\"sales\",\"tenantId\":\"acme\",\"profileId\":\"admin\"},\"isPositive\":true},{\"id\":\"set-submit-behavior\",\"request\":\"Focus the first invalid field and scroll to errors on submit.\",\"operationId\":\"submitBehavior.set\",\"params\":{\"action\":\"submit\",\"focusFirstError\":true,\"scrollToErrors\":true},\"isPositive\":true},{\"id\":\"configure-metadata-bridge\",\"request\":\"Open metadata editor from the toolbar and persist draft after patch.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"openMode\":\"field-toolbar\",\"persistDraftAfterPatch\":true,\"delegateFieldMetadataTo\":\"praxis-metadata-editor\",\"delegateControlDiscoveryTo\":\"praxis-dynamic-fields\"},\"isPositive\":true},{\"id\":\"reject-duplicate-field\",\"request\":\"Add another customerName field with a different label.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Duplicate customer\"},\"isPositive\":false},{\"id\":\"reject-unconfirmed-removal\",\"request\":\"Remove email and clear its saved value without confirmation.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"email\",\"clearPersistedValue\":true},\"isPositive\":false},{\"id\":\"reject-unsafe-autosave\",\"request\":\"Autosave every millisecond with no storage identity.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1},\"isPositive\":false},{\"id\":\"reject-schema-redefinition\",\"request\":\"Use manual form metadata bridge to replace the backend schema for cpf.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"fieldName\":\"cpf\",\"backendSchemaOverride\":{\"type\":\"number\"}},\"isPositive\":false}]}",
|
|
4416
4707
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
@@ -4420,7 +4711,7 @@
|
|
|
4420
4711
|
"corpusVersion": "1.0.0"
|
|
4421
4712
|
},
|
|
4422
4713
|
{
|
|
4423
|
-
"chunkIndex":
|
|
4714
|
+
"chunkIndex": 22,
|
|
4424
4715
|
"chunkKind": "context_pack",
|
|
4425
4716
|
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
|
|
4426
4717
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -4430,7 +4721,7 @@
|
|
|
4430
4721
|
"corpusVersion": "1.0.0"
|
|
4431
4722
|
},
|
|
4432
4723
|
{
|
|
4433
|
-
"chunkIndex":
|
|
4724
|
+
"chunkIndex": 23,
|
|
4434
4725
|
"chunkKind": "context_pack",
|
|
4435
4726
|
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
|
|
4436
4727
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -4440,7 +4731,7 @@
|
|
|
4440
4731
|
"corpusVersion": "1.0.0"
|
|
4441
4732
|
},
|
|
4442
4733
|
{
|
|
4443
|
-
"chunkIndex":
|
|
4734
|
+
"chunkIndex": 24,
|
|
4444
4735
|
"chunkKind": "context_pack",
|
|
4445
4736
|
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
|
|
4446
4737
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -4450,7 +4741,7 @@
|
|
|
4450
4741
|
"corpusVersion": "1.0.0"
|
|
4451
4742
|
},
|
|
4452
4743
|
{
|
|
4453
|
-
"chunkIndex":
|
|
4744
|
+
"chunkIndex": 25,
|
|
4454
4745
|
"chunkKind": "context_pack",
|
|
4455
4746
|
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
|
|
4456
4747
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -4460,7 +4751,7 @@
|
|
|
4460
4751
|
"corpusVersion": "1.0.0"
|
|
4461
4752
|
},
|
|
4462
4753
|
{
|
|
4463
|
-
"chunkIndex":
|
|
4754
|
+
"chunkIndex": 26,
|
|
4464
4755
|
"chunkKind": "recipe",
|
|
4465
4756
|
"content": "{\"_comment\":\"Receita para Formulário Manual (Low-code/No-code).\",\"templateMeta\":{\"registryKey\":\"praxis-manual-form\",\"variantId\":\"base\",\"useWhen\":\"Base manual form configuration.\",\"examplePrompts\":[\"create a manual form with fields\",\"configure manual form layout\"]},\"config\":{\"schema\":{\"fields\":[{\"name\":\"title\",\"type\":\"text\",\"label\":\"Título\"},{\"name\":\"content\",\"type\":\"textarea\",\"label\":\"Conteúdo\"}]},\"layout\":{\"type\":\"grid\",\"columns\":2},\"initialData\":{\"title\":\"Rascunho\"},\"validationSchema\":{\"title\":{\"required\":true,\"minLength\":5}},\"actions\":[{\"id\":\"save\",\"label\":\"Salvar\",\"handler\":\"onSubmit\"},{\"id\":\"cancel\",\"label\":\"Cancelar\",\"handler\":\"onCancel\"}],\"hooks\":{\"_comment\":\"Hooks executaveis sao representados como strings; substitua por funcoes reais no runtime.\",\"onSubmit\":\"console.log('Form submitted', data)\",\"onCancel\":\"history.back()\"}}}",
|
|
4466
4757
|
"sourcePointer": "examples/ai-recipes/praxis-manual-form.json",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ensureIds, DynamicFormService, ASYNC_CONFIG_STORAGE, RULE_PROPERTY_SCHEMA, deepMerge, resolveControlTypeAlias, FieldControlType, normalizeControlTypeKey, FormHooksRegistry, ComponentKeyService, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, FieldSelectorRegistry, providePraxisI18n, PraxisI18nService, API_URL, ComponentMetadataRegistry } from '@praxisui/core';
|
|
1
|
+
import { ensureIds, DynamicFormService, ASYNC_CONFIG_STORAGE, RULE_PROPERTY_SCHEMA, deepMerge, resolveControlTypeAlias, FieldControlType, normalizeControlTypeKey, PraxisIconButtonComponent, FormHooksRegistry, ComponentKeyService, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, FieldSelectorRegistry, providePraxisI18n, PraxisI18nService, API_URL, ComponentMetadataRegistry } from '@praxisui/core';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, Optional, Inject, Injectable, input, output, ChangeDetectionStrategy, Component, Input, InjectionToken, isDevMode, EventEmitter, HostListener, ViewChild, Output, ChangeDetectorRef, DestroyRef, PLATFORM_ID, effect, ContentChildren, signal, computed, Directive, ENVIRONMENT_INITIALIZER } from '@angular/core';
|
|
4
4
|
import { BehaviorSubject, firstValueFrom, debounceTime, fromEvent, of } from 'rxjs';
|
|
@@ -1834,76 +1834,69 @@ class ManualFieldToolbarComponent {
|
|
|
1834
1834
|
<button
|
|
1835
1835
|
#firstAction
|
|
1836
1836
|
type="button"
|
|
1837
|
+
[praxisIconButton]="'mso:star'"
|
|
1838
|
+
size="dense"
|
|
1839
|
+
[pressed]="isRequired"
|
|
1837
1840
|
class="toolbar-btn"
|
|
1838
|
-
[attr.aria-pressed]="isRequired ? 'true' : 'false'"
|
|
1839
1841
|
aria-label="Alternar obrigatorio"
|
|
1840
1842
|
title="Alternar obrigatorio"
|
|
1841
1843
|
(click)="toggleRequired.emit()"
|
|
1842
|
-
>
|
|
1843
|
-
<span class="material-symbols-outlined toolbar-icon" [class.toolbar-icon--filled]="isRequired">
|
|
1844
|
-
star
|
|
1845
|
-
</span>
|
|
1846
|
-
</button>
|
|
1844
|
+
></button>
|
|
1847
1845
|
<button
|
|
1848
1846
|
type="button"
|
|
1847
|
+
[praxisIconButton]="isReadOnly ? 'mso:lock' : 'mso:lock_open'"
|
|
1848
|
+
size="dense"
|
|
1849
|
+
[pressed]="isReadOnly"
|
|
1849
1850
|
class="toolbar-btn"
|
|
1850
|
-
[attr.aria-pressed]="isReadOnly ? 'true' : 'false'"
|
|
1851
1851
|
aria-label="Alternar somente leitura"
|
|
1852
1852
|
title="Alternar somente leitura"
|
|
1853
1853
|
(click)="toggleReadonly.emit()"
|
|
1854
|
-
>
|
|
1855
|
-
<span class="material-symbols-outlined">
|
|
1856
|
-
{{ isReadOnly ? 'lock' : 'lock_open' }}
|
|
1857
|
-
</span>
|
|
1858
|
-
</button>
|
|
1854
|
+
></button>
|
|
1859
1855
|
<button
|
|
1860
1856
|
type="button"
|
|
1857
|
+
[praxisIconButton]="metadata?.hidden ? 'mso:visibility_off' : 'mso:visibility'"
|
|
1858
|
+
size="dense"
|
|
1859
|
+
[pressed]="metadata?.hidden === true"
|
|
1861
1860
|
class="toolbar-btn"
|
|
1862
|
-
[attr.aria-pressed]="metadata?.hidden ? 'true' : 'false'"
|
|
1863
1861
|
aria-label="Alternar visibilidade"
|
|
1864
1862
|
title="Alternar visibilidade"
|
|
1865
1863
|
(click)="toggleHidden.emit()"
|
|
1866
|
-
>
|
|
1867
|
-
<span class="material-symbols-outlined">
|
|
1868
|
-
{{ metadata?.hidden ? 'visibility_off' : 'visibility' }}
|
|
1869
|
-
</span>
|
|
1870
|
-
</button>
|
|
1864
|
+
></button>
|
|
1871
1865
|
<button
|
|
1872
1866
|
type="button"
|
|
1867
|
+
[praxisIconButton]="metadata?.disabled ? 'mso:toggle_on' : 'mso:toggle_off'"
|
|
1868
|
+
size="dense"
|
|
1869
|
+
[pressed]="metadata?.disabled === true"
|
|
1873
1870
|
class="toolbar-btn"
|
|
1874
|
-
[attr.aria-pressed]="metadata?.disabled ? 'true' : 'false'"
|
|
1875
1871
|
aria-label="Alternar desabilitado"
|
|
1876
1872
|
title="Alternar desabilitado"
|
|
1877
1873
|
(click)="toggleDisabled.emit()"
|
|
1878
|
-
>
|
|
1879
|
-
<span class="material-symbols-outlined">
|
|
1880
|
-
{{ metadata?.disabled ? 'toggle_on' : 'toggle_off' }}
|
|
1881
|
-
</span>
|
|
1882
|
-
</button>
|
|
1874
|
+
></button>
|
|
1883
1875
|
<button
|
|
1884
1876
|
type="button"
|
|
1877
|
+
[praxisIconButton]="'mso:tune'"
|
|
1878
|
+
size="dense"
|
|
1879
|
+
appearance="filled"
|
|
1885
1880
|
class="toolbar-btn toolbar-btn--accent"
|
|
1886
1881
|
aria-label="Configurar campo"
|
|
1887
1882
|
title="Configurar campo"
|
|
1888
1883
|
(click)="openEditor.emit()"
|
|
1889
|
-
>
|
|
1890
|
-
<span class="material-symbols-outlined">tune</span>
|
|
1891
|
-
</button>
|
|
1884
|
+
></button>
|
|
1892
1885
|
<button
|
|
1893
1886
|
type="button"
|
|
1887
|
+
[praxisIconButton]="'mso:close'"
|
|
1888
|
+
size="dense"
|
|
1894
1889
|
class="toolbar-btn toolbar-btn--ghost"
|
|
1895
1890
|
aria-label="Fechar"
|
|
1896
1891
|
title="Fechar"
|
|
1897
1892
|
(click)="requestClose.emit()"
|
|
1898
|
-
>
|
|
1899
|
-
<span class="material-symbols-outlined">close</span>
|
|
1900
|
-
</button>
|
|
1893
|
+
></button>
|
|
1901
1894
|
</div>
|
|
1902
|
-
`, isInline: true, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{
|
|
1895
|
+
`, isInline: true, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{color:var(--md-sys-color-on-surface)}.toolbar-btn--accent{--praxis-icon-button-filled-background: var(--md-sys-color-primary-container);--praxis-icon-button-filled-foreground: var(--md-sys-color-on-primary-container)}.toolbar-btn--ghost{opacity:.7}\n"], dependencies: [{ kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }] });
|
|
1903
1896
|
}
|
|
1904
1897
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ManualFieldToolbarComponent, decorators: [{
|
|
1905
1898
|
type: Component,
|
|
1906
|
-
args: [{ selector: 'praxis-manual-field-toolbar', standalone: true, imports: [], template: `
|
|
1899
|
+
args: [{ selector: 'praxis-manual-field-toolbar', standalone: true, imports: [PraxisIconButtonComponent], template: `
|
|
1907
1900
|
<div
|
|
1908
1901
|
class="pdx-manual-field-toolbar"
|
|
1909
1902
|
role="toolbar"
|
|
@@ -1912,72 +1905,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1912
1905
|
<button
|
|
1913
1906
|
#firstAction
|
|
1914
1907
|
type="button"
|
|
1908
|
+
[praxisIconButton]="'mso:star'"
|
|
1909
|
+
size="dense"
|
|
1910
|
+
[pressed]="isRequired"
|
|
1915
1911
|
class="toolbar-btn"
|
|
1916
|
-
[attr.aria-pressed]="isRequired ? 'true' : 'false'"
|
|
1917
1912
|
aria-label="Alternar obrigatorio"
|
|
1918
1913
|
title="Alternar obrigatorio"
|
|
1919
1914
|
(click)="toggleRequired.emit()"
|
|
1920
|
-
>
|
|
1921
|
-
<span class="material-symbols-outlined toolbar-icon" [class.toolbar-icon--filled]="isRequired">
|
|
1922
|
-
star
|
|
1923
|
-
</span>
|
|
1924
|
-
</button>
|
|
1915
|
+
></button>
|
|
1925
1916
|
<button
|
|
1926
1917
|
type="button"
|
|
1918
|
+
[praxisIconButton]="isReadOnly ? 'mso:lock' : 'mso:lock_open'"
|
|
1919
|
+
size="dense"
|
|
1920
|
+
[pressed]="isReadOnly"
|
|
1927
1921
|
class="toolbar-btn"
|
|
1928
|
-
[attr.aria-pressed]="isReadOnly ? 'true' : 'false'"
|
|
1929
1922
|
aria-label="Alternar somente leitura"
|
|
1930
1923
|
title="Alternar somente leitura"
|
|
1931
1924
|
(click)="toggleReadonly.emit()"
|
|
1932
|
-
>
|
|
1933
|
-
<span class="material-symbols-outlined">
|
|
1934
|
-
{{ isReadOnly ? 'lock' : 'lock_open' }}
|
|
1935
|
-
</span>
|
|
1936
|
-
</button>
|
|
1925
|
+
></button>
|
|
1937
1926
|
<button
|
|
1938
1927
|
type="button"
|
|
1928
|
+
[praxisIconButton]="metadata?.hidden ? 'mso:visibility_off' : 'mso:visibility'"
|
|
1929
|
+
size="dense"
|
|
1930
|
+
[pressed]="metadata?.hidden === true"
|
|
1939
1931
|
class="toolbar-btn"
|
|
1940
|
-
[attr.aria-pressed]="metadata?.hidden ? 'true' : 'false'"
|
|
1941
1932
|
aria-label="Alternar visibilidade"
|
|
1942
1933
|
title="Alternar visibilidade"
|
|
1943
1934
|
(click)="toggleHidden.emit()"
|
|
1944
|
-
>
|
|
1945
|
-
<span class="material-symbols-outlined">
|
|
1946
|
-
{{ metadata?.hidden ? 'visibility_off' : 'visibility' }}
|
|
1947
|
-
</span>
|
|
1948
|
-
</button>
|
|
1935
|
+
></button>
|
|
1949
1936
|
<button
|
|
1950
1937
|
type="button"
|
|
1938
|
+
[praxisIconButton]="metadata?.disabled ? 'mso:toggle_on' : 'mso:toggle_off'"
|
|
1939
|
+
size="dense"
|
|
1940
|
+
[pressed]="metadata?.disabled === true"
|
|
1951
1941
|
class="toolbar-btn"
|
|
1952
|
-
[attr.aria-pressed]="metadata?.disabled ? 'true' : 'false'"
|
|
1953
1942
|
aria-label="Alternar desabilitado"
|
|
1954
1943
|
title="Alternar desabilitado"
|
|
1955
1944
|
(click)="toggleDisabled.emit()"
|
|
1956
|
-
>
|
|
1957
|
-
<span class="material-symbols-outlined">
|
|
1958
|
-
{{ metadata?.disabled ? 'toggle_on' : 'toggle_off' }}
|
|
1959
|
-
</span>
|
|
1960
|
-
</button>
|
|
1945
|
+
></button>
|
|
1961
1946
|
<button
|
|
1962
1947
|
type="button"
|
|
1948
|
+
[praxisIconButton]="'mso:tune'"
|
|
1949
|
+
size="dense"
|
|
1950
|
+
appearance="filled"
|
|
1963
1951
|
class="toolbar-btn toolbar-btn--accent"
|
|
1964
1952
|
aria-label="Configurar campo"
|
|
1965
1953
|
title="Configurar campo"
|
|
1966
1954
|
(click)="openEditor.emit()"
|
|
1967
|
-
>
|
|
1968
|
-
<span class="material-symbols-outlined">tune</span>
|
|
1969
|
-
</button>
|
|
1955
|
+
></button>
|
|
1970
1956
|
<button
|
|
1971
1957
|
type="button"
|
|
1958
|
+
[praxisIconButton]="'mso:close'"
|
|
1959
|
+
size="dense"
|
|
1972
1960
|
class="toolbar-btn toolbar-btn--ghost"
|
|
1973
1961
|
aria-label="Fechar"
|
|
1974
1962
|
title="Fechar"
|
|
1975
1963
|
(click)="requestClose.emit()"
|
|
1976
|
-
>
|
|
1977
|
-
<span class="material-symbols-outlined">close</span>
|
|
1978
|
-
</button>
|
|
1964
|
+
></button>
|
|
1979
1965
|
</div>
|
|
1980
|
-
`, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{
|
|
1966
|
+
`, styles: [":host{display:block;pointer-events:auto;font-family:inherit}.pdx-manual-field-toolbar{display:inline-flex;align-items:center;gap:6px;padding:6px;border-radius:12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);box-shadow:var(--md-sys-elevation-level3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.toolbar-btn{color:var(--md-sys-color-on-surface)}.toolbar-btn--accent{--praxis-icon-button-filled-background: var(--md-sys-color-primary-container);--praxis-icon-button-filled-foreground: var(--md-sys-color-on-primary-container)}.toolbar-btn--ghost{opacity:.7}\n"] }]
|
|
1981
1967
|
}], propDecorators: { metadata: [{
|
|
1982
1968
|
type: Input
|
|
1983
1969
|
}], toggleRequired: [{
|
|
@@ -3373,6 +3359,7 @@ const MANUAL_FORM_EN_US = {
|
|
|
3373
3359
|
'praxis.manualForm.editor.actions.customTitle': 'Custom actions',
|
|
3374
3360
|
'praxis.manualForm.editor.actions.customHelp': 'Create extra buttons with their own event.',
|
|
3375
3361
|
'praxis.manualForm.editor.actions.addCustom': 'Add action',
|
|
3362
|
+
'praxis.manualForm.editor.actions.removeCustom': 'Remove action',
|
|
3376
3363
|
'praxis.manualForm.editor.actions.emptyCustom': 'No custom actions registered.',
|
|
3377
3364
|
'praxis.manualForm.editor.actions.field.visible': 'Visible',
|
|
3378
3365
|
'praxis.manualForm.editor.actions.field.label': 'Label',
|
|
@@ -3512,6 +3499,7 @@ const MANUAL_FORM_PT_BR = {
|
|
|
3512
3499
|
'praxis.manualForm.editor.actions.customTitle': 'Ações customizadas',
|
|
3513
3500
|
'praxis.manualForm.editor.actions.customHelp': 'Crie botões extras com eventos próprios.',
|
|
3514
3501
|
'praxis.manualForm.editor.actions.addCustom': 'Adicionar ação',
|
|
3502
|
+
'praxis.manualForm.editor.actions.removeCustom': 'Remover ação',
|
|
3515
3503
|
'praxis.manualForm.editor.actions.emptyCustom': 'Nenhuma ação customizada cadastrada.',
|
|
3516
3504
|
'praxis.manualForm.editor.actions.field.visible': 'Visível',
|
|
3517
3505
|
'praxis.manualForm.editor.actions.field.label': 'Rótulo (Label)',
|
|
@@ -4260,9 +4248,13 @@ class ManualFormConfigEditorComponent {
|
|
|
4260
4248
|
<div class="mf-custom-card">
|
|
4261
4249
|
<div class="mf-custom-card__header">
|
|
4262
4250
|
<div class="mf-custom-card__title">{{ action.label || action.id }}</div>
|
|
4263
|
-
<button
|
|
4264
|
-
|
|
4265
|
-
|
|
4251
|
+
<button
|
|
4252
|
+
praxisIconButton="delete"
|
|
4253
|
+
size="dense"
|
|
4254
|
+
type="button"
|
|
4255
|
+
(click)="removeCustomAction(action)"
|
|
4256
|
+
[attr.aria-label]="tx('editor.actions.removeCustom', 'Remove action') + ': ' + (action.label || action.id)"
|
|
4257
|
+
></button>
|
|
4266
4258
|
</div>
|
|
4267
4259
|
<div class="mf-custom-card__grid">
|
|
4268
4260
|
<mat-form-field appearance="outline">
|
|
@@ -4708,15 +4700,14 @@ class ManualFormConfigEditorComponent {
|
|
|
4708
4700
|
[placeholder]="hookPlaceholder()"
|
|
4709
4701
|
></textarea>
|
|
4710
4702
|
<button
|
|
4711
|
-
|
|
4703
|
+
praxisIconButton="help_outline"
|
|
4704
|
+
size="dense"
|
|
4712
4705
|
matSuffix
|
|
4713
|
-
class="help-icon-button"
|
|
4714
4706
|
type="button"
|
|
4715
4707
|
[matTooltip]="hookTooltip(stage)"
|
|
4708
|
+
[attr.aria-label]="hookTooltip(stage)"
|
|
4716
4709
|
matTooltipPosition="above"
|
|
4717
|
-
>
|
|
4718
|
-
<mat-icon>help_outline</mat-icon>
|
|
4719
|
-
</button>
|
|
4710
|
+
></button>
|
|
4720
4711
|
@if (hooksErrors[stage]) {
|
|
4721
4712
|
<mat-error>{{ hooksErrors[stage] }}</mat-error>
|
|
4722
4713
|
}
|
|
@@ -4752,15 +4743,14 @@ class ManualFormConfigEditorComponent {
|
|
|
4752
4743
|
[placeholder]="formRulesPlaceholder()"
|
|
4753
4744
|
></textarea>
|
|
4754
4745
|
<button
|
|
4755
|
-
|
|
4746
|
+
praxisIconButton="help_outline"
|
|
4747
|
+
size="dense"
|
|
4756
4748
|
matSuffix
|
|
4757
|
-
class="help-icon-button"
|
|
4758
4749
|
type="button"
|
|
4759
4750
|
[matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
4751
|
+
[attr.aria-label]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
4760
4752
|
matTooltipPosition="above"
|
|
4761
|
-
>
|
|
4762
|
-
<mat-icon>help_outline</mat-icon>
|
|
4763
|
-
</button>
|
|
4753
|
+
></button>
|
|
4764
4754
|
@if (formRulesError) {
|
|
4765
4755
|
<mat-error>{{ formRulesError }}</mat-error>
|
|
4766
4756
|
}
|
|
@@ -4778,15 +4768,14 @@ class ManualFormConfigEditorComponent {
|
|
|
4778
4768
|
></textarea>
|
|
4779
4769
|
<mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
|
|
4780
4770
|
<button
|
|
4781
|
-
|
|
4771
|
+
praxisIconButton="help_outline"
|
|
4772
|
+
size="dense"
|
|
4782
4773
|
matSuffix
|
|
4783
|
-
class="help-icon-button"
|
|
4784
4774
|
type="button"
|
|
4785
4775
|
[matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
4776
|
+
[attr.aria-label]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
4786
4777
|
matTooltipPosition="above"
|
|
4787
|
-
>
|
|
4788
|
-
<mat-icon>help_outline</mat-icon>
|
|
4789
|
-
</button>
|
|
4778
|
+
></button>
|
|
4790
4779
|
@if (formRulesStateError) {
|
|
4791
4780
|
<mat-error>{{ formRulesStateError }}</mat-error>
|
|
4792
4781
|
}
|
|
@@ -4819,7 +4808,7 @@ class ManualFormConfigEditorComponent {
|
|
|
4819
4808
|
</mat-tab>
|
|
4820
4809
|
</mat-tab-group>
|
|
4821
4810
|
</div>
|
|
4822
|
-
`, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.
|
|
4811
|
+
`, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "component", type: CascadeManagerTabComponent, selector: "praxis-cascade-manager-tab", inputs: ["fields", "connections"], outputs: ["apply", "cancel"] }] });
|
|
4823
4812
|
}
|
|
4824
4813
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ManualFormConfigEditorComponent, decorators: [{
|
|
4825
4814
|
type: Component,
|
|
@@ -4833,6 +4822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4833
4822
|
MatButtonModule,
|
|
4834
4823
|
MatIconModule,
|
|
4835
4824
|
MatTooltipModule,
|
|
4825
|
+
PraxisIconButtonComponent,
|
|
4836
4826
|
CascadeManagerTabComponent
|
|
4837
4827
|
], providers: [providePraxisManualFormI18n()], template: `
|
|
4838
4828
|
<div class="mf-editor">
|
|
@@ -5057,9 +5047,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5057
5047
|
<div class="mf-custom-card">
|
|
5058
5048
|
<div class="mf-custom-card__header">
|
|
5059
5049
|
<div class="mf-custom-card__title">{{ action.label || action.id }}</div>
|
|
5060
|
-
<button
|
|
5061
|
-
|
|
5062
|
-
|
|
5050
|
+
<button
|
|
5051
|
+
praxisIconButton="delete"
|
|
5052
|
+
size="dense"
|
|
5053
|
+
type="button"
|
|
5054
|
+
(click)="removeCustomAction(action)"
|
|
5055
|
+
[attr.aria-label]="tx('editor.actions.removeCustom', 'Remove action') + ': ' + (action.label || action.id)"
|
|
5056
|
+
></button>
|
|
5063
5057
|
</div>
|
|
5064
5058
|
<div class="mf-custom-card__grid">
|
|
5065
5059
|
<mat-form-field appearance="outline">
|
|
@@ -5505,15 +5499,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5505
5499
|
[placeholder]="hookPlaceholder()"
|
|
5506
5500
|
></textarea>
|
|
5507
5501
|
<button
|
|
5508
|
-
|
|
5502
|
+
praxisIconButton="help_outline"
|
|
5503
|
+
size="dense"
|
|
5509
5504
|
matSuffix
|
|
5510
|
-
class="help-icon-button"
|
|
5511
5505
|
type="button"
|
|
5512
5506
|
[matTooltip]="hookTooltip(stage)"
|
|
5507
|
+
[attr.aria-label]="hookTooltip(stage)"
|
|
5513
5508
|
matTooltipPosition="above"
|
|
5514
|
-
>
|
|
5515
|
-
<mat-icon>help_outline</mat-icon>
|
|
5516
|
-
</button>
|
|
5509
|
+
></button>
|
|
5517
5510
|
@if (hooksErrors[stage]) {
|
|
5518
5511
|
<mat-error>{{ hooksErrors[stage] }}</mat-error>
|
|
5519
5512
|
}
|
|
@@ -5549,15 +5542,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5549
5542
|
[placeholder]="formRulesPlaceholder()"
|
|
5550
5543
|
></textarea>
|
|
5551
5544
|
<button
|
|
5552
|
-
|
|
5545
|
+
praxisIconButton="help_outline"
|
|
5546
|
+
size="dense"
|
|
5553
5547
|
matSuffix
|
|
5554
|
-
class="help-icon-button"
|
|
5555
5548
|
type="button"
|
|
5556
5549
|
[matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
5550
|
+
[attr.aria-label]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
5557
5551
|
matTooltipPosition="above"
|
|
5558
|
-
>
|
|
5559
|
-
<mat-icon>help_outline</mat-icon>
|
|
5560
|
-
</button>
|
|
5552
|
+
></button>
|
|
5561
5553
|
@if (formRulesError) {
|
|
5562
5554
|
<mat-error>{{ formRulesError }}</mat-error>
|
|
5563
5555
|
}
|
|
@@ -5575,15 +5567,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5575
5567
|
></textarea>
|
|
5576
5568
|
<mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
|
|
5577
5569
|
<button
|
|
5578
|
-
|
|
5570
|
+
praxisIconButton="help_outline"
|
|
5571
|
+
size="dense"
|
|
5579
5572
|
matSuffix
|
|
5580
|
-
class="help-icon-button"
|
|
5581
5573
|
type="button"
|
|
5582
5574
|
[matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
5575
|
+
[attr.aria-label]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
5583
5576
|
matTooltipPosition="above"
|
|
5584
|
-
>
|
|
5585
|
-
<mat-icon>help_outline</mat-icon>
|
|
5586
|
-
</button>
|
|
5577
|
+
></button>
|
|
5587
5578
|
@if (formRulesStateError) {
|
|
5588
5579
|
<mat-error>{{ formRulesStateError }}</mat-error>
|
|
5589
5580
|
}
|
|
@@ -5616,7 +5607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5616
5607
|
</mat-tab>
|
|
5617
5608
|
</mat-tab-group>
|
|
5618
5609
|
</div>
|
|
5619
|
-
`, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.
|
|
5610
|
+
`, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"] }]
|
|
5620
5611
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
5621
5612
|
type: Inject,
|
|
5622
5613
|
args: [SETTINGS_PANEL_DATA]
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/manual-form",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.88",
|
|
4
4
|
"description": "Manual form toolkit for Praxis UI: container, instance factory and editor bridge for @praxisui/* fields.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
9
|
-
"@praxisui/dynamic-fields": "^9.0.0-beta.
|
|
10
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
11
|
-
"@praxisui/metadata-editor": "^9.0.0-beta.
|
|
8
|
+
"@praxisui/core": "^9.0.0-beta.88",
|
|
9
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.88",
|
|
10
|
+
"@praxisui/settings-panel": "^9.0.0-beta.88",
|
|
11
|
+
"@praxisui/metadata-editor": "^9.0.0-beta.88",
|
|
12
12
|
"@angular/cdk": "^21.0.0",
|
|
13
13
|
"@angular/forms": "^21.0.0",
|
|
14
14
|
"@angular/material": "^21.0.0",
|
|
15
15
|
"@angular/router": "^21.0.0",
|
|
16
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
16
|
+
"@praxisui/ai": "^9.0.0-beta.88",
|
|
17
17
|
"rxjs": "~7.8.0"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|