@scouterna/ui-webc 0.2.10 → 2.0.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.
Files changed (132) hide show
  1. package/dist/cjs/{index-M8pbc2b8.js → index-D42maJcS.js} +455 -9
  2. package/dist/cjs/index-D42maJcS.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/scout-bottom-bar-item.cjs.entry.js +3 -2
  5. package/dist/cjs/scout-bottom-bar-item.entry.cjs.js.map +1 -1
  6. package/dist/cjs/scout-bottom-bar.cjs.entry.js +3 -2
  7. package/dist/cjs/scout-bottom-bar.entry.cjs.js.map +1 -1
  8. package/dist/cjs/scout-button.cjs.entry.js +3 -2
  9. package/dist/cjs/scout-button.entry.cjs.js.map +1 -1
  10. package/dist/cjs/scout-card.cjs.entry.js +19 -0
  11. package/dist/cjs/scout-card.entry.cjs.js.map +1 -0
  12. package/dist/cjs/scout-checkbox.cjs.entry.js +53 -0
  13. package/dist/cjs/scout-checkbox.entry.cjs.js.map +1 -0
  14. package/dist/cjs/scout-field.cjs.entry.js +47 -0
  15. package/dist/cjs/scout-field.entry.cjs.js.map +1 -0
  16. package/dist/cjs/scout-input.cjs.entry.js +72 -0
  17. package/dist/cjs/scout-input.entry.cjs.js.map +1 -0
  18. package/dist/cjs/scout-switch.cjs.entry.js +49 -0
  19. package/dist/cjs/scout-switch.entry.cjs.js.map +1 -0
  20. package/dist/cjs/ui-webc.cjs.js +2 -2
  21. package/dist/collection/collection-manifest.json +6 -1
  22. package/dist/collection/components/bottom-bar/bottom-bar.js +2 -1
  23. package/dist/collection/components/bottom-bar/bottom-bar.js.map +1 -1
  24. package/dist/collection/components/bottom-bar-item/bottom-bar-item.js +2 -1
  25. package/dist/collection/components/bottom-bar-item/bottom-bar-item.js.map +1 -1
  26. package/dist/collection/components/button/button.js +2 -1
  27. package/dist/collection/components/button/button.js.map +1 -1
  28. package/dist/collection/components/card/card.css +8 -0
  29. package/dist/collection/components/card/card.js +23 -0
  30. package/dist/collection/components/card/card.js.map +1 -0
  31. package/dist/collection/components/checkbox/checkbox.css +81 -0
  32. package/dist/collection/components/checkbox/checkbox.js +176 -0
  33. package/dist/collection/components/checkbox/checkbox.js.map +1 -0
  34. package/dist/collection/components/field/field.css +26 -0
  35. package/dist/collection/components/field/field.js +119 -0
  36. package/dist/collection/components/field/field.js.map +1 -0
  37. package/dist/collection/components/input/input.css +15 -0
  38. package/dist/collection/components/input/input.js +259 -0
  39. package/dist/collection/components/input/input.js.map +1 -0
  40. package/dist/collection/components/switch/switch.css +79 -0
  41. package/dist/collection/components/switch/switch.js +173 -0
  42. package/dist/collection/components/switch/switch.js.map +1 -0
  43. package/dist/components/index.js +1 -1
  44. package/dist/components/{p-CMd0pUms.js → p-MfRr-Vl1.js} +448 -10
  45. package/dist/components/p-MfRr-Vl1.js.map +1 -0
  46. package/dist/components/scout-bottom-bar-item.js +4 -3
  47. package/dist/components/scout-bottom-bar-item.js.map +1 -1
  48. package/dist/components/scout-bottom-bar.js +4 -3
  49. package/dist/components/scout-bottom-bar.js.map +1 -1
  50. package/dist/components/scout-button.js +4 -3
  51. package/dist/components/scout-button.js.map +1 -1
  52. package/dist/components/scout-card.d.ts +11 -0
  53. package/dist/components/scout-card.js +39 -0
  54. package/dist/components/scout-card.js.map +1 -0
  55. package/dist/components/scout-checkbox.d.ts +11 -0
  56. package/dist/components/scout-checkbox.js +78 -0
  57. package/dist/components/scout-checkbox.js.map +1 -0
  58. package/dist/components/scout-field.d.ts +11 -0
  59. package/dist/components/scout-field.js +72 -0
  60. package/dist/components/scout-field.js.map +1 -0
  61. package/dist/components/scout-input.d.ts +11 -0
  62. package/dist/components/scout-input.js +99 -0
  63. package/dist/components/scout-input.js.map +1 -0
  64. package/dist/components/scout-switch.d.ts +11 -0
  65. package/dist/components/scout-switch.js +75 -0
  66. package/dist/components/scout-switch.js.map +1 -0
  67. package/dist/custom-elements.json +732 -14
  68. package/dist/esm/{index-BKWL7m90.js → index-DByXnE9g.js} +455 -10
  69. package/dist/esm/index-DByXnE9g.js.map +1 -0
  70. package/dist/esm/loader.js +3 -3
  71. package/dist/esm/scout-bottom-bar-item.entry.js +3 -2
  72. package/dist/esm/scout-bottom-bar-item.entry.js.map +1 -1
  73. package/dist/esm/scout-bottom-bar.entry.js +3 -2
  74. package/dist/esm/scout-bottom-bar.entry.js.map +1 -1
  75. package/dist/esm/scout-button.entry.js +3 -2
  76. package/dist/esm/scout-button.entry.js.map +1 -1
  77. package/dist/esm/scout-card.entry.js +17 -0
  78. package/dist/esm/scout-card.entry.js.map +1 -0
  79. package/dist/esm/scout-checkbox.entry.js +51 -0
  80. package/dist/esm/scout-checkbox.entry.js.map +1 -0
  81. package/dist/esm/scout-field.entry.js +45 -0
  82. package/dist/esm/scout-field.entry.js.map +1 -0
  83. package/dist/esm/scout-input.entry.js +70 -0
  84. package/dist/esm/scout-input.entry.js.map +1 -0
  85. package/dist/esm/scout-switch.entry.js +47 -0
  86. package/dist/esm/scout-switch.entry.js.map +1 -0
  87. package/dist/esm/ui-webc.js +3 -3
  88. package/dist/types/components/card/card.d.ts +6 -0
  89. package/dist/types/components/checkbox/checkbox.d.ts +22 -0
  90. package/dist/types/components/field/field.d.ts +23 -0
  91. package/dist/types/components/input/input.d.ts +47 -0
  92. package/dist/types/components/switch/switch.d.ts +25 -0
  93. package/dist/types/components.d.ts +286 -0
  94. package/dist/ui-webc/p-24632b65.entry.js +2 -0
  95. package/dist/ui-webc/p-24632b65.entry.js.map +1 -0
  96. package/dist/ui-webc/p-2b434594.entry.js +2 -0
  97. package/dist/ui-webc/p-2b434594.entry.js.map +1 -0
  98. package/dist/ui-webc/p-383736c1.entry.js +2 -0
  99. package/dist/ui-webc/p-383736c1.entry.js.map +1 -0
  100. package/dist/ui-webc/p-7245a55a.entry.js +2 -0
  101. package/dist/ui-webc/p-7245a55a.entry.js.map +1 -0
  102. package/dist/ui-webc/{p-5a234307.entry.js → p-99329c64.entry.js} +2 -2
  103. package/dist/ui-webc/p-99329c64.entry.js.map +1 -0
  104. package/dist/ui-webc/p-9b7c270d.entry.js +2 -0
  105. package/dist/ui-webc/p-9b7c270d.entry.js.map +1 -0
  106. package/dist/ui-webc/p-DByXnE9g.js +3 -0
  107. package/dist/ui-webc/p-DByXnE9g.js.map +1 -0
  108. package/dist/ui-webc/p-c0c3a4af.entry.js +2 -0
  109. package/dist/ui-webc/p-c0c3a4af.entry.js.map +1 -0
  110. package/dist/ui-webc/p-e7602729.entry.js +2 -0
  111. package/dist/ui-webc/p-e7602729.entry.js.map +1 -0
  112. package/dist/ui-webc/scout-bottom-bar-item.entry.esm.js.map +1 -1
  113. package/dist/ui-webc/scout-bottom-bar.entry.esm.js.map +1 -1
  114. package/dist/ui-webc/scout-button.entry.esm.js.map +1 -1
  115. package/dist/ui-webc/scout-card.entry.esm.js.map +1 -0
  116. package/dist/ui-webc/scout-checkbox.entry.esm.js.map +1 -0
  117. package/dist/ui-webc/scout-field.entry.esm.js.map +1 -0
  118. package/dist/ui-webc/scout-input.entry.esm.js.map +1 -0
  119. package/dist/ui-webc/scout-switch.entry.esm.js.map +1 -0
  120. package/dist/ui-webc/ui-webc.css +13 -1
  121. package/dist/ui-webc/ui-webc.esm.js +1 -1
  122. package/package.json +3 -5
  123. package/dist/cjs/index-M8pbc2b8.js.map +0 -1
  124. package/dist/components/p-CMd0pUms.js.map +0 -1
  125. package/dist/esm/index-BKWL7m90.js.map +0 -1
  126. package/dist/ui-webc/p-2b13b5cd.entry.js +0 -2
  127. package/dist/ui-webc/p-2b13b5cd.entry.js.map +0 -1
  128. package/dist/ui-webc/p-5a234307.entry.js.map +0 -1
  129. package/dist/ui-webc/p-BKWL7m90.js +0 -3
  130. package/dist/ui-webc/p-BKWL7m90.js.map +0 -1
  131. package/dist/ui-webc/p-d1aadf34.entry.js +0 -2
  132. package/dist/ui-webc/p-d1aadf34.entry.js.map +0 -1
@@ -0,0 +1,81 @@
1
+ .checkbox {
2
+ width: var(--spacing-6);
3
+ height: var(--spacing-6);
4
+ -moz-appearance: none;
5
+ appearance: none;
6
+ -webkit-appearance: none;
7
+ display: flex;
8
+ align-content: center;
9
+ justify-content: center;
10
+ border-radius: 3px;
11
+ background-color: var(--color-text-brand-inverse);
12
+ border: 2px solid var(--color-gray-300);
13
+ position: relative;
14
+ }
15
+
16
+ .checkbox:hover {
17
+ border: 2px solid var(--color-gray-400);
18
+ box-shadow: inset 0px 0px 5px 5px var(--color-background-brand-subtle-hovered);
19
+ cursor: pointer;
20
+ }
21
+
22
+ .checkbox:active {
23
+ background-color: var(--color-background-brand-subtle-pressed);
24
+ }
25
+
26
+ .checkbox:checked:hover {
27
+ background-color: var(--color-background-brand-hovered);
28
+ border: 2px solid var(--color-background-brand-hovered);
29
+ box-shadow: none;
30
+ }
31
+
32
+ .checkbox:checked {
33
+ background-color: var(--color-background-brand-base);
34
+ border-color: var(--color-background-brand-base);
35
+ }
36
+
37
+ .checkbox::after {
38
+ content: "";
39
+ position: absolute;
40
+ width: var(--spacing-10);
41
+ height: var(--spacing-10);
42
+ top: 50%;
43
+ left: 50%;
44
+ transform: translate(-50%, -50%);
45
+ }
46
+
47
+ .checkbox:checked::before {
48
+ content: "";
49
+ background-color: var(--color-text-brand-inverse);
50
+ width: var(--spacing-6);
51
+ height: var(--spacing-6);
52
+ position: absolute;
53
+ /* Needed because of the border */
54
+ top: 50%;
55
+ left: 50%;
56
+ right: 0;
57
+ bottom: 0;
58
+ transform: translate(-50%, -50%);
59
+ -webkit-mask-image: var(--icon-checkbox);
60
+ mask-image: var(--icon-checkbox);
61
+ -webkit-mask-repeat: no-repeat;
62
+ mask-repeat: no-repeat;
63
+ }
64
+
65
+ .checkbox:disabled {
66
+ pointer-events: none;
67
+ background-color: var(--color-gray-100);
68
+ border-color: var(--color-gray-100);
69
+ }
70
+
71
+ label {
72
+ display: flex;
73
+ flex-direction: row-reverse;
74
+ align-items: center;
75
+ font: var(--type-label-base);
76
+ color: var(--color-text-base);
77
+ }
78
+
79
+ .inlineDivider {
80
+ width: var(--spacing-2);
81
+ }
@@ -0,0 +1,176 @@
1
+ import { h, } from "@stencil/core";
2
+ import checkIcon from "@tabler/icons/outline/check.svg";
3
+ export class ScoutCheckbox {
4
+ checked = false;
5
+ disabled = false;
6
+ /**
7
+ * Use this prop if you need to connect your checkbox with another element describing its use, other than the property label.
8
+ */
9
+ ariaLabelledby;
10
+ label;
11
+ ariaId;
12
+ scoutCheckboxChecked;
13
+ /**
14
+ * Internal event used for form field association.
15
+ */
16
+ _fieldId;
17
+ componentWillLoad() {
18
+ this.ariaId = `_${Math.random().toString(36).substring(2, 9)}`;
19
+ this._fieldId.emit(this.ariaId);
20
+ }
21
+ onClick(event) {
22
+ const checkbox = event.target;
23
+ console.log("checkbox", checkbox.checked);
24
+ this.scoutCheckboxChecked.emit({
25
+ checked: checkbox.checked,
26
+ element: checkbox,
27
+ });
28
+ }
29
+ /*
30
+ todo:
31
+ - Wrap checkbox with label if used.
32
+ - make sure it works with field nicely with label.
33
+ */
34
+ render() {
35
+ const Tag = this.label && this.label.length ? "label" : "div";
36
+ return (h(Tag, { key: '2d97627d29b09521936eeef81419673d70fc75f1' }, this.label, h("span", { key: 'f62b4e360f03b4b6fb6e8fee326756552a5a631d', class: "inlineDivider" }), h("input", { key: '7ca6b74e12c369fc937d1b8c85e70c52fd9aa25c', class: "checkbox", onChange: (event) => this.onClick(event), style: { "--icon-checkbox": `url(${checkIcon})` }, type: "checkbox", id: this.ariaId, "aria-labelledby": this.ariaLabelledby, "aria-disabled": this.disabled, disabled: this.disabled, checked: this.checked })));
37
+ }
38
+ static get is() { return "scout-checkbox"; }
39
+ static get encapsulation() { return "scoped"; }
40
+ static get originalStyleUrls() {
41
+ return {
42
+ "$": ["checkbox.css"]
43
+ };
44
+ }
45
+ static get styleUrls() {
46
+ return {
47
+ "$": ["checkbox.css"]
48
+ };
49
+ }
50
+ static get properties() {
51
+ return {
52
+ "checked": {
53
+ "type": "boolean",
54
+ "mutable": false,
55
+ "complexType": {
56
+ "original": "boolean",
57
+ "resolved": "boolean",
58
+ "references": {}
59
+ },
60
+ "required": false,
61
+ "optional": false,
62
+ "docs": {
63
+ "tags": [],
64
+ "text": ""
65
+ },
66
+ "getter": false,
67
+ "setter": false,
68
+ "reflect": false,
69
+ "attribute": "checked",
70
+ "defaultValue": "false"
71
+ },
72
+ "disabled": {
73
+ "type": "boolean",
74
+ "mutable": false,
75
+ "complexType": {
76
+ "original": "boolean",
77
+ "resolved": "boolean",
78
+ "references": {}
79
+ },
80
+ "required": false,
81
+ "optional": false,
82
+ "docs": {
83
+ "tags": [],
84
+ "text": ""
85
+ },
86
+ "getter": false,
87
+ "setter": false,
88
+ "reflect": false,
89
+ "attribute": "disabled",
90
+ "defaultValue": "false"
91
+ },
92
+ "ariaLabelledby": {
93
+ "type": "string",
94
+ "mutable": false,
95
+ "complexType": {
96
+ "original": "string",
97
+ "resolved": "string",
98
+ "references": {}
99
+ },
100
+ "required": false,
101
+ "optional": false,
102
+ "docs": {
103
+ "tags": [],
104
+ "text": "Use this prop if you need to connect your checkbox with another element describing its use, other than the property label."
105
+ },
106
+ "getter": false,
107
+ "setter": false,
108
+ "reflect": false,
109
+ "attribute": "aria-labelledby"
110
+ },
111
+ "label": {
112
+ "type": "string",
113
+ "mutable": false,
114
+ "complexType": {
115
+ "original": "string",
116
+ "resolved": "string",
117
+ "references": {}
118
+ },
119
+ "required": false,
120
+ "optional": false,
121
+ "docs": {
122
+ "tags": [],
123
+ "text": ""
124
+ },
125
+ "getter": false,
126
+ "setter": false,
127
+ "reflect": false,
128
+ "attribute": "label"
129
+ }
130
+ };
131
+ }
132
+ static get states() {
133
+ return {
134
+ "ariaId": {}
135
+ };
136
+ }
137
+ static get events() {
138
+ return [{
139
+ "method": "scoutCheckboxChecked",
140
+ "name": "scoutCheckboxChecked",
141
+ "bubbles": true,
142
+ "cancelable": true,
143
+ "composed": true,
144
+ "docs": {
145
+ "tags": [],
146
+ "text": ""
147
+ },
148
+ "complexType": {
149
+ "original": "{\n checked: boolean;\n element: HTMLInputElement;\n }",
150
+ "resolved": "{ checked: boolean; element: HTMLInputElement; }",
151
+ "references": {
152
+ "HTMLInputElement": {
153
+ "location": "global",
154
+ "id": "global::HTMLInputElement"
155
+ }
156
+ }
157
+ }
158
+ }, {
159
+ "method": "_fieldId",
160
+ "name": "_fieldId",
161
+ "bubbles": true,
162
+ "cancelable": true,
163
+ "composed": true,
164
+ "docs": {
165
+ "tags": [],
166
+ "text": "Internal event used for form field association."
167
+ },
168
+ "complexType": {
169
+ "original": "string",
170
+ "resolved": "string",
171
+ "references": {}
172
+ }
173
+ }];
174
+ }
175
+ }
176
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAC;AACvB,OAAO,SAAS,MAAM,iCAAiC,CAAC;AAOxD,MAAM,OAAO,aAAa;IAChB,OAAO,GAAY,KAAK,CAAC;IAEzB,QAAQ,GAAY,KAAK,CAAC;IAElC;;OAEG;IACK,cAAc,CAAS;IAEvB,KAAK,CAAS;IAEb,MAAM,CAAS;IAEf,oBAAoB,CAG1B;IACH;;OAEG;IACM,QAAQ,CAAuB;IAExC,iBAAiB;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,KAAY;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA0B,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC;IACD;;;;MAIE;IAEF,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9D,OAAO,CACL,EAAC,GAAG;YACD,IAAI,CAAC,KAAK;YACX,6DAAM,KAAK,EAAC,eAAe,GAAQ;YACnC,8DACE,KAAK,EAAC,UAAU,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EACxC,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,SAAS,GAAG,EAAE,EACjD,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,IAAI,CAAC,MAAM,qBACE,IAAI,CAAC,cAAc,mBACrB,IAAI,CAAC,QAAQ,EAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,OAAO,GACrB,CACE,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Event,\n type EventEmitter,\n h,\n Prop,\n State,\n} from \"@stencil/core\";\nimport checkIcon from \"@tabler/icons/outline/check.svg\";\n\n@Component({\n tag: \"scout-checkbox\",\n styleUrl: \"checkbox.css\",\n scoped: true,\n})\nexport class ScoutCheckbox {\n @Prop() checked: boolean = false;\n\n @Prop() disabled: boolean = false;\n\n /**\n * Use this prop if you need to connect your checkbox with another element describing its use, other than the property label.\n */\n @Prop() ariaLabelledby: string;\n\n @Prop() label: string;\n\n @State() ariaId: string;\n\n @Event() scoutCheckboxChecked: EventEmitter<{\n checked: boolean;\n element: HTMLInputElement;\n }>;\n /**\n * Internal event used for form field association.\n */\n @Event() _fieldId: EventEmitter<string>;\n\n componentWillLoad(): Promise<void> | void {\n this.ariaId = `_${Math.random().toString(36).substring(2, 9)}`;\n this._fieldId.emit(this.ariaId);\n }\n\n onClick(event: Event) {\n const checkbox = event.target as HTMLInputElement;\n console.log(\"checkbox\", checkbox.checked);\n\n this.scoutCheckboxChecked.emit({\n checked: checkbox.checked,\n element: checkbox,\n });\n }\n /*\n todo:\n - Wrap checkbox with label if used.\n - make sure it works with field nicely with label.\n */\n\n render() {\n const Tag = this.label && this.label.length ? \"label\" : \"div\";\n return (\n <Tag>\n {this.label}\n <span class=\"inlineDivider\"></span>\n <input\n class=\"checkbox\"\n onChange={(event) => this.onClick(event)}\n style={{ \"--icon-checkbox\": `url(${checkIcon})` }}\n type=\"checkbox\"\n id={this.ariaId}\n aria-labelledby={this.ariaLabelledby}\n aria-disabled={this.disabled}\n disabled={this.disabled}\n checked={this.checked}\n />\n </Tag>\n );\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ .field {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+
6
+ .label {
7
+ font: var(--type-label-sm);
8
+ font-weight: 600;
9
+ color: var(--color-text-base);
10
+ }
11
+
12
+ .error-text {
13
+ font: var(--type-label-sm);
14
+ color: var(--color-text-danger-base);
15
+ margin: var(--spacing-1) 0 0 0;
16
+ }
17
+
18
+ .error-text:empty {
19
+ margin: 0;
20
+ }
21
+
22
+ .help-text {
23
+ font: var(--type-label-sm);
24
+ color: var(--color-gray-600);
25
+ margin: var(--spacing-1) 0 0 0;
26
+ }
@@ -0,0 +1,119 @@
1
+ import { h } from "@stencil/core";
2
+ export class ScoutField {
3
+ /**
4
+ * Label shown above the field.
5
+ */
6
+ label;
7
+ /**
8
+ * Help text shown below the field.
9
+ */
10
+ helpText;
11
+ inputId;
12
+ errorText = null;
13
+ errorHidden = false;
14
+ hostElement;
15
+ catchFieldId(event) {
16
+ event.stopPropagation();
17
+ this.inputId = event.detail;
18
+ }
19
+ handleInputChange(event) {
20
+ const { element } = event.detail;
21
+ this.errorHidden = true;
22
+ if (element.validity.valid) {
23
+ this.errorText = null;
24
+ }
25
+ else {
26
+ this.errorText = element.validationMessage;
27
+ }
28
+ }
29
+ handleValidationBlur() {
30
+ this.errorHidden = false;
31
+ }
32
+ render() {
33
+ return (h("div", { key: '0ba5919cf10618bf4617e1ced85485a6d136f668', class: "field" }, h("label", { key: '55cac1b4eb9c0d58ea1e4045b9c85c30a384d99b', htmlFor: this.inputId, class: "label" }, this.label), h("slot", { key: 'b5931e88ad82e693ff1dc24acd99db393f048fab' }), h("p", { key: '6354b6187ba63158bdd5c784787f1612eb641db4', class: "error-text", "aria-live": "polite" }, !this.errorHidden && this.errorText), this.helpText && h("p", { key: 'ba9e47977b682fbe28afd61c6a00832506860e56', class: "help-text" }, this.helpText)));
34
+ }
35
+ static get is() { return "scout-field"; }
36
+ static get encapsulation() { return "scoped"; }
37
+ static get originalStyleUrls() {
38
+ return {
39
+ "$": ["field.css"]
40
+ };
41
+ }
42
+ static get styleUrls() {
43
+ return {
44
+ "$": ["field.css"]
45
+ };
46
+ }
47
+ static get properties() {
48
+ return {
49
+ "label": {
50
+ "type": "string",
51
+ "mutable": false,
52
+ "complexType": {
53
+ "original": "string",
54
+ "resolved": "string",
55
+ "references": {}
56
+ },
57
+ "required": true,
58
+ "optional": false,
59
+ "docs": {
60
+ "tags": [],
61
+ "text": "Label shown above the field."
62
+ },
63
+ "getter": false,
64
+ "setter": false,
65
+ "reflect": false,
66
+ "attribute": "label"
67
+ },
68
+ "helpText": {
69
+ "type": "string",
70
+ "mutable": false,
71
+ "complexType": {
72
+ "original": "string",
73
+ "resolved": "string",
74
+ "references": {}
75
+ },
76
+ "required": false,
77
+ "optional": true,
78
+ "docs": {
79
+ "tags": [],
80
+ "text": "Help text shown below the field."
81
+ },
82
+ "getter": false,
83
+ "setter": false,
84
+ "reflect": false,
85
+ "attribute": "help-text"
86
+ }
87
+ };
88
+ }
89
+ static get states() {
90
+ return {
91
+ "inputId": {},
92
+ "errorText": {},
93
+ "errorHidden": {}
94
+ };
95
+ }
96
+ static get elementRef() { return "hostElement"; }
97
+ static get listeners() {
98
+ return [{
99
+ "name": "_fieldId",
100
+ "method": "catchFieldId",
101
+ "target": undefined,
102
+ "capture": false,
103
+ "passive": false
104
+ }, {
105
+ "name": "scoutInputChange",
106
+ "method": "handleInputChange",
107
+ "target": undefined,
108
+ "capture": false,
109
+ "passive": false
110
+ }, {
111
+ "name": "scoutBlur",
112
+ "method": "handleValidationBlur",
113
+ "target": undefined,
114
+ "capture": false,
115
+ "passive": false
116
+ }];
117
+ }
118
+ }
119
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAe3E,MAAM,OAAO,UAAU;IACrB;;OAEG;IACK,KAAK,CAAU;IAEvB;;OAEG;IACK,QAAQ,CAAU;IAEjB,OAAO,CAAS;IAChB,SAAS,GAAkB,IAAI,CAAC;IAChC,WAAW,GAAY,KAAK,CAAC;IAE3B,WAAW,CAAe;IAGrC,YAAY,CAAC,KAA0B;QACrC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,CAAC;IAGD,iBAAiB,CACf,KAGE;QAEF,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QAEjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC7C,CAAC;IACH,CAAC;IAGD,oBAAoB;QAClB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAC,OAAO;YAChB,8DAAO,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAC,OAAO,IACxC,IAAI,CAAC,KAAK,CACL;YACR,8DAAQ;YACR,0DAAG,KAAK,EAAC,YAAY,eAAW,QAAQ,IACrC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAClC;YACH,IAAI,CAAC,QAAQ,IAAI,0DAAG,KAAK,EAAC,WAAW,IAAE,IAAI,CAAC,QAAQ,CAAK,CACtD,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, h, Listen, Prop, State } from \"@stencil/core\";\n\ntype ValidatableElement =\n | HTMLButtonElement\n | HTMLFieldSetElement\n | HTMLInputElement\n | HTMLOutputElement\n | HTMLSelectElement\n | HTMLTextAreaElement;\n\n@Component({\n tag: \"scout-field\",\n styleUrl: \"field.css\",\n scoped: true,\n})\nexport class ScoutField {\n /**\n * Label shown above the field.\n */\n @Prop() label!: string;\n\n /**\n * Help text shown below the field.\n */\n @Prop() helpText?: string;\n\n @State() inputId: string;\n @State() errorText: string | null = null;\n @State() errorHidden: boolean = false;\n\n @Element() hostElement!: HTMLElement;\n\n @Listen(\"_fieldId\")\n catchFieldId(event: CustomEvent<string>) {\n event.stopPropagation();\n this.inputId = event.detail;\n }\n\n @Listen(\"scoutInputChange\")\n handleInputChange(\n event: CustomEvent<{\n value: string;\n element: ValidatableElement;\n }>,\n ) {\n const { element } = event.detail;\n\n this.errorHidden = true;\n if (element.validity.valid) {\n this.errorText = null;\n } else {\n this.errorText = element.validationMessage;\n }\n }\n\n @Listen(\"scoutBlur\")\n handleValidationBlur() {\n this.errorHidden = false;\n }\n\n render() {\n return (\n <div class=\"field\">\n <label htmlFor={this.inputId} class=\"label\">\n {this.label}\n </label>\n <slot />\n <p class=\"error-text\" aria-live=\"polite\">\n {!this.errorHidden && this.errorText}\n </p>\n {this.helpText && <p class=\"help-text\">{this.helpText}</p>}\n </div>\n );\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ .input {
2
+ height: var(--spacing-10);
3
+ padding: var(--spacing-2);
4
+ font: var(--type-body-base);
5
+ border: 1px solid var(--color-gray-300);
6
+ border-radius: var(--spacing-2);
7
+ background-color: var(--color-white);
8
+ color: var(--color-text-base);
9
+ }
10
+
11
+ .input:disabled {
12
+ background-color: var(--color-gray-100);
13
+ color: var(--color-gray-700);
14
+ cursor: not-allowed;
15
+ }