<style>
:host {
--compose-textarea-input-height: calc(
4lh + (2 * var(--compose-textarea-input-padding)));
--compose-textarea-input-padding: 10px;
--compose-textarea-readonly-height: 48px;
--compose-textarea-readonly-padding: 16px;
--compose-textarea-readonly-background:
var(--color-compose-dialog-textarea-readonly-background);
display: grid;
grid-template-areas: "content";
align-items: start;
grid-auto-columns: 100%;
}
#inputContainer,
#readonlyContainer {
grid-area: content;
width: 100%;
box-sizing: border-box;
}
#inputContainer {
display: flex;
flex-direction: column;
height: 100%;
}
textarea {
appearance: none;
background: transparent;
border: none;
outline: solid 1px var(--color-compose-dialog-textarea-outline);
outline-offset: -1px;
border-radius: 8px;
color: var(--color-compose-dialog-textarea);
font: inherit;
font-size: 12px;
line-height: 16px;
resize: none;
width: 100%;
height: var(--compose-textarea-input-height);
box-sizing: border-box;
padding: 10px;
scroll-padding-block: 10px;
}
:host([readonly]) textarea {
overflow: hidden;
}
textarea::placeholder {
color: var(--color-compose-dialog-textarea-placeholder);
}
#input:focus::placeholder {
color: transparent;
}
:host([invalid-input_]) textarea {
outline: solid 2px var(--color-compose-dialog-error);
outline-offset: -2px;
}
.error {
margin: 4px 10px 0;
color: var(--color-compose-dialog-error);
font-size: 11px;
line-height: 16px;
user-select: text;
}
textarea:focus {
outline: solid 2px var(--cr-focus-outline-color);
outline-offset: -2px;
}
#readonlyContainer {
border-radius: 8px;
display: flex;
padding: 16px;
background: var(--color-compose-dialog-textarea-readonly-background);
color: var(--color-compose-dialog-textarea-readonly-foreground);
}
#readonlyText {
font-size: 12px;
font-weight: 400;
line-height: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
user-select: text;
}
#editButtonContainer {
--cr-icon-button-icon-size: var(--cr-icon-size);
width: var(--cr-icon-size);
height: 16px;
display: flex;
align-items: center;
justify-content: center;
margin-inline-start: 16px;
}
cr-icon-button {
--cr-icon-button-fill-color: var(--color-compose-dialog-foreground-subtle);
margin: 0;
}
/**
* cr-hidden-style stamps an !important on [hidden] elements, which prevents
* any animations/transitions from applying. Instead of using cr-hidden-style,
* list all the [hidden] elements below. Not all elements need this, just
* the ones that override the default 'display' property.
*/
#inputContainer[hidden],
#readonlyContainer[hidden],
#editButtonContainer[hidden] {
display: none;
}
</style>
<div id="inputContainer" hidden$="[[readonly]]">
<textarea id="input"
placeholder="$i18n{inputPlaceholderTitle}
• $i18n{inputPlaceholderLine1}
• $i18n{inputPlaceholderLine2}
• $i18n{inputPlaceholderLine3}"
value="{{value::input}}"
required
autofocus
aria-invalid="[[invalidInput_]]"
aria-errormessage="error"
on-change="onChangeTextArea_">
</textarea>
<div id="error" class="error" role="region" aria-live="assertive"
hidden$="[[!invalidInput_]]">
<div id="tooShortError" hidden$="[[!tooShort_]]">$i18n{errorTooShort}</div>
<div id="tooLongError" hidden$="[[!tooLong_]]">$i18n{errorTooLong}</div>
</div>
</div>
<div id="readonlyContainer" hidden$="[[!readonly]]">
<div id="readonlyText">[[value]]</div>
<div id="editButtonContainer"
hidden$="[[!shouldShowEditIcon_(allowExitingReadonlyMode, readonly)]]">
<cr-icon-button id="editButton" iron-icon="compose:edit"
title="$i18n{editButton}" on-click="onEditClick_">
</cr-icon-button>
</div>
</div>