@scania/tegel
Version:
Tegel Design System
110 lines (105 loc) • 13.6 kB
JavaScript
'use strict';
var index = require('./index-DGsdvbvx.js');
var generateUniqueId = require('./generateUniqueId-ComXTAM_.js');
var getAriaInvalid = require('./getAriaInvalid-Bdg4qUb_.js');
const textareaCss = () => `.textarea-container.sc-tds-textarea{border-radius:4px 4px 0 0;position:relative;box-sizing:border-box;height:auto;width:100%;min-width:208px;display:inline-flex;background-color:transparent;flex-flow:row wrap;border-bottom:0}.textarea-container.no-min-width.sc-tds-textarea{min-width:unset}.textarea-container.sc-tds-textarea .textarea-wrapper.sc-tds-textarea{position:relative;width:unset;min-width:100%}.textarea-input.sc-tds-textarea{border-radius:4px 4px 0 0;width:100%;box-sizing:border-box;margin:0;border:none;outline:none;height:100%;color:var(--tds-textarea-color);background-color:var(--tds-textarea-background);font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);padding:var(--tds-spacing-element-20) var(--tds-spacing-element-16);display:block;resize:vertical;border-bottom:1px solid var(--tds-textarea-border-bottom);transition:border-bottom-color 200ms ease}.textarea-input.sc-tds-textarea:read-only{background-color:var(--tds-textarea-read-only-background)}.textarea-input.sc-tds-textarea::placeholder{opacity:1;color:var(--tds-textarea-placeholder);transition:color 200ms ease}.textarea-input.sc-tds-textarea:disabled{background-color:var(--tds-textarea-disabled-background);color:var(--tds-textarea-disabled-color);cursor:not-allowed}.textarea-input.sc-tds-textarea:disabled::placeholder{color:var(--tds-textarea-disabled-placeholder)}.textarea-input.sc-tds-textarea::-webkit-resizer{display:none}.textarea-input.sc-tds-textarea:hover{border-bottom-color:var(--tds-textarea-border-bottom-hover)}.textarea-input.sc-tds-textarea:hover::placeholder{color:var(--tds-textarea-placeholder-hover)}.textarea-input.sc-tds-textarea:focus{outline:2px solid var(--tds-focus-outline-color);box-shadow:0 0 0 1px var(--tds-white);outline-offset:1px;z-index:1;border-radius:0;border-bottom:1px solid transparent}.textarea-resizer-icon.sc-tds-textarea{color:var(--tds-textarea-resize-icon);position:absolute;display:block;bottom:2px;right:1px;padding-bottom:2px;padding-right:2px;pointer-events:none;background-color:var(--tds-textarea-background)}.textarea-resizer-icon.sc-tds-textarea svg.sc-tds-textarea{display:block}.textarea-label.sc-tds-textarea{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);display:block;z-index:1;margin-bottom:var(--tds-spacing-element-8);color:var(--tds-textarea-label-color)}.textarea-container.textarea-label-inside.sc-tds-textarea .textarea-label.sc-tds-textarea{font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);transition:0.1s ease all;color:var(--tds-textarea-label-inside-color);position:absolute;top:var(--tds-spacing-element-20);left:var(--tds-spacing-element-16)}.textarea-container.textarea-label-inside.textarea-disabled.sc-tds-textarea .textarea-label.sc-tds-textarea{color:var(--tds-textarea-disabled-label)}.textarea-container.textarea-label-inside.sc-tds-textarea .textarea-input.sc-tds-textarea::placeholder{color:transparent}.textarea-container.textarea-label-inside.sc-tds-textarea .textarea-input.sc-tds-textarea .sc-tds-textarea::placeholder{color:transparent}.textarea-container.textarea-label-inside.sc-tds-textarea .textarea-input.sc-tds-textarea:focus::placeholder{transition:color 0.35s ease;color:var(--tds-textarea-placeholder)}.textarea-container.textarea-focus.textarea-label-inside.sc-tds-textarea .textarea-label.sc-tds-textarea{font:var(--tds-detail-07);letter-spacing:var(--tds-detail-07-ls);top:var(--tds-spacing-element-8)}.textarea-container.textarea-data.textarea-label-inside.sc-tds-textarea .textarea-label.sc-tds-textarea{font:var(--tds-detail-07);letter-spacing:var(--tds-detail-07-ls);top:var(--tds-spacing-element-8)}.textarea-textcounter.sc-tds-textarea{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);color:var(--tds-textarea-textcounter);float:right;flex-basis:100%;text-align:right;padding-top:var(--tds-spacing-element-4)}.textarea-textcounter.sc-tds-textarea .textfield-textcounter-divider.sc-tds-textarea{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);color:var(--tds-textarea-textcounter-divider)}.textarea-helper.sc-tds-textarea{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);display:flex;gap:8px;align-items:center;padding-top:var(--tds-spacing-element-4);color:var(--tds-textarea-helper);flex-grow:2;flex-basis:auto}.textarea-helper.sc-tds-textarea~.textarea-textcounter.sc-tds-textarea{flex-basis:auto}.textarea-success.sc-tds-textarea .textarea-input.sc-tds-textarea{border-bottom-color:var(--tds-textarea-border-bottom-success)}.textarea-error.sc-tds-textarea .textarea-input.sc-tds-textarea{border-bottom-color:var(--tds-textarea-border-bottom-error)}.textarea-error.sc-tds-textarea .textarea-helper.sc-tds-textarea{color:var(--tds-textarea-helper-error)}.textarea-disabled.sc-tds-textarea{cursor:not-allowed}.textarea-disabled.sc-tds-textarea .textarea-input.sc-tds-textarea{border-bottom-color:transparent;pointer-events:none;user-select:none}.textarea-disabled.sc-tds-textarea .textarea-label.sc-tds-textarea{color:var(--tds-textarea-disabled-label)}.textarea-disabled.sc-tds-textarea .textarea-helper.sc-tds-textarea{color:var(--tds-textarea-helper-disabled)}.textarea-disabled.sc-tds-textarea .textarea-textcounter.sc-tds-textarea{color:var(--tds-textarea-textcounter-disabled)}.textarea-disabled.sc-tds-textarea .textarea-textcounter.sc-tds-textarea .textfield-textcounter-divider.sc-tds-textarea{color:var(--tds-textarea-textcounter-disabled)}.textarea-icon__readonly.sc-tds-textarea{display:none;position:absolute;right:18px;top:18px;color:var(--tds-textarea-icon-read-only-color)}.textarea-icon__readonly-label.sc-tds-textarea{display:none;position:absolute;right:18px;top:48px;font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);padding:8px;color:var(--tds-textarea-icon-read-only-label-color);background-color:var(--tds-textarea-icon-read-only-label-background);white-space:nowrap;border-radius:4px 0 4px 4px}.textarea-readonly.sc-tds-textarea .textarea-icon__readonly.sc-tds-textarea{display:block}.textarea-readonly.sc-tds-textarea .textarea-input.sc-tds-textarea{border-bottom-color:var(--tds-textarea-border-bottom-read-only-color)}.textarea-readonly.sc-tds-textarea .textfield-container.sc-tds-textarea{background-color:transparent}.textarea-readonly.sc-tds-textarea:has(.textarea-icon__readonly) .textarea-input.sc-tds-textarea{padding-right:54px}`;
const TdsTextarea = class {
constructor(hostRef) {
index.registerInstance(this, hostRef);
this.tdsChange = index.createEvent(this, "tdsChange", 6);
this.tdsBlur = index.createEvent(this, "tdsBlur", 6);
this.tdsInput = index.createEvent(this, "tdsInput", 6);
this.tdsFocus = index.createEvent(this, "tdsFocus", 6);
this.uuid = generateUniqueId.generateUniqueId();
/** Label text */
this.label = '';
/** Name attribute */
this.name = '';
/** Position of the label for the Textarea. */
this.labelPosition = 'no-label';
/** Placeholder text */
this.placeholder = '';
/** Value of the input text */
this.value = '';
/** Set input in disabled state */
this.disabled = false;
/** Set input in readonly state */
this.readOnly = false;
/** Hide the readonly icon */
this.hideReadOnlyIcon = false;
/** Error state of input */
this.state = 'default';
/** Mode variant of the Textarea */
this.modeVariant = null;
/** Control of autofocus */
this.autofocus = false;
/** Unset minimum width of 208px. */
this.noMinWidth = false;
/** Listen to the focus state of the input */
this.focusInput = false;
}
handleChange(event) {
this.tdsChange.emit(event);
}
handleBlur(event) {
this.tdsBlur.emit(event);
this.focusInput = false;
}
// Data input event in value prop
handleInput(event) {
if (event.target instanceof HTMLTextAreaElement) {
this.value = event.target.value;
this.tdsInput.emit(event);
}
}
/* Set the input as focus when clicking the whole textarea with suffix/prefix */
handleFocus(event) {
var _a;
(_a = this.textEl) === null || _a === void 0 ? void 0 : _a.focus();
this.focusInput = true;
this.tdsFocus.emit(event);
}
/** Method to programmatically focus the textarea element */
async focusElement() {
if (this.textEl) {
this.textEl.focus();
this.focusInput = true;
}
}
setModeVariant(modeVariant) {
if (this.readOnly && modeVariant === 'primary') {
return 'secondary';
}
if (this.readOnly && modeVariant === 'secondary') {
return 'primary';
}
return modeVariant;
}
render() {
var _a, _b;
return (index.h("div", { key: '2ccb72218895d827f951926844f7f5912f5e5981', class: {
'textarea-container': true,
'textarea-label-inside': this.labelPosition === 'inside',
'textarea-focus': this.focusInput,
'textarea-disabled': this.disabled,
'textarea-readonly': !this.disabled && this.readOnly,
[`tds-mode-variant-${this.setModeVariant(this.modeVariant)}`]: true,
'textarea-data': this.value !== '',
[`textarea-${this.state}`]: this.state === 'error' || this.state === 'success',
'no-min-width': this.noMinWidth,
} }, this.labelPosition !== 'no-label' && (index.h("label", { key: '55b640f946d5f3b553f0c8d6f458076e22675a3c', htmlFor: `textarea-element-${this.uuid}`, class: 'textarea-label' }, this.label)), index.h("div", { key: '716876e13a8f7ce5336410fef5d9b9de90f89e01', class: "textarea-wrapper" }, index.h("textarea", { key: '80041c04a5bce79615bb92bb3489ec9af9328cd8', id: `textarea-element-${this.uuid}`, class: 'textarea-input', ref: (inputEl) => {
this.textEl = inputEl;
}, disabled: this.disabled, readonly: !this.disabled && this.readOnly, placeholder: this.placeholder, value: this.value, name: this.name, autofocus: this.autofocus, maxlength: this.maxLength, cols: this.cols, rows: this.rows, onFocus: (event) => {
if (!this.readOnly) {
this.handleFocus(event);
}
}, onBlur: (event) => {
if (!this.readOnly) {
this.handleBlur(event);
}
}, onInput: (event) => this.handleInput(event), onChange: (event) => this.handleChange(event), "aria-invalid": getAriaInvalid.getAriaInvalid(this.host, this.state), "aria-readonly": this.readOnly ? 'true' : 'false', "aria-label": this.tdsAriaLabel ? this.tdsAriaLabel : this.label, "aria-describedby": `textarea-helper-element-${this.uuid}` }), index.h("span", { key: '09fe37f55f352eb6a2e6482dd4a3fd1a5c2a5a4d', class: "textarea-resizer-icon" }, index.h("svg", { key: '7ddadcc0a6a6392b891fa93abbcb286b95123fbe', width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, index.h("path", { key: '486e21dc5f89ca182e3870c010d05f8d05dee56f', "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M11.8536 0.853553C12.0488 0.658291 12.0488 0.341709 11.8536 0.146447C11.6583 -0.0488155 11.3417 -0.0488155 11.1464 0.146447L0.146447 11.1464C-0.0488155 11.3417 -0.0488155 11.6583 0.146447 11.8536C0.341709 12.0488 0.658291 12.0488 0.853553 11.8536L11.8536 0.853553ZM11.8536 4.64645C12.0488 4.84171 12.0488 5.15829 11.8536 5.35355L5.35355 11.8536C5.15829 12.0488 4.84171 12.0488 4.64645 11.8536C4.45118 11.6583 4.45118 11.3417 4.64645 11.1464L11.1464 4.64645C11.3417 4.45118 11.6583 4.45118 11.8536 4.64645ZM11.8536 8.64645C12.0488 8.84171 12.0488 9.15829 11.8536 9.35355L9.35355 11.8536C9.15829 12.0488 8.84171 12.0488 8.64645 11.8536C8.45118 11.6583 8.45118 11.3417 8.64645 11.1464L11.1464 8.64645C11.3417 8.45118 11.6583 8.45118 11.8536 8.64645Z", fill: "currentColor" }))), !this.disabled && !this.hideReadOnlyIcon && this.readOnly && (index.h("span", { key: 'bcaf8a2615483c20d5047dd182e46a3db316b745', class: "textarea-icon__readonly" }, index.h("tds-tooltip", { key: 'a70b88e3c48613f80c8c7d558732e3d51a2cb00c', placement: "top-end", text: "This field is non-editable", selector: "#readonly-tooltip" }), index.h("tds-icon", { key: '7bbe4e5b22c6b1cc6dca8880e03eb3079bc8fe6e', id: "readonly-tooltip", name: "edit_inactive", svgTitle: "inactive" })))), index.h("span", { key: 'feadff54f5c5fc884a5a7099878ee023a3c6f1c9', class: 'textarea-helper', "aria-live": "assertive", id: `textarea-helper-element-${this.uuid}` }, this.state === 'error' && this.helper && !this.readOnly && (index.h("tds-icon", { key: 'ea538dae22b40ae4aac1d96064a137d28dbe3a52', name: "error", size: "16px" })), this.helper), ((_a = this.maxLength) !== null && _a !== void 0 ? _a : 0) > 0 && (index.h("div", { key: '92db8cc03e82c34f47a7c331c871240150b60732', class: 'textarea-textcounter' }, this.value === null ? 0 : (_b = this.value) === null || _b === void 0 ? void 0 : _b.length, index.h("span", { key: '4788115dbd59ce70f37b2033f3a08a4f8329106e', class: "textfield-textcounter-divider" }, " / "), " ", this.maxLength))));
}
get host() { return index.getElement(this); }
};
TdsTextarea.style = textareaCss();
exports.tds_textarea = TdsTextarea;