@scouterna/ui-webc 2.1.0 → 2.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 (259) hide show
  1. package/dist/cjs/{index-5z4HClQY.js → index-CtwQwhfH.js} +3 -3
  2. package/dist/cjs/index-CtwQwhfH.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +2 -2
  6. package/dist/cjs/scout-app-bar.cjs.entry.js +20 -0
  7. package/dist/cjs/scout-app-bar.entry.cjs.js.map +1 -0
  8. package/dist/cjs/scout-bottom-bar-item.cjs.entry.js +2 -2
  9. package/dist/cjs/scout-bottom-bar-item.entry.cjs.js.map +1 -1
  10. package/dist/cjs/scout-bottom-bar.cjs.entry.js +2 -2
  11. package/dist/cjs/scout-bottom-bar.entry.cjs.js.map +1 -1
  12. package/dist/cjs/scout-button.cjs.entry.js +4 -3
  13. package/dist/cjs/scout-button.entry.cjs.js.map +1 -1
  14. package/dist/cjs/scout-card.cjs.entry.js +2 -2
  15. package/dist/cjs/scout-card.entry.cjs.js.map +1 -1
  16. package/dist/cjs/scout-checkbox.scout-radio-button.entry.cjs.js.map +1 -0
  17. package/dist/cjs/scout-checkbox_2.cjs.entry.js +91 -0
  18. package/dist/cjs/scout-divider.cjs.entry.js +2 -2
  19. package/dist/cjs/scout-divider.entry.cjs.js.map +1 -1
  20. package/dist/cjs/scout-field.cjs.entry.js +2 -2
  21. package/dist/cjs/scout-field.entry.cjs.js.map +1 -1
  22. package/dist/cjs/scout-input.cjs.entry.js +3 -2
  23. package/dist/cjs/scout-input.entry.cjs.js.map +1 -1
  24. package/dist/cjs/scout-link.cjs.entry.js +1 -1
  25. package/dist/cjs/scout-list-view-item.cjs.entry.js +16 -17
  26. package/dist/cjs/scout-list-view-item.entry.cjs.js.map +1 -1
  27. package/dist/cjs/scout-list-view-subheader.cjs.entry.js +21 -0
  28. package/dist/cjs/scout-list-view-subheader.entry.cjs.js.map +1 -0
  29. package/dist/cjs/scout-list-view.cjs.entry.js +22 -4
  30. package/dist/cjs/scout-list-view.entry.cjs.js.map +1 -1
  31. package/dist/cjs/scout-loader.cjs.entry.js +2 -2
  32. package/dist/cjs/scout-loader.entry.cjs.js.map +1 -1
  33. package/dist/cjs/scout-select.cjs.entry.js +3 -2
  34. package/dist/cjs/scout-select.entry.cjs.js.map +1 -1
  35. package/dist/cjs/scout-stack.cjs.entry.js +3 -3
  36. package/dist/cjs/scout-switch.cjs.entry.js +3 -3
  37. package/dist/cjs/scout-switch.entry.cjs.js.map +1 -1
  38. package/dist/cjs/ui-webc.cjs.js +2 -2
  39. package/dist/collection/collection-manifest.json +7 -4
  40. package/dist/collection/components/app-bar/app-bar.css +27 -0
  41. package/dist/collection/components/app-bar/app-bar.js +44 -0
  42. package/dist/collection/components/app-bar/app-bar.js.map +1 -0
  43. package/dist/collection/components/bottom-bar/bottom-bar.css +1 -1
  44. package/dist/collection/components/bottom-bar/bottom-bar.js +1 -1
  45. package/dist/collection/components/bottom-bar-item/bottom-bar-item.css +1 -1
  46. package/dist/collection/components/bottom-bar-item/bottom-bar-item.js +1 -1
  47. package/dist/collection/components/button/button.css +23 -2
  48. package/dist/collection/components/button/button.js +22 -1
  49. package/dist/collection/components/button/button.js.map +1 -1
  50. package/dist/collection/components/card/card.css +4 -2
  51. package/dist/collection/components/checkbox/checkbox.css +2 -6
  52. package/dist/collection/components/checkbox/checkbox.js +47 -13
  53. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  54. package/dist/collection/components/divider/divider.css +1 -1
  55. package/dist/collection/components/divider/divider.js +1 -1
  56. package/dist/collection/components/field/field.css +1 -1
  57. package/dist/collection/components/field/field.js +1 -1
  58. package/dist/collection/components/input/input.css +1 -1
  59. package/dist/collection/components/input/input.js +21 -1
  60. package/dist/collection/components/input/input.js.map +1 -1
  61. package/dist/collection/components/list-view/list-view.css +1 -1
  62. package/dist/collection/components/list-view/list-view.js +31 -3
  63. package/dist/collection/components/list-view/list-view.js.map +1 -1
  64. package/dist/collection/components/list-view-item/list-view-item.css +1 -2
  65. package/dist/collection/components/list-view-item/list-view-item.js +73 -17
  66. package/dist/collection/components/list-view-item/list-view-item.js.map +1 -1
  67. package/dist/collection/components/list-view-subheader/list-view-subheader.css +18 -0
  68. package/dist/collection/components/list-view-subheader/list-view-subheader.js +65 -0
  69. package/dist/collection/components/list-view-subheader/list-view-subheader.js.map +1 -0
  70. package/dist/collection/components/loader/loader.css +1 -4
  71. package/dist/collection/components/loader/loader.js +1 -1
  72. package/dist/collection/components/loader/loader.js.map +1 -1
  73. package/dist/collection/components/radio-button/radio-button.css +73 -0
  74. package/dist/collection/components/radio-button/radio-button.js +209 -0
  75. package/dist/collection/components/radio-button/radio-button.js.map +1 -0
  76. package/dist/collection/components/select/select.css +0 -1
  77. package/dist/collection/components/select/select.js +21 -1
  78. package/dist/collection/components/select/select.js.map +1 -1
  79. package/dist/collection/components/stack/stack.js +2 -2
  80. package/dist/collection/components/switch/switch.js +2 -2
  81. package/dist/collection/components/switch/switch.js.map +1 -1
  82. package/dist/collection/index.js +1 -1
  83. package/dist/collection/index.js.map +1 -1
  84. package/dist/collection/utils/utils.js +1 -1
  85. package/dist/collection/utils/utils.js.map +1 -1
  86. package/dist/components/index.js +2 -2
  87. package/dist/components/index.js.map +1 -1
  88. package/dist/components/p-C2uc7k4n.js +73 -0
  89. package/dist/components/p-C2uc7k4n.js.map +1 -0
  90. package/dist/components/{p-S6Ssep7K.js → p-DNlelzlE.js} +3 -3
  91. package/dist/components/p-DNlelzlE.js.map +1 -0
  92. package/dist/components/p-Jt6ZXtWI.js +71 -0
  93. package/dist/components/p-Jt6ZXtWI.js.map +1 -0
  94. package/dist/components/scout-app-bar.d.ts +11 -0
  95. package/dist/components/scout-app-bar.js +42 -0
  96. package/dist/components/scout-app-bar.js.map +1 -0
  97. package/dist/components/scout-bottom-bar-item.js +2 -2
  98. package/dist/components/scout-bottom-bar-item.js.map +1 -1
  99. package/dist/components/scout-bottom-bar.js +2 -2
  100. package/dist/components/scout-bottom-bar.js.map +1 -1
  101. package/dist/components/scout-button.js +6 -4
  102. package/dist/components/scout-button.js.map +1 -1
  103. package/dist/components/scout-card.js +2 -2
  104. package/dist/components/scout-card.js.map +1 -1
  105. package/dist/components/scout-checkbox.js +1 -70
  106. package/dist/components/scout-checkbox.js.map +1 -1
  107. package/dist/components/scout-divider.js +2 -2
  108. package/dist/components/scout-divider.js.map +1 -1
  109. package/dist/components/scout-field.js +2 -2
  110. package/dist/components/scout-field.js.map +1 -1
  111. package/dist/components/scout-input.js +4 -2
  112. package/dist/components/scout-input.js.map +1 -1
  113. package/dist/components/scout-link.js +1 -1
  114. package/dist/components/scout-list-view-item.js +33 -19
  115. package/dist/components/scout-list-view-item.js.map +1 -1
  116. package/dist/components/scout-list-view-subheader.d.ts +11 -0
  117. package/dist/components/scout-list-view-subheader.js +44 -0
  118. package/dist/components/scout-list-view-subheader.js.map +1 -0
  119. package/dist/components/scout-list-view.js +23 -5
  120. package/dist/components/scout-list-view.js.map +1 -1
  121. package/dist/components/scout-loader.js +2 -2
  122. package/dist/components/scout-loader.js.map +1 -1
  123. package/dist/components/scout-radio-button.d.ts +11 -0
  124. package/dist/components/scout-radio-button.js +9 -0
  125. package/dist/components/scout-radio-button.js.map +1 -0
  126. package/dist/components/scout-select.js +4 -2
  127. package/dist/components/scout-select.js.map +1 -1
  128. package/dist/components/scout-stack.js +3 -3
  129. package/dist/components/scout-switch.js +3 -3
  130. package/dist/components/scout-switch.js.map +1 -1
  131. package/dist/custom-elements.json +573 -9
  132. package/dist/esm/{index-BI7oh__S.js → index-Cp4mWtfs.js} +3 -3
  133. package/dist/esm/index-Cp4mWtfs.js.map +1 -0
  134. package/dist/esm/index.js +1 -1
  135. package/dist/esm/index.js.map +1 -1
  136. package/dist/esm/loader.js +3 -3
  137. package/dist/esm/scout-app-bar.entry.js +18 -0
  138. package/dist/esm/scout-app-bar.entry.js.map +1 -0
  139. package/dist/esm/scout-bottom-bar-item.entry.js +2 -2
  140. package/dist/esm/scout-bottom-bar-item.entry.js.map +1 -1
  141. package/dist/esm/scout-bottom-bar.entry.js +2 -2
  142. package/dist/esm/scout-bottom-bar.entry.js.map +1 -1
  143. package/dist/esm/scout-button.entry.js +4 -3
  144. package/dist/esm/scout-button.entry.js.map +1 -1
  145. package/dist/esm/scout-card.entry.js +2 -2
  146. package/dist/esm/scout-card.entry.js.map +1 -1
  147. package/dist/esm/scout-checkbox.scout-radio-button.entry.js.map +1 -0
  148. package/dist/esm/scout-checkbox_2.entry.js +88 -0
  149. package/dist/esm/scout-divider.entry.js +2 -2
  150. package/dist/esm/scout-divider.entry.js.map +1 -1
  151. package/dist/esm/scout-field.entry.js +2 -2
  152. package/dist/esm/scout-field.entry.js.map +1 -1
  153. package/dist/esm/scout-input.entry.js +3 -2
  154. package/dist/esm/scout-input.entry.js.map +1 -1
  155. package/dist/esm/scout-link.entry.js +1 -1
  156. package/dist/esm/scout-list-view-item.entry.js +16 -17
  157. package/dist/esm/scout-list-view-item.entry.js.map +1 -1
  158. package/dist/esm/scout-list-view-subheader.entry.js +19 -0
  159. package/dist/esm/scout-list-view-subheader.entry.js.map +1 -0
  160. package/dist/esm/scout-list-view.entry.js +22 -4
  161. package/dist/esm/scout-list-view.entry.js.map +1 -1
  162. package/dist/esm/scout-loader.entry.js +2 -2
  163. package/dist/esm/scout-loader.entry.js.map +1 -1
  164. package/dist/esm/scout-select.entry.js +3 -2
  165. package/dist/esm/scout-select.entry.js.map +1 -1
  166. package/dist/esm/scout-stack.entry.js +3 -3
  167. package/dist/esm/scout-switch.entry.js +3 -3
  168. package/dist/esm/scout-switch.entry.js.map +1 -1
  169. package/dist/esm/ui-webc.js +3 -3
  170. package/dist/types/components/app-bar/app-bar.d.ts +4 -0
  171. package/dist/types/components/button/button.d.ts +1 -0
  172. package/dist/types/components/checkbox/checkbox.d.ts +4 -2
  173. package/dist/types/components/input/input.d.ts +1 -0
  174. package/dist/types/components/list-view/list-view.d.ts +5 -0
  175. package/dist/types/components/list-view-item/list-view-item.d.ts +4 -1
  176. package/dist/types/components/list-view-subheader/list-view-subheader.d.ts +5 -0
  177. package/dist/types/components/radio-button/radio-button.d.ts +24 -0
  178. package/dist/types/components/select/select.d.ts +1 -0
  179. package/dist/types/components.d.ts +132 -2
  180. package/dist/types/index.d.ts +2 -2
  181. package/dist/ui-webc/index.esm.js.map +1 -1
  182. package/dist/ui-webc/{p-eb235f73.entry.js → p-0b42e59f.entry.js} +2 -2
  183. package/dist/ui-webc/{p-eb235f73.entry.js.map → p-0b42e59f.entry.js.map} +1 -1
  184. package/dist/ui-webc/{p-72e5904f.entry.js → p-29689fe2.entry.js} +2 -2
  185. package/dist/ui-webc/p-33010b09.entry.js +2 -0
  186. package/dist/ui-webc/p-3b426423.entry.js +2 -0
  187. package/dist/ui-webc/p-3b426423.entry.js.map +1 -0
  188. package/dist/ui-webc/p-3e34c267.entry.js +2 -0
  189. package/dist/ui-webc/{p-b24cd5e8.entry.js → p-4c70c251.entry.js} +2 -2
  190. package/dist/ui-webc/{p-b7e542b2.entry.js → p-5d73566e.entry.js} +2 -2
  191. package/dist/ui-webc/p-6ef8c777.entry.js +2 -0
  192. package/dist/ui-webc/p-6ef8c777.entry.js.map +1 -0
  193. package/dist/ui-webc/p-714363c8.entry.js +2 -0
  194. package/dist/ui-webc/p-714363c8.entry.js.map +1 -0
  195. package/dist/ui-webc/p-7f8dc0da.entry.js +2 -0
  196. package/dist/ui-webc/{p-316eed06.entry.js.map → p-7f8dc0da.entry.js.map} +1 -1
  197. package/dist/ui-webc/p-85e7b20f.entry.js +2 -0
  198. package/dist/ui-webc/p-85e7b20f.entry.js.map +1 -0
  199. package/dist/ui-webc/p-93ee0d2c.entry.js +2 -0
  200. package/dist/ui-webc/p-93ee0d2c.entry.js.map +1 -0
  201. package/dist/ui-webc/p-9f80fed6.entry.js +2 -0
  202. package/dist/ui-webc/{p-BI7oh__S.js → p-Cp4mWtfs.js} +2 -2
  203. package/dist/ui-webc/p-Cp4mWtfs.js.map +1 -0
  204. package/dist/ui-webc/{p-93c5edd1.entry.js → p-afa38195.entry.js} +2 -2
  205. package/dist/ui-webc/p-afa38195.entry.js.map +1 -0
  206. package/dist/ui-webc/p-b8715dc5.entry.js +2 -0
  207. package/dist/ui-webc/p-b8715dc5.entry.js.map +1 -0
  208. package/dist/ui-webc/p-e4070682.entry.js +2 -0
  209. package/dist/ui-webc/p-e4070682.entry.js.map +1 -0
  210. package/dist/ui-webc/{p-15634492.entry.js → p-efab02f0.entry.js} +2 -2
  211. package/dist/ui-webc/scout-app-bar.entry.esm.js.map +1 -0
  212. package/dist/ui-webc/scout-bottom-bar-item.entry.esm.js.map +1 -1
  213. package/dist/ui-webc/scout-bottom-bar.entry.esm.js.map +1 -1
  214. package/dist/ui-webc/scout-button.entry.esm.js.map +1 -1
  215. package/dist/ui-webc/scout-card.entry.esm.js.map +1 -1
  216. package/dist/ui-webc/scout-checkbox.scout-radio-button.entry.esm.js.map +1 -0
  217. package/dist/ui-webc/scout-divider.entry.esm.js.map +1 -1
  218. package/dist/ui-webc/scout-field.entry.esm.js.map +1 -1
  219. package/dist/ui-webc/scout-input.entry.esm.js.map +1 -1
  220. package/dist/ui-webc/scout-list-view-item.entry.esm.js.map +1 -1
  221. package/dist/ui-webc/scout-list-view-subheader.entry.esm.js.map +1 -0
  222. package/dist/ui-webc/scout-list-view.entry.esm.js.map +1 -1
  223. package/dist/ui-webc/scout-loader.entry.esm.js.map +1 -1
  224. package/dist/ui-webc/scout-select.entry.esm.js.map +1 -1
  225. package/dist/ui-webc/scout-switch.entry.esm.js.map +1 -1
  226. package/dist/ui-webc/ui-webc.css +2 -13
  227. package/dist/ui-webc/ui-webc.esm.js +1 -1
  228. package/package.json +2 -2
  229. package/dist/cjs/index-5z4HClQY.js.map +0 -1
  230. package/dist/cjs/scout-checkbox.cjs.entry.js +0 -53
  231. package/dist/cjs/scout-checkbox.entry.cjs.js.map +0 -1
  232. package/dist/components/p-S6Ssep7K.js.map +0 -1
  233. package/dist/esm/index-BI7oh__S.js.map +0 -1
  234. package/dist/esm/scout-checkbox.entry.js +0 -51
  235. package/dist/esm/scout-checkbox.entry.js.map +0 -1
  236. package/dist/ui-webc/p-316eed06.entry.js +0 -2
  237. package/dist/ui-webc/p-4064b941.entry.js +0 -2
  238. package/dist/ui-webc/p-4064b941.entry.js.map +0 -1
  239. package/dist/ui-webc/p-5e2c0abc.entry.js +0 -2
  240. package/dist/ui-webc/p-662554f2.entry.js +0 -2
  241. package/dist/ui-webc/p-662554f2.entry.js.map +0 -1
  242. package/dist/ui-webc/p-939fb179.entry.js +0 -2
  243. package/dist/ui-webc/p-939fb179.entry.js.map +0 -1
  244. package/dist/ui-webc/p-93c5edd1.entry.js.map +0 -1
  245. package/dist/ui-webc/p-9c2bb8d7.entry.js +0 -2
  246. package/dist/ui-webc/p-9c2bb8d7.entry.js.map +0 -1
  247. package/dist/ui-webc/p-BI7oh__S.js.map +0 -1
  248. package/dist/ui-webc/p-d0b4b8c4.entry.js +0 -2
  249. package/dist/ui-webc/p-df4ec2af.entry.js +0 -2
  250. package/dist/ui-webc/p-f164c4f7.entry.js +0 -2
  251. package/dist/ui-webc/p-f164c4f7.entry.js.map +0 -1
  252. package/dist/ui-webc/scout-checkbox.entry.esm.js.map +0 -1
  253. /package/dist/ui-webc/{p-72e5904f.entry.js.map → p-29689fe2.entry.js.map} +0 -0
  254. /package/dist/ui-webc/{p-5e2c0abc.entry.js.map → p-33010b09.entry.js.map} +0 -0
  255. /package/dist/ui-webc/{p-df4ec2af.entry.js.map → p-3e34c267.entry.js.map} +0 -0
  256. /package/dist/ui-webc/{p-b24cd5e8.entry.js.map → p-4c70c251.entry.js.map} +0 -0
  257. /package/dist/ui-webc/{p-b7e542b2.entry.js.map → p-5d73566e.entry.js.map} +0 -0
  258. /package/dist/ui-webc/{p-d0b4b8c4.entry.js.map → p-9f80fed6.entry.js.map} +0 -0
  259. /package/dist/ui-webc/{p-15634492.entry.js.map → p-efab02f0.entry.js.map} +0 -0
@@ -36,4 +36,4 @@
36
36
  a {
37
37
  -webkit-text-decoration: none;
38
38
  text-decoration: none;
39
- }
39
+ }
@@ -41,7 +41,7 @@ export class ScoutBottomBarItem {
41
41
  (this.target === "_blank" ? "noopener noreferrer" : undefined),
42
42
  }
43
43
  : {};
44
- return (h(Tag, { key: 'd6accb2a7bb0af55f33dba3299749b7ec5ba68a4', class: clsx("button", this.active && "active"), onClick: () => this.scoutClick.emit(), ...props }, h("span", { key: '419edd0be8ff7a4f91aeb1641afffb9d949efba2', class: "icon", innerHTML: this.icon }), h("span", { key: 'e1e40f9a192ffe8a0152a1d0333fbedf174e7bea', class: "label" }, this.label)));
44
+ return (h(Tag, { key: '96f414836614c63073d7d4250e5d51e9b4f0fe18', class: clsx("button", this.active && "active"), onClick: () => this.scoutClick.emit(), ...props }, h("span", { key: '9a6715eb90b616aa62bd4120ff49aeb687d43d27', class: "icon", innerHTML: this.icon }), h("span", { key: 'b66e620d12e0da541e4b6366a2eb373383dff4b8', class: "label" }, this.label)));
45
45
  }
46
46
  static get is() { return "scout-bottom-bar-item"; }
47
47
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,6 @@
1
1
  :host {
2
2
  display: inline-flex;
3
+ height: var(--spacing-10);
3
4
  }
4
5
 
5
6
  .button {
@@ -7,7 +8,6 @@
7
8
  align-items: center;
8
9
  justify-content: center;
9
10
  gap: var(--spacing-3);
10
- height: var(--spacing-10);
11
11
  padding: 0 var(--spacing-4);
12
12
  font: var(--type-body-base);
13
13
  border-radius: var(--spacing-2);
@@ -28,6 +28,27 @@
28
28
  height: 100%;
29
29
  }
30
30
 
31
+ .button.icon-only {
32
+ aspect-ratio: 1 / 1;
33
+ justify-content: center;
34
+ padding: 0;
35
+ }
36
+
37
+ .button.icon-only .icon {
38
+ margin: 0;
39
+ }
40
+
41
+ .button.icon-only .content {
42
+ /* Visually hidden: https://www.a11yproject.com/posts/how-to-hide-content/ */
43
+ clip: rect(0 0 0 0);
44
+ clip-path: inset(50%);
45
+ height: 1px;
46
+ overflow: hidden;
47
+ position: absolute;
48
+ white-space: nowrap;
49
+ width: 1px;
50
+ }
51
+
31
52
  .button.primary {
32
53
  background-color: var(--color-background-brand-base);
33
54
  color: var(--color-text-brand-inverse);
@@ -93,4 +114,4 @@
93
114
 
94
115
  .button.danger:active {
95
116
  background-color: var(--color-background-danger-bold-pressed);
96
- }
117
+ }
@@ -15,6 +15,7 @@ export class ScoutButton {
15
15
  * An optional icon to display alongside the button text. Must be an SVG string.
16
16
  */
17
17
  icon;
18
+ iconOnly = false;
18
19
  scoutClick;
19
20
  render() {
20
21
  const Tag = this.type === "link" ? "a" : "button";
@@ -29,7 +30,7 @@ export class ScoutButton {
29
30
  : {
30
31
  type: this.type,
31
32
  };
32
- return (h(Tag, { key: 'fc7b2867c649782e166b7a363c5e3b43955a8011', class: `button ${this.variant}`, onClick: () => this.scoutClick.emit(), ...props }, h("slot", { key: '60d6e548ddf0da4bca40f1daea0fb656da8fb733' }), this.icon && h("span", { key: 'aef054b5de8cc20f5f26a9e2e82b76f43a9d3f32', class: "icon", innerHTML: this.icon })));
33
+ return (h(Tag, { key: 'e82f79602197488fbf8e013259203ae5862da824', class: `button ${this.variant} ${this.iconOnly ? "icon-only" : ""}`, onClick: () => this.scoutClick.emit(), ...props }, h("span", { key: '1be7c7ccdb6f6570f08f06a81539174c76cbaa8c', class: "content" }, h("slot", { key: '556d6b6497cbcd437fbd4d77bff8b814511c844a' })), this.icon && h("span", { key: '9cf1e36f3cd767e2ac65dd0bdb1401759bf71e9e', class: "icon", innerHTML: this.icon })));
33
34
  }
34
35
  static get is() { return "scout-button"; }
35
36
  static get encapsulation() { return "shadow"; }
@@ -167,6 +168,26 @@ export class ScoutButton {
167
168
  "setter": false,
168
169
  "reflect": false,
169
170
  "attribute": "icon"
171
+ },
172
+ "iconOnly": {
173
+ "type": "boolean",
174
+ "mutable": false,
175
+ "complexType": {
176
+ "original": "boolean",
177
+ "resolved": "boolean",
178
+ "references": {}
179
+ },
180
+ "required": false,
181
+ "optional": false,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": ""
185
+ },
186
+ "getter": false,
187
+ "setter": false,
188
+ "reflect": false,
189
+ "attribute": "icon-only",
190
+ "defaultValue": "false"
170
191
  }
171
192
  };
172
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI7E;;GAEG;AAQH,MAAM,OAAO,WAAW;IACd,IAAI,GAA2C,QAAQ,CAAC;IAExD,IAAI,CAAU;IACd,MAAM,CAAU;IAChB,GAAG,CAAU;IAErB;;OAEG;IACK,OAAO,GAAY,UAAU,CAAC;IAEtC;;OAEG;IACK,IAAI,CAAU;IAEb,UAAU,CAAqB;IAExC,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElD,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,yDAAyD;gBACzD,GAAG,EACD,IAAI,CAAC,GAAG;oBACR,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACjE;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QAER,OAAO,CACL,EAAC,GAAG,qDACF,KAAK,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KACjC,KAAK;YAET,8DAAQ;YACP,IAAI,CAAC,IAAI,IAAI,6DAAM,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CACrD,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, type EventEmitter, h, Prop } from \"@stencil/core\";\n\nexport type Variant = \"primary\" | \"outlined\" | \"text\" | \"caution\" | \"danger\";\n\n/**\n * A simple button component.\n */\n@Component({\n tag: \"scout-button\",\n styleUrl: \"button.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutButton {\n @Prop() type: \"button\" | \"submit\" | \"reset\" | \"link\" = \"button\";\n\n @Prop() href?: string;\n @Prop() target?: string;\n @Prop() rel?: string;\n\n /**\n * The variant primarily affects the color of the button.\n */\n @Prop() variant: Variant = \"outlined\";\n\n /**\n * An optional icon to display alongside the button text. Must be an SVG string.\n */\n @Prop() icon?: string;\n\n @Event() scoutClick: EventEmitter<void>;\n\n render() {\n const Tag = this.type === \"link\" ? \"a\" : \"button\";\n\n const props =\n this.type === \"link\"\n ? {\n href: this.href,\n target: this.target,\n // This might not be our job, but better safe than sorry.\n rel:\n this.rel ??\n (this.target === \"_blank\" ? \"noopener noreferrer\" : undefined),\n }\n : {\n type: this.type,\n };\n\n return (\n <Tag\n class={`button ${this.variant}`}\n onClick={() => this.scoutClick.emit()}\n {...props}\n >\n <slot />\n {this.icon && <span class=\"icon\" innerHTML={this.icon} />}\n </Tag>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI7E;;GAEG;AAQH,MAAM,OAAO,WAAW;IACd,IAAI,GAA2C,QAAQ,CAAC;IAExD,IAAI,CAAU;IACd,MAAM,CAAU;IAChB,GAAG,CAAU;IAErB;;OAEG;IACK,OAAO,GAAY,UAAU,CAAC;IAEtC;;OAEG;IACK,IAAI,CAAU;IACd,QAAQ,GAAY,KAAK,CAAC;IAEzB,UAAU,CAAqB;IAExC,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElD,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,yDAAyD;gBACzD,GAAG,EACD,IAAI,CAAC,GAAG;oBACR,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACjE;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QAER,OAAO,CACL,EAAC,GAAG,qDACF,KAAK,EAAE,UAAU,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KACjC,KAAK;YAET,6DAAM,KAAK,EAAC,SAAS;gBACnB,8DAAQ,CACH;YACN,IAAI,CAAC,IAAI,IAAI,6DAAM,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CACrD,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, type EventEmitter, h, Prop } from \"@stencil/core\";\n\nexport type Variant = \"primary\" | \"outlined\" | \"text\" | \"caution\" | \"danger\";\n\n/**\n * A simple button component.\n */\n@Component({\n tag: \"scout-button\",\n styleUrl: \"button.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutButton {\n @Prop() type: \"button\" | \"submit\" | \"reset\" | \"link\" = \"button\";\n\n @Prop() href?: string;\n @Prop() target?: string;\n @Prop() rel?: string;\n\n /**\n * The variant primarily affects the color of the button.\n */\n @Prop() variant: Variant = \"outlined\";\n\n /**\n * An optional icon to display alongside the button text. Must be an SVG string.\n */\n @Prop() icon?: string;\n @Prop() iconOnly: boolean = false;\n\n @Event() scoutClick: EventEmitter<void>;\n\n render() {\n const Tag = this.type === \"link\" ? \"a\" : \"button\";\n\n const props =\n this.type === \"link\"\n ? {\n href: this.href,\n target: this.target,\n // This might not be our job, but better safe than sorry.\n rel:\n this.rel ??\n (this.target === \"_blank\" ? \"noopener noreferrer\" : undefined),\n }\n : {\n type: this.type,\n };\n\n return (\n <Tag\n class={`button ${this.variant} ${this.iconOnly ? \"icon-only\" : \"\"}`}\n onClick={() => this.scoutClick.emit()}\n {...props}\n >\n <span class=\"content\">\n <slot />\n </span>\n {this.icon && <span class=\"icon\" innerHTML={this.icon} />}\n </Tag>\n );\n }\n}\n"]}
@@ -4,5 +4,7 @@
4
4
  border: 1px solid var(--color-gray-100);
5
5
  padding: var(--spacing-2);
6
6
  /* TODO: We don't have tokens for shadows yet */
7
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
8
- }
7
+ box-shadow:
8
+ 0 1px 3px 0 rgba(0, 0, 0, 0.1),
9
+ 0 1px 2px -1px rgba(0, 0, 0, 0.1);
10
+ }
@@ -25,7 +25,7 @@
25
25
 
26
26
  .checkbox:checked:hover {
27
27
  background-color: var(--color-background-brand-hovered);
28
- border: 2px solid var(--color-background-brand-hovered);
28
+ border-color: var(--color-background-brand-hovered);
29
29
  box-shadow: none;
30
30
  }
31
31
 
@@ -70,12 +70,8 @@
70
70
 
71
71
  label {
72
72
  display: flex;
73
- flex-direction: row-reverse;
74
73
  align-items: center;
74
+ gap: var(--spacing-2);
75
75
  font: var(--type-label-base);
76
76
  color: var(--color-text-base);
77
77
  }
78
-
79
- .inlineDivider {
80
- width: var(--spacing-2);
81
- }
@@ -8,8 +8,10 @@ export class ScoutCheckbox {
8
8
  */
9
9
  ariaLabelledby;
10
10
  label;
11
+ value;
12
+ name;
11
13
  ariaId;
12
- scoutCheckboxChecked;
14
+ scoutChecked;
13
15
  /**
14
16
  * Internal event used for form field association.
15
17
  */
@@ -18,22 +20,16 @@ export class ScoutCheckbox {
18
20
  this.ariaId = `_${Math.random().toString(36).substring(2, 9)}`;
19
21
  this._fieldId.emit(this.ariaId);
20
22
  }
21
- onClick(event) {
23
+ onChange(event) {
22
24
  const checkbox = event.target;
23
- console.log("checkbox", checkbox.checked);
24
- this.scoutCheckboxChecked.emit({
25
+ this.scoutChecked.emit({
25
26
  checked: checkbox.checked,
26
27
  element: checkbox,
27
28
  });
28
29
  }
29
- /*
30
- todo:
31
- - Wrap checkbox with label if used.
32
- - make sure it works with field nicely with label.
33
- */
34
30
  render() {
35
- const Tag = this.label && this.label.length ? "label" : "div";
36
- return (h(Tag, { key: '39d7814c3af4261c7b60423464d5b3167ad96003' }, this.label, h("span", { key: '10375644d673913047c66460c2c0395f0110b644', class: "inlineDivider" }), h("input", { key: '3e5c5fa2571874e75325a7a3161a15e00332cd36', 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 })));
31
+ const Tag = this.label?.length ? "label" : "div";
32
+ return (h(Tag, { key: '088d1bbf053b0c9cf42851b9954030316c5ef01a' }, h("input", { key: 'd212a3f91e78d20270934e336c2356ee3474c129', id: this.ariaId, type: "checkbox", value: this.value, name: this.name, class: "checkbox", style: { "--icon-checkbox": `url(${checkIcon})` }, "aria-labelledby": this.ariaLabelledby, "aria-disabled": this.disabled, disabled: this.disabled, checked: this.checked, onChange: (event) => this.onChange(event) }), this.label));
37
33
  }
38
34
  static get is() { return "scout-checkbox"; }
39
35
  static get encapsulation() { return "scoped"; }
@@ -126,6 +122,44 @@ export class ScoutCheckbox {
126
122
  "setter": false,
127
123
  "reflect": false,
128
124
  "attribute": "label"
125
+ },
126
+ "value": {
127
+ "type": "string",
128
+ "mutable": false,
129
+ "complexType": {
130
+ "original": "string",
131
+ "resolved": "string",
132
+ "references": {}
133
+ },
134
+ "required": false,
135
+ "optional": false,
136
+ "docs": {
137
+ "tags": [],
138
+ "text": ""
139
+ },
140
+ "getter": false,
141
+ "setter": false,
142
+ "reflect": false,
143
+ "attribute": "value"
144
+ },
145
+ "name": {
146
+ "type": "string",
147
+ "mutable": false,
148
+ "complexType": {
149
+ "original": "string",
150
+ "resolved": "string",
151
+ "references": {}
152
+ },
153
+ "required": false,
154
+ "optional": false,
155
+ "docs": {
156
+ "tags": [],
157
+ "text": ""
158
+ },
159
+ "getter": false,
160
+ "setter": false,
161
+ "reflect": false,
162
+ "attribute": "name"
129
163
  }
130
164
  };
131
165
  }
@@ -136,8 +170,8 @@ export class ScoutCheckbox {
136
170
  }
137
171
  static get events() {
138
172
  return [{
139
- "method": "scoutCheckboxChecked",
140
- "name": "scoutCheckboxChecked",
173
+ "method": "scoutChecked",
174
+ "name": "scoutChecked",
141
175
  "bubbles": true,
142
176
  "cancelable": true,
143
177
  "composed": true,
@@ -1 +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"]}
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;IAEd,KAAK,CAAS;IAEd,IAAI,CAAS;IAEZ,MAAM,CAAS;IAEf,YAAY,CAGlB;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,QAAQ,CAAC,KAAY;QACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA0B,CAAC;QAElD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACjD,OAAO,CACL,EAAC,GAAG;YACF,8DACE,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,SAAS,GAAG,EAAE,qBAChC,IAAI,CAAC,cAAc,mBACrB,IAAI,CAAC,QAAQ,EAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GACzC;YACD,IAAI,CAAC,KAAK,CACP,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 @Prop() value: string;\n\n @Prop() name: string;\n\n @State() ariaId: string;\n\n @Event() scoutChecked: 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 onChange(event: Event) {\n const checkbox = event.target as HTMLInputElement;\n\n this.scoutChecked.emit({\n checked: checkbox.checked,\n element: checkbox,\n });\n }\n\n render() {\n const Tag = this.label?.length ? \"label\" : \"div\";\n return (\n <Tag>\n <input\n id={this.ariaId}\n type=\"checkbox\"\n value={this.value}\n name={this.name}\n class=\"checkbox\"\n style={{ \"--icon-checkbox\": `url(${checkIcon})` }}\n aria-labelledby={this.ariaLabelledby}\n aria-disabled={this.disabled}\n disabled={this.disabled}\n checked={this.checked}\n onChange={(event) => this.onChange(event)}\n />\n {this.label}\n </Tag>\n );\n }\n}\n"]}
@@ -2,4 +2,4 @@
2
2
  display: block;
3
3
  height: 1px;
4
4
  background-color: var(--color-gray-200);
5
- }
5
+ }
@@ -1,7 +1,7 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  export class ScoutDivider {
3
3
  render() {
4
- return h(Host, { key: '78c9366fcd393e53b579481d31feafa643b63690' });
4
+ return h(Host, { key: 'e139694ee7eb8dd88235b420d987878af2c970ce' });
5
5
  }
6
6
  static get is() { return "scout-divider"; }
7
7
  static get encapsulation() { return "shadow"; }
@@ -23,4 +23,4 @@
23
23
  font: var(--type-label-sm);
24
24
  color: var(--color-gray-600);
25
25
  margin: var(--spacing-1) 0 0 0;
26
- }
26
+ }
@@ -30,7 +30,7 @@ export class ScoutField {
30
30
  this.errorHidden = false;
31
31
  }
32
32
  render() {
33
- return (h("div", { key: 'e38499f35a268b15962a31a2dc45361fb803a8e3', class: "field" }, h("label", { key: '3e6ba58b91285a082964bd01336fd4c7d8260835', htmlFor: this.inputId, class: "label" }, this.label), h("slot", { key: '75de87617caef28b9d90d0e112870a5cf2b08bfc' }), h("p", { key: 'f152609ade3a840a4bfd6bfef5f5aadf8060fab2', class: "error-text", "aria-live": "polite" }, !this.errorHidden && this.errorText), this.helpText && h("p", { key: '86069ef5f19840e44e79a274152742070b51e7a8', class: "help-text" }, this.helpText)));
33
+ return (h("div", { key: '3cffad1b9fda1ea4060cf4587420ea67d16a7cde', class: "field" }, h("label", { key: '2d065d94b9aa5a9f251366a6fd58559210b485c9', htmlFor: this.inputId, class: "label" }, this.label), h("slot", { key: '3bdc5d1426b0fca754ee4eface64514503758d3c' }), h("p", { key: '57cb158fec7e16cbb2eb78481939fb84e86f9836', class: "error-text", "aria-live": "polite" }, !this.errorHidden && this.errorText), this.helpText && h("p", { key: '50b05f88914cb9f0f4fc615b24cdd2d6ac525219', class: "help-text" }, this.helpText)));
34
34
  }
35
35
  static get is() { return "scout-field"; }
36
36
  static get encapsulation() { return "scoped"; }
@@ -12,4 +12,4 @@
12
12
  background-color: var(--color-gray-100);
13
13
  color: var(--color-gray-700);
14
14
  cursor: not-allowed;
15
- }
15
+ }
@@ -18,6 +18,7 @@ export class ScoutInput {
18
18
  * Value of the input element, in case you want to control it yourself.
19
19
  */
20
20
  value = "";
21
+ name;
21
22
  /**
22
23
  * Whether the input is disabled. Disabled inputs are not editable, excluded
23
24
  * from tab order and are not validated.
@@ -52,7 +53,7 @@ export class ScoutInput {
52
53
  });
53
54
  }
54
55
  render() {
55
- return (h("input", { key: '7bc05d32826cd3173b6a6e4620acfb501fae4edc', id: this.ariaId, type: this.type, inputMode: this.inputmode, pattern: this.pattern, class: "input", value: this.value, disabled: this.disabled, onInput: (e) => this.onInput(e), onBlur: () => this.scoutBlur.emit() }));
56
+ return (h("input", { key: '63ad729182147b6a8490f4b88becc3207bfcfa49', id: this.ariaId, type: this.type, name: this.name, inputMode: this.inputmode, pattern: this.pattern, class: "input", value: this.value, disabled: this.disabled, onInput: (e) => this.onInput(e), onBlur: () => this.scoutBlur.emit() }));
56
57
  }
57
58
  static get is() { return "scout-input"; }
58
59
  static get encapsulation() { return "scoped"; }
@@ -158,6 +159,25 @@ export class ScoutInput {
158
159
  "attribute": "value",
159
160
  "defaultValue": "\"\""
160
161
  },
162
+ "name": {
163
+ "type": "string",
164
+ "mutable": false,
165
+ "complexType": {
166
+ "original": "string",
167
+ "resolved": "string",
168
+ "references": {}
169
+ },
170
+ "required": false,
171
+ "optional": false,
172
+ "docs": {
173
+ "tags": [],
174
+ "text": ""
175
+ },
176
+ "getter": false,
177
+ "setter": false,
178
+ "reflect": false,
179
+ "attribute": "name"
180
+ },
161
181
  "disabled": {
162
182
  "type": "boolean",
163
183
  "mutable": false,
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAC;AA6BvB,MAAM,OAAO,UAAU;IACrB;;;;OAIG;IACK,IAAI,GAAc,MAAM,CAAC;IAEjC;;OAEG;IACK,SAAS,CAAa;IAE9B;;OAEG;IACK,OAAO,CAAU;IAEzB;;OAEG;IACK,KAAK,GAAW,EAAE,CAAC;IAE3B;;;OAGG;IACK,QAAQ,GAAY,KAAK,CAAC;IAElC;;;;OAIG;IACK,QAAQ,CAAoC;IAE3C,gBAAgB,CAGtB;IACM,SAAS,CAAqB;IAEvC;;OAEG;IACM,QAAQ,CAAuB;IAE/B,MAAM,CAAS;IAExB,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,KAAiB;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAE/C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,CACL,8DACE,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GACnC,CACH,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Prop,\n State,\n} from \"@stencil/core\";\n\nexport type InputType =\n | \"text\"\n | \"password\"\n | \"email\"\n | \"number\"\n | \"tel\"\n | \"url\"\n // Hack to suggest above value but still allow any other string value\n | (string & {});\n\nexport type InputMode =\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\"\n // Hack to suggest above value but still allow any other string value\n | (string & {});\n\n@Component({\n tag: \"scout-input\",\n styleUrl: \"input.css\",\n scoped: true,\n})\nexport class ScoutInput implements ComponentInterface {\n /**\n * Type of input element. If you need a number input, read the accessibility\n * section of this MDN article first:\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/number#accessibility\n */\n @Prop() type: InputType = \"text\";\n\n /**\n * Input mode hints for devices with dynamic keyboards.\n */\n @Prop() inputmode?: InputMode;\n\n /**\n * Regex pattern for input validation.\n */\n @Prop() pattern?: string;\n\n /**\n * Value of the input element, in case you want to control it yourself.\n */\n @Prop() value: string = \"\";\n\n /**\n * Whether the input is disabled. Disabled inputs are not editable, excluded\n * from tab order and are not validated.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Custom validation function run on top of the implicit validation performed\n * by the browser. Return a string with the validation message to mark the\n * input as invalid, or null to mark it as valid.\n */\n @Prop() validate?: (value: string) => string | null;\n\n @Event() scoutInputChange: EventEmitter<{\n value: string;\n element: HTMLInputElement;\n }>;\n @Event() scoutBlur: EventEmitter<void>;\n\n /**\n * Internal event used for form field association.\n */\n @Event() _fieldId: EventEmitter<string>;\n\n @State() ariaId: 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 onInput(event: InputEvent) {\n const input = event.target as HTMLInputElement;\n\n if (this.validate) {\n const validationMessage = this.validate(input.value);\n input.setCustomValidity(validationMessage ?? \"\");\n }\n\n this.scoutInputChange.emit({\n value: input.value,\n element: input,\n });\n }\n\n render() {\n return (\n <input\n id={this.ariaId}\n type={this.type}\n inputMode={this.inputmode}\n pattern={this.pattern}\n class=\"input\"\n value={this.value}\n disabled={this.disabled}\n onInput={(e) => this.onInput(e)}\n onBlur={() => this.scoutBlur.emit()}\n />\n );\n }\n}\n"]}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAC;AA6BvB,MAAM,OAAO,UAAU;IACrB;;;;OAIG;IACK,IAAI,GAAc,MAAM,CAAC;IAEjC;;OAEG;IACK,SAAS,CAAa;IAE9B;;OAEG;IACK,OAAO,CAAU;IAEzB;;OAEG;IACK,KAAK,GAAW,EAAE,CAAC;IAEnB,IAAI,CAAS;IAErB;;;OAGG;IACK,QAAQ,GAAY,KAAK,CAAC;IAElC;;;;OAIG;IACK,QAAQ,CAAoC;IAE3C,gBAAgB,CAGtB;IACM,SAAS,CAAqB;IAEvC;;OAEG;IACM,QAAQ,CAAuB;IAE/B,MAAM,CAAS;IAExB,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,KAAiB;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAE/C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,CACL,8DACE,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GACnC,CACH,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Prop,\n State,\n} from \"@stencil/core\";\n\nexport type InputType =\n | \"text\"\n | \"password\"\n | \"email\"\n | \"number\"\n | \"tel\"\n | \"url\"\n // Hack to suggest above value but still allow any other string value\n | (string & {});\n\nexport type InputMode =\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\"\n // Hack to suggest above value but still allow any other string value\n | (string & {});\n\n@Component({\n tag: \"scout-input\",\n styleUrl: \"input.css\",\n scoped: true,\n})\nexport class ScoutInput implements ComponentInterface {\n /**\n * Type of input element. If you need a number input, read the accessibility\n * section of this MDN article first:\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/number#accessibility\n */\n @Prop() type: InputType = \"text\";\n\n /**\n * Input mode hints for devices with dynamic keyboards.\n */\n @Prop() inputmode?: InputMode;\n\n /**\n * Regex pattern for input validation.\n */\n @Prop() pattern?: string;\n\n /**\n * Value of the input element, in case you want to control it yourself.\n */\n @Prop() value: string = \"\";\n\n @Prop() name: string;\n\n /**\n * Whether the input is disabled. Disabled inputs are not editable, excluded\n * from tab order and are not validated.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Custom validation function run on top of the implicit validation performed\n * by the browser. Return a string with the validation message to mark the\n * input as invalid, or null to mark it as valid.\n */\n @Prop() validate?: (value: string) => string | null;\n\n @Event() scoutInputChange: EventEmitter<{\n value: string;\n element: HTMLInputElement;\n }>;\n @Event() scoutBlur: EventEmitter<void>;\n\n /**\n * Internal event used for form field association.\n */\n @Event() _fieldId: EventEmitter<string>;\n\n @State() ariaId: 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 onInput(event: InputEvent) {\n const input = event.target as HTMLInputElement;\n\n if (this.validate) {\n const validationMessage = this.validate(input.value);\n input.setCustomValidity(validationMessage ?? \"\");\n }\n\n this.scoutInputChange.emit({\n value: input.value,\n element: input,\n });\n }\n\n render() {\n return (\n <input\n id={this.ariaId}\n type={this.type}\n name={this.name}\n inputMode={this.inputmode}\n pattern={this.pattern}\n class=\"input\"\n value={this.value}\n disabled={this.disabled}\n onInput={(e) => this.onInput(e)}\n onBlur={() => this.scoutBlur.emit()}\n />\n );\n }\n}\n"]}
@@ -2,4 +2,4 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  padding: var(--spacing-2) 0;
5
- }
5
+ }
@@ -1,9 +1,27 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  export class ScoutListView {
3
+ el;
4
+ onScoutChecked(event) {
5
+ const { checked, element } = event.detail;
6
+ if (element.type !== "radio" || !element.name || !checked) {
7
+ return;
8
+ }
9
+ const listItems = this.el.querySelectorAll("scout-list-view-item");
10
+ const otherRadios = [];
11
+ listItems.forEach((item) => {
12
+ const radios = item.shadowRoot.querySelectorAll(`input[type="radio"][name="${CSS.escape(element.name)}"]`);
13
+ radios.forEach((r) => {
14
+ if (r !== element) {
15
+ otherRadios.push(r);
16
+ }
17
+ });
18
+ });
19
+ for (const radio of otherRadios) {
20
+ radio.checked = false;
21
+ }
22
+ }
3
23
  render() {
4
- return (
5
- // biome-ignore lint/a11y/useSemanticElements: We can't use <ul> because we're using shadow DOM.
6
- h(Host, { key: '162a45f1de284bc6f737769753837c29ca51155a', role: "list" }, h("slot", { key: '6a66f07a8082b94330dc33a183a7a915139d1e39' })));
24
+ return (h(Host, { key: 'b20a3a6e3ba31b390e99a31b144bf522057ca55c', role: "list" }, h("slot", { key: 'fb58eb9e354415f9ed01120206d5cb2b1be28ad0' })));
7
25
  }
8
26
  static get is() { return "scout-list-view"; }
9
27
  static get encapsulation() { return "shadow"; }
@@ -18,5 +36,15 @@ export class ScoutListView {
18
36
  "$": ["list-view.css"]
19
37
  };
20
38
  }
39
+ static get elementRef() { return "el"; }
40
+ static get listeners() {
41
+ return [{
42
+ "name": "scoutChecked",
43
+ "method": "onScoutChecked",
44
+ "target": undefined,
45
+ "capture": false,
46
+ "passive": false
47
+ }];
48
+ }
21
49
  }
22
50
  //# sourceMappingURL=list-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../../src/components/list-view/list-view.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AASnD,MAAM,OAAO,aAAa;IACxB,MAAM;QACJ,OAAO;QACL,gGAAgG;QAChG,EAAC,IAAI,qDAAC,IAAI,EAAC,MAAM;YACf,8DAAQ,CACH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h } from \"@stencil/core\";\n\n@Component({\n tag: \"scout-list-view\",\n styleUrl: \"list-view.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutListView {\n render() {\n return (\n // biome-ignore lint/a11y/useSemanticElements: We can't use <ul> because we're using shadow DOM.\n <Host role=\"list\">\n <slot />\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../../src/components/list-view/list-view.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AASpE,MAAM,OAAO,aAAa;IACb,EAAE,CAAc;IAG3B,cAAc,CACZ,KAAmE;QAEnE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QAE1C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAEnE,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC7C,6BAA6B,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAC1D,CAAC;YAEF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;oBAClB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDAAC,IAAI,EAAC,MAAM;YACf,8DAAQ,CACH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Host, h, Listen } from \"@stencil/core\";\n\n@Component({\n tag: \"scout-list-view\",\n styleUrl: \"list-view.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutListView {\n @Element() el: HTMLElement;\n\n @Listen(\"scoutChecked\")\n onScoutChecked(\n event: CustomEvent<{ checked: boolean; element: HTMLInputElement }>,\n ) {\n const { checked, element } = event.detail;\n\n if (element.type !== \"radio\" || !element.name || !checked) {\n return;\n }\n\n const listItems = this.el.querySelectorAll(\"scout-list-view-item\");\n\n const otherRadios: HTMLInputElement[] = [];\n\n listItems.forEach((item) => {\n const radios = item.shadowRoot.querySelectorAll<HTMLInputElement>(\n `input[type=\"radio\"][name=\"${CSS.escape(element.name)}\"]`,\n );\n\n radios.forEach((r) => {\n if (r !== element) {\n otherRadios.push(r);\n }\n });\n });\n\n for (const radio of otherRadios) {\n radio.checked = false;\n }\n }\n\n render() {\n return (\n <Host role=\"list\">\n <slot />\n </Host>\n );\n }\n}\n"]}
@@ -18,7 +18,6 @@
18
18
  }
19
19
 
20
20
  .button:hover {
21
-
22
21
  background-color: var(--color-background-brand-subtle-hovered);
23
22
  }
24
23
 
@@ -69,4 +68,4 @@
69
68
  .secondary {
70
69
  font: var(--type-body-sm);
71
70
  color: var(--color-neutral-700);
72
- }
71
+ }
@@ -7,9 +7,16 @@ export class ScoutListViewItem {
7
7
  href;
8
8
  target;
9
9
  rel;
10
+ name;
11
+ value;
12
+ checked;
10
13
  scoutClick;
11
14
  render() {
12
- const Tag = this.type === "link" ? "a" : "button";
15
+ const Tag = this.type === "link"
16
+ ? "a"
17
+ : this.type === "radio" || this.type === "checkbox"
18
+ ? "label"
19
+ : "button";
13
20
  const linkProps = this.type === "link"
14
21
  ? {
15
22
  href: this.href,
@@ -19,9 +26,7 @@ export class ScoutListViewItem {
19
26
  (this.target === "_blank" ? "noopener noreferrer" : undefined),
20
27
  }
21
28
  : {};
22
- return (
23
- // biome-ignore lint/a11y/useSemanticElements: We can't use <li> because we're using shadow DOM.
24
- h(Host, { key: '075b28cf90ce6487ba7c7212c209c2fafff80c8f', role: "listitem" }, h(Tag, { key: '30bc35454f69979ade277e4e376346ef5cc01c3b', class: "button", ...linkProps, onClick: () => this.scoutClick.emit() }, this.getPrefix(), this.getContent(), this.getSuffix())));
29
+ return (h(Host, { key: '9b9ac94836164ad6a375ee17086e39dec344509d', role: "listitem" }, h(Tag, { key: '302cd52b48fec498897cce4d681ef77592038ba4', class: "button", ...linkProps, onClick: () => this.scoutClick.emit() }, this.getPrefix(), this.getContent(), this.getSuffix())));
25
30
  }
26
31
  getPrefix() {
27
32
  if (!this.icon) {
@@ -33,18 +38,12 @@ export class ScoutListViewItem {
33
38
  return (h("div", { class: "content" }, this.primary && h("div", { class: "primary" }, this.primary), this.secondary && h("div", { class: "secondary" }, this.secondary)));
34
39
  }
35
40
  getSuffix() {
36
- // if (this.type === "link") {
37
- // return (
38
- // <div class="suffix-icon">
39
- // <span
40
- // class="icon"
41
- // style={{
42
- // "--icon": `url(${ChevronRightIcon})`,
43
- // }}
44
- // />
45
- // </div>
46
- // );
47
- // }
41
+ if (this.type === "radio") {
42
+ return (h("scout-radio-button", { name: this.name, value: this.value, checked: this.checked }));
43
+ }
44
+ if (this.type === "checkbox") {
45
+ return (h("scout-checkbox", { name: this.name, value: this.value, checked: this.checked }));
46
+ }
48
47
  return null;
49
48
  }
50
49
  static get is() { return "scout-list-view-item"; }
@@ -124,7 +123,7 @@ export class ScoutListViewItem {
124
123
  "mutable": false,
125
124
  "complexType": {
126
125
  "original": "ItemType",
127
- "resolved": "\"button\" | \"link\"",
126
+ "resolved": "\"button\" | \"checkbox\" | \"link\" | \"radio\"",
128
127
  "references": {
129
128
  "ItemType": {
130
129
  "location": "local",
@@ -201,6 +200,63 @@ export class ScoutListViewItem {
201
200
  "setter": false,
202
201
  "reflect": false,
203
202
  "attribute": "rel"
203
+ },
204
+ "name": {
205
+ "type": "string",
206
+ "mutable": false,
207
+ "complexType": {
208
+ "original": "string",
209
+ "resolved": "string",
210
+ "references": {}
211
+ },
212
+ "required": false,
213
+ "optional": true,
214
+ "docs": {
215
+ "tags": [],
216
+ "text": ""
217
+ },
218
+ "getter": false,
219
+ "setter": false,
220
+ "reflect": false,
221
+ "attribute": "name"
222
+ },
223
+ "value": {
224
+ "type": "string",
225
+ "mutable": false,
226
+ "complexType": {
227
+ "original": "string",
228
+ "resolved": "string",
229
+ "references": {}
230
+ },
231
+ "required": false,
232
+ "optional": true,
233
+ "docs": {
234
+ "tags": [],
235
+ "text": ""
236
+ },
237
+ "getter": false,
238
+ "setter": false,
239
+ "reflect": false,
240
+ "attribute": "value"
241
+ },
242
+ "checked": {
243
+ "type": "boolean",
244
+ "mutable": false,
245
+ "complexType": {
246
+ "original": "boolean",
247
+ "resolved": "boolean",
248
+ "references": {}
249
+ },
250
+ "required": false,
251
+ "optional": true,
252
+ "docs": {
253
+ "tags": [],
254
+ "text": ""
255
+ },
256
+ "getter": false,
257
+ "setter": false,
258
+ "reflect": false,
259
+ "attribute": "checked"
204
260
  }
205
261
  };
206
262
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-view-item.js","sourceRoot":"","sources":["../../../src/components/list-view-item/list-view-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,IAAI,EACJ,CAAC,EACD,IAAI,GACL,MAAM,eAAe,CAAC;AAWvB,MAAM,OAAO,iBAAiB;IACpB,IAAI,CAAU;IACd,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,IAAI,GAAa,QAAQ,CAAC;IAE1B,IAAI,CAAU;IACd,MAAM,CAAU;IAChB,GAAG,CAAU;IAEZ,UAAU,CAAqB;IAExC,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElD,MAAM,SAAS,GACb,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,yDAAyD;gBACzD,GAAG,EACD,IAAI,CAAC,GAAG;oBACR,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACjE;YACH,CAAC,CAAC,EAAE,CAAC;QAET,OAAO;QACL,gGAAgG;QAChG,EAAC,IAAI,qDAAC,IAAI,EAAC,UAAU;YACnB,EAAC,GAAG,qDACF,KAAK,EAAC,QAAQ,KACV,SAAS,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAEpC,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,SAAS,EAAE,CACb,CACD,CACR,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,WAAK,KAAK,EAAC,aAAa,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;IAC3D,CAAC;IAEO,UAAU;QAChB,OAAO,CACL,WAAK,KAAK,EAAC,SAAS;YACjB,IAAI,CAAC,OAAO,IAAI,WAAK,KAAK,EAAC,SAAS,IAAE,IAAI,CAAC,OAAO,CAAO;YACzD,IAAI,CAAC,SAAS,IAAI,WAAK,KAAK,EAAC,WAAW,IAAE,IAAI,CAAC,SAAS,CAAO,CAC5D,CACP,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,8BAA8B;QAC9B,aAAa;QACb,gCAAgC;QAChC,cAAc;QACd,uBAAuB;QACvB,mBAAmB;QACnB,kDAAkD;QAClD,aAAa;QACb,WAAW;QACX,aAAa;QACb,OAAO;QACP,IAAI;QAEJ,OAAO,IAAI,CAAC;IACd,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Event,\n type EventEmitter,\n Host,\n h,\n Prop,\n} from \"@stencil/core\";\n\nexport type ItemType = \"button\" | \"link\";\n\n@Component({\n tag: \"scout-list-view-item\",\n styleUrl: \"list-view-item.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutListViewItem {\n @Prop() icon?: string;\n @Prop() primary?: string;\n @Prop() secondary?: string;\n @Prop() type: ItemType = \"button\";\n\n @Prop() href?: string;\n @Prop() target?: string;\n @Prop() rel?: string;\n\n @Event() scoutClick: EventEmitter<void>;\n\n render() {\n const Tag = this.type === \"link\" ? \"a\" : \"button\";\n\n const linkProps =\n this.type === \"link\"\n ? {\n href: this.href,\n target: this.target,\n // This might not be our job, but better safe than sorry.\n rel:\n this.rel ??\n (this.target === \"_blank\" ? \"noopener noreferrer\" : undefined),\n }\n : {};\n\n return (\n // biome-ignore lint/a11y/useSemanticElements: We can't use <li> because we're using shadow DOM.\n <Host role=\"listitem\">\n <Tag\n class=\"button\"\n {...linkProps}\n onClick={() => this.scoutClick.emit()}\n >\n {this.getPrefix()}\n {this.getContent()}\n {this.getSuffix()}\n </Tag>\n </Host>\n );\n }\n\n private getPrefix() {\n if (!this.icon) {\n return null;\n }\n\n return <div class=\"prefix-icon\" innerHTML={this.icon} />;\n }\n\n private getContent() {\n return (\n <div class=\"content\">\n {this.primary && <div class=\"primary\">{this.primary}</div>}\n {this.secondary && <div class=\"secondary\">{this.secondary}</div>}\n </div>\n );\n }\n\n private getSuffix() {\n // if (this.type === \"link\") {\n // return (\n // <div class=\"suffix-icon\">\n // <span\n // class=\"icon\"\n // style={{\n // \"--icon\": `url(${ChevronRightIcon})`,\n // }}\n // />\n // </div>\n // );\n // }\n\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"list-view-item.js","sourceRoot":"","sources":["../../../src/components/list-view-item/list-view-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,IAAI,EACJ,CAAC,EACD,IAAI,GACL,MAAM,eAAe,CAAC;AAWvB,MAAM,OAAO,iBAAiB;IACpB,IAAI,CAAU;IACd,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,IAAI,GAAa,QAAQ,CAAC;IAE1B,IAAI,CAAU;IACd,MAAM,CAAU;IAChB,GAAG,CAAU;IAEb,IAAI,CAAU;IACd,KAAK,CAAU;IACf,OAAO,CAAW;IAEjB,UAAU,CAAqB;IAExC,MAAM;QACJ,MAAM,GAAG,GACP,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBACjD,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ,CAAC;QAEjB,MAAM,SAAS,GACb,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,yDAAyD;gBACzD,GAAG,EACD,IAAI,CAAC,GAAG;oBACR,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACjE;YACH,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,CACL,EAAC,IAAI,qDAAC,IAAI,EAAC,UAAU;YACnB,EAAC,GAAG,qDACF,KAAK,EAAC,QAAQ,KACV,SAAS,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAEpC,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,SAAS,EAAE,CACb,CACD,CACR,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,WAAK,KAAK,EAAC,aAAa,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;IAC3D,CAAC;IAEO,UAAU;QAChB,OAAO,CACL,WAAK,KAAK,EAAC,SAAS;YACjB,IAAI,CAAC,OAAO,IAAI,WAAK,KAAK,EAAC,SAAS,IAAE,IAAI,CAAC,OAAO,CAAO;YACzD,IAAI,CAAC,SAAS,IAAI,WAAK,KAAK,EAAC,WAAW,IAAE,IAAI,CAAC,SAAS,CAAO,CAC5D,CACP,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,CACL,0BACE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,GACrB,CACH,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,CACL,sBACE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,GACrB,CACH,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Event,\n type EventEmitter,\n Host,\n h,\n Prop,\n} from \"@stencil/core\";\n\nexport type ItemType = \"button\" | \"link\" | \"radio\" | \"checkbox\";\n\n@Component({\n tag: \"scout-list-view-item\",\n styleUrl: \"list-view-item.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutListViewItem {\n @Prop() icon?: string;\n @Prop() primary?: string;\n @Prop() secondary?: string;\n @Prop() type: ItemType = \"button\";\n\n @Prop() href?: string;\n @Prop() target?: string;\n @Prop() rel?: string;\n\n @Prop() name?: string;\n @Prop() value?: string;\n @Prop() checked?: boolean;\n\n @Event() scoutClick: EventEmitter<void>;\n\n render() {\n const Tag =\n this.type === \"link\"\n ? \"a\"\n : this.type === \"radio\" || this.type === \"checkbox\"\n ? \"label\"\n : \"button\";\n\n const linkProps =\n this.type === \"link\"\n ? {\n href: this.href,\n target: this.target,\n // This might not be our job, but better safe than sorry.\n rel:\n this.rel ??\n (this.target === \"_blank\" ? \"noopener noreferrer\" : undefined),\n }\n : {};\n\n return (\n <Host role=\"listitem\">\n <Tag\n class=\"button\"\n {...linkProps}\n onClick={() => this.scoutClick.emit()}\n >\n {this.getPrefix()}\n {this.getContent()}\n {this.getSuffix()}\n </Tag>\n </Host>\n );\n }\n\n private getPrefix() {\n if (!this.icon) {\n return null;\n }\n\n return <div class=\"prefix-icon\" innerHTML={this.icon} />;\n }\n\n private getContent() {\n return (\n <div class=\"content\">\n {this.primary && <div class=\"primary\">{this.primary}</div>}\n {this.secondary && <div class=\"secondary\">{this.secondary}</div>}\n </div>\n );\n }\n\n private getSuffix() {\n if (this.type === \"radio\") {\n return (\n <scout-radio-button\n name={this.name}\n value={this.value}\n checked={this.checked}\n />\n );\n }\n\n if (this.type === \"checkbox\") {\n return (\n <scout-checkbox\n name={this.name}\n value={this.value}\n checked={this.checked}\n />\n );\n }\n\n return null;\n }\n}\n"]}