diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
index 5d7c410231..7e88f9a7a6 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
@@ -146,4 +146,7 @@ private FormConstants() {
/** The resource type for date time input field v1 */
public static final String RT_FD_FORM_DATETIME_V1 = RT_FD_FORM_PREFIX + "datetime/v1/datetime";
+ /** The resource type for Adobe Sign Block v1 */
+ public static final String RT_FD_FORM_ADOBE_SIGN_BLOCK_V1 = RT_FD_FORM_PREFIX + "adobesignblock/v1/adobesignblock";
+
}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/AdobeSignBlockImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/AdobeSignBlockImpl.java
new file mode 100644
index 0000000000..0d34545833
--- /dev/null
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/AdobeSignBlockImpl.java
@@ -0,0 +1,141 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Copyright 2026 Adobe
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+package com.adobe.cq.forms.core.components.internal.models.v1.form;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.Exporter;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy;
+import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
+
+import com.adobe.cq.export.json.ComponentExporter;
+import com.adobe.cq.export.json.ExporterConstants;
+import com.adobe.cq.forms.core.components.internal.form.FormConstants;
+import com.adobe.cq.forms.core.components.models.form.Base;
+import com.adobe.cq.forms.core.components.models.form.FieldType;
+import com.adobe.cq.forms.core.components.models.form.Text;
+import com.adobe.cq.forms.core.components.util.AbstractBaseImpl;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * Sling Model for the Adobe Sign Block core component.
+ *
+ *
+ * Extends {@link AbstractBaseImpl} (same base as all other form field components) so it participates correctly in
+ * form-model serialisation and test casting. Implements the {@link Text} interface — replicating the rich-text value
+ * and fieldType behaviour from {@link TextImpl} — while inheriting:
+ *
+ *
+ *
{@code getLabel()} from {@link AbstractBaseImpl}: builds a {@code LabelImpl} from {@code jcr:title} and
+ * {@code hideTitle}, putting the authored title into the component's JSON model so the form engine and Rules Engine can
+ * update it.
+ *
{@code getDataRef()} from {@link com.adobe.cq.forms.core.components.util.AbstractFormComponentImpl}: serialises
+ * the {@code dataRef} JCR property into the JSON model, wiring up the bind-reference backend.
+ *
+ */
+@Model(
+ adaptables = { SlingHttpServletRequest.class, Resource.class },
+ adapters = { Text.class, Base.class,
+ ComponentExporter.class },
+ resourceType = { FormConstants.RT_FD_FORM_ADOBE_SIGN_BLOCK_V1 })
+@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
+public class AdobeSignBlockImpl extends AbstractBaseImpl implements Text {
+
+ private static final Pattern ADOBE_SIGN_TAG_PATTERN = Pattern.compile("\\{\\{[*]?([^:]*)_es_:");
+
+ /**
+ * The Adobe Sign merge-tag markup (e.g. {@code
+ * {{fieldName_es_:signer1:signature}}}), computed client-side by editDialog.js reusing
+ * integration-adobesign's own dialog plugin ({@code getDomContentFromDialog()} /
+ * {@code ADOBESIGN_UTILS.getDomContent()}) from the included Type/Name/Options/etc. field set,
+ * rather than reimplemented here.
+ */
+ @ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL)
+ private String adobeSignFieldTag;
+
+ /**
+ * Combines the author's narrative {@code value} text - always authored as rich text, there is no
+ * plain-text mode for this field - with the client-computed {@link #adobeSignFieldTag}, so
+ * downstream DoR/agreement generation sees the same wire format it always has, regardless of how the
+ * field was authored. Never wrapped in an artificial {@code
} — the narrative can already contain
+ * its own block-level markup (lists, paragraphs), and nesting that inside a single forced {@code
}
+ * produces invalid HTML that corrupts the author-canvas DOM.
+ */
+ @Override
+ public String getValue() {
+ String tag = StringUtils.defaultString(adobeSignFieldTag);
+ String markup = StringUtils.isNotBlank(value) ? value + " " + tag : tag;
+ return translate("value", markup);
+ }
+
+ /**
+ * Always {@code true}: the Text field is always authored as rich text, and the rendered value
+ * always additionally contains the real (unescaped) placeholder markup above.
+ */
+ @Override
+ public boolean isRichText() {
+ return true;
+ }
+
+ /**
+ * Excluded from JSON; the rich-text content is surfaced via {@link #getValue()}.
+ */
+ @Override
+ @JsonIgnore
+ public String getText() {
+ return getValue();
+ }
+
+ @Override
+ public String getFieldType() {
+ return FieldType.ADOBE_SIGN_BLOCK.getValue();
+ }
+
+ /**
+ * Returns the names of Adobe Sign text-tag fields embedded in this block's HTML content
+ * (e.g. {@code {{Signature1_es_:signer1:signature}}} yields {@code "Signature1"}).
+ * Returns {@code null} when no text tags are present so the property is omitted from JSON.
+ */
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public String[] getAdobeSignFields() {
+ String blockValue = getValue();
+ if (blockValue != null && !blockValue.isEmpty()) {
+ List fieldNames = new ArrayList<>();
+ Set seen = new HashSet<>();
+ Matcher matcher = ADOBE_SIGN_TAG_PATTERN.matcher(blockValue);
+ while (matcher.find()) {
+ String fieldName = matcher.group(1);
+ if (seen.add(fieldName)) {
+ fieldNames.add(fieldName);
+ }
+ }
+ if (!fieldNames.isEmpty()) {
+ return fieldNames.toArray(new String[0]);
+ }
+ }
+ return null;
+ }
+}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FieldType.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FieldType.java
index afe215afd1..c704c82db1 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FieldType.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FieldType.java
@@ -30,6 +30,7 @@ public enum FieldType {
DROP_DOWN("drop-down"),
RADIO_GROUP("radio-group"),
PLAIN_TEXT("plain-text"),
+ ADOBE_SIGN_BLOCK("adobe-sign-block"),
CHECKBOX("checkbox"),
BUTTON("button"),
PANEL("panel"),
diff --git a/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/.content.xml b/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/.content.xml
new file mode 100644
index 0000000000..8dddf859a6
--- /dev/null
+++ b/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/.content.xml
@@ -0,0 +1,7 @@
+
+
diff --git a/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/_cq_template.xml b/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/_cq_template.xml
new file mode 100644
index 0000000000..92d274b6c9
--- /dev/null
+++ b/examples/ui.apps/src/main/content/jcr_root/apps/forms-components-examples/components/form/adobesignblock/_cq_template.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/it/content/src/main/content/jcr_root/conf/core-components-it/settings/wcm/policies/.content.xml b/it/content/src/main/content/jcr_root/conf/core-components-it/settings/wcm/policies/.content.xml
index f8a5146990..894d852ab6 100755
--- a/it/content/src/main/content/jcr_root/conf/core-components-it/settings/wcm/policies/.content.xml
+++ b/it/content/src/main/content/jcr_root/conf/core-components-it/settings/wcm/policies/.content.xml
@@ -12,7 +12,7 @@
jcr:primaryType="nt:unstructured"
jcr:title="Core Components Examples - Root"
sling:resourceType="wcm/core/components/policy/policy"
- components="[/libs/wcm/foundation/components/responsivegrid,group:Core Components Examples,group:.core-wcm,group:.core-wcm-form,group:Core Components Examples - Adaptive Form,group:Core Components Examples - Forms And Communications Portal]">
+ components="[/libs/wcm/foundation/components/responsivegrid,group:Core Components Examples,group:.core-wcm,group:.core-wcm-form,group:Core Components Examples - Adaptive Form,group:Core Components Examples - Forms And Communications Portal,group:Adobe Sign - Adaptive Form]">
+ components="[group:Core Components Examples - Adaptive Form,group:Core Components Examples - Forms And Communications Portal,group:Adobe Sign - Adaptive Form]">
diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/adobesignblock/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/adobesignblock/.content.xml
new file mode 100644
index 0000000000..d9e7865114
--- /dev/null
+++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/adobesignblock/.content.xml
@@ -0,0 +1,7 @@
+
+
diff --git a/ui.af.apps/pom.xml b/ui.af.apps/pom.xml
index 5436f5c38f..06727bba3a 100644
--- a/ui.af.apps/pom.xml
+++ b/ui.af.apps/pom.xml
@@ -172,6 +172,9 @@
**/node_modules/****/core.wcm.components.commons.datalayer.v1/**
+
+ **/core-forms-components-runtime-base/**
+ **/core-forms-components-runtime-base-xfa/**
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/.content.xml
new file mode 100644
index 0000000000..072a4151df
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/.content.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css.txt b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css.txt
new file mode 100644
index 0000000000..a012aae62c
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css.txt
@@ -0,0 +1,2 @@
+#base=css
+adobesignplaceholder.css
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css/adobesignplaceholder.css b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css/adobesignplaceholder.css
new file mode 100644
index 0000000000..cb18eb9fe2
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/css/adobesignplaceholder.css
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright 2026 Adobe
+ *
+ * Global Adobe Sign placeholder styles for the Forms v2 editor and in-place RTE.
+ * Matches foundation fd/afaddon/adobesign/common (guide.theme2.common).
+ * Must be global — RTE and authoring overlays are not under .cmp-adaptiveform-adobesignblock__value.
+ ******************************************************************************/
+
+[data-adobesigntype]::selection {
+ color: rgba(0, 0, 0, 0);
+}
+
+[data-adobesigntype]::-moz-selection {
+ color: rgba(0, 0, 0, 0);
+}
+
+[data-adobesigntype] {
+ width: 6rem;
+ display: inline-block;
+ color: rgba(0, 0, 0, 0);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+ margin-left: 0.5rem;
+ margin-right: 0.5rem;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+}
+
+[data-adobesigntype='radio'],
+[data-adobesigntype='checkbox'] {
+ border-bottom-width: 0;
+ background-repeat: no-repeat;
+ background-position: left center;
+ width: 3rem;
+ min-height: 10px;
+}
+
+[data-adobesigntype='radio'] {
+ background-image: url(../resources/images/radiobutton.svg);
+}
+
+[data-adobesigntype='checkbox'] {
+ background-image: url(../resources/images/checkbox.svg);
+}
+
+[data-adobesigntype='dropdown'] {
+ background-image: url(../resources/images/dropdown_chevron.svg);
+ background-repeat: no-repeat;
+ background-position: right center;
+}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/checkbox.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/checkbox.svg
new file mode 100644
index 0000000000..e8c5393ab9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/checkbox.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/dropdown_chevron.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/dropdown_chevron.svg
new file mode 100644
index 0000000000..e941f317a9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/dropdown_chevron.svg
@@ -0,0 +1,12 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/radiobutton.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/radiobutton.svg
new file mode 100644
index 0000000000..a440722174
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-adobesign-placeholder/resources/images/radiobutton.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-components-runtime-all/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-components-runtime-all/.content.xml
index c484806166..ebabdd80df 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-components-runtime-all/.content.xml
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/af-clientlibs/core-forms-components-runtime-all/.content.xml
@@ -5,4 +5,4 @@
cssProcessor="[default:none,min:none]"
jsProcessor="[default:none,min:none]"
categories="[core.forms.components.runtime.all]"
- embed="[core.forms.components.runtime.base,core.forms.components.container.v2.runtime,core.forms.components.datePicker.v1.runtime,core.forms.components.textinput.v1.runtime,core.forms.components.numberinput.v1.runtime,core.forms.components.panelcontainer.v1.runtime,core.forms.components.radiobutton.v2.runtime,core.forms.components.text.v1.runtime,core.forms.components.checkboxgroup.v1.runtime,core.forms.components.button.v1.runtime,core.forms.components.image.v1.runtime,core.forms.components.dropdown.v1.runtime,core.forms.components.fileinput.v4.runtime,core.forms.components.accordion.v1.runtime,core.forms.components.tabs.v1.runtime,core.forms.components.wizard.v1.runtime,core.forms.components.verticaltabs.v1.runtime,core.forms.components.recaptcha.v1.runtime,core.forms.components.checkbox.v1.runtime,core.forms.components.fragment.v1.runtime,core.forms.components.switch.v1.runtime,core.forms.components.termsandconditions.v1.runtime,core.forms.components.review.v1.runtime,core.forms.components.scribble.v1.runtime,core.forms.components.datetime.v1.runtime]"/>
+ embed="[core.forms.components.runtime.base,core.forms.components.container.v2.runtime,core.forms.components.datePicker.v1.runtime,core.forms.components.textinput.v1.runtime,core.forms.components.numberinput.v1.runtime,core.forms.components.panelcontainer.v1.runtime,core.forms.components.radiobutton.v2.runtime,core.forms.components.text.v1.runtime,core.forms.components.checkboxgroup.v1.runtime,core.forms.components.button.v1.runtime,core.forms.components.image.v1.runtime,core.forms.components.dropdown.v1.runtime,core.forms.components.fileinput.v4.runtime,core.forms.components.accordion.v1.runtime,core.forms.components.tabs.v1.runtime,core.forms.components.wizard.v1.runtime,core.forms.components.verticaltabs.v1.runtime,core.forms.components.recaptcha.v1.runtime,core.forms.components.checkbox.v1.runtime,core.forms.components.fragment.v1.runtime,core.forms.components.switch.v1.runtime,core.forms.components.termsandconditions.v1.runtime,core.forms.components.review.v1.runtime,core.forms.components.scribble.v1.runtime,core.forms.components.datetime.v1.runtime,core.forms.components.adobesignblock.v1.runtime]"/>
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/.content.xml
new file mode 100644
index 0000000000..8ccc760808
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/.content.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_dialog/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_dialog/.content.xml
new file mode 100644
index 0000000000..067a3c553d
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_dialog/.content.xml
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_editConfig.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_editConfig.xml
new file mode 100644
index 0000000000..2251838f92
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_editConfig.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_template.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_template.xml
new file mode 100644
index 0000000000..92d274b6c9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/_cq_template.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/adobesignblock.html b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/adobesignblock.html
new file mode 100644
index 0000000000..1838497a54
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/adobesignblock.html
@@ -0,0 +1,43 @@
+
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/.content.xml
new file mode 100644
index 0000000000..0f3c8be638
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/.content.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/.content.xml
new file mode 100644
index 0000000000..37e4019ac2
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/.content.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css.txt b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css.txt
new file mode 100644
index 0000000000..8d4dbea287
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css.txt
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright 2026 Adobe
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+#base=css
+editDialog.css
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css/editDialog.css b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css/editDialog.css
new file mode 100644
index 0000000000..7a36da5c51
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/css/editDialog.css
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright 2026 Adobe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+/*
+ * integration-adobesign's dialogplugin toggles visibility of type-dependent fields by setting the
+ * "hidden" DOM attribute (ADOBESIGN_UTILS.hideField), which relies on the browser's default
+ * "[hidden] { display: none }" user-agent rule. That plugin was originally only ever rendered
+ * inside a bare Coral.Dialog popup; here it's included into a full Granite Touch UI component
+ * dialog, whose own structural field-layout CSS can carry higher specificity and win over the
+ * default rule, leaving "hidden" fields visually visible. Force it back.
+ */
+.cmp-adaptiveform-adobesignblock__fieldsettings [hidden] {
+ display: none !important;
+}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js.txt b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js.txt
new file mode 100644
index 0000000000..9925965f5b
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js.txt
@@ -0,0 +1,19 @@
+
+ ###############################################################################
+# Copyright 2026 Adobe
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+#base=js
+editDialog.js
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js/editDialog.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js/editDialog.js
new file mode 100644
index 0000000000..f0bec4e379
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/editor/js/editDialog.js
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright 2026 Adobe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+(function($, ns, channel) {
+ "use strict";
+
+ let EDIT_DIALOG = ".cmp-adaptiveform-adobesignblock__editdialog",
+ ADOBESIGNBLOCK_FIELD_SETTINGS = ".cmp-adaptiveform-adobesignblock__fieldsettings",
+ ADOBESIGNBLOCK_FIELD_TAG = "[name='./adobeSignFieldTag']",
+ Utils = window.CQ.FormsCoreComponents.Utils.v1;
+
+ /**
+ * plugin.js#setup() calls "new CUI.Autocomplete(...)" for the Date Format field - a classic
+ * (pre-Coral3) widget class that this modern Core Components authoring context may not load.
+ * If it's missing, that call throws and setup() aborts before it ever reaches the lines that
+ * wire up type-change handling, which is why every field stays visible regardless of Type.
+ * Stub it out defensively rather than touching plugin.js itself (integration-adobesign code).
+ */
+ function ensureCuiAutocompleteStub() {
+ window.CUI = window.CUI || {};
+ if (typeof window.CUI.Autocomplete !== "function") {
+ window.CUI.Autocomplete = function() {};
+ }
+ }
+
+ /**
+ * Returns just the first {{...}} merge-tag occurrence in value. extractModel()'s own regex
+ * (FIELD_REGEX) only expects to see one tag - Radio stores one tag per option (see
+ * extractRadioOptions() below), so feeding it the full multi-tag value makes it match
+ * garbage across all of them instead.
+ */
+ function extractFirstTag(value) {
+ let match = value.match(/\{\{[^}]*\}\}/);
+ return match ? match[0] : value;
+ }
+
+ /**
+ * Radio is the one type where getDomContent() (utils.js) writes a separate {{...}} tag per
+ * option, rather than one tag with an embedded options list the way Dropdown does
+ * (dropdown(options="A,B,C") in a single tag). extractModel()'s own Radio case reads
+ * adobesignOptions.options directly - supplying that was always meant to be the CALLER's
+ * job (in the original RTE flow, populateAdobeSignOptions()/getReplaceRadioOptions() build
+ * it by scanning the surrounding rich text for every sibling radio(...) span). We don't have
+ * scattered sibling spans in a larger document - our stored value already holds exactly
+ * this one field's own tags - so build the same array by scanning it directly.
+ */
+ function extractRadioOptions(value) {
+ let options = [],
+ re = /radio\(([^)]*)\)/g,
+ match;
+ while ((match = re.exec(value)) !== null) {
+ options.push(match[1]);
+ }
+ return options;
+ }
+
+ /**
+ * Safely (re)populates the Options multifield and syncs its Default Value dropdown.
+ * populateFields()'s own multifield handling calls $(item).find(...).value = ... on a row
+ * immediately after items.add() - before Coral has necessarily finished upgrading that
+ * freshly-cloned row - which throws "Cannot set properties of undefined". We call this only
+ * after populateFields() has already safely handled every other field (with as_options left
+ * empty so populateFields()'s own multifield branch has nothing to add and can't hit that
+ * same crash), then give each newly-added row one tick to settle before reading it back.
+ */
+ function populateOptionsMultifield(adobesigndialog, csvValue) {
+ let multifield = adobesigndialog.optionsMultifield;
+ if (!multifield) {
+ return;
+ }
+ multifield.items.clear();
+ let values = csvValue ? csvValue.split(",") : [];
+ values.forEach(function() {
+ multifield.items.add();
+ });
+ if (values.length === 0) {
+ return;
+ }
+ window.setTimeout(function() {
+ try {
+ let name = $(multifield).data("name"),
+ rows = multifield.items.getAll();
+ rows.forEach(function(row, index) {
+ let itemField = $(row).find('[name="' + name + '"]')[0];
+ if (itemField) {
+ itemField.value = values[index] || "";
+ }
+ });
+ adobesigndialog.handleOptionsChanged($.Event("change"));
+ } catch (e) {
+ window.console.error("adobesignblock: failed to populate Adobe Sign field Options", e);
+ }
+ }, 1);
+ }
+
+ /**
+ * Bootstraps integration-adobesign's own RTE-dialog plugin (constants/types/utils/plugin.js,
+ * loaded via the aem.adobesign.rtedialogplugin clientlib dependency) against the field set we
+ * pulled in via from /libs/adobesign/components/rte/dialogcontainer, instead of
+ * re-implementing its per-type show/hide, Options-multifield sync, and tag-string generation.
+ *
+ * @param {HTMLElement} dialog the dialog on which the operation is to be performed.
+ * @returns {Object|null} the adobesigndialog plugin instance, or null if the included markup,
+ * the aem.adobesign.rtedialogplugin clientlib, or setup() itself is unavailable/fails.
+ */
+ function bootstrapAdobeSignFieldSettings(dialog) {
+ let fieldSettings = dialog.find(ADOBESIGNBLOCK_FIELD_SETTINGS).first();
+ if (fieldSettings.length === 0 || typeof fieldSettings.adobesigndialog !== "function") {
+ return null;
+ }
+ ensureCuiAutocompleteStub();
+ let adobesigndialog = fieldSettings.adobesigndialog();
+ try {
+ adobesigndialog.setup();
+ } catch (e) {
+ window.console.error("adobesignblock: failed to set up Adobe Sign field settings", e);
+ return null;
+ }
+ let optionsCsv = "";
+ try {
+ let fieldTag = dialog.find(ADOBESIGNBLOCK_FIELD_TAG)[0];
+ if (fieldTag && fieldTag.value) {
+ let rawValue = fieldTag.value,
+ model = window.adobesign.utils.extractModel({
+ fieldText : extractFirstTag(rawValue),
+ options : extractRadioOptions(rawValue)
+ });
+ // Leave Options out of what populateFields() itself touches (see
+ // populateOptionsMultifield() above for why), and populate it ourselves after.
+ optionsCsv = model.as_options;
+ model.as_options = "";
+ adobesigndialog.populateFields(model);
+ } else {
+ adobesigndialog.clear();
+ }
+ } catch (e) {
+ window.console.error("adobesignblock: failed to populate Adobe Sign field settings", e);
+ }
+ // Mirrors CUI.rte.ui.cui.AdobeSignDialog.js's own onShow handler, which also defers the
+ // typeChangeHandler() call by a tick after populating fields, rather than calling it
+ // inline - matching that same sequencing here instead of assuming the plugin needs no
+ // settling time at all.
+ window.setTimeout(function() {
+ try {
+ adobesigndialog.typeChangeHandler();
+ } catch (e) {
+ window.console.error("adobesignblock: failed to apply Adobe Sign field type visibility", e);
+ }
+ }, 1);
+ populateOptionsMultifield(adobesigndialog, optionsCsv);
+ return adobesigndialog;
+ }
+
+ /**
+ * Computes the Adobe Sign merge-tag markup from the current field-settings state and stores it
+ * into the hidden ./adobeSignFieldTag field, right before the dialog's own submit proceeds -
+ * mirroring the existing handleDialogSubmit pattern in base/v1/base's editDialog.js.
+ */
+ function handleDialogSubmit(dialog, adobesigndialog) {
+ let submitButton = dialog.find(".cq-dialog-submit")[0];
+ if (!submitButton) {
+ return;
+ }
+ submitButton.addEventListener("click", function() {
+ let fieldTag = dialog.find(ADOBESIGNBLOCK_FIELD_TAG)[0];
+ if (fieldTag && adobesigndialog) {
+ fieldTag.value = adobesigndialog.getDomContentFromDialog();
+ }
+ });
+ }
+
+ function initialise(dialog) {
+ dialog = $(dialog);
+ let adobesigndialog = bootstrapAdobeSignFieldSettings(dialog);
+ handleDialogSubmit(dialog, adobesigndialog);
+ }
+
+ Utils.initializeEditDialog(EDIT_DIALOG)(initialise);
+
+})(jQuery, Granite.author, jQuery(document));
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/.content.xml
new file mode 100644
index 0000000000..0c02848b79
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/.content.xml
@@ -0,0 +1,7 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css.txt b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css.txt
new file mode 100644
index 0000000000..17394511a1
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css.txt
@@ -0,0 +1,2 @@
+#base=css
+adobesignblockview.css
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css/adobesignblockview.css b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css/adobesignblockview.css
new file mode 100644
index 0000000000..180b876d6e
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/css/adobesignblockview.css
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright 2026 Adobe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+/* Adobe Sign placeholder spans — parity with foundation adobesign/common styles */
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype]::selection {
+ color: rgba(0, 0, 0, 0);
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype]::-moz-selection {
+ color: rgba(0, 0, 0, 0);
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype] {
+ width: 6rem;
+ display: inline-block;
+ color: rgba(0, 0, 0, 0);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+ margin-left: 0.5rem;
+ margin-right: 0.5rem;
+ white-space: nowrap;
+ overflow: hidden;
+ cursor: pointer;
+ vertical-align: bottom;
+ min-height: 1em;
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype='radio'],
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype='checkbox'] {
+ border-bottom-width: 0;
+ background-repeat: no-repeat;
+ background-position: left center;
+ width: 3rem;
+ min-width: 3rem;
+ min-height: 10px;
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype='radio'] {
+ background-image: url(../resources/images/radiobutton.svg);
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype='checkbox'] {
+ background-image: url(../resources/images/checkbox.svg);
+}
+
+.cmp-adaptiveform-adobesignblock__value [data-adobesigntype='dropdown'] {
+ background-image: url(../resources/images/dropdown_chevron.svg);
+ background-repeat: no-repeat;
+ background-position: right center;
+}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js.txt b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js.txt
new file mode 100644
index 0000000000..b3753ef08b
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js.txt
@@ -0,0 +1,2 @@
+#base=js
+adobesignblockview.js
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js/adobesignblockview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js/adobesignblockview.js
new file mode 100644
index 0000000000..fa6eb588a9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/js/adobesignblockview.js
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright 2026 Adobe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+(function() {
+ "use strict";
+
+ class AdobeSignBlockView extends FormView.FormFieldBase {
+
+ static NS = FormView.Constants.NS;
+
+ static IS = "adaptiveFormAdobeSignBlock";
+
+ static bemBlock = "cmp-adaptiveform-adobesignblock";
+
+ static selectors = {
+ self: "[data-" + AdobeSignBlockView.NS + '-is="' + AdobeSignBlockView.IS + '"]',
+ widget: `.${AdobeSignBlockView.bemBlock}__value`,
+ label: `.${AdobeSignBlockView.bemBlock}__label`,
+ description: `.${AdobeSignBlockView.bemBlock}__longdescription`,
+ qm: `.${AdobeSignBlockView.bemBlock}__questionmark`,
+ errorDiv: `.${AdobeSignBlockView.bemBlock}__errormessage`,
+ tooltipDiv: `.${AdobeSignBlockView.bemBlock}__shortdescription`
+ };
+
+ constructor(params) {
+ super(params);
+ }
+
+ getWidget() {
+ return this.element.querySelector(AdobeSignBlockView.selectors.widget);
+ }
+
+ getDescription() {
+ return null;
+ }
+
+ getLabel() {
+ return this.element.querySelector(AdobeSignBlockView.selectors.label);
+ }
+
+ getErrorDiv() {
+ return null;
+ }
+
+ getTooltipDiv() {
+ return null;
+ }
+
+ getQuestionMarkDiv() {
+ return null;
+ }
+
+ getClass() {
+ return AdobeSignBlockView.IS;
+ }
+
+ setFocus() {
+ const fieldType = this.parentView?.getModel()?.fieldType;
+ if (fieldType !== "form" && this.parentView?.setFocus) {
+ this.parentView.setFocus(this.getId());
+ }
+ this.setActive();
+ this.element.scrollIntoView({ behavior: "smooth", block: "start" });
+ }
+
+ /**
+ * Guards against the form engine calling updateLabel(null) when no label
+ * is present in the model state — would otherwise throw on .hasOwnProperty.
+ */
+ updateLabel(label) {
+ if (label) {
+ super.updateLabel(label);
+ }
+ }
+
+ /**
+ * Updates the block's rich text content, preserving data-adobesigntype
+ * attributes so the Adobe Sign SDK can locate placeholder spans after a
+ * Rules Engine value change.
+ */
+ updateValue(value) {
+ const actualValue = typeof value === "undefined" ? "" : value;
+
+ const sanitizedValue = window.DOMPurify ? window.DOMPurify.sanitize(actualValue, {
+ ALLOWED_TAGS: [
+ "b", "strong", "i", "em", "u", "sub", "sup", "small",
+ "blockquote", "ul", "ol", "li", "a", "br", "p", "span",
+ "h1", "h2", "h3", "h4", "h5", "h6"
+ ],
+ ALLOWED_ATTR: [
+ "href", "target", "rel", "class", "id", "style",
+ // Preserve Adobe Sign field-type markers on span elements
+ "data-adobesigntype"
+ ]
+ }) : actualValue;
+
+ const widget = this.getWidget();
+ if (widget) {
+ widget.innerHTML = sanitizedValue;
+ }
+ }
+ }
+
+ FormView.Utils.setupField(({ element, formContainer }) => {
+ return new AdobeSignBlockView({ element, formContainer });
+ }, AdobeSignBlockView.selectors.self);
+
+})();
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/checkbox.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/checkbox.svg
new file mode 100644
index 0000000000..e8c5393ab9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/checkbox.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/dropdown_chevron.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/dropdown_chevron.svg
new file mode 100644
index 0000000000..e941f317a9
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/dropdown_chevron.svg
@@ -0,0 +1,12 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/radiobutton.svg b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/radiobutton.svg
new file mode 100644
index 0000000000..a440722174
--- /dev/null
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/adobesignblock/v1/adobesignblock/clientlibs/site/resources/images/radiobutton.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/clientlibs/editorhook/js/toolbaractionhook.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/clientlibs/editorhook/js/toolbaractionhook.js
index 0f8c9fa567..e6e0ff9fa3 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/clientlibs/editorhook/js/toolbaractionhook.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/clientlibs/editorhook/js/toolbaractionhook.js
@@ -44,12 +44,21 @@
const correctEditableEditorType = function (editable, name) {
if (name === "EDIT") {
const isAFComponent = editable.dom.find("[data-cmp-is^='adaptiveForm']")[0] != null;
- if (isAFComponent) {
+ if (isAFComponent && editable.config.editConfig.inplaceEditingConfig) {
+ const isAdobeSignBlock = editable.dom.find("[data-cmp-is='adaptiveFormAdobeSignBlock']")[0] != null;
+ if (isAdobeSignBlock) {
+ // Adobe Sign Block stores rich HTML in __value; _cq_editConfig uses editorType=text with adobesignplugin
+ editable.config.editConfig.inplaceEditingConfig.editorType = "text";
+ return;
+ }
const hasRichTextLabel = editable.dom.find("[class$='__label']")[0] && editable.dom.find("[class$='__label']")[0].getAttribute("data-richtext") != null,
- hasRichTextAttribute = editable.dom.find("[class$='__text']")[0] && editable.dom.find("[class$='__text']")[0].getAttribute("data-richtext") != null;
- // We are checking for data-richtext in component to decide whether open rich-text inplace editor or plain text editor
- if (!(hasRichTextLabel || hasRichTextAttribute)) {
+ hasRichTextAttribute = editable.dom.find("[class$='__text']")[0] && editable.dom.find("[class$='__text']")[0].getAttribute("data-richtext") != null,
+ hasRichTextValue = editable.dom.find("[class$='__value']")[0] && editable.dom.find("[class$='__value']")[0].getAttribute("data-richtext") != null;
+ // Use data-richtext on label, text, or value to decide rich-text vs plain-text inplace editor
+ if (!(hasRichTextLabel || hasRichTextAttribute || hasRichTextValue)) {
editable.config.editConfig.inplaceEditingConfig.editorType = "plaintext";
+ } else {
+ editable.config.editConfig.inplaceEditingConfig.editorType = "text";
}
}
}