diff --git a/assets/css/autocomplete_deluxe.gin.css b/assets/css/autocomplete_deluxe.gin.css --- a/assets/css/autocomplete_deluxe.gin.css +++ b/assets/css/autocomplete_deluxe.gin.css @@ -41,3 +41,18 @@ .autocomplete-deluxe-item .autocomplete-deluxe-item-delete:hover { background: var(--gin-color-button-text); } + +/* Faux placeholder: show no_empty_message when no items selected. */ +div.autocomplete-deluxe-container.autocomplete-deluxe-multiple:not(:has(.autocomplete-deluxe-item))::before { + content: attr(data-placeholder); + display: block; + color: var(--gin-color-text-disabled, #999); + pointer-events: none; + font-size: 0.875rem; + line-height: 1.3; + white-space: normal; + word-wrap: break-word; + padding: 0.68rem 2.5rem 0.68rem 0.93rem; + min-height: 3rem; + box-sizing: border-box; +} diff --git a/src/Element/AutocompleteDeluxeElement.php b/src/Element/AutocompleteDeluxeElement.php --- a/src/Element/AutocompleteDeluxeElement.php +++ b/src/Element/AutocompleteDeluxeElement.php @@ -41,6 +41,7 @@ ], ]; $info['#process'][] = [$class, 'processElement']; + $info['#theme_wrappers'] = ['form_element']; return $info; } @@ -77,19 +78,12 @@ $element['#after_build'][] = [get_called_class(), 'afterBuild']; - // Add label_display and label variables to template. - $element['label'] = ['#theme' => 'form_element_label']; - $element['label'] += array_intersect_key( - $element, - array_flip( - [ - '#id', - '#required', - '#title', - '#title_display', - ] - ) - ); + // Clear #description so the form_element wrapper does not render it + // (which would trigger Gin's help-icon toggle). + $element['#description'] = ''; + $element['#description_display'] = 'after'; + + $no_empty_message = $element['#no_empty_message'] ?? ''; $element['textfield'] = [ '#disabled' => $element_disabled, @@ -100,12 +94,11 @@ 'aria-label' => $element['#title'] ?? '', ], '#default_value' => '', - '#description' => $element['#description'] ?? '', ]; // Add autocomplete deluxe container and class only if element is enabled. if (!$element_disabled) { - $element['textfield']['#prefix'] = '
'; + $element['textfield']['#prefix'] = \Drupal\Core\Render\Markup::create('
'); $element['textfield']['#suffix'] = '
'; $element['textfield']['#attributes']['class'][] = 'autocomplete-deluxe-form'; } @@ -144,7 +137,6 @@ '#default_value' => $default_value, '#prefix' => '
', '#suffix' => '
', - '#description' => $element['#description'] ?? '', ]; $element['textfield']['#attributes']['style'] = ['display: none'];