diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/ReservedProperties.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/ReservedProperties.java index 4fe402686a..9e1a49ea24 100644 --- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/ReservedProperties.java +++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/ReservedProperties.java @@ -176,6 +176,8 @@ private ReservedProperties() { public static final String FD_DRAFT_ID = "fd:draftId"; + public static final String PN_CQ_ANNOTATIONS = "cq:annotations"; + // Begin: Form submission related properties public static final String FD_SUBMIT_PROPERTIES = "fd:submit"; public static final String PN_SUBMIT_ACTION_TYPE = "actionType"; diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3.java index 5438940599..20ed3556c7 100644 --- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3.java +++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3.java @@ -18,11 +18,11 @@ package com.adobe.cq.forms.core.components.internal.models.v3.form; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Optional; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; @@ -70,14 +70,18 @@ public String getDragDropText() { @Override public List getAcceptExtensions() { - // adding . in front of the accept extensions - if (acceptExtensions != null) { - for (int i = 0; i < acceptExtensions.length; i++) { - acceptExtensions[i] = "." + acceptExtensions[i]; - } + if (acceptExtensions == null) { + return Collections.emptyList(); } - return Optional.ofNullable(acceptExtensions) - .map(Arrays::asList) - .orElse(Collections.emptyList()); + return Arrays.stream(acceptExtensions) + .map(ext -> "." + ext) + .collect(java.util.stream.Collectors.toList()); + } + + @Override + public List getAccept() { + List combined = new ArrayList<>(super.getAccept()); + combined.addAll(getAcceptExtensions()); // adds .pdf, .docx etc. + return combined; } } diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractCheckboxImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractCheckboxImpl.java index 6ea1c9dfac..e159eb3b4f 100644 --- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractCheckboxImpl.java +++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractCheckboxImpl.java @@ -46,7 +46,11 @@ public void initBaseCheckboxModel() { checkedValue = String.valueOf(getEnums()[0]); uncheckedValue = getEnums().length > 1 ? String.valueOf(getEnums()[1]) : null; } - enums = (checkedValue != null) ? (Boolean.TRUE.equals(enableUncheckedValue)) ? new String[] { checkedValue, uncheckedValue } + // Guard against null uncheckedValue: when enableUncheckedValue is true the JCR property + // may be absent (e.g. because the push mechanism skipped an empty-string value), which + // would put null into the enum array and crash the runtime on .toString() at init time. + String safeUncheckedValue = uncheckedValue != null ? uncheckedValue : ""; + enums = (checkedValue != null) ? (Boolean.TRUE.equals(enableUncheckedValue)) ? new String[] { checkedValue, safeUncheckedValue } : new String[] { checkedValue } : null; } diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java index cee76ce602..cbaa589879 100644 --- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java +++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java @@ -314,6 +314,8 @@ protected boolean getEditMode() { public static final String CUSTOM_RULE_PROPERTY_WRAPPER = "fd:rules"; + public static final String CUSTOM_ANNOTATIONS_PROPERTY_WRAPPER = "cq:annotations"; + /** * Predicate to check if a map entry is non empty * return true if and only if @@ -337,6 +339,10 @@ protected boolean getEditMode() { if (!getDorProperties().isEmpty()) { properties.put(CUSTOM_DOR_PROPERTY_WRAPPER, getDorProperties()); } + Map annotations = getCqAnnotations(); + if (annotations != null) { + properties.put(CUSTOM_ANNOTATIONS_PROPERTY_WRAPPER, annotations); + } properties.put(CUSTOM_JCR_PATH_PROPERTY_WRAPPER, getPath()); if (isAuthorMode(request) || FormConstants.CHANNEL_PRINT.equals(this.channel)) { Map rulesProperties = getRulesProperties(); @@ -740,4 +746,33 @@ public Map getDorContainer() { return null; } + /** + * Returns the reviewer annotations stored under the component's {@code cq:annotations} child resource, + * keyed by annotation node name. Scoped to the print channel; returns null when no annotations exist + * so callers can omit the property. + */ + @JsonIgnore + private Map getCqAnnotations() { + if (!FormConstants.CHANNEL_PRINT.equals(this.channel) || resource == null) { + return null; + } + Resource annotationsResource = resource.getChild(CUSTOM_ANNOTATIONS_PROPERTY_WRAPPER); + if (annotationsResource == null) { + return null; + } + Map result = new LinkedHashMap<>(); + for (Resource child : annotationsResource.getChildren()) { + ValueMap vm = child.getValueMap(); + Map ann = vm.entrySet().stream() + .filter(e -> isAllowedType(e.getValue()) + && !e.getKey().startsWith("jcr:") + && !e.getKey().startsWith("sling:")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new)); + if (!ann.isEmpty()) { + result.put(child.getName(), ann); + } + } + return result.isEmpty() ? null : result; + } + } diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/CheckBoxImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/CheckBoxImplTest.java index a03844aee0..234ecc34be 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/CheckBoxImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/CheckBoxImplTest.java @@ -58,6 +58,7 @@ public class CheckBoxImplTest { private static final String PATH_CHECKBOX_ENABLEUNCHECKEDOFF = CONTENT_ROOT + "/checkbox-enableUncheckedValueFalse"; private static final String PATH_CHECKBOX_WITHOUT_FIELDTYPE = CONTENT_ROOT + "/checkbox-without-fieldtype"; + private static final String PATH_CHECKBOX_ENABLEUNCHECKED_MISSING = CONTENT_ROOT + "/checkbox-enableUncheckedValueMissingFromJcr"; private final AemContext context = FormsCoreComponentTestContext.newAemContext(); @BeforeEach @@ -350,6 +351,15 @@ void shouldOnlyHaveOnEnumIfEnableUncheckedValueOff() { assertArrayEquals(new String[] { "on" }, checkbox.getEnums()); } + @Test + void shouldUseEmptyStringWhenUncheckedValueMissingFromJcr() { + // Regression: when enableUncheckedValue=true but the uncheckedValue JCR property is absent + // (e.g. because the content push mechanism skipped an empty-string value), the enum array + // must not contain null — null.toString() in the AFB runtime crashes the form at init time. + CheckBox checkbox = getCheckBoxUnderTest(PATH_CHECKBOX_ENABLEUNCHECKED_MISSING); + assertArrayEquals(new String[] { ".", "" }, checkbox.getEnums()); + } + private CheckBox getCheckBoxUnderTest(String resourcePath) { context.currentResource(resourcePath); MockSlingHttpServletRequest request = context.request(); diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3Test.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3Test.java index 30aff48d5c..b0a4478c95 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3Test.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v3/form/FileInputImplV3Test.java @@ -262,7 +262,7 @@ void testGetMaxFileSize() { @Test void testGetAccept() { FileInput fileInput = Utils.getComponentUnderTest(PATH_FILEINPUT_CUSTOMIZED, FileInput.class, context); - assertThat(Arrays.asList("audio/*", "video/*", "image/*"), is(fileInput.getAccept())); + assertThat(Arrays.asList("audio/*", "video/*", "image/*", ".jpg", ".png"), is(fileInput.getAccept())); FileInput fileInputMock = Mockito.mock(FileInput.class); Mockito.when(fileInputMock.getAccept()).thenCallRealMethod(); assertThat(FileInput.DEFAULT_ACCEPT, is(fileInputMock.getAccept())); diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImplTest.java index 9e7f0579c3..4d93a7c50e 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImplTest.java @@ -57,6 +57,8 @@ public class AbstractFormComponentImplTest { private static final String PATH_COMPONENT_WITH_INVALID_XFA_SCRIPTS = CONTENT_ROOT + "/xfacomponentinvalid"; private static final String PATH_COMPONENT_WITH_NO_XFA_SCRIPTS = CONTENT_ROOT + "/xfacomponentnone"; private static final String PATH_COMPONENT_WITH_RULES = CONTENT_ROOT + "/textinputWithPrintRule"; + private static final String PATH_COMPONENT_WITH_PRINT_ANNOTATIONS = CONTENT_ROOT + "/textinputWithPrintAnnotations"; + private static final String PATH_COMPONENT_WITH_EMPTY_ANNOTATIONS = CONTENT_ROOT + "/textinputWithEmptyAnnotations"; private static final String AF_PATH = "/content/forms/af/testAf"; private static final String PAGE_PATH = "/content/testPage"; @@ -273,6 +275,124 @@ public void testPrintChannelRule() { assertNotNull(formReadyRule); } + @Test + public void testPrintChannelAnnotationsExcludedForWebChannel() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "web"); + Map properties = abstractFormComponentImpl.getProperties(); + assertNull(properties.get("cq:annotations"), + "cq:annotations should not appear for non-print channel"); + } + + @Test + public void testPrintChannelAnnotationsIncluded() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + Map annotations = (Map) properties.get("cq:annotations"); + assertNotNull(annotations, "cq:annotations should appear for print channel"); + Map annotation = (Map) annotations.get("annotation-1"); + assertNotNull(annotation); + assertEquals("review note", annotation.get("text")); + } + + @Test + public void testAnnotationPropertiesIncludeAllowedTypes() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + Map annotations = (Map) properties.get("cq:annotations"); + assertNotNull(annotations); + Map annotation = (Map) annotations.get("annotation-1"); + assertNotNull(annotation); + // String and Long + assertEquals("review note", annotation.get("text")); + assertEquals(11L, annotation.get("x")); + assertEquals(22L, annotation.get("y")); + // Boolean + assertEquals(Boolean.FALSE, annotation.get("resolved")); + // String[] + Object tags = annotation.get("tags"); + assertNotNull(tags); + assertTrue(tags instanceof String[], "tags should be exported as String[]"); + assertEquals(2, ((String[]) tags).length); + } + + @Test + public void testAnnotationPropertiesExcludeJcrAndSlingPrefixes() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + Map annotations = (Map) properties.get("cq:annotations"); + assertNotNull(annotations); + Map annotation = (Map) annotations.get("annotation-1"); + assertNotNull(annotation); + assertNull(annotation.get("jcr:primaryType"), "jcr:primaryType must not leak into annotation output"); + assertNull(annotation.get("jcr:createdBy"), "jcr:createdBy must not leak into annotation output"); + assertNull(annotation.get("sling:resourceType"), "sling:* must not leak into annotation output"); + } + + @Test + public void testNoAnnotationsResource() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_NO_RULE); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + assertNull(properties.get("cq:annotations"), + "cq:annotations should not appear when no annotations resource exists"); + } + + @Test + public void testAnnotationsAllChildEntriesFilteredOut() { + // Child node contains only jcr:/sling: properties -> filtered map is empty, + // child is skipped, and overall annotations map ends up empty -> getProperties + // omits cq:annotations entirely. Covers the `!ann.isEmpty()` false branch and + // the `result.isEmpty() ? null` true branch in getCqAnnotations(). + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_EMPTY_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + assertNull(properties.get("cq:annotations"), + "cq:annotations should be omitted when every child has only jcr:/sling: properties"); + } + + @Test + public void testAnnotationsWithNullResourceAndPrintChannel() { + // channel=print but resource never set: must short-circuit and return null, + // not NPE. Covers the `resource == null` branch in getCqAnnotations(). + AbstractFormComponentImpl abstractFormComponentImpl = new AbstractFormComponentImpl(); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Method getCqAnnotations = Utils.getPrivateMethod(AbstractFormComponentImpl.class, "getCqAnnotations"); + try { + Object result = getCqAnnotations.invoke(abstractFormComponentImpl); + assertNull(result, "getCqAnnotations should return null when resource is null"); + } catch (Exception e) { + fail("getCqAnnotations should not throw when resource is null: " + e.getMessage()); + } + } + + @Test + public void testAnnotationsAbsentInDefaultWebChannel() { + // No channel set (defaults to non-print): annotations must not appear. + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Map properties = abstractFormComponentImpl.getProperties(); + assertNull(properties.get("cq:annotations"), + "cq:annotations should not appear when channel is not print"); + } + + @Test + public void testMultipleAnnotations() { + AbstractFormComponentImpl abstractFormComponentImpl = prepareTestClass(PATH_COMPONENT_WITH_PRINT_ANNOTATIONS); + Utils.setInternalState(abstractFormComponentImpl, "channel", "print"); + Map properties = abstractFormComponentImpl.getProperties(); + Map annotations = (Map) properties.get("cq:annotations"); + assertNotNull(annotations); + assertEquals(2, annotations.size(), "Should have 2 annotations"); + assertNotNull(annotations.get("annotation-1")); + assertNotNull(annotations.get("annotation-2")); + Map annotation2 = (Map) annotations.get("annotation-2"); + assertEquals("second review note", annotation2.get("text")); + assertEquals("resolved", annotation2.get("state")); + } + @Test public void testAssociateProperties() { Resource resource = Mockito.mock(Resource.class); @@ -283,6 +403,7 @@ public void testAssociateProperties() { ValueMap valueMap = new MockValueMap(resource); Mockito.doReturn(valueMap).when(resource).getValueMap(); Mockito.doReturn(null).when(resource).getChild("fd:dorContainer"); + Mockito.doReturn(null).when(resource).getChild("cq:annotations"); Resource associateResource = Mockito.mock(Resource.class); Mockito.doReturn(associateResource).when(resource).getChild("fd:associate"); Map properties = abstractFormComponentImpl.getProperties(); diff --git a/bundles/af-core/src/test/resources/form/checkbox/test-content.json b/bundles/af-core/src/test/resources/form/checkbox/test-content.json index 778507bcac..486d3a5eff 100644 --- a/bundles/af-core/src/test/resources/form/checkbox/test-content.json +++ b/bundles/af-core/src/test/resources/form/checkbox/test-content.json @@ -94,6 +94,16 @@ "jcr:primaryType": "nt:unstructured" } }, + "checkbox-enableUncheckedValueMissingFromJcr" : { + "jcr:primaryType": "nt:unstructured", + "sling:resourceType" : "core/fd/components/form/checkbox/v1/checkbox", + "name" : "abc", + "jcr:title" : "def", + "type" : "string", + "checkedValue": ".", + "enableUncheckedValue": true, + "fieldType": "checkbox" + }, "checkbox-without-fieldtype" : { "id": "checkbox-wo-fieldtype1", "jcr:primaryType": "nt:unstructured", diff --git a/bundles/af-core/src/test/resources/form/componentswithrule/test-content.json b/bundles/af-core/src/test/resources/form/componentswithrule/test-content.json index 49d0ccab46..f833afe238 100644 --- a/bundles/af-core/src/test/resources/form/componentswithrule/test-content.json +++ b/bundles/af-core/src/test/resources/form/componentswithrule/test-content.json @@ -65,5 +65,53 @@ "jcr:primaryType": "nt:unstructured", "fd:formReady": ["form Ready"] } + }, + "textinputWithPrintAnnotations": { + "jcr:primaryType": "nt:unstructured", + "name": "nameWithAnnotations", + "sling:resourceType": "forms-components-examples/components/form/textinput", + "fieldType": "text-input", + "fd:channel": "print", + "cq:annotations": { + "jcr:primaryType": "nt:unstructured", + "annotation-1": { + "jcr:primaryType": "nt:unstructured", + "jcr:createdBy": "admin", + "sling:resourceType": "cq/annotations", + "text": "review note", + "x": 11, + "y": 22, + "state": "open", + "reviewedBy": "icreviewer", + "reviewedAt": "2026-05-25T17:40:04.204Z", + "resolved": false, + "tags": ["urgent", "review"] + }, + "annotation-2": { + "jcr:primaryType": "nt:unstructured", + "text": "second review note", + "x": 100, + "y": 200, + "state": "resolved", + "reviewedBy": "icreviewer", + "reviewedAt": "2026-05-25T17:41:00.000Z", + "resolvedBy": "admin", + "resolvedAt": "2026-05-25T18:00:00.000Z" + } + } + }, + "textinputWithEmptyAnnotations": { + "jcr:primaryType": "nt:unstructured", + "name": "nameWithEmptyAnnotations", + "sling:resourceType": "forms-components-examples/components/form/textinput", + "fieldType": "text-input", + "fd:channel": "print", + "cq:annotations": { + "jcr:primaryType": "nt:unstructured", + "annotation-only-jcr": { + "jcr:primaryType": "nt:unstructured", + "jcr:createdBy": "admin" + } + } } } diff --git a/bundles/af-core/src/test/resources/form/fileinputv3/exporter-fileinput-customized.json b/bundles/af-core/src/test/resources/form/fileinputv3/exporter-fileinput-customized.json index 07f0d3be50..9ccef68b84 100644 --- a/bundles/af-core/src/test/resources/form/fileinputv3/exporter-fileinput-customized.json +++ b/bundles/af-core/src/test/resources/form/fileinputv3/exporter-fileinput-customized.json @@ -21,7 +21,9 @@ "accept": [ "audio/*", "video/*", - "image/*" + "image/*", + ".jpg", + ".png" ], "dataRef": "a.b", "events": { diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fileinput/fileinputv4/basic/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fileinput/fileinputv4/basic/.content.xml index cbac1049d2..fd4851bff2 100644 --- a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fileinput/fileinputv4/basic/.content.xml +++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fileinput/fileinputv4/basic/.content.xml @@ -103,6 +103,15 @@ maxFileSize="2" type="file[]" visible="{Boolean}true"/> + + + + + + diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/_cq_styleConfig/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/_cq_styleConfig/.content.xml index 057cbf08dc..41cd8f33f1 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/_cq_styleConfig/.content.xml +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/_cq_styleConfig/.content.xml @@ -23,25 +23,25 @@ jcr:primaryType="nt:unstructured" jcr:title="Label" id="af2_accordionlabel" - cssSelector=".cmp-accordion__label" + cssSelector=".cmp-accordion__label-container .cmp-accordion__label" longTitle="Accordion Label" propertySheet="/mnt/overlay/fd/af/components/stylePropertySheet/common"> + cssSelector=".cmp-accordion__label-container .cmp-accordion__label:hover"/> + cssSelector=".cmp-accordion__label-container .cmp-accordion__label:focus"/> @@ -49,15 +49,15 @@ + cssSelector=".cmp-accordion__label-container .cmp-accordion__questionmark:focus"/> + cssSelector=".cmp-accordion__label-container .cmp-accordion__questionmark:hover"/> + cssSelector=".cmp-accordion__label-container .cmp-accordion__questionmark:disabled"/> @@ -91,6 +91,15 @@ cssSelector=".cmp-accordion__longdescription" longTitle="Accordion Long Description" propertySheet="/mnt/overlay/fd/af/components/stylePropertySheet/common"> + + + + + @@ -200,6 +217,10 @@ jcr:primaryType="nt:unstructured" jcr:title="Hover" cssSelector=".cmp-accordion__panel:hover"/> + @@ -214,6 +235,30 @@ cssSelector=".cmp-accordion__item:hover"/> + + + + + + diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/actions/reset/v2/reset/_cq_styleConfig/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/actions/reset/v2/reset/_cq_styleConfig/.content.xml index 49cdbcb0b5..8138daa9c4 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/actions/reset/v2/reset/_cq_styleConfig/.content.xml +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/actions/reset/v2/reset/_cq_styleConfig/.content.xml @@ -3,6 +3,13 @@ jcr:primaryType="nt:unstructured" jcr:title="Button"> +