1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
<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>
|