@praxisui/manual-form 3.0.0-beta.1 → 3.0.0-beta.10
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/fesm2022/praxisui-manual-form.mjs +641 -317
- package/index.d.ts +5 -0
- package/package.json +5 -5
- package/fesm2022/praxisui-manual-form.mjs.map +0 -1
|
@@ -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, API_URL } from '@praxisui/core';
|
|
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 } 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 } from '@angular/core';
|
|
4
4
|
import { BehaviorSubject, debounceTime, fromEvent, of } from 'rxjs';
|
|
@@ -2614,8 +2614,321 @@ const DEFAULT_CONSTRUCTOR_TO_CONTROL_TYPE = {
|
|
|
2614
2614
|
FileUpload: FieldControlType.FILE_UPLOAD,
|
|
2615
2615
|
};
|
|
2616
2616
|
|
|
2617
|
+
const MANUAL_FORM_EN_US = {
|
|
2618
|
+
'praxis.manualForm.editor.title': 'Form settings',
|
|
2619
|
+
'praxis.manualForm.editor.subtitle': 'Fields, actions, messages and behavior',
|
|
2620
|
+
'praxis.manualForm.editor.close': 'Close',
|
|
2621
|
+
'praxis.manualForm.editor.tabs.fields': 'Fields',
|
|
2622
|
+
'praxis.manualForm.editor.tabs.actions': 'Actions',
|
|
2623
|
+
'praxis.manualForm.editor.tabs.messages': 'Messages',
|
|
2624
|
+
'praxis.manualForm.editor.tabs.behavior': 'Behavior',
|
|
2625
|
+
'praxis.manualForm.editor.tabs.hints': 'Hints',
|
|
2626
|
+
'praxis.manualForm.editor.tabs.hooks': 'Hooks',
|
|
2627
|
+
'praxis.manualForm.editor.tabs.rules': 'Rules',
|
|
2628
|
+
'praxis.manualForm.editor.tabs.cascade': 'Cascades',
|
|
2629
|
+
'praxis.manualForm.editor.fields.onlyHidden': 'Show hidden only',
|
|
2630
|
+
'praxis.manualForm.editor.fields.name': 'Field',
|
|
2631
|
+
'praxis.manualForm.editor.fields.label': 'Label',
|
|
2632
|
+
'praxis.manualForm.editor.fields.type': 'Type',
|
|
2633
|
+
'praxis.manualForm.editor.fields.visible': 'Visible',
|
|
2634
|
+
'praxis.manualForm.editor.fields.required': 'Required',
|
|
2635
|
+
'praxis.manualForm.editor.fields.readOnly': 'Read-only',
|
|
2636
|
+
'praxis.manualForm.editor.fields.disabled': 'Disabled',
|
|
2637
|
+
'praxis.manualForm.editor.fields.hiddenState': 'Hidden',
|
|
2638
|
+
'praxis.manualForm.editor.fields.visibleState': 'Visible',
|
|
2639
|
+
'praxis.manualForm.editor.shared.yes': 'Yes',
|
|
2640
|
+
'praxis.manualForm.editor.shared.no': 'No',
|
|
2641
|
+
'praxis.manualForm.editor.shared.success': 'Success',
|
|
2642
|
+
'praxis.manualForm.editor.shared.error': 'Error',
|
|
2643
|
+
'praxis.manualForm.editor.actions.defaultTitle': 'Default buttons',
|
|
2644
|
+
'praxis.manualForm.editor.actions.defaultHelp': 'Control labels, visibility and style for the basic buttons.',
|
|
2645
|
+
'praxis.manualForm.editor.actions.layoutTitle': 'Actions layout',
|
|
2646
|
+
'praxis.manualForm.editor.actions.layoutHelp': 'Defines alignment and disposition of the actions bar.',
|
|
2647
|
+
'praxis.manualForm.editor.actions.customTitle': 'Custom actions',
|
|
2648
|
+
'praxis.manualForm.editor.actions.customHelp': 'Create extra buttons with their own event.',
|
|
2649
|
+
'praxis.manualForm.editor.actions.addCustom': 'Add action',
|
|
2650
|
+
'praxis.manualForm.editor.actions.emptyCustom': 'No custom actions registered.',
|
|
2651
|
+
'praxis.manualForm.editor.actions.field.visible': 'Visible',
|
|
2652
|
+
'praxis.manualForm.editor.actions.field.label': 'Label',
|
|
2653
|
+
'praxis.manualForm.editor.actions.field.id': 'ID',
|
|
2654
|
+
'praxis.manualForm.editor.actions.field.icon': 'Icon',
|
|
2655
|
+
'praxis.manualForm.editor.actions.field.eventAction': 'Event (action)',
|
|
2656
|
+
'praxis.manualForm.editor.actions.field.variant': 'Variant',
|
|
2657
|
+
'praxis.manualForm.editor.actions.field.color': 'Color',
|
|
2658
|
+
'praxis.manualForm.editor.actions.field.shortcut': 'Shortcut',
|
|
2659
|
+
'praxis.manualForm.editor.actions.field.tooltip': 'Tooltip',
|
|
2660
|
+
'praxis.manualForm.editor.actions.variant.default': 'Default',
|
|
2661
|
+
'praxis.manualForm.editor.actions.variant.raised': 'Raised',
|
|
2662
|
+
'praxis.manualForm.editor.actions.variant.stroked': 'Stroked',
|
|
2663
|
+
'praxis.manualForm.editor.actions.variant.flat': 'Flat',
|
|
2664
|
+
'praxis.manualForm.editor.actions.variant.fab': 'Floating',
|
|
2665
|
+
'praxis.manualForm.editor.actions.color.default': 'Default',
|
|
2666
|
+
'praxis.manualForm.editor.actions.color.primary': 'Primary',
|
|
2667
|
+
'praxis.manualForm.editor.actions.color.accent': 'Accent',
|
|
2668
|
+
'praxis.manualForm.editor.actions.color.warn': 'Warn',
|
|
2669
|
+
'praxis.manualForm.editor.actions.color.basic': 'Basic',
|
|
2670
|
+
'praxis.manualForm.editor.actions.layout.position': 'Position',
|
|
2671
|
+
'praxis.manualForm.editor.actions.layout.orientation': 'Orientation',
|
|
2672
|
+
'praxis.manualForm.editor.actions.layout.spacing': 'Spacing',
|
|
2673
|
+
'praxis.manualForm.editor.actions.layout.placement': 'Placement',
|
|
2674
|
+
'praxis.manualForm.editor.actions.layout.sticky': 'Sticky actions',
|
|
2675
|
+
'praxis.manualForm.editor.actions.layout.divider': 'Show divider',
|
|
2676
|
+
'praxis.manualForm.editor.actions.layout.position.left': 'Left',
|
|
2677
|
+
'praxis.manualForm.editor.actions.layout.position.center': 'Center',
|
|
2678
|
+
'praxis.manualForm.editor.actions.layout.position.right': 'Right',
|
|
2679
|
+
'praxis.manualForm.editor.actions.layout.position.justified': 'Justified',
|
|
2680
|
+
'praxis.manualForm.editor.actions.layout.position.split': 'Split',
|
|
2681
|
+
'praxis.manualForm.editor.actions.layout.orientation.horizontal': 'Horizontal',
|
|
2682
|
+
'praxis.manualForm.editor.actions.layout.orientation.vertical': 'Vertical',
|
|
2683
|
+
'praxis.manualForm.editor.actions.layout.spacing.compact': 'Compact',
|
|
2684
|
+
'praxis.manualForm.editor.actions.layout.spacing.normal': 'Normal',
|
|
2685
|
+
'praxis.manualForm.editor.actions.layout.spacing.spacious': 'Spacious',
|
|
2686
|
+
'praxis.manualForm.editor.actions.layout.placement.afterSections': 'After sections',
|
|
2687
|
+
'praxis.manualForm.editor.actions.layout.placement.insideLastSection': 'Inside last section',
|
|
2688
|
+
'praxis.manualForm.editor.actions.layout.placement.top': 'Top',
|
|
2689
|
+
'praxis.manualForm.editor.messages.defaultTitle': 'Default feedback',
|
|
2690
|
+
'praxis.manualForm.editor.messages.defaultHelp': 'Success/error messages displayed by the host.',
|
|
2691
|
+
'praxis.manualForm.editor.messages.createSuccess': 'Create success',
|
|
2692
|
+
'praxis.manualForm.editor.messages.createError': 'Create error',
|
|
2693
|
+
'praxis.manualForm.editor.messages.updateSuccess': 'Update success',
|
|
2694
|
+
'praxis.manualForm.editor.messages.updateError': 'Update error',
|
|
2695
|
+
'praxis.manualForm.editor.messages.confirmationsTitle': 'Confirmations',
|
|
2696
|
+
'praxis.manualForm.editor.messages.confirmationsHelp': 'Texts shown before critical actions.',
|
|
2697
|
+
'praxis.manualForm.editor.messages.loadingTitle': 'Loading',
|
|
2698
|
+
'praxis.manualForm.editor.messages.loadingHelp': 'Messages displayed during operations.',
|
|
2699
|
+
'praxis.manualForm.editor.messages.customTitle': 'Messages by custom action',
|
|
2700
|
+
'praxis.manualForm.editor.messages.customHelp': 'Customize texts by action ID.',
|
|
2701
|
+
'praxis.manualForm.editor.messages.emptyCustom': 'Register custom actions to configure specific messages.',
|
|
2702
|
+
'praxis.manualForm.editor.behavior.title': 'Form behavior',
|
|
2703
|
+
'praxis.manualForm.editor.behavior.help': 'Preferences applied by the host or runtime.',
|
|
2704
|
+
'praxis.manualForm.editor.behavior.note': 'These options are persisted in config; the host decides how to apply them.',
|
|
2705
|
+
'praxis.manualForm.editor.behavior.confirmUnsaved': 'Confirm unsaved changes before leaving',
|
|
2706
|
+
'praxis.manualForm.editor.behavior.trackHistory': 'Track change history',
|
|
2707
|
+
'praxis.manualForm.editor.behavior.focusFirstError': 'Focus the first error on submit',
|
|
2708
|
+
'praxis.manualForm.editor.behavior.scrollToErrors': 'Scroll to errors on submit',
|
|
2709
|
+
'praxis.manualForm.editor.behavior.clearAfterSave': 'Clear form after save',
|
|
2710
|
+
'praxis.manualForm.editor.behavior.reactiveValidation': 'Reactive validation',
|
|
2711
|
+
'praxis.manualForm.editor.behavior.redirectAfterSave': 'Redirect after save (URL)',
|
|
2712
|
+
'praxis.manualForm.editor.behavior.reactiveValidationDebounce': 'Reactive validation debounce (ms)',
|
|
2713
|
+
'praxis.manualForm.editor.hints.modeTitle': 'Mode messages',
|
|
2714
|
+
'praxis.manualForm.editor.hints.modeHelp': 'Auxiliary texts displayed by the host.',
|
|
2715
|
+
'praxis.manualForm.editor.hints.modeNote': 'Useful for i18n and user guidance.',
|
|
2716
|
+
'praxis.manualForm.editor.hints.uiTitle': 'UI hints',
|
|
2717
|
+
'praxis.manualForm.editor.hints.uiHelp': 'Contextual help for form states.',
|
|
2718
|
+
'praxis.manualForm.editor.hints.mode.create': 'Create',
|
|
2719
|
+
'praxis.manualForm.editor.hints.mode.edit': 'Edit',
|
|
2720
|
+
'praxis.manualForm.editor.hints.mode.view': 'View',
|
|
2721
|
+
'praxis.manualForm.editor.hints.ui.presentation': 'Presentation',
|
|
2722
|
+
'praxis.manualForm.editor.hints.ui.readonly': 'Read-only',
|
|
2723
|
+
'praxis.manualForm.editor.hints.ui.disabled': 'Disabled',
|
|
2724
|
+
'praxis.manualForm.editor.hints.ui.visible': 'Visible',
|
|
2725
|
+
'praxis.manualForm.editor.hooks.title': 'Lifecycle hooks',
|
|
2726
|
+
'praxis.manualForm.editor.hooks.help': 'Define automated actions by stage.',
|
|
2727
|
+
'praxis.manualForm.editor.hooks.reset': 'Reset',
|
|
2728
|
+
'praxis.manualForm.editor.hooks.apply': 'Apply hooks',
|
|
2729
|
+
'praxis.manualForm.editor.hooks.note': 'Runs only if the host registers available hooks.',
|
|
2730
|
+
'praxis.manualForm.editor.hooks.tooltip': 'JSON array of hooks for {{stage}} (id, priority, timeoutMs, args).',
|
|
2731
|
+
'praxis.manualForm.editor.hooks.placeholder': '[{ "id": "notifySuccess", "priority": 0, "args": {} }]',
|
|
2732
|
+
'praxis.manualForm.editor.rules.title': 'Layout rules',
|
|
2733
|
+
'praxis.manualForm.editor.rules.help': 'Advanced rules for visibility and behavior.',
|
|
2734
|
+
'praxis.manualForm.editor.rules.apply': 'Apply rules',
|
|
2735
|
+
'praxis.manualForm.editor.rules.note': 'Persisted in config; execution depends on the host.',
|
|
2736
|
+
'praxis.manualForm.editor.rules.formRulesLabel': 'formRules (JSON)',
|
|
2737
|
+
'praxis.manualForm.editor.rules.formRulesStateLabel': 'formRulesState (JSON)',
|
|
2738
|
+
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":"{field} != null","properties":{"required":true}}}]',
|
|
2739
|
+
'praxis.manualForm.editor.rules.tooltip': 'JSON array with rules (id, targetType, targets, effect).',
|
|
2740
|
+
'praxis.manualForm.editor.rules.stateTooltip': 'Raw state from the visual editor (optional).',
|
|
2741
|
+
'praxis.manualForm.editor.cascade.title': 'Field dependencies',
|
|
2742
|
+
'praxis.manualForm.editor.cascade.help': 'Configure native cascades based on metadata.',
|
|
2743
|
+
'praxis.manualForm.editor.cascade.note': 'Changes update metadata and are saved in the draft.',
|
|
2744
|
+
'praxis.manualForm.editor.validation.jsonArray': 'Must be a JSON array.',
|
|
2745
|
+
'praxis.manualForm.editor.validation.invalidJson': 'Invalid JSON.',
|
|
2746
|
+
'praxis.manualForm.editor.validation.formRulesArray': 'formRules must be a JSON array.',
|
|
2747
|
+
'praxis.manualForm.editor.validation.formRulesInvalid': 'Invalid JSON in formRules.',
|
|
2748
|
+
'praxis.manualForm.editor.validation.formRulesStateInvalid': 'Invalid JSON in formRulesState.',
|
|
2749
|
+
'praxis.manualForm.editor.defaults.submit': 'Save',
|
|
2750
|
+
'praxis.manualForm.editor.defaults.cancel': 'Cancel',
|
|
2751
|
+
'praxis.manualForm.editor.defaults.reset': 'Reset',
|
|
2752
|
+
'praxis.manualForm.editor.defaults.action': 'Action',
|
|
2753
|
+
};
|
|
2754
|
+
|
|
2755
|
+
const MANUAL_FORM_PT_BR = {
|
|
2756
|
+
'praxis.manualForm.editor.title': 'Configuracoes do formulario',
|
|
2757
|
+
'praxis.manualForm.editor.subtitle': 'Campos, acoes, mensagens e comportamento',
|
|
2758
|
+
'praxis.manualForm.editor.close': 'Fechar',
|
|
2759
|
+
'praxis.manualForm.editor.tabs.fields': 'Campos',
|
|
2760
|
+
'praxis.manualForm.editor.tabs.actions': 'Acoes',
|
|
2761
|
+
'praxis.manualForm.editor.tabs.messages': 'Mensagens',
|
|
2762
|
+
'praxis.manualForm.editor.tabs.behavior': 'Comportamento',
|
|
2763
|
+
'praxis.manualForm.editor.tabs.hints': 'Dicas',
|
|
2764
|
+
'praxis.manualForm.editor.tabs.hooks': 'Hooks',
|
|
2765
|
+
'praxis.manualForm.editor.tabs.rules': 'Regras',
|
|
2766
|
+
'praxis.manualForm.editor.tabs.cascade': 'Cascatas',
|
|
2767
|
+
'praxis.manualForm.editor.fields.onlyHidden': 'Mostrar apenas ocultos',
|
|
2768
|
+
'praxis.manualForm.editor.fields.name': 'Campo',
|
|
2769
|
+
'praxis.manualForm.editor.fields.label': 'Rotulo',
|
|
2770
|
+
'praxis.manualForm.editor.fields.type': 'Tipo',
|
|
2771
|
+
'praxis.manualForm.editor.fields.visible': 'Visivel',
|
|
2772
|
+
'praxis.manualForm.editor.fields.required': 'Obrigatorio',
|
|
2773
|
+
'praxis.manualForm.editor.fields.readOnly': 'Somente leitura',
|
|
2774
|
+
'praxis.manualForm.editor.fields.disabled': 'Desabilitado',
|
|
2775
|
+
'praxis.manualForm.editor.fields.hiddenState': 'Oculto',
|
|
2776
|
+
'praxis.manualForm.editor.fields.visibleState': 'Visivel',
|
|
2777
|
+
'praxis.manualForm.editor.shared.yes': 'Sim',
|
|
2778
|
+
'praxis.manualForm.editor.shared.no': 'Nao',
|
|
2779
|
+
'praxis.manualForm.editor.shared.success': 'Sucesso',
|
|
2780
|
+
'praxis.manualForm.editor.shared.error': 'Erro',
|
|
2781
|
+
'praxis.manualForm.editor.actions.defaultTitle': 'Botoes padrao',
|
|
2782
|
+
'praxis.manualForm.editor.actions.defaultHelp': 'Controle rotulos, visibilidade e estilo dos botoes basicos.',
|
|
2783
|
+
'praxis.manualForm.editor.actions.layoutTitle': 'Layout das acoes',
|
|
2784
|
+
'praxis.manualForm.editor.actions.layoutHelp': 'Define alinhamento e disposicao da barra de acoes.',
|
|
2785
|
+
'praxis.manualForm.editor.actions.customTitle': 'Acoes customizadas',
|
|
2786
|
+
'praxis.manualForm.editor.actions.customHelp': 'Crie botoes extras com evento proprio.',
|
|
2787
|
+
'praxis.manualForm.editor.actions.addCustom': 'Adicionar acao',
|
|
2788
|
+
'praxis.manualForm.editor.actions.emptyCustom': 'Nenhuma acao customizada cadastrada.',
|
|
2789
|
+
'praxis.manualForm.editor.actions.field.visible': 'Visivel',
|
|
2790
|
+
'praxis.manualForm.editor.actions.field.label': 'Label',
|
|
2791
|
+
'praxis.manualForm.editor.actions.field.id': 'ID',
|
|
2792
|
+
'praxis.manualForm.editor.actions.field.icon': 'Icone',
|
|
2793
|
+
'praxis.manualForm.editor.actions.field.eventAction': 'Evento (action)',
|
|
2794
|
+
'praxis.manualForm.editor.actions.field.variant': 'Variante',
|
|
2795
|
+
'praxis.manualForm.editor.actions.field.color': 'Cor',
|
|
2796
|
+
'praxis.manualForm.editor.actions.field.shortcut': 'Atalho',
|
|
2797
|
+
'praxis.manualForm.editor.actions.field.tooltip': 'Tooltip',
|
|
2798
|
+
'praxis.manualForm.editor.actions.variant.default': 'Padrao',
|
|
2799
|
+
'praxis.manualForm.editor.actions.variant.raised': 'Elevado',
|
|
2800
|
+
'praxis.manualForm.editor.actions.variant.stroked': 'Contornado',
|
|
2801
|
+
'praxis.manualForm.editor.actions.variant.flat': 'Plano',
|
|
2802
|
+
'praxis.manualForm.editor.actions.variant.fab': 'Flutuante',
|
|
2803
|
+
'praxis.manualForm.editor.actions.color.default': 'Padrao',
|
|
2804
|
+
'praxis.manualForm.editor.actions.color.primary': 'Primary',
|
|
2805
|
+
'praxis.manualForm.editor.actions.color.accent': 'Accent',
|
|
2806
|
+
'praxis.manualForm.editor.actions.color.warn': 'Warn',
|
|
2807
|
+
'praxis.manualForm.editor.actions.color.basic': 'Basic',
|
|
2808
|
+
'praxis.manualForm.editor.actions.layout.position': 'Posicao',
|
|
2809
|
+
'praxis.manualForm.editor.actions.layout.orientation': 'Orientacao',
|
|
2810
|
+
'praxis.manualForm.editor.actions.layout.spacing': 'Espacamento',
|
|
2811
|
+
'praxis.manualForm.editor.actions.layout.placement': 'Posicionamento',
|
|
2812
|
+
'praxis.manualForm.editor.actions.layout.sticky': 'Acoes fixas',
|
|
2813
|
+
'praxis.manualForm.editor.actions.layout.divider': 'Mostrar divisor',
|
|
2814
|
+
'praxis.manualForm.editor.actions.layout.position.left': 'Esquerda',
|
|
2815
|
+
'praxis.manualForm.editor.actions.layout.position.center': 'Centro',
|
|
2816
|
+
'praxis.manualForm.editor.actions.layout.position.right': 'Direita',
|
|
2817
|
+
'praxis.manualForm.editor.actions.layout.position.justified': 'Justificado',
|
|
2818
|
+
'praxis.manualForm.editor.actions.layout.position.split': 'Split',
|
|
2819
|
+
'praxis.manualForm.editor.actions.layout.orientation.horizontal': 'Horizontal',
|
|
2820
|
+
'praxis.manualForm.editor.actions.layout.orientation.vertical': 'Vertical',
|
|
2821
|
+
'praxis.manualForm.editor.actions.layout.spacing.compact': 'Compacto',
|
|
2822
|
+
'praxis.manualForm.editor.actions.layout.spacing.normal': 'Normal',
|
|
2823
|
+
'praxis.manualForm.editor.actions.layout.spacing.spacious': 'Espacoso',
|
|
2824
|
+
'praxis.manualForm.editor.actions.layout.placement.afterSections': 'Apos secoes',
|
|
2825
|
+
'praxis.manualForm.editor.actions.layout.placement.insideLastSection': 'Dentro da ultima secao',
|
|
2826
|
+
'praxis.manualForm.editor.actions.layout.placement.top': 'Topo',
|
|
2827
|
+
'praxis.manualForm.editor.messages.defaultTitle': 'Feedback padrao',
|
|
2828
|
+
'praxis.manualForm.editor.messages.defaultHelp': 'Mensagens de sucesso/erro exibidas pelo host.',
|
|
2829
|
+
'praxis.manualForm.editor.messages.createSuccess': 'Sucesso ao criar',
|
|
2830
|
+
'praxis.manualForm.editor.messages.createError': 'Erro ao criar',
|
|
2831
|
+
'praxis.manualForm.editor.messages.updateSuccess': 'Sucesso ao atualizar',
|
|
2832
|
+
'praxis.manualForm.editor.messages.updateError': 'Erro ao atualizar',
|
|
2833
|
+
'praxis.manualForm.editor.messages.confirmationsTitle': 'Confirmacoes',
|
|
2834
|
+
'praxis.manualForm.editor.messages.confirmationsHelp': 'Textos mostrados antes de acoes criticas.',
|
|
2835
|
+
'praxis.manualForm.editor.messages.loadingTitle': 'Loading',
|
|
2836
|
+
'praxis.manualForm.editor.messages.loadingHelp': 'Mensagens exibidas durante operacoes.',
|
|
2837
|
+
'praxis.manualForm.editor.messages.customTitle': 'Mensagens por acao customizada',
|
|
2838
|
+
'praxis.manualForm.editor.messages.customHelp': 'Personalize textos por ID de acao.',
|
|
2839
|
+
'praxis.manualForm.editor.messages.emptyCustom': 'Cadastre acoes customizadas para configurar mensagens especificas.',
|
|
2840
|
+
'praxis.manualForm.editor.behavior.title': 'Comportamento do formulario',
|
|
2841
|
+
'praxis.manualForm.editor.behavior.help': 'Preferencias aplicadas pelo host ou runtime.',
|
|
2842
|
+
'praxis.manualForm.editor.behavior.note': 'Estas opcoes sao persistidas no config; o host decide como aplicar.',
|
|
2843
|
+
'praxis.manualForm.editor.behavior.confirmUnsaved': 'Confirmar ao sair com alteracoes nao salvas',
|
|
2844
|
+
'praxis.manualForm.editor.behavior.trackHistory': 'Rastrear historico de alteracoes',
|
|
2845
|
+
'praxis.manualForm.editor.behavior.focusFirstError': 'Focar no primeiro erro ao submeter',
|
|
2846
|
+
'praxis.manualForm.editor.behavior.scrollToErrors': 'Rolar ate os erros ao submeter',
|
|
2847
|
+
'praxis.manualForm.editor.behavior.clearAfterSave': 'Limpar formulario apos salvar',
|
|
2848
|
+
'praxis.manualForm.editor.behavior.reactiveValidation': 'Validacao reativa',
|
|
2849
|
+
'praxis.manualForm.editor.behavior.redirectAfterSave': 'Redirecionar apos salvar (URL)',
|
|
2850
|
+
'praxis.manualForm.editor.behavior.reactiveValidationDebounce': 'Debounce validacao reativa (ms)',
|
|
2851
|
+
'praxis.manualForm.editor.hints.modeTitle': 'Mensagens de modo',
|
|
2852
|
+
'praxis.manualForm.editor.hints.modeHelp': 'Textos auxiliares exibidos pelo host.',
|
|
2853
|
+
'praxis.manualForm.editor.hints.modeNote': 'Util para i18n e orientacao do usuario.',
|
|
2854
|
+
'praxis.manualForm.editor.hints.uiTitle': 'Dicas de UI',
|
|
2855
|
+
'praxis.manualForm.editor.hints.uiHelp': 'Ajuda contextual para estados do formulario.',
|
|
2856
|
+
'praxis.manualForm.editor.hints.mode.create': 'Criar',
|
|
2857
|
+
'praxis.manualForm.editor.hints.mode.edit': 'Editar',
|
|
2858
|
+
'praxis.manualForm.editor.hints.mode.view': 'Visualizar',
|
|
2859
|
+
'praxis.manualForm.editor.hints.ui.presentation': 'Apresentacao',
|
|
2860
|
+
'praxis.manualForm.editor.hints.ui.readonly': 'Somente leitura',
|
|
2861
|
+
'praxis.manualForm.editor.hints.ui.disabled': 'Desabilitado',
|
|
2862
|
+
'praxis.manualForm.editor.hints.ui.visible': 'Visivel',
|
|
2863
|
+
'praxis.manualForm.editor.hooks.title': 'Hooks de ciclo de vida',
|
|
2864
|
+
'praxis.manualForm.editor.hooks.help': 'Defina acoes automatizadas por estagio.',
|
|
2865
|
+
'praxis.manualForm.editor.hooks.reset': 'Restaurar',
|
|
2866
|
+
'praxis.manualForm.editor.hooks.apply': 'Aplicar hooks',
|
|
2867
|
+
'praxis.manualForm.editor.hooks.note': 'Executa apenas se o host registrar hooks disponiveis.',
|
|
2868
|
+
'praxis.manualForm.editor.hooks.tooltip': 'Array JSON de hooks para {{stage}} (id, priority, timeoutMs, args).',
|
|
2869
|
+
'praxis.manualForm.editor.hooks.placeholder': '[{ "id": "notifySuccess", "priority": 0, "args": {} }]',
|
|
2870
|
+
'praxis.manualForm.editor.rules.title': 'Regras de layout',
|
|
2871
|
+
'praxis.manualForm.editor.rules.help': 'Regras avancadas para visibilidade e comportamento.',
|
|
2872
|
+
'praxis.manualForm.editor.rules.apply': 'Aplicar regras',
|
|
2873
|
+
'praxis.manualForm.editor.rules.note': 'Persistido no config; a execucao depende do host.',
|
|
2874
|
+
'praxis.manualForm.editor.rules.formRulesLabel': 'formRules (JSON)',
|
|
2875
|
+
'praxis.manualForm.editor.rules.formRulesStateLabel': 'formRulesState (JSON)',
|
|
2876
|
+
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Obrigatoriedade","targetType":"field","targets":["campo"],"effect":{"condition":"{campo} != null","properties":{"required":true}}}]',
|
|
2877
|
+
'praxis.manualForm.editor.rules.tooltip': 'Array JSON com regras (id, targetType, targets, effect).',
|
|
2878
|
+
'praxis.manualForm.editor.rules.stateTooltip': 'Estado bruto do editor visual (opcional).',
|
|
2879
|
+
'praxis.manualForm.editor.cascade.title': 'Dependencias entre campos',
|
|
2880
|
+
'praxis.manualForm.editor.cascade.help': 'Configure cascatas nativas baseadas em metadados.',
|
|
2881
|
+
'praxis.manualForm.editor.cascade.note': 'As alteracoes atualizam metadados e sao salvas no draft.',
|
|
2882
|
+
'praxis.manualForm.editor.validation.jsonArray': 'Precisa ser um array JSON.',
|
|
2883
|
+
'praxis.manualForm.editor.validation.invalidJson': 'JSON invalido.',
|
|
2884
|
+
'praxis.manualForm.editor.validation.formRulesArray': 'formRules precisa ser um array JSON.',
|
|
2885
|
+
'praxis.manualForm.editor.validation.formRulesInvalid': 'JSON invalido em formRules.',
|
|
2886
|
+
'praxis.manualForm.editor.validation.formRulesStateInvalid': 'JSON invalido em formRulesState.',
|
|
2887
|
+
'praxis.manualForm.editor.defaults.submit': 'Salvar',
|
|
2888
|
+
'praxis.manualForm.editor.defaults.cancel': 'Cancelar',
|
|
2889
|
+
'praxis.manualForm.editor.defaults.reset': 'Restaurar',
|
|
2890
|
+
'praxis.manualForm.editor.defaults.action': 'Acao',
|
|
2891
|
+
};
|
|
2892
|
+
|
|
2893
|
+
function createPraxisManualFormI18nConfig(options = {}) {
|
|
2894
|
+
const dictionaries = {
|
|
2895
|
+
'pt-BR': {
|
|
2896
|
+
...MANUAL_FORM_PT_BR,
|
|
2897
|
+
...(options.dictionaries?.['pt-BR'] ?? {}),
|
|
2898
|
+
},
|
|
2899
|
+
'en-US': {
|
|
2900
|
+
...MANUAL_FORM_EN_US,
|
|
2901
|
+
...(options.dictionaries?.['en-US'] ?? {}),
|
|
2902
|
+
},
|
|
2903
|
+
};
|
|
2904
|
+
for (const [locale, dictionary] of Object.entries(options.dictionaries ?? {})) {
|
|
2905
|
+
if (locale === 'pt-BR' || locale === 'en-US') {
|
|
2906
|
+
continue;
|
|
2907
|
+
}
|
|
2908
|
+
dictionaries[locale] = {
|
|
2909
|
+
...(dictionaries[locale] ?? {}),
|
|
2910
|
+
...dictionary,
|
|
2911
|
+
};
|
|
2912
|
+
}
|
|
2913
|
+
return {
|
|
2914
|
+
locale: options.locale,
|
|
2915
|
+
fallbackLocale: options.fallbackLocale ?? 'pt-BR',
|
|
2916
|
+
dictionaries,
|
|
2917
|
+
};
|
|
2918
|
+
}
|
|
2919
|
+
function providePraxisManualFormI18n(options = {}) {
|
|
2920
|
+
return providePraxisI18n(createPraxisManualFormI18nConfig(options));
|
|
2921
|
+
}
|
|
2922
|
+
function resolvePraxisManualFormText(i18n, key, fallback) {
|
|
2923
|
+
const namespacedKey = key.startsWith('praxis.manualForm.')
|
|
2924
|
+
? key
|
|
2925
|
+
: `praxis.manualForm.${key}`;
|
|
2926
|
+
return i18n.t(namespacedKey, undefined, fallback) || fallback;
|
|
2927
|
+
}
|
|
2928
|
+
|
|
2617
2929
|
class ManualFormConfigEditorComponent {
|
|
2618
2930
|
ref;
|
|
2931
|
+
i18n = inject(PraxisI18nService);
|
|
2619
2932
|
instance;
|
|
2620
2933
|
all = [];
|
|
2621
2934
|
filtered = [];
|
|
@@ -2640,9 +2953,9 @@ class ManualFormConfigEditorComponent {
|
|
|
2640
2953
|
'onError',
|
|
2641
2954
|
];
|
|
2642
2955
|
actionBlocks = [
|
|
2643
|
-
{ key: 'submit', label: '
|
|
2644
|
-
{ key: 'cancel', label: '
|
|
2645
|
-
{ key: 'reset', label: '
|
|
2956
|
+
{ key: 'submit', label: this.tx('editor.defaults.submit', 'Save') },
|
|
2957
|
+
{ key: 'cancel', label: this.tx('editor.defaults.cancel', 'Cancel') },
|
|
2958
|
+
{ key: 'reset', label: this.tx('editor.defaults.reset', 'Reset') },
|
|
2646
2959
|
];
|
|
2647
2960
|
// SettingsValueProvider observables
|
|
2648
2961
|
isDirty$ = new BehaviorSubject(false);
|
|
@@ -2652,6 +2965,18 @@ class ManualFormConfigEditorComponent {
|
|
|
2652
2965
|
this.ref = ref;
|
|
2653
2966
|
this.instance = inputs.instance;
|
|
2654
2967
|
}
|
|
2968
|
+
tx(key, fallback) {
|
|
2969
|
+
return resolvePraxisManualFormText(this.i18n, key, fallback);
|
|
2970
|
+
}
|
|
2971
|
+
hookPlaceholder() {
|
|
2972
|
+
return this.tx('editor.hooks.placeholder', '[{ "id": "notifySuccess", "priority": 0, "args": {} }]');
|
|
2973
|
+
}
|
|
2974
|
+
hookTooltip(stage) {
|
|
2975
|
+
return this.tx('editor.hooks.tooltip', `JSON array of hooks for ${stage} (id, priority, timeoutMs, args).`).replace('{{stage}}', stage);
|
|
2976
|
+
}
|
|
2977
|
+
formRulesPlaceholder() {
|
|
2978
|
+
return this.tx('editor.rules.formRulesPlaceholder', '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":"{field} != null","properties":{"required":true}}}]');
|
|
2979
|
+
}
|
|
2655
2980
|
ngOnInit() {
|
|
2656
2981
|
this.refresh();
|
|
2657
2982
|
}
|
|
@@ -2720,7 +3045,7 @@ class ManualFormConfigEditorComponent {
|
|
|
2720
3045
|
}
|
|
2721
3046
|
addCustomAction() {
|
|
2722
3047
|
const nextId = this.generateCustomId();
|
|
2723
|
-
const nextAction = makeAction({ id: nextId, label: '
|
|
3048
|
+
const nextAction = makeAction({ id: nextId, label: this.tx('editor.defaults.action', 'Action') });
|
|
2724
3049
|
const custom = [...(this.actionsModel.custom || []), nextAction];
|
|
2725
3050
|
this.actionsModel = { ...this.actionsModel, custom };
|
|
2726
3051
|
this.applyConfigPatch({ actions: this.actionsModel });
|
|
@@ -2826,13 +3151,13 @@ class ManualFormConfigEditorComponent {
|
|
|
2826
3151
|
try {
|
|
2827
3152
|
const parsed = JSON.parse(raw);
|
|
2828
3153
|
if (!Array.isArray(parsed)) {
|
|
2829
|
-
errors[stage] = '
|
|
3154
|
+
errors[stage] = this.tx('editor.validation.jsonArray', 'Must be a JSON array.');
|
|
2830
3155
|
continue;
|
|
2831
3156
|
}
|
|
2832
3157
|
next[stage] = parsed;
|
|
2833
3158
|
}
|
|
2834
3159
|
catch {
|
|
2835
|
-
errors[stage] = 'JSON
|
|
3160
|
+
errors[stage] = this.tx('editor.validation.invalidJson', 'Invalid JSON.');
|
|
2836
3161
|
}
|
|
2837
3162
|
}
|
|
2838
3163
|
this.hooksErrors = errors;
|
|
@@ -2857,13 +3182,13 @@ class ManualFormConfigEditorComponent {
|
|
|
2857
3182
|
try {
|
|
2858
3183
|
const parsed = JSON.parse(rulesRaw);
|
|
2859
3184
|
if (!Array.isArray(parsed)) {
|
|
2860
|
-
this.formRulesError = 'formRules
|
|
3185
|
+
this.formRulesError = this.tx('editor.validation.formRulesArray', 'formRules must be a JSON array.');
|
|
2861
3186
|
return;
|
|
2862
3187
|
}
|
|
2863
3188
|
rules = parsed;
|
|
2864
3189
|
}
|
|
2865
3190
|
catch {
|
|
2866
|
-
this.formRulesError = 'JSON
|
|
3191
|
+
this.formRulesError = this.tx('editor.validation.formRulesInvalid', 'Invalid JSON in formRules.');
|
|
2867
3192
|
return;
|
|
2868
3193
|
}
|
|
2869
3194
|
}
|
|
@@ -2873,7 +3198,7 @@ class ManualFormConfigEditorComponent {
|
|
|
2873
3198
|
rulesState = JSON.parse(stateRaw);
|
|
2874
3199
|
}
|
|
2875
3200
|
catch {
|
|
2876
|
-
this.formRulesStateError = 'JSON
|
|
3201
|
+
this.formRulesStateError = this.tx('editor.validation.formRulesStateInvalid', 'Invalid JSON in formRulesState.');
|
|
2877
3202
|
return;
|
|
2878
3203
|
}
|
|
2879
3204
|
}
|
|
@@ -2984,33 +3309,33 @@ class ManualFormConfigEditorComponent {
|
|
|
2984
3309
|
return next;
|
|
2985
3310
|
}
|
|
2986
3311
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ManualFormConfigEditorComponent, deps: [{ token: SETTINGS_PANEL_DATA }, { token: SETTINGS_PANEL_REF }], target: i0.ɵɵFactoryTarget.Component });
|
|
2987
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: ManualFormConfigEditorComponent, isStandalone: true, selector: "praxis-manual-form-config-editor", ngImport: i0, template: `
|
|
3312
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: ManualFormConfigEditorComponent, isStandalone: true, selector: "praxis-manual-form-config-editor", providers: [providePraxisManualFormI18n()], ngImport: i0, template: `
|
|
2988
3313
|
<div class="mf-editor">
|
|
2989
3314
|
<div class="mf-editor__toolbar">
|
|
2990
3315
|
<div class="mf-editor__title">
|
|
2991
|
-
<span>
|
|
2992
|
-
<small class="mf-editor__subtitle">
|
|
3316
|
+
<span>{{ tx('editor.title', 'Form settings') }}</span>
|
|
3317
|
+
<small class="mf-editor__subtitle">{{ tx('editor.subtitle', 'Fields, actions, messages and behavior') }}</small>
|
|
2993
3318
|
</div>
|
|
2994
3319
|
<div class="spacer"></div>
|
|
2995
|
-
<button type="button" class="mf-btn" (click)="close()">
|
|
3320
|
+
<button type="button" class="mf-btn" (click)="close()">{{ tx('editor.close', 'Close') }}</button>
|
|
2996
3321
|
</div>
|
|
2997
3322
|
|
|
2998
3323
|
<mat-tab-group class="mf-tabs">
|
|
2999
|
-
<mat-tab label="
|
|
3324
|
+
<mat-tab [label]="tx('editor.tabs.fields', 'Fields')">
|
|
3000
3325
|
<div class="mf-tab">
|
|
3001
3326
|
<label class="mf-editor__filter">
|
|
3002
3327
|
<input type="checkbox" [(ngModel)]="onlyHidden" (change)="applyFilter()" />
|
|
3003
|
-
<span>
|
|
3328
|
+
<span>{{ tx('editor.fields.onlyHidden', 'Show hidden only') }}</span>
|
|
3004
3329
|
</label>
|
|
3005
3330
|
<div class="mf-editor__list">
|
|
3006
3331
|
<div class="mf-editor__row mf-editor__row--head">
|
|
3007
|
-
<div class="col col--name">
|
|
3008
|
-
<div class="col col--label">
|
|
3009
|
-
<div class="col col--type">
|
|
3010
|
-
<div class="col col--vis">
|
|
3011
|
-
<div class="col col--req">
|
|
3012
|
-
<div class="col col--ro">
|
|
3013
|
-
<div class="col col--dis">
|
|
3332
|
+
<div class="col col--name">{{ tx('editor.fields.name', 'Field') }}</div>
|
|
3333
|
+
<div class="col col--label">{{ tx('editor.fields.label', 'Label') }}</div>
|
|
3334
|
+
<div class="col col--type">{{ tx('editor.fields.type', 'Type') }}</div>
|
|
3335
|
+
<div class="col col--vis">{{ tx('editor.fields.visible', 'Visible') }}</div>
|
|
3336
|
+
<div class="col col--req">{{ tx('editor.fields.required', 'Required') }}</div>
|
|
3337
|
+
<div class="col col--ro">{{ tx('editor.fields.readOnly', 'Read-only') }}</div>
|
|
3338
|
+
<div class="col col--dis">{{ tx('editor.fields.disabled', 'Disabled') }}</div>
|
|
3014
3339
|
</div>
|
|
3015
3340
|
|
|
3016
3341
|
@for (f of filtered; track f.name) {
|
|
@@ -3021,25 +3346,25 @@ class ManualFormConfigEditorComponent {
|
|
|
3021
3346
|
<div class="col col--vis">
|
|
3022
3347
|
<label class="toggle">
|
|
3023
3348
|
<input type="checkbox" [checked]="!f.hidden" (change)="toggleVisibility(f, $any($event.target).checked)" />
|
|
3024
|
-
<span>{{ f.hidden ? '
|
|
3349
|
+
<span>{{ f.hidden ? tx('editor.fields.hiddenState', 'Hidden') : tx('editor.fields.visibleState', 'Visible') }}</span>
|
|
3025
3350
|
</label>
|
|
3026
3351
|
</div>
|
|
3027
3352
|
<div class="col col--req">
|
|
3028
3353
|
<label class="toggle">
|
|
3029
3354
|
<input type="checkbox" [checked]="!!f.required" (change)="toggleRequired(f, $any($event.target).checked)" />
|
|
3030
|
-
<span>{{ f.required ? '
|
|
3355
|
+
<span>{{ f.required ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3031
3356
|
</label>
|
|
3032
3357
|
</div>
|
|
3033
3358
|
<div class="col col--ro">
|
|
3034
3359
|
<label class="toggle">
|
|
3035
3360
|
<input type="checkbox" [checked]="!!f.readOnly" (change)="toggleReadOnly(f, $any($event.target).checked)" />
|
|
3036
|
-
<span>{{ f.readOnly ? '
|
|
3361
|
+
<span>{{ f.readOnly ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3037
3362
|
</label>
|
|
3038
3363
|
</div>
|
|
3039
3364
|
<div class="col col--dis">
|
|
3040
3365
|
<label class="toggle">
|
|
3041
3366
|
<input type="checkbox" [checked]="!!f.disabled" (change)="toggleDisabled(f, $any($event.target).checked)" />
|
|
3042
|
-
<span>{{ f.disabled ? '
|
|
3367
|
+
<span>{{ f.disabled ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3043
3368
|
</label>
|
|
3044
3369
|
</div>
|
|
3045
3370
|
</div>
|
|
@@ -3048,13 +3373,13 @@ class ManualFormConfigEditorComponent {
|
|
|
3048
3373
|
</div>
|
|
3049
3374
|
</mat-tab>
|
|
3050
3375
|
|
|
3051
|
-
<mat-tab label="
|
|
3376
|
+
<mat-tab [label]="tx('editor.tabs.actions', 'Actions')">
|
|
3052
3377
|
<div class="mf-tab">
|
|
3053
3378
|
<section class="mf-section">
|
|
3054
3379
|
<div class="mf-section__header">
|
|
3055
3380
|
<div>
|
|
3056
|
-
<h3>
|
|
3057
|
-
<p class="mf-help">
|
|
3381
|
+
<h3>{{ tx('editor.actions.defaultTitle', 'Default buttons') }}</h3>
|
|
3382
|
+
<p class="mf-help">{{ tx('editor.actions.defaultHelp', 'Control labels, visibility and style for the basic buttons.') }}</p>
|
|
3058
3383
|
</div>
|
|
3059
3384
|
</div>
|
|
3060
3385
|
<div class="mf-actions-grid">
|
|
@@ -3065,10 +3390,10 @@ class ManualFormConfigEditorComponent {
|
|
|
3065
3390
|
[checked]="actionsModel[block.key].visible"
|
|
3066
3391
|
(change)="updateActionField(block.key, 'visible', $event.checked)"
|
|
3067
3392
|
>
|
|
3068
|
-
|
|
3393
|
+
{{ tx('editor.actions.field.visible', 'Visible') }}
|
|
3069
3394
|
</mat-slide-toggle>
|
|
3070
3395
|
<mat-form-field appearance="outline">
|
|
3071
|
-
<mat-label>Label</mat-label>
|
|
3396
|
+
<mat-label>{{ tx('editor.actions.field.label', 'Label') }}</mat-label>
|
|
3072
3397
|
<input
|
|
3073
3398
|
matInput
|
|
3074
3399
|
[value]="actionsModel[block.key].label"
|
|
@@ -3076,7 +3401,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3076
3401
|
/>
|
|
3077
3402
|
</mat-form-field>
|
|
3078
3403
|
<mat-form-field appearance="outline">
|
|
3079
|
-
<mat-label
|
|
3404
|
+
<mat-label>{{ tx('editor.actions.field.icon', 'Icon') }}</mat-label>
|
|
3080
3405
|
<input
|
|
3081
3406
|
matInput
|
|
3082
3407
|
[value]="actionsModel[block.key].icon || ''"
|
|
@@ -3084,33 +3409,33 @@ class ManualFormConfigEditorComponent {
|
|
|
3084
3409
|
/>
|
|
3085
3410
|
</mat-form-field>
|
|
3086
3411
|
<mat-form-field appearance="outline">
|
|
3087
|
-
<mat-label>
|
|
3412
|
+
<mat-label>{{ tx('editor.actions.field.variant', 'Variant') }}</mat-label>
|
|
3088
3413
|
<mat-select
|
|
3089
3414
|
[value]="actionsModel[block.key].variant || null"
|
|
3090
3415
|
(selectionChange)="updateActionField(block.key, 'variant', $event.value)"
|
|
3091
3416
|
>
|
|
3092
|
-
<mat-option [value]="null">
|
|
3093
|
-
<mat-option value="raised">
|
|
3094
|
-
<mat-option value="stroked">
|
|
3095
|
-
<mat-option value="flat">
|
|
3096
|
-
<mat-option value="fab">
|
|
3417
|
+
<mat-option [value]="null">{{ tx('editor.actions.variant.default', 'Default') }}</mat-option>
|
|
3418
|
+
<mat-option value="raised">{{ tx('editor.actions.variant.raised', 'Raised') }}</mat-option>
|
|
3419
|
+
<mat-option value="stroked">{{ tx('editor.actions.variant.stroked', 'Stroked') }}</mat-option>
|
|
3420
|
+
<mat-option value="flat">{{ tx('editor.actions.variant.flat', 'Flat') }}</mat-option>
|
|
3421
|
+
<mat-option value="fab">{{ tx('editor.actions.variant.fab', 'Floating') }}</mat-option>
|
|
3097
3422
|
</mat-select>
|
|
3098
3423
|
</mat-form-field>
|
|
3099
3424
|
<mat-form-field appearance="outline">
|
|
3100
|
-
<mat-label>
|
|
3425
|
+
<mat-label>{{ tx('editor.actions.field.color', 'Color') }}</mat-label>
|
|
3101
3426
|
<mat-select
|
|
3102
3427
|
[value]="actionsModel[block.key].color || null"
|
|
3103
3428
|
(selectionChange)="updateActionField(block.key, 'color', $event.value)"
|
|
3104
3429
|
>
|
|
3105
|
-
<mat-option [value]="null">
|
|
3106
|
-
<mat-option value="primary">Primary</mat-option>
|
|
3107
|
-
<mat-option value="accent">Accent</mat-option>
|
|
3108
|
-
<mat-option value="warn">Warn</mat-option>
|
|
3109
|
-
<mat-option value="basic">Basic</mat-option>
|
|
3430
|
+
<mat-option [value]="null">{{ tx('editor.actions.color.default', 'Default') }}</mat-option>
|
|
3431
|
+
<mat-option value="primary">{{ tx('editor.actions.color.primary', 'Primary') }}</mat-option>
|
|
3432
|
+
<mat-option value="accent">{{ tx('editor.actions.color.accent', 'Accent') }}</mat-option>
|
|
3433
|
+
<mat-option value="warn">{{ tx('editor.actions.color.warn', 'Warn') }}</mat-option>
|
|
3434
|
+
<mat-option value="basic">{{ tx('editor.actions.color.basic', 'Basic') }}</mat-option>
|
|
3110
3435
|
</mat-select>
|
|
3111
3436
|
</mat-form-field>
|
|
3112
3437
|
<mat-form-field appearance="outline">
|
|
3113
|
-
<mat-label>
|
|
3438
|
+
<mat-label>{{ tx('editor.actions.field.shortcut', 'Shortcut') }}</mat-label>
|
|
3114
3439
|
<input
|
|
3115
3440
|
matInput
|
|
3116
3441
|
[value]="actionsModel[block.key].shortcut || ''"
|
|
@@ -3125,67 +3450,67 @@ class ManualFormConfigEditorComponent {
|
|
|
3125
3450
|
<section class="mf-section">
|
|
3126
3451
|
<div class="mf-section__header">
|
|
3127
3452
|
<div>
|
|
3128
|
-
<h3>
|
|
3129
|
-
<p class="mf-help">
|
|
3453
|
+
<h3>{{ tx('editor.actions.layoutTitle', 'Actions layout') }}</h3>
|
|
3454
|
+
<p class="mf-help">{{ tx('editor.actions.layoutHelp', 'Defines alignment and disposition of the actions bar.') }}</p>
|
|
3130
3455
|
</div>
|
|
3131
3456
|
</div>
|
|
3132
3457
|
<div class="mf-actions-layout">
|
|
3133
3458
|
<mat-form-field appearance="outline">
|
|
3134
|
-
<mat-label>
|
|
3459
|
+
<mat-label>{{ tx('editor.actions.layout.position', 'Position') }}</mat-label>
|
|
3135
3460
|
<mat-select
|
|
3136
3461
|
[value]="actionsModel.position || null"
|
|
3137
3462
|
(selectionChange)="updateActionsLayout('position', $event.value)"
|
|
3138
3463
|
>
|
|
3139
|
-
<mat-option value="left">
|
|
3140
|
-
<mat-option value="center">
|
|
3141
|
-
<mat-option value="right">
|
|
3142
|
-
<mat-option value="justified">
|
|
3143
|
-
<mat-option value="split">Split</mat-option>
|
|
3464
|
+
<mat-option value="left">{{ tx('editor.actions.layout.position.left', 'Left') }}</mat-option>
|
|
3465
|
+
<mat-option value="center">{{ tx('editor.actions.layout.position.center', 'Center') }}</mat-option>
|
|
3466
|
+
<mat-option value="right">{{ tx('editor.actions.layout.position.right', 'Right') }}</mat-option>
|
|
3467
|
+
<mat-option value="justified">{{ tx('editor.actions.layout.position.justified', 'Justified') }}</mat-option>
|
|
3468
|
+
<mat-option value="split">{{ tx('editor.actions.layout.position.split', 'Split') }}</mat-option>
|
|
3144
3469
|
</mat-select>
|
|
3145
3470
|
</mat-form-field>
|
|
3146
3471
|
<mat-form-field appearance="outline">
|
|
3147
|
-
<mat-label>
|
|
3472
|
+
<mat-label>{{ tx('editor.actions.layout.orientation', 'Orientation') }}</mat-label>
|
|
3148
3473
|
<mat-select
|
|
3149
3474
|
[value]="actionsModel.orientation || null"
|
|
3150
3475
|
(selectionChange)="updateActionsLayout('orientation', $event.value)"
|
|
3151
3476
|
>
|
|
3152
|
-
<mat-option value="horizontal">Horizontal</mat-option>
|
|
3153
|
-
<mat-option value="vertical">Vertical</mat-option>
|
|
3477
|
+
<mat-option value="horizontal">{{ tx('editor.actions.layout.orientation.horizontal', 'Horizontal') }}</mat-option>
|
|
3478
|
+
<mat-option value="vertical">{{ tx('editor.actions.layout.orientation.vertical', 'Vertical') }}</mat-option>
|
|
3154
3479
|
</mat-select>
|
|
3155
3480
|
</mat-form-field>
|
|
3156
3481
|
<mat-form-field appearance="outline">
|
|
3157
|
-
<mat-label>
|
|
3482
|
+
<mat-label>{{ tx('editor.actions.layout.spacing', 'Spacing') }}</mat-label>
|
|
3158
3483
|
<mat-select
|
|
3159
3484
|
[value]="actionsModel.spacing || null"
|
|
3160
3485
|
(selectionChange)="updateActionsLayout('spacing', $event.value)"
|
|
3161
3486
|
>
|
|
3162
|
-
<mat-option value="compact">
|
|
3163
|
-
<mat-option value="normal">Normal</mat-option>
|
|
3164
|
-
<mat-option value="spacious">
|
|
3487
|
+
<mat-option value="compact">{{ tx('editor.actions.layout.spacing.compact', 'Compact') }}</mat-option>
|
|
3488
|
+
<mat-option value="normal">{{ tx('editor.actions.layout.spacing.normal', 'Normal') }}</mat-option>
|
|
3489
|
+
<mat-option value="spacious">{{ tx('editor.actions.layout.spacing.spacious', 'Spacious') }}</mat-option>
|
|
3165
3490
|
</mat-select>
|
|
3166
3491
|
</mat-form-field>
|
|
3167
3492
|
<mat-form-field appearance="outline">
|
|
3168
|
-
<mat-label>
|
|
3493
|
+
<mat-label>{{ tx('editor.actions.layout.placement', 'Placement') }}</mat-label>
|
|
3169
3494
|
<mat-select
|
|
3170
3495
|
[value]="actionsModel.placement || null"
|
|
3171
3496
|
(selectionChange)="updateActionsLayout('placement', $event.value)"
|
|
3172
3497
|
>
|
|
3173
|
-
<mat-option value="afterSections">
|
|
3174
|
-
<mat-option value="insideLastSection">
|
|
3175
|
-
<mat-option value="top">
|
|
3498
|
+
<mat-option value="afterSections">{{ tx('editor.actions.layout.placement.afterSections', 'After sections') }}</mat-option>
|
|
3499
|
+
<mat-option value="insideLastSection">{{ tx('editor.actions.layout.placement.insideLastSection', 'Inside last section') }}</mat-option>
|
|
3500
|
+
<mat-option value="top">{{ tx('editor.actions.layout.placement.top', 'Top') }}</mat-option>
|
|
3176
3501
|
</mat-select>
|
|
3177
3502
|
</mat-form-field>
|
|
3178
3503
|
<mat-slide-toggle
|
|
3179
3504
|
[checked]="!!actionsModel.sticky"
|
|
3180
3505
|
(change)="updateActionsLayout('sticky', $event.checked)"
|
|
3181
3506
|
>
|
|
3182
|
-
|
|
3507
|
+
{{ tx('editor.actions.layout.sticky', 'Sticky actions') }}
|
|
3183
3508
|
</mat-slide-toggle>
|
|
3184
3509
|
<mat-slide-toggle
|
|
3185
3510
|
[checked]="!!actionsModel.divider"
|
|
3186
3511
|
(change)="updateActionsLayout('divider', $event.checked)"
|
|
3187
3512
|
>
|
|
3188
|
-
|
|
3513
|
+
{{ tx('editor.actions.layout.divider', 'Show divider') }}
|
|
3189
3514
|
</mat-slide-toggle>
|
|
3190
3515
|
</div>
|
|
3191
3516
|
</section>
|
|
@@ -3193,12 +3518,12 @@ class ManualFormConfigEditorComponent {
|
|
|
3193
3518
|
<section class="mf-section">
|
|
3194
3519
|
<div class="mf-section__header mf-section__header--row">
|
|
3195
3520
|
<div>
|
|
3196
|
-
<h3>
|
|
3197
|
-
<p class="mf-help">
|
|
3521
|
+
<h3>{{ tx('editor.actions.customTitle', 'Custom actions') }}</h3>
|
|
3522
|
+
<p class="mf-help">{{ tx('editor.actions.customHelp', 'Create extra buttons with their own event.') }}</p>
|
|
3198
3523
|
</div>
|
|
3199
3524
|
<button mat-stroked-button type="button" (click)="addCustomAction()">
|
|
3200
3525
|
<mat-icon>add</mat-icon>
|
|
3201
|
-
|
|
3526
|
+
{{ tx('editor.actions.addCustom', 'Add action') }}
|
|
3202
3527
|
</button>
|
|
3203
3528
|
</div>
|
|
3204
3529
|
<div class="mf-custom-actions">
|
|
@@ -3213,7 +3538,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3213
3538
|
</div>
|
|
3214
3539
|
<div class="mf-custom-card__grid">
|
|
3215
3540
|
<mat-form-field appearance="outline">
|
|
3216
|
-
<mat-label>ID</mat-label>
|
|
3541
|
+
<mat-label>{{ tx('editor.actions.field.id', 'ID') }}</mat-label>
|
|
3217
3542
|
<input
|
|
3218
3543
|
matInput
|
|
3219
3544
|
[value]="action.id || ''"
|
|
@@ -3221,7 +3546,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3221
3546
|
/>
|
|
3222
3547
|
</mat-form-field>
|
|
3223
3548
|
<mat-form-field appearance="outline">
|
|
3224
|
-
<mat-label>Label</mat-label>
|
|
3549
|
+
<mat-label>{{ tx('editor.actions.field.label', 'Label') }}</mat-label>
|
|
3225
3550
|
<input
|
|
3226
3551
|
matInput
|
|
3227
3552
|
[value]="action.label || ''"
|
|
@@ -3229,7 +3554,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3229
3554
|
/>
|
|
3230
3555
|
</mat-form-field>
|
|
3231
3556
|
<mat-form-field appearance="outline">
|
|
3232
|
-
<mat-label>
|
|
3557
|
+
<mat-label>{{ tx('editor.actions.field.eventAction', 'Event (action)') }}</mat-label>
|
|
3233
3558
|
<input
|
|
3234
3559
|
matInput
|
|
3235
3560
|
[value]="action.action || ''"
|
|
@@ -3237,7 +3562,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3237
3562
|
/>
|
|
3238
3563
|
</mat-form-field>
|
|
3239
3564
|
<mat-form-field appearance="outline">
|
|
3240
|
-
<mat-label
|
|
3565
|
+
<mat-label>{{ tx('editor.actions.field.icon', 'Icon') }}</mat-label>
|
|
3241
3566
|
<input
|
|
3242
3567
|
matInput
|
|
3243
3568
|
[value]="action.icon || ''"
|
|
@@ -3245,33 +3570,33 @@ class ManualFormConfigEditorComponent {
|
|
|
3245
3570
|
/>
|
|
3246
3571
|
</mat-form-field>
|
|
3247
3572
|
<mat-form-field appearance="outline">
|
|
3248
|
-
<mat-label>
|
|
3573
|
+
<mat-label>{{ tx('editor.actions.field.variant', 'Variant') }}</mat-label>
|
|
3249
3574
|
<mat-select
|
|
3250
3575
|
[value]="action.variant || null"
|
|
3251
3576
|
(selectionChange)="updateCustomActionField(action, 'variant', $event.value)"
|
|
3252
3577
|
>
|
|
3253
|
-
<mat-option [value]="null">
|
|
3254
|
-
<mat-option value="raised">
|
|
3255
|
-
<mat-option value="stroked">
|
|
3256
|
-
<mat-option value="flat">
|
|
3257
|
-
<mat-option value="fab">
|
|
3578
|
+
<mat-option [value]="null">{{ tx('editor.actions.variant.default', 'Default') }}</mat-option>
|
|
3579
|
+
<mat-option value="raised">{{ tx('editor.actions.variant.raised', 'Raised') }}</mat-option>
|
|
3580
|
+
<mat-option value="stroked">{{ tx('editor.actions.variant.stroked', 'Stroked') }}</mat-option>
|
|
3581
|
+
<mat-option value="flat">{{ tx('editor.actions.variant.flat', 'Flat') }}</mat-option>
|
|
3582
|
+
<mat-option value="fab">{{ tx('editor.actions.variant.fab', 'Floating') }}</mat-option>
|
|
3258
3583
|
</mat-select>
|
|
3259
3584
|
</mat-form-field>
|
|
3260
3585
|
<mat-form-field appearance="outline">
|
|
3261
|
-
<mat-label>
|
|
3586
|
+
<mat-label>{{ tx('editor.actions.field.color', 'Color') }}</mat-label>
|
|
3262
3587
|
<mat-select
|
|
3263
3588
|
[value]="action.color || null"
|
|
3264
3589
|
(selectionChange)="updateCustomActionField(action, 'color', $event.value)"
|
|
3265
3590
|
>
|
|
3266
|
-
<mat-option [value]="null">
|
|
3267
|
-
<mat-option value="primary">Primary</mat-option>
|
|
3268
|
-
<mat-option value="accent">Accent</mat-option>
|
|
3269
|
-
<mat-option value="warn">Warn</mat-option>
|
|
3270
|
-
<mat-option value="basic">Basic</mat-option>
|
|
3591
|
+
<mat-option [value]="null">{{ tx('editor.actions.color.default', 'Default') }}</mat-option>
|
|
3592
|
+
<mat-option value="primary">{{ tx('editor.actions.color.primary', 'Primary') }}</mat-option>
|
|
3593
|
+
<mat-option value="accent">{{ tx('editor.actions.color.accent', 'Accent') }}</mat-option>
|
|
3594
|
+
<mat-option value="warn">{{ tx('editor.actions.color.warn', 'Warn') }}</mat-option>
|
|
3595
|
+
<mat-option value="basic">{{ tx('editor.actions.color.basic', 'Basic') }}</mat-option>
|
|
3271
3596
|
</mat-select>
|
|
3272
3597
|
</mat-form-field>
|
|
3273
3598
|
<mat-form-field appearance="outline">
|
|
3274
|
-
<mat-label>
|
|
3599
|
+
<mat-label>{{ tx('editor.actions.field.shortcut', 'Shortcut') }}</mat-label>
|
|
3275
3600
|
<input
|
|
3276
3601
|
matInput
|
|
3277
3602
|
[value]="action.shortcut || ''"
|
|
@@ -3279,7 +3604,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3279
3604
|
/>
|
|
3280
3605
|
</mat-form-field>
|
|
3281
3606
|
<mat-form-field appearance="outline">
|
|
3282
|
-
<mat-label>Tooltip</mat-label>
|
|
3607
|
+
<mat-label>{{ tx('editor.actions.field.tooltip', 'Tooltip') }}</mat-label>
|
|
3283
3608
|
<input
|
|
3284
3609
|
matInput
|
|
3285
3610
|
[value]="action.tooltip || ''"
|
|
@@ -3290,31 +3615,31 @@ class ManualFormConfigEditorComponent {
|
|
|
3290
3615
|
[checked]="action.visible !== false"
|
|
3291
3616
|
(change)="updateCustomActionField(action, 'visible', $event.checked)"
|
|
3292
3617
|
>
|
|
3293
|
-
|
|
3618
|
+
{{ tx('editor.actions.field.visible', 'Visible') }}
|
|
3294
3619
|
</mat-slide-toggle>
|
|
3295
3620
|
</div>
|
|
3296
3621
|
</div>
|
|
3297
3622
|
}
|
|
3298
3623
|
} @else {
|
|
3299
|
-
<p class="mf-empty">
|
|
3624
|
+
<p class="mf-empty">{{ tx('editor.actions.emptyCustom', 'No custom actions registered.') }}</p>
|
|
3300
3625
|
}
|
|
3301
3626
|
</div>
|
|
3302
3627
|
</section>
|
|
3303
3628
|
</div>
|
|
3304
3629
|
</mat-tab>
|
|
3305
3630
|
|
|
3306
|
-
<mat-tab label="
|
|
3631
|
+
<mat-tab [label]="tx('editor.tabs.messages', 'Messages')">
|
|
3307
3632
|
<div class="mf-tab">
|
|
3308
3633
|
<section class="mf-section">
|
|
3309
3634
|
<div class="mf-section__header">
|
|
3310
3635
|
<div>
|
|
3311
|
-
<h3>
|
|
3312
|
-
<p class="mf-help">
|
|
3636
|
+
<h3>{{ tx('editor.messages.defaultTitle', 'Default feedback') }}</h3>
|
|
3637
|
+
<p class="mf-help">{{ tx('editor.messages.defaultHelp', 'Success/error messages displayed by the host.') }}</p>
|
|
3313
3638
|
</div>
|
|
3314
3639
|
</div>
|
|
3315
3640
|
<div class="mf-messages-grid">
|
|
3316
3641
|
<mat-form-field appearance="outline">
|
|
3317
|
-
<mat-label>
|
|
3642
|
+
<mat-label>{{ tx('editor.messages.createSuccess', 'Create success') }}</mat-label>
|
|
3318
3643
|
<input
|
|
3319
3644
|
matInput
|
|
3320
3645
|
[value]="messagesModel.createRegistrySuccess || ''"
|
|
@@ -3322,7 +3647,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3322
3647
|
/>
|
|
3323
3648
|
</mat-form-field>
|
|
3324
3649
|
<mat-form-field appearance="outline">
|
|
3325
|
-
<mat-label>
|
|
3650
|
+
<mat-label>{{ tx('editor.messages.createError', 'Create error') }}</mat-label>
|
|
3326
3651
|
<input
|
|
3327
3652
|
matInput
|
|
3328
3653
|
[value]="messagesModel.createRegistryError || ''"
|
|
@@ -3330,7 +3655,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3330
3655
|
/>
|
|
3331
3656
|
</mat-form-field>
|
|
3332
3657
|
<mat-form-field appearance="outline">
|
|
3333
|
-
<mat-label>
|
|
3658
|
+
<mat-label>{{ tx('editor.messages.updateSuccess', 'Update success') }}</mat-label>
|
|
3334
3659
|
<input
|
|
3335
3660
|
matInput
|
|
3336
3661
|
[value]="messagesModel.updateRegistrySuccess || ''"
|
|
@@ -3338,7 +3663,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3338
3663
|
/>
|
|
3339
3664
|
</mat-form-field>
|
|
3340
3665
|
<mat-form-field appearance="outline">
|
|
3341
|
-
<mat-label>
|
|
3666
|
+
<mat-label>{{ tx('editor.messages.updateError', 'Update error') }}</mat-label>
|
|
3342
3667
|
<input
|
|
3343
3668
|
matInput
|
|
3344
3669
|
[value]="messagesModel.updateRegistryError || ''"
|
|
@@ -3351,13 +3676,13 @@ class ManualFormConfigEditorComponent {
|
|
|
3351
3676
|
<section class="mf-section">
|
|
3352
3677
|
<div class="mf-section__header">
|
|
3353
3678
|
<div>
|
|
3354
|
-
<h3>
|
|
3355
|
-
<p class="mf-help">
|
|
3679
|
+
<h3>{{ tx('editor.messages.confirmationsTitle', 'Confirmations') }}</h3>
|
|
3680
|
+
<p class="mf-help">{{ tx('editor.messages.confirmationsHelp', 'Texts shown before critical actions.') }}</p>
|
|
3356
3681
|
</div>
|
|
3357
3682
|
</div>
|
|
3358
3683
|
<div class="mf-messages-grid">
|
|
3359
3684
|
<mat-form-field appearance="outline">
|
|
3360
|
-
<mat-label>
|
|
3685
|
+
<mat-label>{{ tx('editor.defaults.submit', 'Save') }}</mat-label>
|
|
3361
3686
|
<input
|
|
3362
3687
|
matInput
|
|
3363
3688
|
[value]="messagesModel.confirmations?.submit || ''"
|
|
@@ -3365,7 +3690,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3365
3690
|
/>
|
|
3366
3691
|
</mat-form-field>
|
|
3367
3692
|
<mat-form-field appearance="outline">
|
|
3368
|
-
<mat-label>
|
|
3693
|
+
<mat-label>{{ tx('editor.defaults.cancel', 'Cancel') }}</mat-label>
|
|
3369
3694
|
<input
|
|
3370
3695
|
matInput
|
|
3371
3696
|
[value]="messagesModel.confirmations?.cancel || ''"
|
|
@@ -3373,7 +3698,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3373
3698
|
/>
|
|
3374
3699
|
</mat-form-field>
|
|
3375
3700
|
<mat-form-field appearance="outline">
|
|
3376
|
-
<mat-label>
|
|
3701
|
+
<mat-label>{{ tx('editor.defaults.reset', 'Reset') }}</mat-label>
|
|
3377
3702
|
<input
|
|
3378
3703
|
matInput
|
|
3379
3704
|
[value]="messagesModel.confirmations?.reset || ''"
|
|
@@ -3386,13 +3711,13 @@ class ManualFormConfigEditorComponent {
|
|
|
3386
3711
|
<section class="mf-section">
|
|
3387
3712
|
<div class="mf-section__header">
|
|
3388
3713
|
<div>
|
|
3389
|
-
<h3>Loading</h3>
|
|
3390
|
-
<p class="mf-help">
|
|
3714
|
+
<h3>{{ tx('editor.messages.loadingTitle', 'Loading') }}</h3>
|
|
3715
|
+
<p class="mf-help">{{ tx('editor.messages.loadingHelp', 'Messages displayed during operations.') }}</p>
|
|
3391
3716
|
</div>
|
|
3392
3717
|
</div>
|
|
3393
3718
|
<div class="mf-messages-grid">
|
|
3394
3719
|
<mat-form-field appearance="outline">
|
|
3395
|
-
<mat-label>
|
|
3720
|
+
<mat-label>{{ tx('editor.defaults.submit', 'Save') }}</mat-label>
|
|
3396
3721
|
<input
|
|
3397
3722
|
matInput
|
|
3398
3723
|
[value]="messagesModel.loading?.submit || ''"
|
|
@@ -3400,7 +3725,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3400
3725
|
/>
|
|
3401
3726
|
</mat-form-field>
|
|
3402
3727
|
<mat-form-field appearance="outline">
|
|
3403
|
-
<mat-label>
|
|
3728
|
+
<mat-label>{{ tx('editor.defaults.cancel', 'Cancel') }}</mat-label>
|
|
3404
3729
|
<input
|
|
3405
3730
|
matInput
|
|
3406
3731
|
[value]="messagesModel.loading?.cancel || ''"
|
|
@@ -3408,7 +3733,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3408
3733
|
/>
|
|
3409
3734
|
</mat-form-field>
|
|
3410
3735
|
<mat-form-field appearance="outline">
|
|
3411
|
-
<mat-label>
|
|
3736
|
+
<mat-label>{{ tx('editor.defaults.reset', 'Reset') }}</mat-label>
|
|
3412
3737
|
<input
|
|
3413
3738
|
matInput
|
|
3414
3739
|
[value]="messagesModel.loading?.reset || ''"
|
|
@@ -3421,8 +3746,8 @@ class ManualFormConfigEditorComponent {
|
|
|
3421
3746
|
<section class="mf-section">
|
|
3422
3747
|
<div class="mf-section__header">
|
|
3423
3748
|
<div>
|
|
3424
|
-
<h3>
|
|
3425
|
-
<p class="mf-help">
|
|
3749
|
+
<h3>{{ tx('editor.messages.customTitle', 'Messages by custom action') }}</h3>
|
|
3750
|
+
<p class="mf-help">{{ tx('editor.messages.customHelp', 'Customize texts by action ID.') }}</p>
|
|
3426
3751
|
</div>
|
|
3427
3752
|
</div>
|
|
3428
3753
|
<div class="mf-custom-messages">
|
|
@@ -3432,7 +3757,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3432
3757
|
<div class="mf-custom-card__title">{{ action.label || action.id }}</div>
|
|
3433
3758
|
<div class="mf-custom-card__grid">
|
|
3434
3759
|
<mat-form-field appearance="outline">
|
|
3435
|
-
<mat-label>
|
|
3760
|
+
<mat-label>{{ tx('editor.messages.confirmationsTitle', 'Confirmations') }}</mat-label>
|
|
3436
3761
|
<input
|
|
3437
3762
|
matInput
|
|
3438
3763
|
[value]="messagesModel.customActions?.[action.id || '']?.confirmation || ''"
|
|
@@ -3440,7 +3765,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3440
3765
|
/>
|
|
3441
3766
|
</mat-form-field>
|
|
3442
3767
|
<mat-form-field appearance="outline">
|
|
3443
|
-
<mat-label>
|
|
3768
|
+
<mat-label>{{ tx('editor.shared.success', 'Success') }}</mat-label>
|
|
3444
3769
|
<input
|
|
3445
3770
|
matInput
|
|
3446
3771
|
[value]="messagesModel.customActions?.[action.id || '']?.success || ''"
|
|
@@ -3448,7 +3773,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3448
3773
|
/>
|
|
3449
3774
|
</mat-form-field>
|
|
3450
3775
|
<mat-form-field appearance="outline">
|
|
3451
|
-
<mat-label>
|
|
3776
|
+
<mat-label>{{ tx('editor.shared.error', 'Error') }}</mat-label>
|
|
3452
3777
|
<input
|
|
3453
3778
|
matInput
|
|
3454
3779
|
[value]="messagesModel.customActions?.[action.id || '']?.error || ''"
|
|
@@ -3459,64 +3784,64 @@ class ManualFormConfigEditorComponent {
|
|
|
3459
3784
|
</div>
|
|
3460
3785
|
}
|
|
3461
3786
|
} @else {
|
|
3462
|
-
<p class="mf-empty">
|
|
3787
|
+
<p class="mf-empty">{{ tx('editor.messages.emptyCustom', 'Register custom actions to configure specific messages.') }}</p>
|
|
3463
3788
|
}
|
|
3464
3789
|
</div>
|
|
3465
3790
|
</section>
|
|
3466
3791
|
</div>
|
|
3467
3792
|
</mat-tab>
|
|
3468
3793
|
|
|
3469
|
-
<mat-tab label="
|
|
3794
|
+
<mat-tab [label]="tx('editor.tabs.behavior', 'Behavior')">
|
|
3470
3795
|
<div class="mf-tab">
|
|
3471
3796
|
<section class="mf-section">
|
|
3472
3797
|
<div class="mf-section__header">
|
|
3473
3798
|
<div>
|
|
3474
|
-
<h3>
|
|
3475
|
-
<p class="mf-help">
|
|
3799
|
+
<h3>{{ tx('editor.behavior.title', 'Form behavior') }}</h3>
|
|
3800
|
+
<p class="mf-help">{{ tx('editor.behavior.help', 'Preferences applied by the host or runtime.') }}</p>
|
|
3476
3801
|
</div>
|
|
3477
3802
|
</div>
|
|
3478
|
-
<div class="mf-note">
|
|
3803
|
+
<div class="mf-note">{{ tx('editor.behavior.note', 'These options are persisted in config; the host decides how to apply them.') }}</div>
|
|
3479
3804
|
<div class="mf-toggle-grid">
|
|
3480
3805
|
<mat-slide-toggle
|
|
3481
3806
|
[checked]="!!behaviorModel.confirmOnUnsavedChanges"
|
|
3482
3807
|
(change)="updateBehavior('confirmOnUnsavedChanges', $event.checked)"
|
|
3483
3808
|
>
|
|
3484
|
-
|
|
3809
|
+
{{ tx('editor.behavior.confirmUnsaved', 'Confirm unsaved changes before leaving') }}
|
|
3485
3810
|
</mat-slide-toggle>
|
|
3486
3811
|
<mat-slide-toggle
|
|
3487
3812
|
[checked]="!!behaviorModel.trackHistory"
|
|
3488
3813
|
(change)="updateBehavior('trackHistory', $event.checked)"
|
|
3489
3814
|
>
|
|
3490
|
-
|
|
3815
|
+
{{ tx('editor.behavior.trackHistory', 'Track change history') }}
|
|
3491
3816
|
</mat-slide-toggle>
|
|
3492
3817
|
<mat-slide-toggle
|
|
3493
3818
|
[checked]="!!behaviorModel.focusFirstError"
|
|
3494
3819
|
(change)="updateBehavior('focusFirstError', $event.checked)"
|
|
3495
3820
|
>
|
|
3496
|
-
|
|
3821
|
+
{{ tx('editor.behavior.focusFirstError', 'Focus the first error on submit') }}
|
|
3497
3822
|
</mat-slide-toggle>
|
|
3498
3823
|
<mat-slide-toggle
|
|
3499
3824
|
[checked]="!!behaviorModel.scrollToErrors"
|
|
3500
3825
|
(change)="updateBehavior('scrollToErrors', $event.checked)"
|
|
3501
3826
|
>
|
|
3502
|
-
|
|
3827
|
+
{{ tx('editor.behavior.scrollToErrors', 'Scroll to errors on submit') }}
|
|
3503
3828
|
</mat-slide-toggle>
|
|
3504
3829
|
<mat-slide-toggle
|
|
3505
3830
|
[checked]="!!behaviorModel.clearAfterSave"
|
|
3506
3831
|
(change)="updateBehavior('clearAfterSave', $event.checked)"
|
|
3507
3832
|
>
|
|
3508
|
-
|
|
3833
|
+
{{ tx('editor.behavior.clearAfterSave', 'Clear form after save') }}
|
|
3509
3834
|
</mat-slide-toggle>
|
|
3510
3835
|
<mat-slide-toggle
|
|
3511
3836
|
[checked]="!!behaviorModel.reactiveValidation"
|
|
3512
3837
|
(change)="updateBehavior('reactiveValidation', $event.checked)"
|
|
3513
3838
|
>
|
|
3514
|
-
|
|
3839
|
+
{{ tx('editor.behavior.reactiveValidation', 'Reactive validation') }}
|
|
3515
3840
|
</mat-slide-toggle>
|
|
3516
3841
|
</div>
|
|
3517
3842
|
<div class="mf-actions-layout">
|
|
3518
3843
|
<mat-form-field appearance="outline">
|
|
3519
|
-
<mat-label>
|
|
3844
|
+
<mat-label>{{ tx('editor.behavior.redirectAfterSave', 'Redirect after save (URL)') }}</mat-label>
|
|
3520
3845
|
<input
|
|
3521
3846
|
matInput
|
|
3522
3847
|
[value]="behaviorModel.redirectAfterSave || ''"
|
|
@@ -3524,7 +3849,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3524
3849
|
/>
|
|
3525
3850
|
</mat-form-field>
|
|
3526
3851
|
<mat-form-field appearance="outline">
|
|
3527
|
-
<mat-label>
|
|
3852
|
+
<mat-label>{{ tx('editor.behavior.reactiveValidationDebounce', 'Reactive validation debounce (ms)') }}</mat-label>
|
|
3528
3853
|
<input
|
|
3529
3854
|
matInput
|
|
3530
3855
|
type="number"
|
|
@@ -3538,19 +3863,19 @@ class ManualFormConfigEditorComponent {
|
|
|
3538
3863
|
</div>
|
|
3539
3864
|
</mat-tab>
|
|
3540
3865
|
|
|
3541
|
-
<mat-tab label="
|
|
3866
|
+
<mat-tab [label]="tx('editor.tabs.hints', 'Hints')">
|
|
3542
3867
|
<div class="mf-tab">
|
|
3543
3868
|
<section class="mf-section">
|
|
3544
3869
|
<div class="mf-section__header">
|
|
3545
3870
|
<div>
|
|
3546
|
-
<h3>
|
|
3547
|
-
<p class="mf-help">
|
|
3871
|
+
<h3>{{ tx('editor.hints.modeTitle', 'Mode messages') }}</h3>
|
|
3872
|
+
<p class="mf-help">{{ tx('editor.hints.modeHelp', 'Auxiliary texts displayed by the host.') }}</p>
|
|
3548
3873
|
</div>
|
|
3549
3874
|
</div>
|
|
3550
|
-
<div class="mf-note"
|
|
3875
|
+
<div class="mf-note">{{ tx('editor.hints.modeNote', 'Useful for i18n and user guidance.') }}</div>
|
|
3551
3876
|
<div class="mf-messages-grid">
|
|
3552
3877
|
<mat-form-field appearance="outline">
|
|
3553
|
-
<mat-label>
|
|
3878
|
+
<mat-label>{{ tx('editor.hints.mode.create', 'Create') }}</mat-label>
|
|
3554
3879
|
<input
|
|
3555
3880
|
matInput
|
|
3556
3881
|
[value]="hintsModel.dataModes.create"
|
|
@@ -3558,7 +3883,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3558
3883
|
/>
|
|
3559
3884
|
</mat-form-field>
|
|
3560
3885
|
<mat-form-field appearance="outline">
|
|
3561
|
-
<mat-label>
|
|
3886
|
+
<mat-label>{{ tx('editor.hints.mode.edit', 'Edit') }}</mat-label>
|
|
3562
3887
|
<input
|
|
3563
3888
|
matInput
|
|
3564
3889
|
[value]="hintsModel.dataModes.edit"
|
|
@@ -3566,7 +3891,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3566
3891
|
/>
|
|
3567
3892
|
</mat-form-field>
|
|
3568
3893
|
<mat-form-field appearance="outline">
|
|
3569
|
-
<mat-label>
|
|
3894
|
+
<mat-label>{{ tx('editor.hints.mode.view', 'View') }}</mat-label>
|
|
3570
3895
|
<input
|
|
3571
3896
|
matInput
|
|
3572
3897
|
[value]="hintsModel.dataModes.view"
|
|
@@ -3579,13 +3904,13 @@ class ManualFormConfigEditorComponent {
|
|
|
3579
3904
|
<section class="mf-section">
|
|
3580
3905
|
<div class="mf-section__header">
|
|
3581
3906
|
<div>
|
|
3582
|
-
<h3>
|
|
3583
|
-
<p class="mf-help">
|
|
3907
|
+
<h3>{{ tx('editor.hints.uiTitle', 'UI hints') }}</h3>
|
|
3908
|
+
<p class="mf-help">{{ tx('editor.hints.uiHelp', 'Contextual help for form states.') }}</p>
|
|
3584
3909
|
</div>
|
|
3585
3910
|
</div>
|
|
3586
3911
|
<div class="mf-messages-grid">
|
|
3587
3912
|
<mat-form-field appearance="outline">
|
|
3588
|
-
<mat-label>
|
|
3913
|
+
<mat-label>{{ tx('editor.hints.ui.presentation', 'Presentation') }}</mat-label>
|
|
3589
3914
|
<textarea
|
|
3590
3915
|
matInput
|
|
3591
3916
|
rows="2"
|
|
@@ -3594,7 +3919,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3594
3919
|
></textarea>
|
|
3595
3920
|
</mat-form-field>
|
|
3596
3921
|
<mat-form-field appearance="outline">
|
|
3597
|
-
<mat-label>
|
|
3922
|
+
<mat-label>{{ tx('editor.hints.ui.readonly', 'Read-only') }}</mat-label>
|
|
3598
3923
|
<textarea
|
|
3599
3924
|
matInput
|
|
3600
3925
|
rows="2"
|
|
@@ -3603,7 +3928,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3603
3928
|
></textarea>
|
|
3604
3929
|
</mat-form-field>
|
|
3605
3930
|
<mat-form-field appearance="outline">
|
|
3606
|
-
<mat-label>
|
|
3931
|
+
<mat-label>{{ tx('editor.hints.ui.disabled', 'Disabled') }}</mat-label>
|
|
3607
3932
|
<textarea
|
|
3608
3933
|
matInput
|
|
3609
3934
|
rows="2"
|
|
@@ -3612,7 +3937,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3612
3937
|
></textarea>
|
|
3613
3938
|
</mat-form-field>
|
|
3614
3939
|
<mat-form-field appearance="outline">
|
|
3615
|
-
<mat-label>
|
|
3940
|
+
<mat-label>{{ tx('editor.hints.ui.visible', 'Visible') }}</mat-label>
|
|
3616
3941
|
<textarea
|
|
3617
3942
|
matInput
|
|
3618
3943
|
rows="2"
|
|
@@ -3625,24 +3950,24 @@ class ManualFormConfigEditorComponent {
|
|
|
3625
3950
|
</div>
|
|
3626
3951
|
</mat-tab>
|
|
3627
3952
|
|
|
3628
|
-
<mat-tab label="Hooks">
|
|
3953
|
+
<mat-tab [label]="tx('editor.tabs.hooks', 'Hooks')">
|
|
3629
3954
|
<div class="mf-tab">
|
|
3630
3955
|
<section class="mf-section">
|
|
3631
3956
|
<div class="mf-section__header">
|
|
3632
3957
|
<div>
|
|
3633
|
-
<h3>
|
|
3634
|
-
<p class="mf-help">
|
|
3958
|
+
<h3>{{ tx('editor.hooks.title', 'Lifecycle hooks') }}</h3>
|
|
3959
|
+
<p class="mf-help">{{ tx('editor.hooks.help', 'Define automated actions by stage.') }}</p>
|
|
3635
3960
|
</div>
|
|
3636
3961
|
<div class="mf-actions-row">
|
|
3637
3962
|
<button mat-stroked-button type="button" (click)="resetHooks()">
|
|
3638
|
-
|
|
3963
|
+
{{ tx('editor.hooks.reset', 'Reset') }}
|
|
3639
3964
|
</button>
|
|
3640
3965
|
<button mat-flat-button color="primary" type="button" (click)="applyHooks()">
|
|
3641
|
-
|
|
3966
|
+
{{ tx('editor.hooks.apply', 'Apply hooks') }}
|
|
3642
3967
|
</button>
|
|
3643
3968
|
</div>
|
|
3644
3969
|
</div>
|
|
3645
|
-
<div class="mf-note">
|
|
3970
|
+
<div class="mf-note">{{ tx('editor.hooks.note', 'Runs only if the host registers available hooks.') }}</div>
|
|
3646
3971
|
<div class="mf-hooks-grid">
|
|
3647
3972
|
@for (stage of hookStages; track stage) {
|
|
3648
3973
|
<mat-form-field appearance="outline" class="mf-hook-field">
|
|
@@ -3652,14 +3977,14 @@ class ManualFormConfigEditorComponent {
|
|
|
3652
3977
|
rows="4"
|
|
3653
3978
|
[value]="hooksText[stage]"
|
|
3654
3979
|
(input)="onHookTextChange(stage, $any($event.target).value)"
|
|
3655
|
-
placeholder=
|
|
3980
|
+
[placeholder]="hookPlaceholder()"
|
|
3656
3981
|
></textarea>
|
|
3657
3982
|
<button
|
|
3658
3983
|
mat-icon-button
|
|
3659
3984
|
matSuffix
|
|
3660
3985
|
class="help-icon-button"
|
|
3661
3986
|
type="button"
|
|
3662
|
-
[matTooltip]="
|
|
3987
|
+
[matTooltip]="hookTooltip(stage)"
|
|
3663
3988
|
matTooltipPosition="above"
|
|
3664
3989
|
>
|
|
3665
3990
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -3674,36 +3999,36 @@ class ManualFormConfigEditorComponent {
|
|
|
3674
3999
|
</div>
|
|
3675
4000
|
</mat-tab>
|
|
3676
4001
|
|
|
3677
|
-
<mat-tab label="
|
|
4002
|
+
<mat-tab [label]="tx('editor.tabs.rules', 'Rules')">
|
|
3678
4003
|
<div class="mf-tab">
|
|
3679
4004
|
<section class="mf-section">
|
|
3680
4005
|
<div class="mf-section__header">
|
|
3681
4006
|
<div>
|
|
3682
|
-
<h3>
|
|
3683
|
-
<p class="mf-help">
|
|
4007
|
+
<h3>{{ tx('editor.rules.title', 'Layout rules') }}</h3>
|
|
4008
|
+
<p class="mf-help">{{ tx('editor.rules.help', 'Advanced rules for visibility and behavior.') }}</p>
|
|
3684
4009
|
</div>
|
|
3685
4010
|
<div class="mf-actions-row">
|
|
3686
4011
|
<button mat-flat-button color="primary" type="button" (click)="applyRules()">
|
|
3687
|
-
|
|
4012
|
+
{{ tx('editor.rules.apply', 'Apply rules') }}
|
|
3688
4013
|
</button>
|
|
3689
4014
|
</div>
|
|
3690
4015
|
</div>
|
|
3691
|
-
<div class="mf-note">
|
|
4016
|
+
<div class="mf-note">{{ tx('editor.rules.note', 'Persisted in config; execution depends on the host.') }}</div>
|
|
3692
4017
|
<mat-form-field appearance="outline">
|
|
3693
|
-
<mat-label>formRules (JSON)</mat-label>
|
|
4018
|
+
<mat-label>{{ tx('editor.rules.formRulesLabel', 'formRules (JSON)') }}</mat-label>
|
|
3694
4019
|
<textarea
|
|
3695
4020
|
matInput
|
|
3696
4021
|
rows="6"
|
|
3697
4022
|
[value]="formRulesText"
|
|
3698
4023
|
(input)="onRulesTextChange($any($event.target).value)"
|
|
3699
|
-
placeholder=
|
|
4024
|
+
[placeholder]="formRulesPlaceholder()"
|
|
3700
4025
|
></textarea>
|
|
3701
4026
|
<button
|
|
3702
4027
|
mat-icon-button
|
|
3703
4028
|
matSuffix
|
|
3704
4029
|
class="help-icon-button"
|
|
3705
4030
|
type="button"
|
|
3706
|
-
[matTooltip]="'
|
|
4031
|
+
[matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
3707
4032
|
matTooltipPosition="above"
|
|
3708
4033
|
>
|
|
3709
4034
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -3713,7 +4038,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3713
4038
|
}
|
|
3714
4039
|
</mat-form-field>
|
|
3715
4040
|
<mat-form-field appearance="outline">
|
|
3716
|
-
<mat-label>formRulesState (JSON)</mat-label>
|
|
4041
|
+
<mat-label>{{ tx('editor.rules.formRulesStateLabel', 'formRulesState (JSON)') }}</mat-label>
|
|
3717
4042
|
<textarea
|
|
3718
4043
|
matInput
|
|
3719
4044
|
rows="6"
|
|
@@ -3726,7 +4051,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3726
4051
|
matSuffix
|
|
3727
4052
|
class="help-icon-button"
|
|
3728
4053
|
type="button"
|
|
3729
|
-
[matTooltip]="'
|
|
4054
|
+
[matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
3730
4055
|
matTooltipPosition="above"
|
|
3731
4056
|
>
|
|
3732
4057
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -3737,23 +4062,23 @@ class ManualFormConfigEditorComponent {
|
|
|
3737
4062
|
</mat-form-field>
|
|
3738
4063
|
<div class="mf-actions-row mf-actions-row--end">
|
|
3739
4064
|
<button mat-flat-button color="primary" type="button" (click)="applyRules()">
|
|
3740
|
-
|
|
4065
|
+
{{ tx('editor.rules.apply', 'Apply rules') }}
|
|
3741
4066
|
</button>
|
|
3742
4067
|
</div>
|
|
3743
4068
|
</section>
|
|
3744
4069
|
</div>
|
|
3745
4070
|
</mat-tab>
|
|
3746
4071
|
|
|
3747
|
-
<mat-tab label="
|
|
4072
|
+
<mat-tab [label]="tx('editor.tabs.cascade', 'Cascades')">
|
|
3748
4073
|
<div class="mf-tab">
|
|
3749
4074
|
<section class="mf-section mf-section--full">
|
|
3750
4075
|
<div class="mf-section__header">
|
|
3751
4076
|
<div>
|
|
3752
|
-
<h3>
|
|
3753
|
-
<p class="mf-help">Configure
|
|
4077
|
+
<h3>{{ tx('editor.cascade.title', 'Field dependencies') }}</h3>
|
|
4078
|
+
<p class="mf-help">{{ tx('editor.cascade.help', 'Configure native cascades based on metadata.') }}</p>
|
|
3754
4079
|
</div>
|
|
3755
4080
|
</div>
|
|
3756
|
-
<div class="mf-note">
|
|
4081
|
+
<div class="mf-note">{{ tx('editor.cascade.note', 'Changes update metadata and are saved in the draft.') }}</div>
|
|
3757
4082
|
<praxis-cascade-manager-tab
|
|
3758
4083
|
[fields]="cascadeFields"
|
|
3759
4084
|
(apply)="applyCascadePatch($event)"
|
|
@@ -3779,33 +4104,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3779
4104
|
MatIconModule,
|
|
3780
4105
|
MatTooltipModule,
|
|
3781
4106
|
CascadeManagerTabComponent,
|
|
3782
|
-
], template: `
|
|
4107
|
+
], providers: [providePraxisManualFormI18n()], template: `
|
|
3783
4108
|
<div class="mf-editor">
|
|
3784
4109
|
<div class="mf-editor__toolbar">
|
|
3785
4110
|
<div class="mf-editor__title">
|
|
3786
|
-
<span>
|
|
3787
|
-
<small class="mf-editor__subtitle">
|
|
4111
|
+
<span>{{ tx('editor.title', 'Form settings') }}</span>
|
|
4112
|
+
<small class="mf-editor__subtitle">{{ tx('editor.subtitle', 'Fields, actions, messages and behavior') }}</small>
|
|
3788
4113
|
</div>
|
|
3789
4114
|
<div class="spacer"></div>
|
|
3790
|
-
<button type="button" class="mf-btn" (click)="close()">
|
|
4115
|
+
<button type="button" class="mf-btn" (click)="close()">{{ tx('editor.close', 'Close') }}</button>
|
|
3791
4116
|
</div>
|
|
3792
4117
|
|
|
3793
4118
|
<mat-tab-group class="mf-tabs">
|
|
3794
|
-
<mat-tab label="
|
|
4119
|
+
<mat-tab [label]="tx('editor.tabs.fields', 'Fields')">
|
|
3795
4120
|
<div class="mf-tab">
|
|
3796
4121
|
<label class="mf-editor__filter">
|
|
3797
4122
|
<input type="checkbox" [(ngModel)]="onlyHidden" (change)="applyFilter()" />
|
|
3798
|
-
<span>
|
|
4123
|
+
<span>{{ tx('editor.fields.onlyHidden', 'Show hidden only') }}</span>
|
|
3799
4124
|
</label>
|
|
3800
4125
|
<div class="mf-editor__list">
|
|
3801
4126
|
<div class="mf-editor__row mf-editor__row--head">
|
|
3802
|
-
<div class="col col--name">
|
|
3803
|
-
<div class="col col--label">
|
|
3804
|
-
<div class="col col--type">
|
|
3805
|
-
<div class="col col--vis">
|
|
3806
|
-
<div class="col col--req">
|
|
3807
|
-
<div class="col col--ro">
|
|
3808
|
-
<div class="col col--dis">
|
|
4127
|
+
<div class="col col--name">{{ tx('editor.fields.name', 'Field') }}</div>
|
|
4128
|
+
<div class="col col--label">{{ tx('editor.fields.label', 'Label') }}</div>
|
|
4129
|
+
<div class="col col--type">{{ tx('editor.fields.type', 'Type') }}</div>
|
|
4130
|
+
<div class="col col--vis">{{ tx('editor.fields.visible', 'Visible') }}</div>
|
|
4131
|
+
<div class="col col--req">{{ tx('editor.fields.required', 'Required') }}</div>
|
|
4132
|
+
<div class="col col--ro">{{ tx('editor.fields.readOnly', 'Read-only') }}</div>
|
|
4133
|
+
<div class="col col--dis">{{ tx('editor.fields.disabled', 'Disabled') }}</div>
|
|
3809
4134
|
</div>
|
|
3810
4135
|
|
|
3811
4136
|
@for (f of filtered; track f.name) {
|
|
@@ -3816,25 +4141,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3816
4141
|
<div class="col col--vis">
|
|
3817
4142
|
<label class="toggle">
|
|
3818
4143
|
<input type="checkbox" [checked]="!f.hidden" (change)="toggleVisibility(f, $any($event.target).checked)" />
|
|
3819
|
-
<span>{{ f.hidden ? '
|
|
4144
|
+
<span>{{ f.hidden ? tx('editor.fields.hiddenState', 'Hidden') : tx('editor.fields.visibleState', 'Visible') }}</span>
|
|
3820
4145
|
</label>
|
|
3821
4146
|
</div>
|
|
3822
4147
|
<div class="col col--req">
|
|
3823
4148
|
<label class="toggle">
|
|
3824
4149
|
<input type="checkbox" [checked]="!!f.required" (change)="toggleRequired(f, $any($event.target).checked)" />
|
|
3825
|
-
<span>{{ f.required ? '
|
|
4150
|
+
<span>{{ f.required ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3826
4151
|
</label>
|
|
3827
4152
|
</div>
|
|
3828
4153
|
<div class="col col--ro">
|
|
3829
4154
|
<label class="toggle">
|
|
3830
4155
|
<input type="checkbox" [checked]="!!f.readOnly" (change)="toggleReadOnly(f, $any($event.target).checked)" />
|
|
3831
|
-
<span>{{ f.readOnly ? '
|
|
4156
|
+
<span>{{ f.readOnly ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3832
4157
|
</label>
|
|
3833
4158
|
</div>
|
|
3834
4159
|
<div class="col col--dis">
|
|
3835
4160
|
<label class="toggle">
|
|
3836
4161
|
<input type="checkbox" [checked]="!!f.disabled" (change)="toggleDisabled(f, $any($event.target).checked)" />
|
|
3837
|
-
<span>{{ f.disabled ? '
|
|
4162
|
+
<span>{{ f.disabled ? tx('editor.shared.yes', 'Yes') : tx('editor.shared.no', 'No') }}</span>
|
|
3838
4163
|
</label>
|
|
3839
4164
|
</div>
|
|
3840
4165
|
</div>
|
|
@@ -3843,13 +4168,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3843
4168
|
</div>
|
|
3844
4169
|
</mat-tab>
|
|
3845
4170
|
|
|
3846
|
-
<mat-tab label="
|
|
4171
|
+
<mat-tab [label]="tx('editor.tabs.actions', 'Actions')">
|
|
3847
4172
|
<div class="mf-tab">
|
|
3848
4173
|
<section class="mf-section">
|
|
3849
4174
|
<div class="mf-section__header">
|
|
3850
4175
|
<div>
|
|
3851
|
-
<h3>
|
|
3852
|
-
<p class="mf-help">
|
|
4176
|
+
<h3>{{ tx('editor.actions.defaultTitle', 'Default buttons') }}</h3>
|
|
4177
|
+
<p class="mf-help">{{ tx('editor.actions.defaultHelp', 'Control labels, visibility and style for the basic buttons.') }}</p>
|
|
3853
4178
|
</div>
|
|
3854
4179
|
</div>
|
|
3855
4180
|
<div class="mf-actions-grid">
|
|
@@ -3860,10 +4185,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3860
4185
|
[checked]="actionsModel[block.key].visible"
|
|
3861
4186
|
(change)="updateActionField(block.key, 'visible', $event.checked)"
|
|
3862
4187
|
>
|
|
3863
|
-
|
|
4188
|
+
{{ tx('editor.actions.field.visible', 'Visible') }}
|
|
3864
4189
|
</mat-slide-toggle>
|
|
3865
4190
|
<mat-form-field appearance="outline">
|
|
3866
|
-
<mat-label>Label</mat-label>
|
|
4191
|
+
<mat-label>{{ tx('editor.actions.field.label', 'Label') }}</mat-label>
|
|
3867
4192
|
<input
|
|
3868
4193
|
matInput
|
|
3869
4194
|
[value]="actionsModel[block.key].label"
|
|
@@ -3871,7 +4196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3871
4196
|
/>
|
|
3872
4197
|
</mat-form-field>
|
|
3873
4198
|
<mat-form-field appearance="outline">
|
|
3874
|
-
<mat-label
|
|
4199
|
+
<mat-label>{{ tx('editor.actions.field.icon', 'Icon') }}</mat-label>
|
|
3875
4200
|
<input
|
|
3876
4201
|
matInput
|
|
3877
4202
|
[value]="actionsModel[block.key].icon || ''"
|
|
@@ -3879,33 +4204,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3879
4204
|
/>
|
|
3880
4205
|
</mat-form-field>
|
|
3881
4206
|
<mat-form-field appearance="outline">
|
|
3882
|
-
<mat-label>
|
|
4207
|
+
<mat-label>{{ tx('editor.actions.field.variant', 'Variant') }}</mat-label>
|
|
3883
4208
|
<mat-select
|
|
3884
4209
|
[value]="actionsModel[block.key].variant || null"
|
|
3885
4210
|
(selectionChange)="updateActionField(block.key, 'variant', $event.value)"
|
|
3886
4211
|
>
|
|
3887
|
-
<mat-option [value]="null">
|
|
3888
|
-
<mat-option value="raised">
|
|
3889
|
-
<mat-option value="stroked">
|
|
3890
|
-
<mat-option value="flat">
|
|
3891
|
-
<mat-option value="fab">
|
|
4212
|
+
<mat-option [value]="null">{{ tx('editor.actions.variant.default', 'Default') }}</mat-option>
|
|
4213
|
+
<mat-option value="raised">{{ tx('editor.actions.variant.raised', 'Raised') }}</mat-option>
|
|
4214
|
+
<mat-option value="stroked">{{ tx('editor.actions.variant.stroked', 'Stroked') }}</mat-option>
|
|
4215
|
+
<mat-option value="flat">{{ tx('editor.actions.variant.flat', 'Flat') }}</mat-option>
|
|
4216
|
+
<mat-option value="fab">{{ tx('editor.actions.variant.fab', 'Floating') }}</mat-option>
|
|
3892
4217
|
</mat-select>
|
|
3893
4218
|
</mat-form-field>
|
|
3894
4219
|
<mat-form-field appearance="outline">
|
|
3895
|
-
<mat-label>
|
|
4220
|
+
<mat-label>{{ tx('editor.actions.field.color', 'Color') }}</mat-label>
|
|
3896
4221
|
<mat-select
|
|
3897
4222
|
[value]="actionsModel[block.key].color || null"
|
|
3898
4223
|
(selectionChange)="updateActionField(block.key, 'color', $event.value)"
|
|
3899
4224
|
>
|
|
3900
|
-
<mat-option [value]="null">
|
|
3901
|
-
<mat-option value="primary">Primary</mat-option>
|
|
3902
|
-
<mat-option value="accent">Accent</mat-option>
|
|
3903
|
-
<mat-option value="warn">Warn</mat-option>
|
|
3904
|
-
<mat-option value="basic">Basic</mat-option>
|
|
4225
|
+
<mat-option [value]="null">{{ tx('editor.actions.color.default', 'Default') }}</mat-option>
|
|
4226
|
+
<mat-option value="primary">{{ tx('editor.actions.color.primary', 'Primary') }}</mat-option>
|
|
4227
|
+
<mat-option value="accent">{{ tx('editor.actions.color.accent', 'Accent') }}</mat-option>
|
|
4228
|
+
<mat-option value="warn">{{ tx('editor.actions.color.warn', 'Warn') }}</mat-option>
|
|
4229
|
+
<mat-option value="basic">{{ tx('editor.actions.color.basic', 'Basic') }}</mat-option>
|
|
3905
4230
|
</mat-select>
|
|
3906
4231
|
</mat-form-field>
|
|
3907
4232
|
<mat-form-field appearance="outline">
|
|
3908
|
-
<mat-label>
|
|
4233
|
+
<mat-label>{{ tx('editor.actions.field.shortcut', 'Shortcut') }}</mat-label>
|
|
3909
4234
|
<input
|
|
3910
4235
|
matInput
|
|
3911
4236
|
[value]="actionsModel[block.key].shortcut || ''"
|
|
@@ -3920,67 +4245,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3920
4245
|
<section class="mf-section">
|
|
3921
4246
|
<div class="mf-section__header">
|
|
3922
4247
|
<div>
|
|
3923
|
-
<h3>
|
|
3924
|
-
<p class="mf-help">
|
|
4248
|
+
<h3>{{ tx('editor.actions.layoutTitle', 'Actions layout') }}</h3>
|
|
4249
|
+
<p class="mf-help">{{ tx('editor.actions.layoutHelp', 'Defines alignment and disposition of the actions bar.') }}</p>
|
|
3925
4250
|
</div>
|
|
3926
4251
|
</div>
|
|
3927
4252
|
<div class="mf-actions-layout">
|
|
3928
4253
|
<mat-form-field appearance="outline">
|
|
3929
|
-
<mat-label>
|
|
4254
|
+
<mat-label>{{ tx('editor.actions.layout.position', 'Position') }}</mat-label>
|
|
3930
4255
|
<mat-select
|
|
3931
4256
|
[value]="actionsModel.position || null"
|
|
3932
4257
|
(selectionChange)="updateActionsLayout('position', $event.value)"
|
|
3933
4258
|
>
|
|
3934
|
-
<mat-option value="left">
|
|
3935
|
-
<mat-option value="center">
|
|
3936
|
-
<mat-option value="right">
|
|
3937
|
-
<mat-option value="justified">
|
|
3938
|
-
<mat-option value="split">Split</mat-option>
|
|
4259
|
+
<mat-option value="left">{{ tx('editor.actions.layout.position.left', 'Left') }}</mat-option>
|
|
4260
|
+
<mat-option value="center">{{ tx('editor.actions.layout.position.center', 'Center') }}</mat-option>
|
|
4261
|
+
<mat-option value="right">{{ tx('editor.actions.layout.position.right', 'Right') }}</mat-option>
|
|
4262
|
+
<mat-option value="justified">{{ tx('editor.actions.layout.position.justified', 'Justified') }}</mat-option>
|
|
4263
|
+
<mat-option value="split">{{ tx('editor.actions.layout.position.split', 'Split') }}</mat-option>
|
|
3939
4264
|
</mat-select>
|
|
3940
4265
|
</mat-form-field>
|
|
3941
4266
|
<mat-form-field appearance="outline">
|
|
3942
|
-
<mat-label>
|
|
4267
|
+
<mat-label>{{ tx('editor.actions.layout.orientation', 'Orientation') }}</mat-label>
|
|
3943
4268
|
<mat-select
|
|
3944
4269
|
[value]="actionsModel.orientation || null"
|
|
3945
4270
|
(selectionChange)="updateActionsLayout('orientation', $event.value)"
|
|
3946
4271
|
>
|
|
3947
|
-
<mat-option value="horizontal">Horizontal</mat-option>
|
|
3948
|
-
<mat-option value="vertical">Vertical</mat-option>
|
|
4272
|
+
<mat-option value="horizontal">{{ tx('editor.actions.layout.orientation.horizontal', 'Horizontal') }}</mat-option>
|
|
4273
|
+
<mat-option value="vertical">{{ tx('editor.actions.layout.orientation.vertical', 'Vertical') }}</mat-option>
|
|
3949
4274
|
</mat-select>
|
|
3950
4275
|
</mat-form-field>
|
|
3951
4276
|
<mat-form-field appearance="outline">
|
|
3952
|
-
<mat-label>
|
|
4277
|
+
<mat-label>{{ tx('editor.actions.layout.spacing', 'Spacing') }}</mat-label>
|
|
3953
4278
|
<mat-select
|
|
3954
4279
|
[value]="actionsModel.spacing || null"
|
|
3955
4280
|
(selectionChange)="updateActionsLayout('spacing', $event.value)"
|
|
3956
4281
|
>
|
|
3957
|
-
<mat-option value="compact">
|
|
3958
|
-
<mat-option value="normal">Normal</mat-option>
|
|
3959
|
-
<mat-option value="spacious">
|
|
4282
|
+
<mat-option value="compact">{{ tx('editor.actions.layout.spacing.compact', 'Compact') }}</mat-option>
|
|
4283
|
+
<mat-option value="normal">{{ tx('editor.actions.layout.spacing.normal', 'Normal') }}</mat-option>
|
|
4284
|
+
<mat-option value="spacious">{{ tx('editor.actions.layout.spacing.spacious', 'Spacious') }}</mat-option>
|
|
3960
4285
|
</mat-select>
|
|
3961
4286
|
</mat-form-field>
|
|
3962
4287
|
<mat-form-field appearance="outline">
|
|
3963
|
-
<mat-label>
|
|
4288
|
+
<mat-label>{{ tx('editor.actions.layout.placement', 'Placement') }}</mat-label>
|
|
3964
4289
|
<mat-select
|
|
3965
4290
|
[value]="actionsModel.placement || null"
|
|
3966
4291
|
(selectionChange)="updateActionsLayout('placement', $event.value)"
|
|
3967
4292
|
>
|
|
3968
|
-
<mat-option value="afterSections">
|
|
3969
|
-
<mat-option value="insideLastSection">
|
|
3970
|
-
<mat-option value="top">
|
|
4293
|
+
<mat-option value="afterSections">{{ tx('editor.actions.layout.placement.afterSections', 'After sections') }}</mat-option>
|
|
4294
|
+
<mat-option value="insideLastSection">{{ tx('editor.actions.layout.placement.insideLastSection', 'Inside last section') }}</mat-option>
|
|
4295
|
+
<mat-option value="top">{{ tx('editor.actions.layout.placement.top', 'Top') }}</mat-option>
|
|
3971
4296
|
</mat-select>
|
|
3972
4297
|
</mat-form-field>
|
|
3973
4298
|
<mat-slide-toggle
|
|
3974
4299
|
[checked]="!!actionsModel.sticky"
|
|
3975
4300
|
(change)="updateActionsLayout('sticky', $event.checked)"
|
|
3976
4301
|
>
|
|
3977
|
-
|
|
4302
|
+
{{ tx('editor.actions.layout.sticky', 'Sticky actions') }}
|
|
3978
4303
|
</mat-slide-toggle>
|
|
3979
4304
|
<mat-slide-toggle
|
|
3980
4305
|
[checked]="!!actionsModel.divider"
|
|
3981
4306
|
(change)="updateActionsLayout('divider', $event.checked)"
|
|
3982
4307
|
>
|
|
3983
|
-
|
|
4308
|
+
{{ tx('editor.actions.layout.divider', 'Show divider') }}
|
|
3984
4309
|
</mat-slide-toggle>
|
|
3985
4310
|
</div>
|
|
3986
4311
|
</section>
|
|
@@ -3988,12 +4313,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
3988
4313
|
<section class="mf-section">
|
|
3989
4314
|
<div class="mf-section__header mf-section__header--row">
|
|
3990
4315
|
<div>
|
|
3991
|
-
<h3>
|
|
3992
|
-
<p class="mf-help">
|
|
4316
|
+
<h3>{{ tx('editor.actions.customTitle', 'Custom actions') }}</h3>
|
|
4317
|
+
<p class="mf-help">{{ tx('editor.actions.customHelp', 'Create extra buttons with their own event.') }}</p>
|
|
3993
4318
|
</div>
|
|
3994
4319
|
<button mat-stroked-button type="button" (click)="addCustomAction()">
|
|
3995
4320
|
<mat-icon>add</mat-icon>
|
|
3996
|
-
|
|
4321
|
+
{{ tx('editor.actions.addCustom', 'Add action') }}
|
|
3997
4322
|
</button>
|
|
3998
4323
|
</div>
|
|
3999
4324
|
<div class="mf-custom-actions">
|
|
@@ -4008,7 +4333,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4008
4333
|
</div>
|
|
4009
4334
|
<div class="mf-custom-card__grid">
|
|
4010
4335
|
<mat-form-field appearance="outline">
|
|
4011
|
-
<mat-label>ID</mat-label>
|
|
4336
|
+
<mat-label>{{ tx('editor.actions.field.id', 'ID') }}</mat-label>
|
|
4012
4337
|
<input
|
|
4013
4338
|
matInput
|
|
4014
4339
|
[value]="action.id || ''"
|
|
@@ -4016,7 +4341,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4016
4341
|
/>
|
|
4017
4342
|
</mat-form-field>
|
|
4018
4343
|
<mat-form-field appearance="outline">
|
|
4019
|
-
<mat-label>Label</mat-label>
|
|
4344
|
+
<mat-label>{{ tx('editor.actions.field.label', 'Label') }}</mat-label>
|
|
4020
4345
|
<input
|
|
4021
4346
|
matInput
|
|
4022
4347
|
[value]="action.label || ''"
|
|
@@ -4024,7 +4349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4024
4349
|
/>
|
|
4025
4350
|
</mat-form-field>
|
|
4026
4351
|
<mat-form-field appearance="outline">
|
|
4027
|
-
<mat-label>
|
|
4352
|
+
<mat-label>{{ tx('editor.actions.field.eventAction', 'Event (action)') }}</mat-label>
|
|
4028
4353
|
<input
|
|
4029
4354
|
matInput
|
|
4030
4355
|
[value]="action.action || ''"
|
|
@@ -4032,7 +4357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4032
4357
|
/>
|
|
4033
4358
|
</mat-form-field>
|
|
4034
4359
|
<mat-form-field appearance="outline">
|
|
4035
|
-
<mat-label
|
|
4360
|
+
<mat-label>{{ tx('editor.actions.field.icon', 'Icon') }}</mat-label>
|
|
4036
4361
|
<input
|
|
4037
4362
|
matInput
|
|
4038
4363
|
[value]="action.icon || ''"
|
|
@@ -4040,33 +4365,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4040
4365
|
/>
|
|
4041
4366
|
</mat-form-field>
|
|
4042
4367
|
<mat-form-field appearance="outline">
|
|
4043
|
-
<mat-label>
|
|
4368
|
+
<mat-label>{{ tx('editor.actions.field.variant', 'Variant') }}</mat-label>
|
|
4044
4369
|
<mat-select
|
|
4045
4370
|
[value]="action.variant || null"
|
|
4046
4371
|
(selectionChange)="updateCustomActionField(action, 'variant', $event.value)"
|
|
4047
4372
|
>
|
|
4048
|
-
<mat-option [value]="null">
|
|
4049
|
-
<mat-option value="raised">
|
|
4050
|
-
<mat-option value="stroked">
|
|
4051
|
-
<mat-option value="flat">
|
|
4052
|
-
<mat-option value="fab">
|
|
4373
|
+
<mat-option [value]="null">{{ tx('editor.actions.variant.default', 'Default') }}</mat-option>
|
|
4374
|
+
<mat-option value="raised">{{ tx('editor.actions.variant.raised', 'Raised') }}</mat-option>
|
|
4375
|
+
<mat-option value="stroked">{{ tx('editor.actions.variant.stroked', 'Stroked') }}</mat-option>
|
|
4376
|
+
<mat-option value="flat">{{ tx('editor.actions.variant.flat', 'Flat') }}</mat-option>
|
|
4377
|
+
<mat-option value="fab">{{ tx('editor.actions.variant.fab', 'Floating') }}</mat-option>
|
|
4053
4378
|
</mat-select>
|
|
4054
4379
|
</mat-form-field>
|
|
4055
4380
|
<mat-form-field appearance="outline">
|
|
4056
|
-
<mat-label>
|
|
4381
|
+
<mat-label>{{ tx('editor.actions.field.color', 'Color') }}</mat-label>
|
|
4057
4382
|
<mat-select
|
|
4058
4383
|
[value]="action.color || null"
|
|
4059
4384
|
(selectionChange)="updateCustomActionField(action, 'color', $event.value)"
|
|
4060
4385
|
>
|
|
4061
|
-
<mat-option [value]="null">
|
|
4062
|
-
<mat-option value="primary">Primary</mat-option>
|
|
4063
|
-
<mat-option value="accent">Accent</mat-option>
|
|
4064
|
-
<mat-option value="warn">Warn</mat-option>
|
|
4065
|
-
<mat-option value="basic">Basic</mat-option>
|
|
4386
|
+
<mat-option [value]="null">{{ tx('editor.actions.color.default', 'Default') }}</mat-option>
|
|
4387
|
+
<mat-option value="primary">{{ tx('editor.actions.color.primary', 'Primary') }}</mat-option>
|
|
4388
|
+
<mat-option value="accent">{{ tx('editor.actions.color.accent', 'Accent') }}</mat-option>
|
|
4389
|
+
<mat-option value="warn">{{ tx('editor.actions.color.warn', 'Warn') }}</mat-option>
|
|
4390
|
+
<mat-option value="basic">{{ tx('editor.actions.color.basic', 'Basic') }}</mat-option>
|
|
4066
4391
|
</mat-select>
|
|
4067
4392
|
</mat-form-field>
|
|
4068
4393
|
<mat-form-field appearance="outline">
|
|
4069
|
-
<mat-label>
|
|
4394
|
+
<mat-label>{{ tx('editor.actions.field.shortcut', 'Shortcut') }}</mat-label>
|
|
4070
4395
|
<input
|
|
4071
4396
|
matInput
|
|
4072
4397
|
[value]="action.shortcut || ''"
|
|
@@ -4074,7 +4399,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4074
4399
|
/>
|
|
4075
4400
|
</mat-form-field>
|
|
4076
4401
|
<mat-form-field appearance="outline">
|
|
4077
|
-
<mat-label>Tooltip</mat-label>
|
|
4402
|
+
<mat-label>{{ tx('editor.actions.field.tooltip', 'Tooltip') }}</mat-label>
|
|
4078
4403
|
<input
|
|
4079
4404
|
matInput
|
|
4080
4405
|
[value]="action.tooltip || ''"
|
|
@@ -4085,31 +4410,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4085
4410
|
[checked]="action.visible !== false"
|
|
4086
4411
|
(change)="updateCustomActionField(action, 'visible', $event.checked)"
|
|
4087
4412
|
>
|
|
4088
|
-
|
|
4413
|
+
{{ tx('editor.actions.field.visible', 'Visible') }}
|
|
4089
4414
|
</mat-slide-toggle>
|
|
4090
4415
|
</div>
|
|
4091
4416
|
</div>
|
|
4092
4417
|
}
|
|
4093
4418
|
} @else {
|
|
4094
|
-
<p class="mf-empty">
|
|
4419
|
+
<p class="mf-empty">{{ tx('editor.actions.emptyCustom', 'No custom actions registered.') }}</p>
|
|
4095
4420
|
}
|
|
4096
4421
|
</div>
|
|
4097
4422
|
</section>
|
|
4098
4423
|
</div>
|
|
4099
4424
|
</mat-tab>
|
|
4100
4425
|
|
|
4101
|
-
<mat-tab label="
|
|
4426
|
+
<mat-tab [label]="tx('editor.tabs.messages', 'Messages')">
|
|
4102
4427
|
<div class="mf-tab">
|
|
4103
4428
|
<section class="mf-section">
|
|
4104
4429
|
<div class="mf-section__header">
|
|
4105
4430
|
<div>
|
|
4106
|
-
<h3>
|
|
4107
|
-
<p class="mf-help">
|
|
4431
|
+
<h3>{{ tx('editor.messages.defaultTitle', 'Default feedback') }}</h3>
|
|
4432
|
+
<p class="mf-help">{{ tx('editor.messages.defaultHelp', 'Success/error messages displayed by the host.') }}</p>
|
|
4108
4433
|
</div>
|
|
4109
4434
|
</div>
|
|
4110
4435
|
<div class="mf-messages-grid">
|
|
4111
4436
|
<mat-form-field appearance="outline">
|
|
4112
|
-
<mat-label>
|
|
4437
|
+
<mat-label>{{ tx('editor.messages.createSuccess', 'Create success') }}</mat-label>
|
|
4113
4438
|
<input
|
|
4114
4439
|
matInput
|
|
4115
4440
|
[value]="messagesModel.createRegistrySuccess || ''"
|
|
@@ -4117,7 +4442,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4117
4442
|
/>
|
|
4118
4443
|
</mat-form-field>
|
|
4119
4444
|
<mat-form-field appearance="outline">
|
|
4120
|
-
<mat-label>
|
|
4445
|
+
<mat-label>{{ tx('editor.messages.createError', 'Create error') }}</mat-label>
|
|
4121
4446
|
<input
|
|
4122
4447
|
matInput
|
|
4123
4448
|
[value]="messagesModel.createRegistryError || ''"
|
|
@@ -4125,7 +4450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4125
4450
|
/>
|
|
4126
4451
|
</mat-form-field>
|
|
4127
4452
|
<mat-form-field appearance="outline">
|
|
4128
|
-
<mat-label>
|
|
4453
|
+
<mat-label>{{ tx('editor.messages.updateSuccess', 'Update success') }}</mat-label>
|
|
4129
4454
|
<input
|
|
4130
4455
|
matInput
|
|
4131
4456
|
[value]="messagesModel.updateRegistrySuccess || ''"
|
|
@@ -4133,7 +4458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4133
4458
|
/>
|
|
4134
4459
|
</mat-form-field>
|
|
4135
4460
|
<mat-form-field appearance="outline">
|
|
4136
|
-
<mat-label>
|
|
4461
|
+
<mat-label>{{ tx('editor.messages.updateError', 'Update error') }}</mat-label>
|
|
4137
4462
|
<input
|
|
4138
4463
|
matInput
|
|
4139
4464
|
[value]="messagesModel.updateRegistryError || ''"
|
|
@@ -4146,13 +4471,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4146
4471
|
<section class="mf-section">
|
|
4147
4472
|
<div class="mf-section__header">
|
|
4148
4473
|
<div>
|
|
4149
|
-
<h3>
|
|
4150
|
-
<p class="mf-help">
|
|
4474
|
+
<h3>{{ tx('editor.messages.confirmationsTitle', 'Confirmations') }}</h3>
|
|
4475
|
+
<p class="mf-help">{{ tx('editor.messages.confirmationsHelp', 'Texts shown before critical actions.') }}</p>
|
|
4151
4476
|
</div>
|
|
4152
4477
|
</div>
|
|
4153
4478
|
<div class="mf-messages-grid">
|
|
4154
4479
|
<mat-form-field appearance="outline">
|
|
4155
|
-
<mat-label>
|
|
4480
|
+
<mat-label>{{ tx('editor.defaults.submit', 'Save') }}</mat-label>
|
|
4156
4481
|
<input
|
|
4157
4482
|
matInput
|
|
4158
4483
|
[value]="messagesModel.confirmations?.submit || ''"
|
|
@@ -4160,7 +4485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4160
4485
|
/>
|
|
4161
4486
|
</mat-form-field>
|
|
4162
4487
|
<mat-form-field appearance="outline">
|
|
4163
|
-
<mat-label>
|
|
4488
|
+
<mat-label>{{ tx('editor.defaults.cancel', 'Cancel') }}</mat-label>
|
|
4164
4489
|
<input
|
|
4165
4490
|
matInput
|
|
4166
4491
|
[value]="messagesModel.confirmations?.cancel || ''"
|
|
@@ -4168,7 +4493,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4168
4493
|
/>
|
|
4169
4494
|
</mat-form-field>
|
|
4170
4495
|
<mat-form-field appearance="outline">
|
|
4171
|
-
<mat-label>
|
|
4496
|
+
<mat-label>{{ tx('editor.defaults.reset', 'Reset') }}</mat-label>
|
|
4172
4497
|
<input
|
|
4173
4498
|
matInput
|
|
4174
4499
|
[value]="messagesModel.confirmations?.reset || ''"
|
|
@@ -4181,13 +4506,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4181
4506
|
<section class="mf-section">
|
|
4182
4507
|
<div class="mf-section__header">
|
|
4183
4508
|
<div>
|
|
4184
|
-
<h3>Loading</h3>
|
|
4185
|
-
<p class="mf-help">
|
|
4509
|
+
<h3>{{ tx('editor.messages.loadingTitle', 'Loading') }}</h3>
|
|
4510
|
+
<p class="mf-help">{{ tx('editor.messages.loadingHelp', 'Messages displayed during operations.') }}</p>
|
|
4186
4511
|
</div>
|
|
4187
4512
|
</div>
|
|
4188
4513
|
<div class="mf-messages-grid">
|
|
4189
4514
|
<mat-form-field appearance="outline">
|
|
4190
|
-
<mat-label>
|
|
4515
|
+
<mat-label>{{ tx('editor.defaults.submit', 'Save') }}</mat-label>
|
|
4191
4516
|
<input
|
|
4192
4517
|
matInput
|
|
4193
4518
|
[value]="messagesModel.loading?.submit || ''"
|
|
@@ -4195,7 +4520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4195
4520
|
/>
|
|
4196
4521
|
</mat-form-field>
|
|
4197
4522
|
<mat-form-field appearance="outline">
|
|
4198
|
-
<mat-label>
|
|
4523
|
+
<mat-label>{{ tx('editor.defaults.cancel', 'Cancel') }}</mat-label>
|
|
4199
4524
|
<input
|
|
4200
4525
|
matInput
|
|
4201
4526
|
[value]="messagesModel.loading?.cancel || ''"
|
|
@@ -4203,7 +4528,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4203
4528
|
/>
|
|
4204
4529
|
</mat-form-field>
|
|
4205
4530
|
<mat-form-field appearance="outline">
|
|
4206
|
-
<mat-label>
|
|
4531
|
+
<mat-label>{{ tx('editor.defaults.reset', 'Reset') }}</mat-label>
|
|
4207
4532
|
<input
|
|
4208
4533
|
matInput
|
|
4209
4534
|
[value]="messagesModel.loading?.reset || ''"
|
|
@@ -4216,8 +4541,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4216
4541
|
<section class="mf-section">
|
|
4217
4542
|
<div class="mf-section__header">
|
|
4218
4543
|
<div>
|
|
4219
|
-
<h3>
|
|
4220
|
-
<p class="mf-help">
|
|
4544
|
+
<h3>{{ tx('editor.messages.customTitle', 'Messages by custom action') }}</h3>
|
|
4545
|
+
<p class="mf-help">{{ tx('editor.messages.customHelp', 'Customize texts by action ID.') }}</p>
|
|
4221
4546
|
</div>
|
|
4222
4547
|
</div>
|
|
4223
4548
|
<div class="mf-custom-messages">
|
|
@@ -4227,7 +4552,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4227
4552
|
<div class="mf-custom-card__title">{{ action.label || action.id }}</div>
|
|
4228
4553
|
<div class="mf-custom-card__grid">
|
|
4229
4554
|
<mat-form-field appearance="outline">
|
|
4230
|
-
<mat-label>
|
|
4555
|
+
<mat-label>{{ tx('editor.messages.confirmationsTitle', 'Confirmations') }}</mat-label>
|
|
4231
4556
|
<input
|
|
4232
4557
|
matInput
|
|
4233
4558
|
[value]="messagesModel.customActions?.[action.id || '']?.confirmation || ''"
|
|
@@ -4235,7 +4560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4235
4560
|
/>
|
|
4236
4561
|
</mat-form-field>
|
|
4237
4562
|
<mat-form-field appearance="outline">
|
|
4238
|
-
<mat-label>
|
|
4563
|
+
<mat-label>{{ tx('editor.shared.success', 'Success') }}</mat-label>
|
|
4239
4564
|
<input
|
|
4240
4565
|
matInput
|
|
4241
4566
|
[value]="messagesModel.customActions?.[action.id || '']?.success || ''"
|
|
@@ -4243,7 +4568,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4243
4568
|
/>
|
|
4244
4569
|
</mat-form-field>
|
|
4245
4570
|
<mat-form-field appearance="outline">
|
|
4246
|
-
<mat-label>
|
|
4571
|
+
<mat-label>{{ tx('editor.shared.error', 'Error') }}</mat-label>
|
|
4247
4572
|
<input
|
|
4248
4573
|
matInput
|
|
4249
4574
|
[value]="messagesModel.customActions?.[action.id || '']?.error || ''"
|
|
@@ -4254,64 +4579,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4254
4579
|
</div>
|
|
4255
4580
|
}
|
|
4256
4581
|
} @else {
|
|
4257
|
-
<p class="mf-empty">
|
|
4582
|
+
<p class="mf-empty">{{ tx('editor.messages.emptyCustom', 'Register custom actions to configure specific messages.') }}</p>
|
|
4258
4583
|
}
|
|
4259
4584
|
</div>
|
|
4260
4585
|
</section>
|
|
4261
4586
|
</div>
|
|
4262
4587
|
</mat-tab>
|
|
4263
4588
|
|
|
4264
|
-
<mat-tab label="
|
|
4589
|
+
<mat-tab [label]="tx('editor.tabs.behavior', 'Behavior')">
|
|
4265
4590
|
<div class="mf-tab">
|
|
4266
4591
|
<section class="mf-section">
|
|
4267
4592
|
<div class="mf-section__header">
|
|
4268
4593
|
<div>
|
|
4269
|
-
<h3>
|
|
4270
|
-
<p class="mf-help">
|
|
4594
|
+
<h3>{{ tx('editor.behavior.title', 'Form behavior') }}</h3>
|
|
4595
|
+
<p class="mf-help">{{ tx('editor.behavior.help', 'Preferences applied by the host or runtime.') }}</p>
|
|
4271
4596
|
</div>
|
|
4272
4597
|
</div>
|
|
4273
|
-
<div class="mf-note">
|
|
4598
|
+
<div class="mf-note">{{ tx('editor.behavior.note', 'These options are persisted in config; the host decides how to apply them.') }}</div>
|
|
4274
4599
|
<div class="mf-toggle-grid">
|
|
4275
4600
|
<mat-slide-toggle
|
|
4276
4601
|
[checked]="!!behaviorModel.confirmOnUnsavedChanges"
|
|
4277
4602
|
(change)="updateBehavior('confirmOnUnsavedChanges', $event.checked)"
|
|
4278
4603
|
>
|
|
4279
|
-
|
|
4604
|
+
{{ tx('editor.behavior.confirmUnsaved', 'Confirm unsaved changes before leaving') }}
|
|
4280
4605
|
</mat-slide-toggle>
|
|
4281
4606
|
<mat-slide-toggle
|
|
4282
4607
|
[checked]="!!behaviorModel.trackHistory"
|
|
4283
4608
|
(change)="updateBehavior('trackHistory', $event.checked)"
|
|
4284
4609
|
>
|
|
4285
|
-
|
|
4610
|
+
{{ tx('editor.behavior.trackHistory', 'Track change history') }}
|
|
4286
4611
|
</mat-slide-toggle>
|
|
4287
4612
|
<mat-slide-toggle
|
|
4288
4613
|
[checked]="!!behaviorModel.focusFirstError"
|
|
4289
4614
|
(change)="updateBehavior('focusFirstError', $event.checked)"
|
|
4290
4615
|
>
|
|
4291
|
-
|
|
4616
|
+
{{ tx('editor.behavior.focusFirstError', 'Focus the first error on submit') }}
|
|
4292
4617
|
</mat-slide-toggle>
|
|
4293
4618
|
<mat-slide-toggle
|
|
4294
4619
|
[checked]="!!behaviorModel.scrollToErrors"
|
|
4295
4620
|
(change)="updateBehavior('scrollToErrors', $event.checked)"
|
|
4296
4621
|
>
|
|
4297
|
-
|
|
4622
|
+
{{ tx('editor.behavior.scrollToErrors', 'Scroll to errors on submit') }}
|
|
4298
4623
|
</mat-slide-toggle>
|
|
4299
4624
|
<mat-slide-toggle
|
|
4300
4625
|
[checked]="!!behaviorModel.clearAfterSave"
|
|
4301
4626
|
(change)="updateBehavior('clearAfterSave', $event.checked)"
|
|
4302
4627
|
>
|
|
4303
|
-
|
|
4628
|
+
{{ tx('editor.behavior.clearAfterSave', 'Clear form after save') }}
|
|
4304
4629
|
</mat-slide-toggle>
|
|
4305
4630
|
<mat-slide-toggle
|
|
4306
4631
|
[checked]="!!behaviorModel.reactiveValidation"
|
|
4307
4632
|
(change)="updateBehavior('reactiveValidation', $event.checked)"
|
|
4308
4633
|
>
|
|
4309
|
-
|
|
4634
|
+
{{ tx('editor.behavior.reactiveValidation', 'Reactive validation') }}
|
|
4310
4635
|
</mat-slide-toggle>
|
|
4311
4636
|
</div>
|
|
4312
4637
|
<div class="mf-actions-layout">
|
|
4313
4638
|
<mat-form-field appearance="outline">
|
|
4314
|
-
<mat-label>
|
|
4639
|
+
<mat-label>{{ tx('editor.behavior.redirectAfterSave', 'Redirect after save (URL)') }}</mat-label>
|
|
4315
4640
|
<input
|
|
4316
4641
|
matInput
|
|
4317
4642
|
[value]="behaviorModel.redirectAfterSave || ''"
|
|
@@ -4319,7 +4644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4319
4644
|
/>
|
|
4320
4645
|
</mat-form-field>
|
|
4321
4646
|
<mat-form-field appearance="outline">
|
|
4322
|
-
<mat-label>
|
|
4647
|
+
<mat-label>{{ tx('editor.behavior.reactiveValidationDebounce', 'Reactive validation debounce (ms)') }}</mat-label>
|
|
4323
4648
|
<input
|
|
4324
4649
|
matInput
|
|
4325
4650
|
type="number"
|
|
@@ -4333,19 +4658,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4333
4658
|
</div>
|
|
4334
4659
|
</mat-tab>
|
|
4335
4660
|
|
|
4336
|
-
<mat-tab label="
|
|
4661
|
+
<mat-tab [label]="tx('editor.tabs.hints', 'Hints')">
|
|
4337
4662
|
<div class="mf-tab">
|
|
4338
4663
|
<section class="mf-section">
|
|
4339
4664
|
<div class="mf-section__header">
|
|
4340
4665
|
<div>
|
|
4341
|
-
<h3>
|
|
4342
|
-
<p class="mf-help">
|
|
4666
|
+
<h3>{{ tx('editor.hints.modeTitle', 'Mode messages') }}</h3>
|
|
4667
|
+
<p class="mf-help">{{ tx('editor.hints.modeHelp', 'Auxiliary texts displayed by the host.') }}</p>
|
|
4343
4668
|
</div>
|
|
4344
4669
|
</div>
|
|
4345
|
-
<div class="mf-note"
|
|
4670
|
+
<div class="mf-note">{{ tx('editor.hints.modeNote', 'Useful for i18n and user guidance.') }}</div>
|
|
4346
4671
|
<div class="mf-messages-grid">
|
|
4347
4672
|
<mat-form-field appearance="outline">
|
|
4348
|
-
<mat-label>
|
|
4673
|
+
<mat-label>{{ tx('editor.hints.mode.create', 'Create') }}</mat-label>
|
|
4349
4674
|
<input
|
|
4350
4675
|
matInput
|
|
4351
4676
|
[value]="hintsModel.dataModes.create"
|
|
@@ -4353,7 +4678,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4353
4678
|
/>
|
|
4354
4679
|
</mat-form-field>
|
|
4355
4680
|
<mat-form-field appearance="outline">
|
|
4356
|
-
<mat-label>
|
|
4681
|
+
<mat-label>{{ tx('editor.hints.mode.edit', 'Edit') }}</mat-label>
|
|
4357
4682
|
<input
|
|
4358
4683
|
matInput
|
|
4359
4684
|
[value]="hintsModel.dataModes.edit"
|
|
@@ -4361,7 +4686,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4361
4686
|
/>
|
|
4362
4687
|
</mat-form-field>
|
|
4363
4688
|
<mat-form-field appearance="outline">
|
|
4364
|
-
<mat-label>
|
|
4689
|
+
<mat-label>{{ tx('editor.hints.mode.view', 'View') }}</mat-label>
|
|
4365
4690
|
<input
|
|
4366
4691
|
matInput
|
|
4367
4692
|
[value]="hintsModel.dataModes.view"
|
|
@@ -4374,13 +4699,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4374
4699
|
<section class="mf-section">
|
|
4375
4700
|
<div class="mf-section__header">
|
|
4376
4701
|
<div>
|
|
4377
|
-
<h3>
|
|
4378
|
-
<p class="mf-help">
|
|
4702
|
+
<h3>{{ tx('editor.hints.uiTitle', 'UI hints') }}</h3>
|
|
4703
|
+
<p class="mf-help">{{ tx('editor.hints.uiHelp', 'Contextual help for form states.') }}</p>
|
|
4379
4704
|
</div>
|
|
4380
4705
|
</div>
|
|
4381
4706
|
<div class="mf-messages-grid">
|
|
4382
4707
|
<mat-form-field appearance="outline">
|
|
4383
|
-
<mat-label>
|
|
4708
|
+
<mat-label>{{ tx('editor.hints.ui.presentation', 'Presentation') }}</mat-label>
|
|
4384
4709
|
<textarea
|
|
4385
4710
|
matInput
|
|
4386
4711
|
rows="2"
|
|
@@ -4389,7 +4714,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4389
4714
|
></textarea>
|
|
4390
4715
|
</mat-form-field>
|
|
4391
4716
|
<mat-form-field appearance="outline">
|
|
4392
|
-
<mat-label>
|
|
4717
|
+
<mat-label>{{ tx('editor.hints.ui.readonly', 'Read-only') }}</mat-label>
|
|
4393
4718
|
<textarea
|
|
4394
4719
|
matInput
|
|
4395
4720
|
rows="2"
|
|
@@ -4398,7 +4723,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4398
4723
|
></textarea>
|
|
4399
4724
|
</mat-form-field>
|
|
4400
4725
|
<mat-form-field appearance="outline">
|
|
4401
|
-
<mat-label>
|
|
4726
|
+
<mat-label>{{ tx('editor.hints.ui.disabled', 'Disabled') }}</mat-label>
|
|
4402
4727
|
<textarea
|
|
4403
4728
|
matInput
|
|
4404
4729
|
rows="2"
|
|
@@ -4407,7 +4732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4407
4732
|
></textarea>
|
|
4408
4733
|
</mat-form-field>
|
|
4409
4734
|
<mat-form-field appearance="outline">
|
|
4410
|
-
<mat-label>
|
|
4735
|
+
<mat-label>{{ tx('editor.hints.ui.visible', 'Visible') }}</mat-label>
|
|
4411
4736
|
<textarea
|
|
4412
4737
|
matInput
|
|
4413
4738
|
rows="2"
|
|
@@ -4420,24 +4745,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4420
4745
|
</div>
|
|
4421
4746
|
</mat-tab>
|
|
4422
4747
|
|
|
4423
|
-
<mat-tab label="Hooks">
|
|
4748
|
+
<mat-tab [label]="tx('editor.tabs.hooks', 'Hooks')">
|
|
4424
4749
|
<div class="mf-tab">
|
|
4425
4750
|
<section class="mf-section">
|
|
4426
4751
|
<div class="mf-section__header">
|
|
4427
4752
|
<div>
|
|
4428
|
-
<h3>
|
|
4429
|
-
<p class="mf-help">
|
|
4753
|
+
<h3>{{ tx('editor.hooks.title', 'Lifecycle hooks') }}</h3>
|
|
4754
|
+
<p class="mf-help">{{ tx('editor.hooks.help', 'Define automated actions by stage.') }}</p>
|
|
4430
4755
|
</div>
|
|
4431
4756
|
<div class="mf-actions-row">
|
|
4432
4757
|
<button mat-stroked-button type="button" (click)="resetHooks()">
|
|
4433
|
-
|
|
4758
|
+
{{ tx('editor.hooks.reset', 'Reset') }}
|
|
4434
4759
|
</button>
|
|
4435
4760
|
<button mat-flat-button color="primary" type="button" (click)="applyHooks()">
|
|
4436
|
-
|
|
4761
|
+
{{ tx('editor.hooks.apply', 'Apply hooks') }}
|
|
4437
4762
|
</button>
|
|
4438
4763
|
</div>
|
|
4439
4764
|
</div>
|
|
4440
|
-
<div class="mf-note">
|
|
4765
|
+
<div class="mf-note">{{ tx('editor.hooks.note', 'Runs only if the host registers available hooks.') }}</div>
|
|
4441
4766
|
<div class="mf-hooks-grid">
|
|
4442
4767
|
@for (stage of hookStages; track stage) {
|
|
4443
4768
|
<mat-form-field appearance="outline" class="mf-hook-field">
|
|
@@ -4447,14 +4772,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4447
4772
|
rows="4"
|
|
4448
4773
|
[value]="hooksText[stage]"
|
|
4449
4774
|
(input)="onHookTextChange(stage, $any($event.target).value)"
|
|
4450
|
-
placeholder=
|
|
4775
|
+
[placeholder]="hookPlaceholder()"
|
|
4451
4776
|
></textarea>
|
|
4452
4777
|
<button
|
|
4453
4778
|
mat-icon-button
|
|
4454
4779
|
matSuffix
|
|
4455
4780
|
class="help-icon-button"
|
|
4456
4781
|
type="button"
|
|
4457
|
-
[matTooltip]="
|
|
4782
|
+
[matTooltip]="hookTooltip(stage)"
|
|
4458
4783
|
matTooltipPosition="above"
|
|
4459
4784
|
>
|
|
4460
4785
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -4469,36 +4794,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4469
4794
|
</div>
|
|
4470
4795
|
</mat-tab>
|
|
4471
4796
|
|
|
4472
|
-
<mat-tab label="
|
|
4797
|
+
<mat-tab [label]="tx('editor.tabs.rules', 'Rules')">
|
|
4473
4798
|
<div class="mf-tab">
|
|
4474
4799
|
<section class="mf-section">
|
|
4475
4800
|
<div class="mf-section__header">
|
|
4476
4801
|
<div>
|
|
4477
|
-
<h3>
|
|
4478
|
-
<p class="mf-help">
|
|
4802
|
+
<h3>{{ tx('editor.rules.title', 'Layout rules') }}</h3>
|
|
4803
|
+
<p class="mf-help">{{ tx('editor.rules.help', 'Advanced rules for visibility and behavior.') }}</p>
|
|
4479
4804
|
</div>
|
|
4480
4805
|
<div class="mf-actions-row">
|
|
4481
4806
|
<button mat-flat-button color="primary" type="button" (click)="applyRules()">
|
|
4482
|
-
|
|
4807
|
+
{{ tx('editor.rules.apply', 'Apply rules') }}
|
|
4483
4808
|
</button>
|
|
4484
4809
|
</div>
|
|
4485
4810
|
</div>
|
|
4486
|
-
<div class="mf-note">
|
|
4811
|
+
<div class="mf-note">{{ tx('editor.rules.note', 'Persisted in config; execution depends on the host.') }}</div>
|
|
4487
4812
|
<mat-form-field appearance="outline">
|
|
4488
|
-
<mat-label>formRules (JSON)</mat-label>
|
|
4813
|
+
<mat-label>{{ tx('editor.rules.formRulesLabel', 'formRules (JSON)') }}</mat-label>
|
|
4489
4814
|
<textarea
|
|
4490
4815
|
matInput
|
|
4491
4816
|
rows="6"
|
|
4492
4817
|
[value]="formRulesText"
|
|
4493
4818
|
(input)="onRulesTextChange($any($event.target).value)"
|
|
4494
|
-
placeholder=
|
|
4819
|
+
[placeholder]="formRulesPlaceholder()"
|
|
4495
4820
|
></textarea>
|
|
4496
4821
|
<button
|
|
4497
4822
|
mat-icon-button
|
|
4498
4823
|
matSuffix
|
|
4499
4824
|
class="help-icon-button"
|
|
4500
4825
|
type="button"
|
|
4501
|
-
[matTooltip]="'
|
|
4826
|
+
[matTooltip]="tx('editor.rules.tooltip', 'JSON array with rules (id, targetType, targets, effect).')"
|
|
4502
4827
|
matTooltipPosition="above"
|
|
4503
4828
|
>
|
|
4504
4829
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -4508,7 +4833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4508
4833
|
}
|
|
4509
4834
|
</mat-form-field>
|
|
4510
4835
|
<mat-form-field appearance="outline">
|
|
4511
|
-
<mat-label>formRulesState (JSON)</mat-label>
|
|
4836
|
+
<mat-label>{{ tx('editor.rules.formRulesStateLabel', 'formRulesState (JSON)') }}</mat-label>
|
|
4512
4837
|
<textarea
|
|
4513
4838
|
matInput
|
|
4514
4839
|
rows="6"
|
|
@@ -4521,7 +4846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4521
4846
|
matSuffix
|
|
4522
4847
|
class="help-icon-button"
|
|
4523
4848
|
type="button"
|
|
4524
|
-
[matTooltip]="'
|
|
4849
|
+
[matTooltip]="tx('editor.rules.stateTooltip', 'Raw state from the visual editor (optional).')"
|
|
4525
4850
|
matTooltipPosition="above"
|
|
4526
4851
|
>
|
|
4527
4852
|
<mat-icon>help_outline</mat-icon>
|
|
@@ -4532,23 +4857,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4532
4857
|
</mat-form-field>
|
|
4533
4858
|
<div class="mf-actions-row mf-actions-row--end">
|
|
4534
4859
|
<button mat-flat-button color="primary" type="button" (click)="applyRules()">
|
|
4535
|
-
|
|
4860
|
+
{{ tx('editor.rules.apply', 'Apply rules') }}
|
|
4536
4861
|
</button>
|
|
4537
4862
|
</div>
|
|
4538
4863
|
</section>
|
|
4539
4864
|
</div>
|
|
4540
4865
|
</mat-tab>
|
|
4541
4866
|
|
|
4542
|
-
<mat-tab label="
|
|
4867
|
+
<mat-tab [label]="tx('editor.tabs.cascade', 'Cascades')">
|
|
4543
4868
|
<div class="mf-tab">
|
|
4544
4869
|
<section class="mf-section mf-section--full">
|
|
4545
4870
|
<div class="mf-section__header">
|
|
4546
4871
|
<div>
|
|
4547
|
-
<h3>
|
|
4548
|
-
<p class="mf-help">Configure
|
|
4872
|
+
<h3>{{ tx('editor.cascade.title', 'Field dependencies') }}</h3>
|
|
4873
|
+
<p class="mf-help">{{ tx('editor.cascade.help', 'Configure native cascades based on metadata.') }}</p>
|
|
4549
4874
|
</div>
|
|
4550
4875
|
</div>
|
|
4551
|
-
<div class="mf-note">
|
|
4876
|
+
<div class="mf-note">{{ tx('editor.cascade.note', 'Changes update metadata and are saved in the draft.') }}</div>
|
|
4552
4877
|
<praxis-cascade-manager-tab
|
|
4553
4878
|
[fields]="cascadeFields"
|
|
4554
4879
|
(apply)="applyCascadePatch($event)"
|
|
@@ -4567,9 +4892,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
4567
4892
|
args: [SETTINGS_PANEL_REF]
|
|
4568
4893
|
}] }] });
|
|
4569
4894
|
const DEFAULT_ACTIONS = {
|
|
4570
|
-
submit: makeAction({ id: 'submit', label: '
|
|
4571
|
-
cancel: makeAction({ id: 'cancel', label: '
|
|
4572
|
-
reset: makeAction({ id: 'reset', label: '
|
|
4895
|
+
submit: makeAction({ id: 'submit', label: 'Save', visible: true, type: 'submit', color: 'primary' }),
|
|
4896
|
+
cancel: makeAction({ id: 'cancel', label: 'Cancel', visible: false, type: 'button' }),
|
|
4897
|
+
reset: makeAction({ id: 'reset', label: 'Reset', visible: true, type: 'reset' }),
|
|
4573
4898
|
custom: [],
|
|
4574
4899
|
position: 'right',
|
|
4575
4900
|
orientation: 'horizontal',
|
|
@@ -4579,7 +4904,7 @@ function makeAction(action, index) {
|
|
|
4579
4904
|
const fallbackId = typeof index === 'number' ? `custom-${index + 1}` : 'action';
|
|
4580
4905
|
return {
|
|
4581
4906
|
id: action.id ?? fallbackId,
|
|
4582
|
-
label: action.label ?? '
|
|
4907
|
+
label: action.label ?? 'Action',
|
|
4583
4908
|
visible: action.visible !== false,
|
|
4584
4909
|
type: action.type ?? 'button',
|
|
4585
4910
|
color: action.color,
|
|
@@ -5043,4 +5368,3 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
5043
5368
|
*/
|
|
5044
5369
|
|
|
5045
5370
|
export { MANUAL_FORM_AI_CAPABILITIES, MANUAL_FORM_CONSTRUCTOR_TO_CONTROL_TYPE, MANUAL_FORM_SELECTOR_TO_CONTROL_TYPE, ManualFieldDirective, ManualFieldEditorOnDblclickDirective, ManualFieldKeyService, ManualFieldMetadataBridgeService, ManualFormActionsComponent, ManualFormComponent, ManualFormConfigEditorComponent, ManualFormDocExampleComponent, ManualFormDocExampleShowcaseComponent, ManualFormHeaderComponent, ManualFormInstance, ManualFormInstanceFactory, createManualFormSeed, toFieldMetadataMap };
|
|
5046
|
-
//# sourceMappingURL=praxisui-manual-form.mjs.map
|