@sula-tech/webcomponents 0.1.1 → 0.2.1

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.
Files changed (131) hide show
  1. package/dist/cjs/{index-7973b779.js → index-87eec792.js} +126 -5
  2. package/dist/cjs/index-87eec792.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/{sula-avatar_3.cjs.entry.js → sula-avatar_9.cjs.entry.js} +652 -7
  5. package/dist/cjs/sula-avatar_9.cjs.entry.js.map +1 -0
  6. package/dist/cjs/webcomponents.cjs.js +2 -2
  7. package/dist/collection/collection-manifest.json +7 -1
  8. package/dist/collection/components/sula-avatar/sula-avatar.css +1 -1
  9. package/dist/collection/components/sula-avatar/sula-avatar.stories.js +14 -17
  10. package/dist/collection/components/sula-avatar/sula-avatar.stories.js.map +1 -1
  11. package/dist/collection/components/sula-badge/model/sula-badge.model.js +23 -0
  12. package/dist/collection/components/sula-badge/model/sula-badge.model.js.map +1 -0
  13. package/dist/collection/components/sula-badge/sula-badge.css +1 -0
  14. package/dist/collection/components/sula-badge/sula-badge.js +230 -0
  15. package/dist/collection/components/sula-badge/sula-badge.js.map +1 -0
  16. package/dist/collection/components/sula-badge/sula-badge.stories.js +148 -0
  17. package/dist/collection/components/sula-badge/sula-badge.stories.js.map +1 -0
  18. package/dist/collection/components/sula-button/sula-button.css +1 -1
  19. package/dist/collection/components/sula-button/sula-button.js +1 -1
  20. package/dist/collection/components/sula-button/sula-button.stories.js +36 -9
  21. package/dist/collection/components/sula-button/sula-button.stories.js.map +1 -1
  22. package/dist/collection/components/sula-checkbox/model/sula-checkbox.model.js +6 -0
  23. package/dist/collection/components/sula-checkbox/model/sula-checkbox.model.js.map +1 -0
  24. package/dist/collection/components/sula-checkbox/sula-checkbox.css +1 -0
  25. package/dist/collection/components/sula-checkbox/sula-checkbox.js +233 -0
  26. package/dist/collection/components/sula-checkbox/sula-checkbox.js.map +1 -0
  27. package/dist/collection/components/sula-checkbox/sula-checkbox.stories.js +113 -0
  28. package/dist/collection/components/sula-checkbox/sula-checkbox.stories.js.map +1 -0
  29. package/dist/collection/components/sula-icon/sula-icon.css +1 -1
  30. package/dist/collection/components/sula-icon/sula-icon.js +1 -1
  31. package/dist/collection/components/sula-icon/sula-icon.stories.js +35 -14
  32. package/dist/collection/components/sula-icon/sula-icon.stories.js.map +1 -1
  33. package/dist/collection/components/sula-switch/model/sula-switch.model.js +6 -0
  34. package/dist/collection/components/sula-switch/model/sula-switch.model.js.map +1 -0
  35. package/dist/collection/components/sula-switch/sula-switch.css +1 -0
  36. package/dist/collection/components/sula-switch/sula-switch.js +235 -0
  37. package/dist/collection/components/sula-switch/sula-switch.js.map +1 -0
  38. package/dist/collection/components/sula-switch/sula-switch.stories.js +111 -0
  39. package/dist/collection/components/sula-switch/sula-switch.stories.js.map +1 -0
  40. package/dist/collection/components/sula-tag/model/sula-tag.model.js +28 -0
  41. package/dist/collection/components/sula-tag/model/sula-tag.model.js.map +1 -0
  42. package/dist/collection/components/sula-tag/sula-tag.css +1 -0
  43. package/dist/collection/components/sula-tag/sula-tag.js +249 -0
  44. package/dist/collection/components/sula-tag/sula-tag.js.map +1 -0
  45. package/dist/collection/components/sula-tag/sula-tag.stories.js +201 -0
  46. package/dist/collection/components/sula-tag/sula-tag.stories.js.map +1 -0
  47. package/dist/collection/components/sula-textarea/model/sula-textarea.model.js +6 -0
  48. package/dist/collection/components/sula-textarea/model/sula-textarea.model.js.map +1 -0
  49. package/dist/collection/components/sula-textarea/sula-textarea.css +1 -0
  50. package/dist/collection/components/sula-textarea/sula-textarea.js +358 -0
  51. package/dist/collection/components/sula-textarea/sula-textarea.js.map +1 -0
  52. package/dist/collection/components/sula-textarea/sula-textarea.stories.js +138 -0
  53. package/dist/collection/components/sula-textarea/sula-textarea.stories.js.map +1 -0
  54. package/dist/collection/components/sula-textfield/model/sula-textfield.model.js +11 -0
  55. package/dist/collection/components/sula-textfield/model/sula-textfield.model.js.map +1 -0
  56. package/dist/collection/components/sula-textfield/sula-textfield.css +1 -0
  57. package/dist/collection/components/sula-textfield/sula-textfield.js +376 -0
  58. package/dist/collection/components/sula-textfield/sula-textfield.js.map +1 -0
  59. package/dist/collection/components/sula-textfield/sula-textfield.stories.js +148 -0
  60. package/dist/collection/components/sula-textfield/sula-textfield.stories.js.map +1 -0
  61. package/dist/components/index.js +1 -1
  62. package/dist/components/{p-81fcc74a.js → p-2d5f97d1.js} +4 -4
  63. package/dist/components/{p-81fcc74a.js.map → p-2d5f97d1.js.map} +1 -1
  64. package/dist/components/{p-d3ba6302.js → p-881c6b35.js} +114 -6
  65. package/dist/components/p-881c6b35.js.map +1 -0
  66. package/dist/components/sula-avatar.js +3 -3
  67. package/dist/components/sula-avatar.js.map +1 -1
  68. package/dist/components/sula-badge.d.ts +11 -0
  69. package/dist/components/sula-badge.js +154 -0
  70. package/dist/components/sula-badge.js.map +1 -0
  71. package/dist/components/sula-button.js +4 -4
  72. package/dist/components/sula-button.js.map +1 -1
  73. package/dist/components/sula-checkbox.d.ts +11 -0
  74. package/dist/components/sula-checkbox.js +109 -0
  75. package/dist/components/sula-checkbox.js.map +1 -0
  76. package/dist/components/sula-icon.js +1 -1
  77. package/dist/components/sula-switch.d.ts +11 -0
  78. package/dist/components/sula-switch.js +105 -0
  79. package/dist/components/sula-switch.js.map +1 -0
  80. package/dist/components/sula-tag.d.ts +11 -0
  81. package/dist/components/sula-tag.js +157 -0
  82. package/dist/components/sula-tag.js.map +1 -0
  83. package/dist/components/sula-textarea.d.ts +11 -0
  84. package/dist/components/sula-textarea.js +166 -0
  85. package/dist/components/sula-textarea.js.map +1 -0
  86. package/dist/components/sula-textfield.d.ts +11 -0
  87. package/dist/components/sula-textfield.js +171 -0
  88. package/dist/components/sula-textfield.js.map +1 -0
  89. package/dist/esm/{index-9bf8f892.js → index-aa1c5f36.js} +126 -6
  90. package/dist/esm/index-aa1c5f36.js.map +1 -0
  91. package/dist/esm/loader.js +3 -3
  92. package/dist/esm/{sula-avatar_3.entry.js → sula-avatar_9.entry.js} +647 -8
  93. package/dist/esm/sula-avatar_9.entry.js.map +1 -0
  94. package/dist/esm/webcomponents.js +3 -3
  95. package/dist/types/components/sula-avatar/sula-avatar.stories.d.ts +0 -1
  96. package/dist/types/components/sula-badge/model/sula-badge.model.d.ts +19 -0
  97. package/dist/types/components/sula-badge/sula-badge.d.ts +33 -0
  98. package/dist/types/components/sula-badge/sula-badge.stories.d.ts +65 -0
  99. package/dist/types/components/sula-button/sula-button.stories.d.ts +2 -0
  100. package/dist/types/components/sula-checkbox/model/sula-checkbox.model.d.ts +4 -0
  101. package/dist/types/components/sula-checkbox/sula-checkbox.d.ts +42 -0
  102. package/dist/types/components/sula-checkbox/sula-checkbox.stories.d.ts +73 -0
  103. package/dist/types/components/sula-icon/sula-icon.stories.d.ts +5 -2
  104. package/dist/types/components/sula-switch/model/sula-switch.model.d.ts +4 -0
  105. package/dist/types/components/sula-switch/sula-switch.d.ts +41 -0
  106. package/dist/types/components/sula-switch/sula-switch.stories.d.ts +72 -0
  107. package/dist/types/components/sula-tag/model/sula-tag.model.d.ts +23 -0
  108. package/dist/types/components/sula-tag/sula-tag.d.ts +33 -0
  109. package/dist/types/components/sula-tag/sula-tag.stories.d.ts +82 -0
  110. package/dist/types/components/sula-textarea/model/sula-textarea.model.d.ts +4 -0
  111. package/dist/types/components/sula-textarea/sula-textarea.d.ts +65 -0
  112. package/dist/types/components/sula-textarea/sula-textarea.stories.d.ts +98 -0
  113. package/dist/types/components/sula-textfield/model/sula-textfield.model.d.ts +8 -0
  114. package/dist/types/components/sula-textfield/sula-textfield.d.ts +74 -0
  115. package/dist/types/components/sula-textfield/sula-textfield.stories.d.ts +108 -0
  116. package/dist/types/components.d.ts +510 -0
  117. package/dist/webcomponents/{p-82d7a024.entry.js → p-1c8457aa.entry.js} +917 -64
  118. package/dist/webcomponents/p-1c8457aa.entry.js.map +1 -0
  119. package/dist/webcomponents/{p-cca32e44.js → p-5a36af0f.js} +343 -220
  120. package/dist/webcomponents/p-5a36af0f.js.map +1 -0
  121. package/dist/webcomponents/webcomponents.esm.js +68 -13
  122. package/dist/webcomponents/webcomponents.esm.js.map +1 -1
  123. package/package.json +21 -13
  124. package/readme.md +36 -18
  125. package/dist/cjs/index-7973b779.js.map +0 -1
  126. package/dist/cjs/sula-avatar_3.cjs.entry.js.map +0 -1
  127. package/dist/components/p-d3ba6302.js.map +0 -1
  128. package/dist/esm/index-9bf8f892.js.map +0 -1
  129. package/dist/esm/sula-avatar_3.entry.js.map +0 -1
  130. package/dist/webcomponents/p-82d7a024.entry.js.map +0 -1
  131. 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"]}
@@ -1,3 +1,3 @@
1
- export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-d3ba6302.js';
1
+ export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-881c6b35.js';
2
2
 
3
3
  //# sourceMappingURL=index.js.map