@nectary/components 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icon-button/index.d.ts +2 -0
- package/icon-button/index.js +9 -1
- package/index.d.ts +2 -0
- package/index.js +3 -1
- package/input/index.js +24 -3
- package/package.json +1 -1
- package/segment/index.d.ts +20 -0
- package/segment/index.js +62 -0
- package/segment-collapse/index.d.ts +26 -0
- package/segment-collapse/index.js +94 -0
- package/textarea/index.js +24 -3
package/icon-button/index.d.ts
CHANGED
|
@@ -2,12 +2,14 @@ import type { TSinchElementReact } from '../types';
|
|
|
2
2
|
import type { FocusEvent, MouseEvent } from 'react';
|
|
3
3
|
export declare type TSinchIconButtonElement = HTMLElement & {
|
|
4
4
|
disabled: boolean;
|
|
5
|
+
small: boolean;
|
|
5
6
|
focus(): void;
|
|
6
7
|
blur(): void;
|
|
7
8
|
};
|
|
8
9
|
export declare type TSinchIconButtonReact = TSinchElementReact<TSinchIconButtonElement> & {
|
|
9
10
|
'aria-label': string;
|
|
10
11
|
disabled?: boolean;
|
|
12
|
+
small?: boolean;
|
|
11
13
|
onClick: (e: MouseEvent<TSinchIconButtonElement>) => void;
|
|
12
14
|
onFocus?: (e: FocusEvent<TSinchIconButtonElement>) => void;
|
|
13
15
|
onBlur?: (e: FocusEvent<TSinchIconButtonElement>) => void;
|
package/icon-button/index.js
CHANGED
|
@@ -8,7 +8,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
|
|
|
8
8
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
9
9
|
|
|
10
10
|
import { defineCustomElement, getBooleanAttribute, isAttrTrue, updateBooleanAttribute } from '../utils';
|
|
11
|
-
const templateHTML = '<style>:host{display:inline-block;vertical-align:middle;outline:0}button{all:initial;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:48px;height:48px;border-radius:4px;background-color:transparent;box-shadow:0 0 0 1px transparent inset;cursor:pointer;--sinch-size-icon:24px;--sinch-color-icon:var(--sinch-color-stormy-500)}button:focus{box-shadow:0 0 0 1px var(--sinch-color-stormy-500) inset}button:hover{background-color:var(--sinch-color-snow-500)}button:active{background-color:var(--sinch-color-snow-600)}button:disabled{background-color:transparent;cursor:initial;--sinch-color-spinner-bg:var(--sinch-color-snow-200);--sinch-color-spinner-fg:var(--sinch-color-stormy-200);--sinch-color-icon:var(--sinch-color-stormy-100)}button>*{pointer-events:none}</style><button><slot name="icon"></slot></button>';
|
|
11
|
+
const templateHTML = '<style>:host{display:inline-block;vertical-align:middle;outline:0}button{all:initial;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:48px;height:48px;border-radius:4px;background-color:transparent;box-shadow:0 0 0 1px transparent inset;cursor:pointer;--sinch-size-icon:24px;--sinch-color-icon:var(--sinch-color-stormy-500)}button:focus{box-shadow:0 0 0 1px var(--sinch-color-stormy-500) inset}button:hover{background-color:var(--sinch-color-snow-500)}button:active{background-color:var(--sinch-color-snow-600)}button:disabled{background-color:transparent;cursor:initial;--sinch-color-spinner-bg:var(--sinch-color-snow-200);--sinch-color-spinner-fg:var(--sinch-color-stormy-200);--sinch-color-icon:var(--sinch-color-stormy-100)}:host([small]:not([small=false]))>button{width:32px;height:32px}button>*{pointer-events:none}</style><button><slot name="icon"></slot></button>';
|
|
12
12
|
const template = document.createElement('template');
|
|
13
13
|
template.innerHTML = templateHTML;
|
|
14
14
|
defineCustomElement('sinch-icon-button', (_$button = new WeakMap(), class extends HTMLElement {
|
|
@@ -55,6 +55,14 @@ defineCustomElement('sinch-icon-button', (_$button = new WeakMap(), class extend
|
|
|
55
55
|
return getBooleanAttribute(this, 'disabled');
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
set small(isSmall) {
|
|
59
|
+
updateBooleanAttribute(this, 'small', isSmall);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
get small() {
|
|
63
|
+
return getBooleanAttribute(this, 'small');
|
|
64
|
+
}
|
|
65
|
+
|
|
58
66
|
focus() {
|
|
59
67
|
_classPrivateFieldGet(this, _$button).focus();
|
|
60
68
|
}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/input/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';
|
|
2
2
|
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';
|
|
3
3
|
|
|
4
|
-
var _$input, _$label, _$optionalText, _$additionalText, _$invalidText, _selectionStart, _selectionEnd, _onInput;
|
|
4
|
+
var _$input, _$label, _$optionalText, _$additionalText, _$invalidText, _selectionStart, _selectionEnd, _isPendingDk, _onCompositionStart, _onInput;
|
|
5
5
|
|
|
6
6
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ const templateHTML = '<style>:host{display:inline-block;vertical-align:middle;ou
|
|
|
12
12
|
const inputTypes = ['text', 'password'];
|
|
13
13
|
const template = document.createElement('template');
|
|
14
14
|
template.innerHTML = templateHTML;
|
|
15
|
-
defineCustomElement('sinch-input', (_$input = new WeakMap(), _$label = new WeakMap(), _$optionalText = new WeakMap(), _$additionalText = new WeakMap(), _$invalidText = new WeakMap(), _selectionStart = new WeakMap(), _selectionEnd = new WeakMap(), _onInput = new WeakMap(), class extends HTMLElement {
|
|
15
|
+
defineCustomElement('sinch-input', (_$input = new WeakMap(), _$label = new WeakMap(), _$optionalText = new WeakMap(), _$additionalText = new WeakMap(), _$invalidText = new WeakMap(), _selectionStart = new WeakMap(), _selectionEnd = new WeakMap(), _isPendingDk = new WeakMap(), _onCompositionStart = new WeakMap(), _onInput = new WeakMap(), class extends HTMLElement {
|
|
16
16
|
constructor() {
|
|
17
17
|
super();
|
|
18
18
|
|
|
@@ -51,6 +51,18 @@ defineCustomElement('sinch-input', (_$input = new WeakMap(), _$label = new WeakM
|
|
|
51
51
|
value: null
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
+
_classPrivateFieldInitSpec(this, _isPendingDk, {
|
|
55
|
+
writable: true,
|
|
56
|
+
value: false
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
_classPrivateFieldInitSpec(this, _onCompositionStart, {
|
|
60
|
+
writable: true,
|
|
61
|
+
value: () => {
|
|
62
|
+
_classPrivateFieldSet(this, _isPendingDk, true);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
54
66
|
_classPrivateFieldInitSpec(this, _onInput, {
|
|
55
67
|
writable: true,
|
|
56
68
|
value: e => {
|
|
@@ -70,7 +82,12 @@ defineCustomElement('sinch-input', (_$input = new WeakMap(), _$label = new WeakM
|
|
|
70
82
|
const prevSelectionEnd = _classPrivateFieldGet(this, _selectionEnd);
|
|
71
83
|
|
|
72
84
|
const isPrevCursorEnd = prevSelectionStart === prevSelectionEnd && prevSelectionStart === prevValue.length;
|
|
73
|
-
|
|
85
|
+
|
|
86
|
+
if (!_classPrivateFieldGet(this, _isPendingDk)) {
|
|
87
|
+
_classPrivateFieldGet(this, _$input).value = prevValue;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
_classPrivateFieldSet(this, _isPendingDk, false);
|
|
74
91
|
|
|
75
92
|
if (!isPrevCursorEnd) {
|
|
76
93
|
_classPrivateFieldGet(this, _$input).setSelectionRange(prevSelectionStart, prevSelectionEnd);
|
|
@@ -109,10 +126,14 @@ defineCustomElement('sinch-input', (_$input = new WeakMap(), _$label = new WeakM
|
|
|
109
126
|
this.setAttribute('role', 'textbox');
|
|
110
127
|
|
|
111
128
|
_classPrivateFieldGet(this, _$input).addEventListener('input', _classPrivateFieldGet(this, _onInput));
|
|
129
|
+
|
|
130
|
+
_classPrivateFieldGet(this, _$input).addEventListener('compositionstart', _classPrivateFieldGet(this, _onCompositionStart));
|
|
112
131
|
}
|
|
113
132
|
|
|
114
133
|
disconnectedCallback() {
|
|
115
134
|
_classPrivateFieldGet(this, _$input).removeEventListener('input', _classPrivateFieldGet(this, _onInput));
|
|
135
|
+
|
|
136
|
+
_classPrivateFieldGet(this, _$input).removeEventListener('compositionstart', _classPrivateFieldGet(this, _onCompositionStart));
|
|
116
137
|
}
|
|
117
138
|
|
|
118
139
|
static get observedAttributes() {
|
package/package.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TSinchElementReact } from '../types';
|
|
2
|
+
declare type TSinchSegmentElement = HTMLElement & {
|
|
3
|
+
caption: string;
|
|
4
|
+
collapsed: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare type TSinchSegmentReact = TSinchElementReact<TSinchSegmentElement> & {
|
|
7
|
+
caption: string;
|
|
8
|
+
collapsed?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare global {
|
|
11
|
+
namespace JSX {
|
|
12
|
+
interface IntrinsicElements {
|
|
13
|
+
'sinch-segment': TSinchSegmentReact;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
interface HTMLElementTagNameMap {
|
|
17
|
+
'sinch-segment': TSinchSegmentElement;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export {};
|
package/segment/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';
|
|
2
|
+
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';
|
|
3
|
+
|
|
4
|
+
var _$caption;
|
|
5
|
+
|
|
6
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
7
|
+
|
|
8
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
9
|
+
|
|
10
|
+
import { defineCustomElement, getAttribute, getBooleanAttribute, updateAttribute, updateBooleanAttribute } from '../utils';
|
|
11
|
+
const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:column;width:100%;border-radius:4px;box-sizing:border-box;background-color:var(--sinch-color-snow-100);color:var(--sinch-color-text-default);font:var(--sinch-font-body);border:none;box-shadow:1px 2px 8px rgb(0 0 0 / 10%)}#header{position:relative;display:flex;flex-direction:row;align-items:center;gap:16px;height:32px;padding:24px 32px 16px;--sinch-size-icon:32px}#caption{font:var(--sinch-font-title-2);color:var(--sinch-color-text-default);flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#content-wrapper{padding:0 32px}#action{display:flex;flex-direction:row;justify-content:flex-end;gap:16px;padding:16px 32px 24px}#info{position:relative;display:flex;flex-direction:row;align-items:center;gap:16px;z-index:1}:host([collapsed]:not([collapsed=false])) :is(#content-wrapper,#action){display:none}:host([collapsed]:not([collapsed=false])) #header{padding-bottom:24px}</style><div id="wrapper"><div id="header"><slot name="icon"></slot><span id="caption"></span><div id="info"><slot name="info"></slot></div><slot name="collapse"></slot></div><div id="content-wrapper"><slot name="content"></slot></div><div id="action"><slot name="action"></slot></div></div>';
|
|
12
|
+
const template = document.createElement('template');
|
|
13
|
+
template.innerHTML = templateHTML;
|
|
14
|
+
defineCustomElement('sinch-segment', (_$caption = new WeakMap(), class extends HTMLElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
|
|
18
|
+
_classPrivateFieldInitSpec(this, _$caption, {
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const shadowRoot = this.attachShadow({
|
|
24
|
+
mode: 'closed',
|
|
25
|
+
delegatesFocus: true
|
|
26
|
+
});
|
|
27
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
28
|
+
|
|
29
|
+
_classPrivateFieldSet(this, _$caption, shadowRoot.querySelector('#caption'));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static get observedAttributes() {
|
|
33
|
+
return ['caption'];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
attributeChangedCallback(name, _, newVal) {
|
|
37
|
+
switch (name) {
|
|
38
|
+
case 'caption':
|
|
39
|
+
{
|
|
40
|
+
_classPrivateFieldGet(this, _$caption).textContent = newVal;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
set caption(caption) {
|
|
47
|
+
updateAttribute(this, 'caption', caption);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get caption() {
|
|
51
|
+
return getAttribute(this, 'caption', '');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
set collapsed(isChecked) {
|
|
55
|
+
updateBooleanAttribute(this, 'collapsed', isChecked);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get collapsed() {
|
|
59
|
+
return getBooleanAttribute(this, 'collapsed');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
}));
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import '../icon/expand-less';
|
|
2
|
+
import '../icon/expand-more';
|
|
3
|
+
import type { TSinchElementReact } from '../types';
|
|
4
|
+
import type { FocusEvent, SyntheticEvent } from 'react';
|
|
5
|
+
export declare type TSinchSegmentExpandElement = HTMLElement & {
|
|
6
|
+
value: boolean;
|
|
7
|
+
focus(): void;
|
|
8
|
+
blur(): void;
|
|
9
|
+
};
|
|
10
|
+
export declare type TSinchSegmentExpandReact = TSinchElementReact<TSinchSegmentExpandElement> & {
|
|
11
|
+
value: boolean;
|
|
12
|
+
'aria-label': string;
|
|
13
|
+
onChange: (e: SyntheticEvent<TSinchSegmentExpandElement, CustomEvent<boolean>>) => void;
|
|
14
|
+
onFocus?: (e: FocusEvent<TSinchSegmentExpandElement>) => void;
|
|
15
|
+
onBlur?: (e: FocusEvent<TSinchSegmentExpandElement>) => void;
|
|
16
|
+
};
|
|
17
|
+
declare global {
|
|
18
|
+
namespace JSX {
|
|
19
|
+
interface IntrinsicElements {
|
|
20
|
+
'sinch-segment-collapse': TSinchSegmentExpandReact;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
interface HTMLElementTagNameMap {
|
|
24
|
+
'sinch-segment-collapse': TSinchSegmentExpandElement;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';
|
|
3
|
+
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';
|
|
4
|
+
|
|
5
|
+
var _$input;
|
|
6
|
+
|
|
7
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
8
|
+
|
|
9
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
10
|
+
|
|
11
|
+
import '../icon/expand-less';
|
|
12
|
+
import '../icon/expand-more';
|
|
13
|
+
import { defineCustomElement, getBooleanAttribute, isAttrTrue, updateBooleanAttribute } from '../utils';
|
|
14
|
+
const templateHTML = '<style>:host{display:contents;--sinch-size-icon:32px}input{all:initial;position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;cursor:pointer}input:focus~sinch-icon-expand-less,input:focus~sinch-icon-expand-more{border-radius:4px;box-shadow:0 0 0 1px var(--sinch-color-stormy-500) inset}#up{display:block}#down{display:none}:host([value]:not([value=false])) #up{display:none}:host([value]:not([value=false])) #down{display:block}</style><input type="checkbox"/><sinch-icon-expand-less id="up"></sinch-icon-expand-less><sinch-icon-expand-more id="down"></sinch-icon-expand-more>';
|
|
15
|
+
const template = document.createElement('template');
|
|
16
|
+
template.innerHTML = templateHTML;
|
|
17
|
+
defineCustomElement('sinch-segment-collapse', (_$input = new WeakMap(), class extends HTMLElement {
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
|
|
21
|
+
_classPrivateFieldInitSpec(this, _$input, {
|
|
22
|
+
writable: true,
|
|
23
|
+
value: void 0
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, 'onCheckboxInput', e => {
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
|
|
29
|
+
const isChecked = _classPrivateFieldGet(this, _$input).checked;
|
|
30
|
+
|
|
31
|
+
_classPrivateFieldGet(this, _$input).checked = this.value;
|
|
32
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
33
|
+
detail: isChecked,
|
|
34
|
+
bubbles: true
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const shadowRoot = this.attachShadow({
|
|
39
|
+
mode: 'closed'
|
|
40
|
+
});
|
|
41
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
42
|
+
|
|
43
|
+
_classPrivateFieldSet(this, _$input, shadowRoot.querySelector('input'));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
connectedCallback() {
|
|
47
|
+
this.setAttribute('role', 'checkbox');
|
|
48
|
+
|
|
49
|
+
_classPrivateFieldGet(this, _$input).addEventListener('input', this.onCheckboxInput);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
disconnectedCallback() {
|
|
53
|
+
_classPrivateFieldGet(this, _$input).removeEventListener('input', this.onCheckboxInput);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get type() {
|
|
57
|
+
return 'text';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
get nodeName() {
|
|
61
|
+
return 'input';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static get observedAttributes() {
|
|
65
|
+
return ['value'];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
attributeChangedCallback(name, _, newVal) {
|
|
69
|
+
switch (name) {
|
|
70
|
+
case 'value':
|
|
71
|
+
{
|
|
72
|
+
_classPrivateFieldGet(this, _$input).checked = isAttrTrue(newVal);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
set value(isChecked) {
|
|
79
|
+
updateBooleanAttribute(this, 'value', isChecked);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
get value() {
|
|
83
|
+
return getBooleanAttribute(this, 'value');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
focus() {
|
|
87
|
+
_classPrivateFieldGet(this, _$input).focus();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
blur() {
|
|
91
|
+
_classPrivateFieldGet(this, _$input).blur();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
}));
|
package/textarea/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';
|
|
2
2
|
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';
|
|
3
3
|
|
|
4
|
-
var _$input, _$label, _$optionalText, _$additionalText, _$invalidText, _selectionStart, _selectionEnd, _onInput;
|
|
4
|
+
var _$input, _$label, _$optionalText, _$additionalText, _$invalidText, _selectionStart, _selectionEnd, _isPendingDk, _onCompositionStart, _onInput;
|
|
5
5
|
|
|
6
6
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ import { defineCustomElement, getAttribute, getBooleanAttribute, isAttrTrue, upd
|
|
|
11
11
|
const templateHTML = '<style>:host{display:inline-block;vertical-align:middle;outline:0;--sinch-color-icon:var(--sinch-color-stormy-500)}#wrapper{width:100%;box-sizing:border-box}#input{all:initial;border:1px solid var(--sinch-color-stormy-200);box-sizing:border-box;border-radius:4px;width:100%;min-height:86px;margin:2px 0;padding:8px 12px;font:var(--sinch-font-body);color:var(--sinch-color-text-default);caret-color:var(--sinch-caret-color,auto);resize:vertical}#input::placeholder{font:var(--sinch-font-body);color:var(--sinch-color-text-muted)}#input:disabled{border-color:var(--sinch-color-snow-500);color:var(--sinch-color-stormy-100)}#input:disabled::placeholder{color:var(--sinch-color-snow-500)}#input:focus{border-color:var(--sinch-color-stormy-600)}:host([invalidtext]:not([invalidtext=""])) #input:not(:disabled){border-color:var(--sinch-color-text-invalid)}#bottom,#top{display:flex;align-items:baseline}#top{height:24px}#bottom{height:20px}#additional,#invalid,#label,#optional{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#label{font:var(--sinch-font-title-4);color:var(--sinch-color-text-default)}#optional{flex:1;text-align:right;font:var(--sinch-font-small-text);color:var(--sinch-color-text-muted)}#additional{flex:1;text-align:right;font:var(--sinch-font-extra-small-text);color:var(--sinch-color-text-muted)}#invalid{font:var(--sinch-font-extra-small-text);color:var(--sinch-color-text-invalid)}::slotted(sinch-help-tooltip){align-self:center;margin:0 8px}:host([disabled]:not([disabled=false])) :is(#label,#additional,#optional,#invalid){color:var(--sinch-color-stormy-100)}:host([disabled]:not([disabled=false])){--sinch-color-icon:var(--sinch-color-stormy-100)}</style><div id="wrapper"><div id="top"><label id="label" for="input"></label><slot name="tooltip"></slot><span id="optional"></span></div><textarea id="input" rows="3"></textarea><div id="bottom"><span id="invalid"></span> <span id="additional"></span></div></div>';
|
|
12
12
|
const template = document.createElement('template');
|
|
13
13
|
template.innerHTML = templateHTML;
|
|
14
|
-
defineCustomElement('sinch-textarea', (_$input = new WeakMap(), _$label = new WeakMap(), _$optionalText = new WeakMap(), _$additionalText = new WeakMap(), _$invalidText = new WeakMap(), _selectionStart = new WeakMap(), _selectionEnd = new WeakMap(), _onInput = new WeakMap(), class extends HTMLElement {
|
|
14
|
+
defineCustomElement('sinch-textarea', (_$input = new WeakMap(), _$label = new WeakMap(), _$optionalText = new WeakMap(), _$additionalText = new WeakMap(), _$invalidText = new WeakMap(), _selectionStart = new WeakMap(), _selectionEnd = new WeakMap(), _isPendingDk = new WeakMap(), _onCompositionStart = new WeakMap(), _onInput = new WeakMap(), class extends HTMLElement {
|
|
15
15
|
constructor() {
|
|
16
16
|
super();
|
|
17
17
|
|
|
@@ -50,6 +50,18 @@ defineCustomElement('sinch-textarea', (_$input = new WeakMap(), _$label = new We
|
|
|
50
50
|
value: null
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
+
_classPrivateFieldInitSpec(this, _isPendingDk, {
|
|
54
|
+
writable: true,
|
|
55
|
+
value: false
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
_classPrivateFieldInitSpec(this, _onCompositionStart, {
|
|
59
|
+
writable: true,
|
|
60
|
+
value: () => {
|
|
61
|
+
_classPrivateFieldSet(this, _isPendingDk, true);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
53
65
|
_classPrivateFieldInitSpec(this, _onInput, {
|
|
54
66
|
writable: true,
|
|
55
67
|
value: e => {
|
|
@@ -69,7 +81,12 @@ defineCustomElement('sinch-textarea', (_$input = new WeakMap(), _$label = new We
|
|
|
69
81
|
const prevSelectionEnd = _classPrivateFieldGet(this, _selectionEnd);
|
|
70
82
|
|
|
71
83
|
const isPrevCursorEnd = prevSelectionStart === prevSelectionEnd && prevSelectionStart === prevValue.length;
|
|
72
|
-
|
|
84
|
+
|
|
85
|
+
if (!_classPrivateFieldGet(this, _isPendingDk)) {
|
|
86
|
+
_classPrivateFieldGet(this, _$input).value = prevValue;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
_classPrivateFieldSet(this, _isPendingDk, false);
|
|
73
90
|
|
|
74
91
|
if (!isPrevCursorEnd) {
|
|
75
92
|
_classPrivateFieldGet(this, _$input).setSelectionRange(prevSelectionStart, prevSelectionEnd);
|
|
@@ -109,10 +126,14 @@ defineCustomElement('sinch-textarea', (_$input = new WeakMap(), _$label = new We
|
|
|
109
126
|
this.setAttribute('aria-multiline', 'true');
|
|
110
127
|
|
|
111
128
|
_classPrivateFieldGet(this, _$input).addEventListener('input', _classPrivateFieldGet(this, _onInput));
|
|
129
|
+
|
|
130
|
+
_classPrivateFieldGet(this, _$input).addEventListener('compositionstart', _classPrivateFieldGet(this, _onCompositionStart));
|
|
112
131
|
}
|
|
113
132
|
|
|
114
133
|
disconnectedCallback() {
|
|
115
134
|
_classPrivateFieldGet(this, _$input).removeEventListener('input', _classPrivateFieldGet(this, _onInput));
|
|
135
|
+
|
|
136
|
+
_classPrivateFieldGet(this, _$input).removeEventListener('compositionstart', _classPrivateFieldGet(this, _onCompositionStart));
|
|
116
137
|
}
|
|
117
138
|
|
|
118
139
|
static get observedAttributes() {
|