@sula-tech/webcomponents 0.1.1 → 0.3.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/dist/cjs/{index-7973b779.js → index-87eec792.js} +126 -5
- package/dist/cjs/index-87eec792.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{sula-avatar_3.cjs.entry.js → sula-avatar_9.cjs.entry.js} +652 -7
- package/dist/cjs/sula-avatar_9.cjs.entry.js.map +1 -0
- package/dist/cjs/webcomponents.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +7 -1
- package/dist/collection/components/sula-avatar/sula-avatar.css +1 -1
- package/dist/collection/components/sula-avatar/sula-avatar.stories.js +14 -17
- package/dist/collection/components/sula-avatar/sula-avatar.stories.js.map +1 -1
- package/dist/collection/components/sula-badge/model/sula-badge.model.js +23 -0
- package/dist/collection/components/sula-badge/model/sula-badge.model.js.map +1 -0
- package/dist/collection/components/sula-badge/sula-badge.css +1 -0
- package/dist/collection/components/sula-badge/sula-badge.js +230 -0
- package/dist/collection/components/sula-badge/sula-badge.js.map +1 -0
- package/dist/collection/components/sula-badge/sula-badge.stories.js +148 -0
- package/dist/collection/components/sula-badge/sula-badge.stories.js.map +1 -0
- package/dist/collection/components/sula-button/sula-button.css +1 -1
- package/dist/collection/components/sula-button/sula-button.js +1 -1
- package/dist/collection/components/sula-button/sula-button.stories.js +36 -9
- package/dist/collection/components/sula-button/sula-button.stories.js.map +1 -1
- package/dist/collection/components/sula-checkbox/model/sula-checkbox.model.js +6 -0
- package/dist/collection/components/sula-checkbox/model/sula-checkbox.model.js.map +1 -0
- package/dist/collection/components/sula-checkbox/sula-checkbox.css +1 -0
- package/dist/collection/components/sula-checkbox/sula-checkbox.js +233 -0
- package/dist/collection/components/sula-checkbox/sula-checkbox.js.map +1 -0
- package/dist/collection/components/sula-checkbox/sula-checkbox.stories.js +113 -0
- package/dist/collection/components/sula-checkbox/sula-checkbox.stories.js.map +1 -0
- package/dist/collection/components/sula-icon/sula-icon.css +1 -1
- package/dist/collection/components/sula-icon/sula-icon.js +1 -1
- package/dist/collection/components/sula-icon/sula-icon.stories.js +35 -14
- package/dist/collection/components/sula-icon/sula-icon.stories.js.map +1 -1
- package/dist/collection/components/sula-switch/model/sula-switch.model.js +6 -0
- package/dist/collection/components/sula-switch/model/sula-switch.model.js.map +1 -0
- package/dist/collection/components/sula-switch/sula-switch.css +1 -0
- package/dist/collection/components/sula-switch/sula-switch.js +235 -0
- package/dist/collection/components/sula-switch/sula-switch.js.map +1 -0
- package/dist/collection/components/sula-switch/sula-switch.stories.js +111 -0
- package/dist/collection/components/sula-switch/sula-switch.stories.js.map +1 -0
- package/dist/collection/components/sula-tag/model/sula-tag.model.js +28 -0
- package/dist/collection/components/sula-tag/model/sula-tag.model.js.map +1 -0
- package/dist/collection/components/sula-tag/sula-tag.css +1 -0
- package/dist/collection/components/sula-tag/sula-tag.js +249 -0
- package/dist/collection/components/sula-tag/sula-tag.js.map +1 -0
- package/dist/collection/components/sula-tag/sula-tag.stories.js +201 -0
- package/dist/collection/components/sula-tag/sula-tag.stories.js.map +1 -0
- package/dist/collection/components/sula-textarea/model/sula-textarea.model.js +6 -0
- package/dist/collection/components/sula-textarea/model/sula-textarea.model.js.map +1 -0
- package/dist/collection/components/sula-textarea/sula-textarea.css +1 -0
- package/dist/collection/components/sula-textarea/sula-textarea.js +358 -0
- package/dist/collection/components/sula-textarea/sula-textarea.js.map +1 -0
- package/dist/collection/components/sula-textarea/sula-textarea.stories.js +138 -0
- package/dist/collection/components/sula-textarea/sula-textarea.stories.js.map +1 -0
- package/dist/collection/components/sula-textfield/model/sula-textfield.model.js +11 -0
- package/dist/collection/components/sula-textfield/model/sula-textfield.model.js.map +1 -0
- package/dist/collection/components/sula-textfield/sula-textfield.css +1 -0
- package/dist/collection/components/sula-textfield/sula-textfield.js +376 -0
- package/dist/collection/components/sula-textfield/sula-textfield.js.map +1 -0
- package/dist/collection/components/sula-textfield/sula-textfield.stories.js +148 -0
- package/dist/collection/components/sula-textfield/sula-textfield.stories.js.map +1 -0
- package/dist/components/index.js +1 -1
- package/dist/components/{p-81fcc74a.js → p-048c28d3.js} +4 -4
- package/dist/components/{p-81fcc74a.js.map → p-048c28d3.js.map} +1 -1
- package/dist/components/{p-d3ba6302.js → p-881c6b35.js} +114 -6
- package/dist/components/p-881c6b35.js.map +1 -0
- package/dist/components/sula-avatar.js +3 -3
- package/dist/components/sula-avatar.js.map +1 -1
- package/dist/components/sula-badge.d.ts +11 -0
- package/dist/components/sula-badge.js +154 -0
- package/dist/components/sula-badge.js.map +1 -0
- package/dist/components/sula-button.js +4 -4
- package/dist/components/sula-button.js.map +1 -1
- package/dist/components/sula-checkbox.d.ts +11 -0
- package/dist/components/sula-checkbox.js +109 -0
- package/dist/components/sula-checkbox.js.map +1 -0
- package/dist/components/sula-icon.js +1 -1
- package/dist/components/sula-switch.d.ts +11 -0
- package/dist/components/sula-switch.js +105 -0
- package/dist/components/sula-switch.js.map +1 -0
- package/dist/components/sula-tag.d.ts +11 -0
- package/dist/components/sula-tag.js +157 -0
- package/dist/components/sula-tag.js.map +1 -0
- package/dist/components/sula-textarea.d.ts +11 -0
- package/dist/components/sula-textarea.js +166 -0
- package/dist/components/sula-textarea.js.map +1 -0
- package/dist/components/sula-textfield.d.ts +11 -0
- package/dist/components/sula-textfield.js +171 -0
- package/dist/components/sula-textfield.js.map +1 -0
- package/dist/esm/{index-9bf8f892.js → index-aa1c5f36.js} +126 -6
- package/dist/esm/index-aa1c5f36.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{sula-avatar_3.entry.js → sula-avatar_9.entry.js} +647 -8
- package/dist/esm/sula-avatar_9.entry.js.map +1 -0
- package/dist/esm/webcomponents.js +3 -3
- package/dist/types/components/sula-avatar/sula-avatar.stories.d.ts +0 -1
- package/dist/types/components/sula-badge/model/sula-badge.model.d.ts +19 -0
- package/dist/types/components/sula-badge/sula-badge.d.ts +33 -0
- package/dist/types/components/sula-badge/sula-badge.stories.d.ts +65 -0
- package/dist/types/components/sula-button/sula-button.stories.d.ts +2 -0
- package/dist/types/components/sula-checkbox/model/sula-checkbox.model.d.ts +4 -0
- package/dist/types/components/sula-checkbox/sula-checkbox.d.ts +42 -0
- package/dist/types/components/sula-checkbox/sula-checkbox.stories.d.ts +73 -0
- package/dist/types/components/sula-icon/sula-icon.stories.d.ts +5 -2
- package/dist/types/components/sula-switch/model/sula-switch.model.d.ts +4 -0
- package/dist/types/components/sula-switch/sula-switch.d.ts +41 -0
- package/dist/types/components/sula-switch/sula-switch.stories.d.ts +72 -0
- package/dist/types/components/sula-tag/model/sula-tag.model.d.ts +23 -0
- package/dist/types/components/sula-tag/sula-tag.d.ts +33 -0
- package/dist/types/components/sula-tag/sula-tag.stories.d.ts +82 -0
- package/dist/types/components/sula-textarea/model/sula-textarea.model.d.ts +4 -0
- package/dist/types/components/sula-textarea/sula-textarea.d.ts +65 -0
- package/dist/types/components/sula-textarea/sula-textarea.stories.d.ts +98 -0
- package/dist/types/components/sula-textfield/model/sula-textfield.model.d.ts +8 -0
- package/dist/types/components/sula-textfield/sula-textfield.d.ts +74 -0
- package/dist/types/components/sula-textfield/sula-textfield.stories.d.ts +108 -0
- package/dist/types/components.d.ts +510 -0
- package/dist/webcomponents/{p-cca32e44.js → p-5a36af0f.js} +343 -220
- package/dist/webcomponents/p-5a36af0f.js.map +1 -0
- package/dist/webcomponents/{p-82d7a024.entry.js → p-89f57a33.entry.js} +917 -64
- package/dist/webcomponents/p-89f57a33.entry.js.map +1 -0
- package/dist/webcomponents/webcomponents.esm.js +68 -13
- package/dist/webcomponents/webcomponents.esm.js.map +1 -1
- package/package.json +21 -13
- package/readme.md +36 -18
- package/dist/cjs/index-7973b779.js.map +0 -1
- package/dist/cjs/sula-avatar_3.cjs.entry.js.map +0 -1
- package/dist/components/p-d3ba6302.js.map +0 -1
- package/dist/esm/index-9bf8f892.js.map +0 -1
- package/dist/esm/sula-avatar_3.entry.js.map +0 -1
- package/dist/webcomponents/p-82d7a024.entry.js.map +0 -1
- package/dist/webcomponents/p-cca32e44.js.map +0 -1
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { Host, h } from "@stencil/core";
|
|
2
|
+
import { SulaTextfieldStatus, SulaTextfieldType } from "./model/sula-textfield.model";
|
|
3
|
+
export class SulaTextfield {
|
|
4
|
+
constructor() {
|
|
5
|
+
/**
|
|
6
|
+
* The textfield type
|
|
7
|
+
*/
|
|
8
|
+
this.type = SulaTextfieldType.Text;
|
|
9
|
+
/**
|
|
10
|
+
* The textfield status
|
|
11
|
+
*/
|
|
12
|
+
this.status = SulaTextfieldStatus.Default;
|
|
13
|
+
this.inputIsOpen = false;
|
|
14
|
+
this.textValue = '';
|
|
15
|
+
this.showPassword = false;
|
|
16
|
+
this.inputIsFocused = false;
|
|
17
|
+
this.handleInputClick = () => {
|
|
18
|
+
this.toggleOptions(true);
|
|
19
|
+
};
|
|
20
|
+
this.handleInputChanges = (event) => {
|
|
21
|
+
const newValue = event.target.value;
|
|
22
|
+
this.textValue = newValue;
|
|
23
|
+
this.valueChanged.emit(newValue);
|
|
24
|
+
};
|
|
25
|
+
this.handleFocus = () => {
|
|
26
|
+
if (this.disabled)
|
|
27
|
+
return;
|
|
28
|
+
this.toggleOptions(true);
|
|
29
|
+
this.inputElement.focus();
|
|
30
|
+
};
|
|
31
|
+
this.handleBlur = () => {
|
|
32
|
+
this.toggleOptions(false);
|
|
33
|
+
this.focusedOut.emit();
|
|
34
|
+
this.inputIsFocused = false;
|
|
35
|
+
};
|
|
36
|
+
this.handleInputFocus = () => {
|
|
37
|
+
this.focusedOn.emit();
|
|
38
|
+
this.inputIsFocused = true;
|
|
39
|
+
};
|
|
40
|
+
this.handleIconClick = (event) => {
|
|
41
|
+
if (this.type === SulaTextfieldType.Password) {
|
|
42
|
+
event.stopPropagation();
|
|
43
|
+
this.handlePasswordIconClicked();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
handleClick(event) {
|
|
48
|
+
if (!this.node)
|
|
49
|
+
return;
|
|
50
|
+
const clickInside = this.node.contains(event.target);
|
|
51
|
+
if (!clickInside) {
|
|
52
|
+
this.toggleOptions(false);
|
|
53
|
+
this.focusedOut.emit();
|
|
54
|
+
this.inputIsFocused = false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
componentWillLoad() {
|
|
58
|
+
if (this.value && this.value.trim().length > 0) {
|
|
59
|
+
this.textValue = this.value;
|
|
60
|
+
this.inputIsOpen = true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
componentDidLoad() {
|
|
64
|
+
if (this.textValue && this.textValue.trim().length > 0) {
|
|
65
|
+
this.changeElementsStyle();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
toggleOptions(inputIsOpen) {
|
|
69
|
+
if ((this.inputIsOpen && this.textValue && this.textValue.length > 0) || this.disabled)
|
|
70
|
+
return;
|
|
71
|
+
this.inputIsOpen = inputIsOpen;
|
|
72
|
+
this.changeElementsStyle();
|
|
73
|
+
this.inputElement.focus();
|
|
74
|
+
}
|
|
75
|
+
changeElementsStyle() {
|
|
76
|
+
this.inputContainer.style.display = this.inputIsOpen ? 'flex' : 'none';
|
|
77
|
+
this.labelElement.style.display = this.inputIsOpen ? 'none' : 'block';
|
|
78
|
+
if (!this.inputIsOpen) {
|
|
79
|
+
this.labelElement.classList.add('from-up');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
handlePasswordIconClicked() {
|
|
83
|
+
const cursorPosition = this.inputElement.selectionStart;
|
|
84
|
+
const inputValue = this.inputElement.value;
|
|
85
|
+
const inputType = this.showPassword ? SulaTextfieldType.Password : SulaTextfieldType.Text;
|
|
86
|
+
this.inputElement.setAttribute('type', inputType);
|
|
87
|
+
this.showPassword = !this.showPassword;
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
this.inputElement.value = inputValue;
|
|
90
|
+
this.inputElement.setSelectionRange(cursorPosition, cursorPosition);
|
|
91
|
+
}, 0);
|
|
92
|
+
}
|
|
93
|
+
getInputIcon() {
|
|
94
|
+
if (this.type === SulaTextfieldType.Password) {
|
|
95
|
+
return this.showPassword ? 'ph ph-eye' : 'ph ph-eye-slash';
|
|
96
|
+
}
|
|
97
|
+
return this.icon;
|
|
98
|
+
}
|
|
99
|
+
render() {
|
|
100
|
+
return (h(Host, { key: '7861723c4c9a71e02a642cc856978432f1ed408e', ref: node => (this.node = node) }, h("div", { key: 'bc52f29a24273991355aa8b168f4e0740391e582' }, h("div", { key: '69fe9a5ffad527e0667fd47c8afa53b8dfd1f999', id: "button-container", class: {
|
|
101
|
+
'flex items-center border rounded-sm px-16 outline-none h-[72px] caret-brand-primary': true,
|
|
102
|
+
'flex-row justify-between': !!this.icon || this.type === SulaTextfieldType.Password,
|
|
103
|
+
'button-focus': this.inputIsFocused && !this.disabled && this.status === SulaTextfieldStatus.Default,
|
|
104
|
+
'button-error': this.status === SulaTextfieldStatus.Error && !this.disabled,
|
|
105
|
+
'bg-states-bg-disabled border-line-general cursor-not-allowed': this.disabled,
|
|
106
|
+
'bg-surface-body border-line-input cursor-pointer': !this.disabled,
|
|
107
|
+
}, tabIndex: 0, onFocus: this.handleFocus, onClick: this.handleInputClick }, !this.disabled && (h("div", { key: '8590a7a30d6f8887fa6e32305ecdd7a446abe690', class: { 'hidden flex-col w-full': true, 'pr-12': !!this.icon }, ref: node => (this.inputContainer = node) }, h("label", { key: '6c93818aa3b4d0dbc487b45b6cf1935fe38669fe', class: "font-bold text-sm text-text-primary from-down" }, this.label), h("input", { key: 'e24e3743fb2aa481eaa20034b60b94e932396b24', type: this.type, ref: node => (this.inputElement = node), placeholder: this.placeholder, class: "outline-none text-base text-text-primary bg-transparent", onInput: this.handleInputChanges, onFocus: this.handleInputFocus, value: this.value }))), h("div", { key: '5c4542212763798121f13b7fcd1039ceaea3f2d3', id: "textfield-label", class: { 'text-base flex items-center': true, 'text-text-primary': !this.disabled, 'text-text-disabled': this.disabled }, ref: node => (this.labelElement = node) }, this.label), (!!this.icon || this.type === SulaTextfieldType.Password) && (h("div", { key: 'faa4e5e74277dec53ed4665885c18f56b4f4b487', class: "flex items-center justify-center", onClick: this.handleIconClick }, h("sula-icon", { key: '5c189458c9994fc2a849d9ff1720044f070be2b1', icon: this.getInputIcon(), customClass: `text-2xl ${this.disabled ? 'text-icon-disabled' : 'text-icon-primary'}` })))), (this.helpText || this.maxLength) && !this.disabled && (h("div", { key: 'a79c6661890b9fe306329de28d8471b9b051e78e', class: "flex justify-between items-center px-16 mt-4 text-sm" }, this.helpText && (h("div", { key: 'c7f7cba7ec6cb4e1492d9ae0cae3368325aaa5a4', id: "textfield-help-text", class: { 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error } }, this.helpText)), this.maxLength && (h("div", { key: 'b50537b15c8f565b02b0eceac9a061e250a7bd10', id: "max-length-container", class: { 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error } }, this.textValue ? this.textValue.length : 0, "/", this.maxLength)))))));
|
|
108
|
+
}
|
|
109
|
+
static get is() { return "sula-textfield"; }
|
|
110
|
+
static get encapsulation() { return "shadow"; }
|
|
111
|
+
static get originalStyleUrls() {
|
|
112
|
+
return {
|
|
113
|
+
"$": ["sula-textfield.scss"]
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
static get styleUrls() {
|
|
117
|
+
return {
|
|
118
|
+
"$": ["sula-textfield.css"]
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
static get properties() {
|
|
122
|
+
return {
|
|
123
|
+
"value": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"mutable": true,
|
|
126
|
+
"complexType": {
|
|
127
|
+
"original": "string",
|
|
128
|
+
"resolved": "string",
|
|
129
|
+
"references": {}
|
|
130
|
+
},
|
|
131
|
+
"required": false,
|
|
132
|
+
"optional": true,
|
|
133
|
+
"docs": {
|
|
134
|
+
"tags": [],
|
|
135
|
+
"text": "Value for the input."
|
|
136
|
+
},
|
|
137
|
+
"getter": false,
|
|
138
|
+
"setter": false,
|
|
139
|
+
"attribute": "value",
|
|
140
|
+
"reflect": false
|
|
141
|
+
},
|
|
142
|
+
"type": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"mutable": false,
|
|
145
|
+
"complexType": {
|
|
146
|
+
"original": "SulaTextfieldType",
|
|
147
|
+
"resolved": "SulaTextfieldType.Password | SulaTextfieldType.Text",
|
|
148
|
+
"references": {
|
|
149
|
+
"SulaTextfieldType": {
|
|
150
|
+
"location": "import",
|
|
151
|
+
"path": "./model/sula-textfield.model",
|
|
152
|
+
"id": "src/components/sula-textfield/model/sula-textfield.model.ts::SulaTextfieldType"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"required": false,
|
|
157
|
+
"optional": false,
|
|
158
|
+
"docs": {
|
|
159
|
+
"tags": [],
|
|
160
|
+
"text": "The textfield type"
|
|
161
|
+
},
|
|
162
|
+
"getter": false,
|
|
163
|
+
"setter": false,
|
|
164
|
+
"attribute": "type",
|
|
165
|
+
"reflect": false,
|
|
166
|
+
"defaultValue": "SulaTextfieldType.Text"
|
|
167
|
+
},
|
|
168
|
+
"status": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"mutable": true,
|
|
171
|
+
"complexType": {
|
|
172
|
+
"original": "SulaTextfieldStatus",
|
|
173
|
+
"resolved": "SulaTextfieldStatus.Default | SulaTextfieldStatus.Error",
|
|
174
|
+
"references": {
|
|
175
|
+
"SulaTextfieldStatus": {
|
|
176
|
+
"location": "import",
|
|
177
|
+
"path": "./model/sula-textfield.model",
|
|
178
|
+
"id": "src/components/sula-textfield/model/sula-textfield.model.ts::SulaTextfieldStatus"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"required": false,
|
|
183
|
+
"optional": false,
|
|
184
|
+
"docs": {
|
|
185
|
+
"tags": [],
|
|
186
|
+
"text": "The textfield status"
|
|
187
|
+
},
|
|
188
|
+
"getter": false,
|
|
189
|
+
"setter": false,
|
|
190
|
+
"attribute": "status",
|
|
191
|
+
"reflect": false,
|
|
192
|
+
"defaultValue": "SulaTextfieldStatus.Default"
|
|
193
|
+
},
|
|
194
|
+
"label": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"mutable": false,
|
|
197
|
+
"complexType": {
|
|
198
|
+
"original": "string",
|
|
199
|
+
"resolved": "string",
|
|
200
|
+
"references": {}
|
|
201
|
+
},
|
|
202
|
+
"required": false,
|
|
203
|
+
"optional": false,
|
|
204
|
+
"docs": {
|
|
205
|
+
"tags": [],
|
|
206
|
+
"text": "The textfield label"
|
|
207
|
+
},
|
|
208
|
+
"getter": false,
|
|
209
|
+
"setter": false,
|
|
210
|
+
"attribute": "label",
|
|
211
|
+
"reflect": false
|
|
212
|
+
},
|
|
213
|
+
"placeholder": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"mutable": false,
|
|
216
|
+
"complexType": {
|
|
217
|
+
"original": "string",
|
|
218
|
+
"resolved": "string",
|
|
219
|
+
"references": {}
|
|
220
|
+
},
|
|
221
|
+
"required": false,
|
|
222
|
+
"optional": false,
|
|
223
|
+
"docs": {
|
|
224
|
+
"tags": [],
|
|
225
|
+
"text": "The textfield placeholder"
|
|
226
|
+
},
|
|
227
|
+
"getter": false,
|
|
228
|
+
"setter": false,
|
|
229
|
+
"attribute": "placeholder",
|
|
230
|
+
"reflect": false
|
|
231
|
+
},
|
|
232
|
+
"disabled": {
|
|
233
|
+
"type": "boolean",
|
|
234
|
+
"mutable": true,
|
|
235
|
+
"complexType": {
|
|
236
|
+
"original": "boolean",
|
|
237
|
+
"resolved": "boolean",
|
|
238
|
+
"references": {}
|
|
239
|
+
},
|
|
240
|
+
"required": false,
|
|
241
|
+
"optional": false,
|
|
242
|
+
"docs": {
|
|
243
|
+
"tags": [],
|
|
244
|
+
"text": "The textfield is disabled"
|
|
245
|
+
},
|
|
246
|
+
"getter": false,
|
|
247
|
+
"setter": false,
|
|
248
|
+
"attribute": "disabled",
|
|
249
|
+
"reflect": false
|
|
250
|
+
},
|
|
251
|
+
"helpText": {
|
|
252
|
+
"type": "string",
|
|
253
|
+
"mutable": false,
|
|
254
|
+
"complexType": {
|
|
255
|
+
"original": "string",
|
|
256
|
+
"resolved": "string",
|
|
257
|
+
"references": {}
|
|
258
|
+
},
|
|
259
|
+
"required": false,
|
|
260
|
+
"optional": true,
|
|
261
|
+
"docs": {
|
|
262
|
+
"tags": [],
|
|
263
|
+
"text": "The help text for textfield"
|
|
264
|
+
},
|
|
265
|
+
"getter": false,
|
|
266
|
+
"setter": false,
|
|
267
|
+
"attribute": "help-text",
|
|
268
|
+
"reflect": false
|
|
269
|
+
},
|
|
270
|
+
"maxLength": {
|
|
271
|
+
"type": "number",
|
|
272
|
+
"mutable": false,
|
|
273
|
+
"complexType": {
|
|
274
|
+
"original": "number",
|
|
275
|
+
"resolved": "number",
|
|
276
|
+
"references": {}
|
|
277
|
+
},
|
|
278
|
+
"required": false,
|
|
279
|
+
"optional": true,
|
|
280
|
+
"docs": {
|
|
281
|
+
"tags": [],
|
|
282
|
+
"text": "The textfield max length"
|
|
283
|
+
},
|
|
284
|
+
"getter": false,
|
|
285
|
+
"setter": false,
|
|
286
|
+
"attribute": "max-length",
|
|
287
|
+
"reflect": false
|
|
288
|
+
},
|
|
289
|
+
"icon": {
|
|
290
|
+
"type": "string",
|
|
291
|
+
"mutable": false,
|
|
292
|
+
"complexType": {
|
|
293
|
+
"original": "string",
|
|
294
|
+
"resolved": "string",
|
|
295
|
+
"references": {}
|
|
296
|
+
},
|
|
297
|
+
"required": false,
|
|
298
|
+
"optional": true,
|
|
299
|
+
"docs": {
|
|
300
|
+
"tags": [],
|
|
301
|
+
"text": "The textfield icon"
|
|
302
|
+
},
|
|
303
|
+
"getter": false,
|
|
304
|
+
"setter": false,
|
|
305
|
+
"attribute": "icon",
|
|
306
|
+
"reflect": false
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
static get states() {
|
|
311
|
+
return {
|
|
312
|
+
"inputIsOpen": {},
|
|
313
|
+
"textValue": {},
|
|
314
|
+
"showPassword": {},
|
|
315
|
+
"inputIsFocused": {}
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
static get events() {
|
|
319
|
+
return [{
|
|
320
|
+
"method": "valueChanged",
|
|
321
|
+
"name": "valueChanged",
|
|
322
|
+
"bubbles": true,
|
|
323
|
+
"cancelable": true,
|
|
324
|
+
"composed": true,
|
|
325
|
+
"docs": {
|
|
326
|
+
"tags": [],
|
|
327
|
+
"text": "Event emitted when input value changes."
|
|
328
|
+
},
|
|
329
|
+
"complexType": {
|
|
330
|
+
"original": "string",
|
|
331
|
+
"resolved": "string",
|
|
332
|
+
"references": {}
|
|
333
|
+
}
|
|
334
|
+
}, {
|
|
335
|
+
"method": "focusedOn",
|
|
336
|
+
"name": "focusedOn",
|
|
337
|
+
"bubbles": true,
|
|
338
|
+
"cancelable": true,
|
|
339
|
+
"composed": true,
|
|
340
|
+
"docs": {
|
|
341
|
+
"tags": [],
|
|
342
|
+
"text": "Event emitted when input is focused."
|
|
343
|
+
},
|
|
344
|
+
"complexType": {
|
|
345
|
+
"original": "void",
|
|
346
|
+
"resolved": "void",
|
|
347
|
+
"references": {}
|
|
348
|
+
}
|
|
349
|
+
}, {
|
|
350
|
+
"method": "focusedOut",
|
|
351
|
+
"name": "focusedOut",
|
|
352
|
+
"bubbles": true,
|
|
353
|
+
"cancelable": true,
|
|
354
|
+
"composed": true,
|
|
355
|
+
"docs": {
|
|
356
|
+
"tags": [],
|
|
357
|
+
"text": "Event emitted when input is focused out."
|
|
358
|
+
},
|
|
359
|
+
"complexType": {
|
|
360
|
+
"original": "void",
|
|
361
|
+
"resolved": "void",
|
|
362
|
+
"references": {}
|
|
363
|
+
}
|
|
364
|
+
}];
|
|
365
|
+
}
|
|
366
|
+
static get listeners() {
|
|
367
|
+
return [{
|
|
368
|
+
"name": "click",
|
|
369
|
+
"method": "handleClick",
|
|
370
|
+
"target": "document",
|
|
371
|
+
"capture": false,
|
|
372
|
+
"passive": false
|
|
373
|
+
}];
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=sula-textfield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sula-textfield.js","sourceRoot":"","sources":["../../../src/components/sula-textfield/sula-textfield.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, Host, Listen, Prop, State, h } from '@stencil/core';\nimport { SulaTextfieldStatus, SulaTextfieldType } from './model/sula-textfield.model';\n\n@Component({\n tag: 'sula-textfield',\n styleUrl: 'sula-textfield.scss',\n shadow: true,\n})\nexport class SulaTextfield {\n /**\n * Value for the input.\n */\n @Prop({ mutable: true })\n value?: string;\n\n /**\n * The textfield type\n */\n @Prop() type: SulaTextfieldType = SulaTextfieldType.Text;\n\n /**\n * The textfield status\n */\n @Prop({ mutable: true }) status: SulaTextfieldStatus = SulaTextfieldStatus.Default;\n\n /**\n * The textfield label\n */\n @Prop() label: string;\n\n /**\n * The textfield placeholder\n */\n @Prop() placeholder: string;\n\n /**\n * The textfield is disabled\n */\n @Prop({ mutable: true }) disabled: boolean;\n\n /**\n * The help text for textfield\n */\n @Prop() helpText?: string;\n\n /**\n * The textfield max length\n */\n @Prop() maxLength?: number;\n\n /**\n * The textfield icon\n */\n @Prop() icon?: string;\n\n /**\n * Event emitted when input value changes.\n */\n @Event()\n valueChanged: EventEmitter<string>;\n\n /**\n * Event emitted when input is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when input is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n inputIsOpen = false;\n\n @State()\n textValue: string = '';\n\n @State()\n showPassword = false;\n\n @State()\n inputIsFocused = false;\n\n inputContainer: HTMLDivElement;\n inputElement: HTMLInputElement;\n labelElement: HTMLDivElement;\n\n node?: HTMLElement;\n\n @Listen('click', { target: 'document' })\n handleClick(event: Event) {\n if (!this.node) return;\n\n const clickInside = this.node.contains(event.target as Node);\n\n if (!clickInside) {\n this.toggleOptions(false);\n this.focusedOut.emit();\n this.inputIsFocused = false;\n }\n }\n\n componentWillLoad() {\n if (this.value && this.value.trim().length > 0) {\n this.textValue = this.value;\n this.inputIsOpen = true;\n }\n }\n\n componentDidLoad() {\n if (this.textValue && this.textValue.trim().length > 0) {\n this.changeElementsStyle();\n }\n }\n\n handleInputClick = () => {\n this.toggleOptions(true);\n };\n\n toggleOptions(inputIsOpen: boolean) {\n if ((this.inputIsOpen && this.textValue && this.textValue.length > 0) || this.disabled) return;\n\n this.inputIsOpen = inputIsOpen;\n this.changeElementsStyle();\n this.inputElement.focus();\n }\n\n changeElementsStyle() {\n this.inputContainer.style.display = this.inputIsOpen ? 'flex' : 'none';\n this.labelElement.style.display = this.inputIsOpen ? 'none' : 'block';\n if (!this.inputIsOpen) {\n this.labelElement.classList.add('from-up');\n }\n }\n\n handleInputChanges = (event: InputEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n this.textValue = newValue;\n\n this.valueChanged.emit(newValue);\n };\n\n handleFocus = () => {\n if (this.disabled) return;\n this.toggleOptions(true);\n this.inputElement.focus();\n };\n\n handleBlur = () => {\n this.toggleOptions(false);\n\n this.focusedOut.emit();\n this.inputIsFocused = false;\n };\n\n handleInputFocus = () => {\n this.focusedOn.emit();\n this.inputIsFocused = true;\n };\n\n handleIconClick = (event: MouseEvent) => {\n if (this.type === SulaTextfieldType.Password) {\n event.stopPropagation();\n this.handlePasswordIconClicked();\n }\n };\n\n handlePasswordIconClicked() {\n const cursorPosition = this.inputElement.selectionStart;\n const inputValue = this.inputElement.value;\n const inputType = this.showPassword ? SulaTextfieldType.Password : SulaTextfieldType.Text;\n\n this.inputElement.setAttribute('type', inputType);\n this.showPassword = !this.showPassword;\n\n setTimeout(() => {\n this.inputElement.value = inputValue;\n\n this.inputElement.setSelectionRange(cursorPosition, cursorPosition);\n }, 0);\n }\n\n getInputIcon() {\n if (this.type === SulaTextfieldType.Password) {\n return this.showPassword ? 'ph ph-eye' : 'ph ph-eye-slash';\n }\n\n return this.icon;\n }\n\n render() {\n return (\n <Host ref={node => (this.node = node)}>\n <div>\n <div\n id=\"button-container\"\n class={{\n 'flex items-center border rounded-sm px-16 outline-none h-[72px] caret-brand-primary': true,\n 'flex-row justify-between': !!this.icon || this.type === SulaTextfieldType.Password,\n 'button-focus': this.inputIsFocused && !this.disabled && this.status === SulaTextfieldStatus.Default,\n 'button-error': this.status === SulaTextfieldStatus.Error && !this.disabled,\n 'bg-states-bg-disabled border-line-general cursor-not-allowed': this.disabled,\n 'bg-surface-body border-line-input cursor-pointer': !this.disabled,\n }}\n tabIndex={0}\n onFocus={this.handleFocus}\n onClick={this.handleInputClick}\n >\n {!this.disabled && (\n <div class={{ 'hidden flex-col w-full': true, 'pr-12': !!this.icon }} ref={node => (this.inputContainer = node)}>\n <label class=\"font-bold text-sm text-text-primary from-down\">{this.label}</label>\n <input\n type={this.type}\n ref={node => (this.inputElement = node)}\n placeholder={this.placeholder}\n class=\"outline-none text-base text-text-primary bg-transparent\"\n onInput={this.handleInputChanges}\n onFocus={this.handleInputFocus}\n value={this.value}\n />\n </div>\n )}\n\n <div\n id=\"textfield-label\"\n class={{ 'text-base flex items-center': true, 'text-text-primary': !this.disabled, 'text-text-disabled': this.disabled }}\n ref={node => (this.labelElement = node)}\n >\n {this.label}\n </div>\n\n {(!!this.icon || this.type === SulaTextfieldType.Password) && (\n <div class=\"flex items-center justify-center\" onClick={this.handleIconClick}>\n <sula-icon icon={this.getInputIcon()} customClass={`text-2xl ${this.disabled ? 'text-icon-disabled' : 'text-icon-primary'}`} />\n </div>\n )}\n </div>\n\n {(this.helpText || this.maxLength) && !this.disabled && (\n <div class=\"flex justify-between items-center px-16 mt-4 text-sm\">\n {this.helpText && (\n <div\n id=\"textfield-help-text\"\n class={{ 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error }}\n >\n {this.helpText}\n </div>\n )}\n {this.maxLength && (\n <div\n id=\"max-length-container\"\n class={{ 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error }}\n >\n {this.textValue ? this.textValue.length : 0}/{this.maxLength}\n </div>\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { SulaTextfieldStatus, SulaTextfieldType } from "./model/sula-textfield.model";
|
|
2
|
+
export default {
|
|
3
|
+
title: 'Components/sula-textfield',
|
|
4
|
+
tags: ['autodocs'],
|
|
5
|
+
argTypes: {
|
|
6
|
+
value: {
|
|
7
|
+
control: 'text',
|
|
8
|
+
defaultValue: '',
|
|
9
|
+
description: 'Value for the input',
|
|
10
|
+
type: {
|
|
11
|
+
required: false,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
type: {
|
|
15
|
+
control: { type: 'select' },
|
|
16
|
+
options: Object.values(SulaTextfieldType),
|
|
17
|
+
defaultValue: SulaTextfieldType.Text,
|
|
18
|
+
description: 'The textfield type',
|
|
19
|
+
type: {
|
|
20
|
+
required: false,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
status: {
|
|
24
|
+
control: { type: 'select' },
|
|
25
|
+
options: Object.values(SulaTextfieldStatus),
|
|
26
|
+
defaultValue: SulaTextfieldStatus.Default,
|
|
27
|
+
description: 'The textfield status',
|
|
28
|
+
type: {
|
|
29
|
+
required: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
label: {
|
|
33
|
+
control: 'text',
|
|
34
|
+
defaultValue: 'Label',
|
|
35
|
+
description: 'The textfield label',
|
|
36
|
+
type: {
|
|
37
|
+
required: false,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
placeholder: {
|
|
41
|
+
control: 'text',
|
|
42
|
+
defaultValue: 'Placeholder',
|
|
43
|
+
description: 'The textfield placeholder',
|
|
44
|
+
type: {
|
|
45
|
+
required: false,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
disabled: {
|
|
49
|
+
control: 'boolean',
|
|
50
|
+
defaultValue: false,
|
|
51
|
+
description: 'The textfield is disabled',
|
|
52
|
+
type: {
|
|
53
|
+
required: false,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
helpText: {
|
|
57
|
+
control: 'text',
|
|
58
|
+
defaultValue: '',
|
|
59
|
+
description: 'The help text for textfield',
|
|
60
|
+
type: {
|
|
61
|
+
required: false,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
maxLength: {
|
|
65
|
+
control: 'number',
|
|
66
|
+
defaultValue: 0,
|
|
67
|
+
description: 'The textfield max length',
|
|
68
|
+
type: {
|
|
69
|
+
required: false,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
icon: {
|
|
73
|
+
control: 'text',
|
|
74
|
+
defaultValue: '',
|
|
75
|
+
description: 'The textfield icon',
|
|
76
|
+
type: {
|
|
77
|
+
required: false,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
valueChanged: {
|
|
81
|
+
action: 'valueChanged',
|
|
82
|
+
description: 'Evento emitido quando o valor muda',
|
|
83
|
+
},
|
|
84
|
+
focusedOn: {
|
|
85
|
+
action: 'focusedOn',
|
|
86
|
+
description: 'Evento emitido quando o campo recebe foco',
|
|
87
|
+
},
|
|
88
|
+
focusedOut: {
|
|
89
|
+
action: 'focusedOut',
|
|
90
|
+
description: 'Evento emitido quando o campo perde foco',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
const Template = args => {
|
|
95
|
+
const container = document.createElement('div');
|
|
96
|
+
container.style.maxWidth = '400px';
|
|
97
|
+
container.style.margin = '20px';
|
|
98
|
+
const el = document.createElement('sula-textfield');
|
|
99
|
+
if (args.value)
|
|
100
|
+
el.setAttribute('value', args.value);
|
|
101
|
+
el.setAttribute('type', args.type);
|
|
102
|
+
el.setAttribute('status', args.status);
|
|
103
|
+
el.setAttribute('label', args.label);
|
|
104
|
+
el.setAttribute('placeholder', args.placeholder);
|
|
105
|
+
el.setAttribute('disabled', args.disabled.toString());
|
|
106
|
+
if (args.helpText)
|
|
107
|
+
el.setAttribute('help-text', args.helpText);
|
|
108
|
+
if (args.maxLength > 0)
|
|
109
|
+
el.setAttribute('max-length', args.maxLength.toString());
|
|
110
|
+
if (args.icon)
|
|
111
|
+
el.setAttribute('icon', args.icon);
|
|
112
|
+
el.addEventListener('valueChanged', args.valueChanged);
|
|
113
|
+
el.addEventListener('focusedOn', args.focusedOn);
|
|
114
|
+
el.addEventListener('focusedOut', args.focusedOut);
|
|
115
|
+
container.appendChild(el);
|
|
116
|
+
return container;
|
|
117
|
+
};
|
|
118
|
+
export const Default = Template.bind({});
|
|
119
|
+
Default.args = {
|
|
120
|
+
value: '',
|
|
121
|
+
type: SulaTextfieldType.Text,
|
|
122
|
+
status: SulaTextfieldStatus.Default,
|
|
123
|
+
label: 'Nome',
|
|
124
|
+
placeholder: 'Digite seu nome',
|
|
125
|
+
disabled: false,
|
|
126
|
+
helpText: '',
|
|
127
|
+
maxLength: 0,
|
|
128
|
+
icon: '',
|
|
129
|
+
};
|
|
130
|
+
export const WithValue = Template.bind({});
|
|
131
|
+
WithValue.args = Object.assign(Object.assign({}, Default.args), { value: 'John Doe', label: 'Nome completo' });
|
|
132
|
+
export const WithHelpText = Template.bind({});
|
|
133
|
+
WithHelpText.args = Object.assign(Object.assign({}, Default.args), { label: 'E-mail', placeholder: 'Digite seu e-mail', helpText: 'Informe um e-mail válido' });
|
|
134
|
+
export const WithMaxLength = Template.bind({});
|
|
135
|
+
WithMaxLength.args = Object.assign(Object.assign({}, Default.args), { label: 'Descrição', placeholder: 'Digite uma descrição', maxLength: 100, helpText: 'Máximo de 100 caracteres' });
|
|
136
|
+
export const WithIcon = Template.bind({});
|
|
137
|
+
WithIcon.args = Object.assign(Object.assign({}, Default.args), { label: 'Pesquisar', placeholder: 'Digite sua busca', icon: 'ph ph-magnifying-glass' });
|
|
138
|
+
export const Password = Template.bind({});
|
|
139
|
+
Password.args = Object.assign(Object.assign({}, Default.args), { type: SulaTextfieldType.Password, label: 'Senha', placeholder: 'Digite sua senha' });
|
|
140
|
+
export const Error = Template.bind({});
|
|
141
|
+
Error.args = Object.assign(Object.assign({}, Default.args), { status: SulaTextfieldStatus.Error, label: 'E-mail', placeholder: 'Digite seu e-mail', helpText: 'E-mail inválido' });
|
|
142
|
+
export const Disabled = Template.bind({});
|
|
143
|
+
Disabled.args = Object.assign(Object.assign({}, Default.args), { disabled: true, label: 'Campo desabilitado' });
|
|
144
|
+
export const WithIconAndHelpText = Template.bind({});
|
|
145
|
+
WithIconAndHelpText.args = Object.assign(Object.assign({}, Default.args), { label: 'Endereço', placeholder: 'Digite seu endereço', icon: 'ph ph-map-pin', helpText: 'Informe o endereço completo' });
|
|
146
|
+
export const ErrorWithMaxLength = Template.bind({});
|
|
147
|
+
ErrorWithMaxLength.args = Object.assign(Object.assign({}, Default.args), { status: SulaTextfieldStatus.Error, label: 'Mensagem', placeholder: 'Digite sua mensagem', maxLength: 50, helpText: 'Excedeu o limite de caracteres', value: 'Esta é uma mensagem de teste que excede o limite de caracteres permitido' });
|
|
148
|
+
//# sourceMappingURL=sula-textfield.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sula-textfield.stories.js","sourceRoot":"","sources":["../../../src/components/sula-textfield/sula-textfield.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { SulaTextfieldStatus, SulaTextfieldType } from './model/sula-textfield.model';\n\nexport default {\n title: 'Components/sula-textfield',\n tags: ['autodocs'],\n argTypes: {\n value: {\n control: 'text',\n defaultValue: '',\n description: 'Value for the input',\n type: {\n required: false,\n },\n },\n type: {\n control: { type: 'select' },\n options: Object.values(SulaTextfieldType),\n defaultValue: SulaTextfieldType.Text,\n description: 'The textfield type',\n type: {\n required: false,\n },\n },\n status: {\n control: { type: 'select' },\n options: Object.values(SulaTextfieldStatus),\n defaultValue: SulaTextfieldStatus.Default,\n description: 'The textfield status',\n type: {\n required: false,\n },\n },\n label: {\n control: 'text',\n defaultValue: 'Label',\n description: 'The textfield label',\n type: {\n required: false,\n },\n },\n placeholder: {\n control: 'text',\n defaultValue: 'Placeholder',\n description: 'The textfield placeholder',\n type: {\n required: false,\n },\n },\n disabled: {\n control: 'boolean',\n defaultValue: false,\n description: 'The textfield is disabled',\n type: {\n required: false,\n },\n },\n helpText: {\n control: 'text',\n defaultValue: '',\n description: 'The help text for textfield',\n type: {\n required: false,\n },\n },\n maxLength: {\n control: 'number',\n defaultValue: 0,\n description: 'The textfield max length',\n type: {\n required: false,\n },\n },\n icon: {\n control: 'text',\n defaultValue: '',\n description: 'The textfield icon',\n type: {\n required: false,\n },\n },\n valueChanged: {\n action: 'valueChanged',\n description: 'Evento emitido quando o valor muda',\n },\n focusedOn: {\n action: 'focusedOn',\n description: 'Evento emitido quando o campo recebe foco',\n },\n focusedOut: {\n action: 'focusedOut',\n description: 'Evento emitido quando o campo perde foco',\n },\n },\n};\n\nconst Template = args => {\n const container = document.createElement('div');\n container.style.maxWidth = '400px';\n container.style.margin = '20px';\n\n const el = document.createElement('sula-textfield');\n\n if (args.value) el.setAttribute('value', args.value);\n el.setAttribute('type', args.type);\n el.setAttribute('status', args.status);\n el.setAttribute('label', args.label);\n el.setAttribute('placeholder', args.placeholder);\n el.setAttribute('disabled', args.disabled.toString());\n\n if (args.helpText) el.setAttribute('help-text', args.helpText);\n if (args.maxLength > 0) el.setAttribute('max-length', args.maxLength.toString());\n if (args.icon) el.setAttribute('icon', args.icon);\n\n el.addEventListener('valueChanged', args.valueChanged);\n el.addEventListener('focusedOn', args.focusedOn);\n el.addEventListener('focusedOut', args.focusedOut);\n\n container.appendChild(el);\n\n return container;\n};\n\nexport const Default = Template.bind({});\nDefault.args = {\n value: '',\n type: SulaTextfieldType.Text,\n status: SulaTextfieldStatus.Default,\n label: 'Nome',\n placeholder: 'Digite seu nome',\n disabled: false,\n helpText: '',\n maxLength: 0,\n icon: '',\n};\n\nexport const WithValue = Template.bind({});\nWithValue.args = {\n ...Default.args,\n value: 'John Doe',\n label: 'Nome completo',\n};\n\nexport const WithHelpText = Template.bind({});\nWithHelpText.args = {\n ...Default.args,\n label: 'E-mail',\n placeholder: 'Digite seu e-mail',\n helpText: 'Informe um e-mail válido',\n};\n\nexport const WithMaxLength = Template.bind({});\nWithMaxLength.args = {\n ...Default.args,\n label: 'Descrição',\n placeholder: 'Digite uma descrição',\n maxLength: 100,\n helpText: 'Máximo de 100 caracteres',\n};\n\nexport const WithIcon = Template.bind({});\nWithIcon.args = {\n ...Default.args,\n label: 'Pesquisar',\n placeholder: 'Digite sua busca',\n icon: 'ph ph-magnifying-glass',\n};\n\nexport const Password = Template.bind({});\nPassword.args = {\n ...Default.args,\n type: SulaTextfieldType.Password,\n label: 'Senha',\n placeholder: 'Digite sua senha',\n};\n\nexport const Error = Template.bind({});\nError.args = {\n ...Default.args,\n status: SulaTextfieldStatus.Error,\n label: 'E-mail',\n placeholder: 'Digite seu e-mail',\n helpText: 'E-mail inválido',\n};\n\nexport const Disabled = Template.bind({});\nDisabled.args = {\n ...Default.args,\n disabled: true,\n label: 'Campo desabilitado',\n};\n\nexport const WithIconAndHelpText = Template.bind({});\nWithIconAndHelpText.args = {\n ...Default.args,\n label: 'Endereço',\n placeholder: 'Digite seu endereço',\n icon: 'ph ph-map-pin',\n helpText: 'Informe o endereço completo',\n};\n\nexport const ErrorWithMaxLength = Template.bind({});\nErrorWithMaxLength.args = {\n ...Default.args,\n status: SulaTextfieldStatus.Error,\n label: 'Mensagem',\n placeholder: 'Digite sua mensagem',\n maxLength: 50,\n helpText: 'Excedeu o limite de caracteres',\n value: 'Esta é uma mensagem de teste que excede o limite de caracteres permitido',\n};\n"]}
|
package/dist/components/index.js
CHANGED