@scouterna/ui-webc 2.2.3 → 2.2.5

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 (176) hide show
  1. package/dist/cjs/{inputMixin-CkYXihTB.js → inputMixin-D1D-VFiT.js} +6 -2
  2. package/dist/cjs/inputMixin-D1D-VFiT.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/scout-app-bar.cjs.entry.js +2 -2
  5. package/dist/cjs/scout-app-bar.entry.cjs.js.map +1 -1
  6. package/dist/cjs/scout-button.cjs.entry.js +3 -3
  7. package/dist/cjs/scout-button.entry.cjs.js.map +1 -1
  8. package/dist/cjs/scout-card.cjs.entry.js +1 -1
  9. package/dist/cjs/scout-checkbox.scout-radio-button.entry.cjs.js.map +1 -1
  10. package/dist/cjs/scout-checkbox_2.cjs.entry.js +3 -3
  11. package/dist/cjs/scout-divider.cjs.entry.js +1 -1
  12. package/dist/cjs/scout-field.cjs.entry.js +1 -1
  13. package/dist/cjs/scout-field.entry.cjs.js.map +1 -1
  14. package/dist/cjs/scout-input.cjs.entry.js +22 -3
  15. package/dist/cjs/scout-input.entry.cjs.js.map +1 -1
  16. package/dist/cjs/scout-list-view-item.cjs.entry.js +4 -3
  17. package/dist/cjs/scout-list-view-item.entry.cjs.js.map +1 -1
  18. package/dist/cjs/scout-list-view-subheader.cjs.entry.js +2 -2
  19. package/dist/cjs/scout-list-view-subheader.entry.cjs.js.map +1 -1
  20. package/dist/cjs/scout-list-view.cjs.entry.js +1 -1
  21. package/dist/cjs/scout-loader.cjs.entry.js +1 -1
  22. package/dist/cjs/scout-select.cjs.entry.js +2 -2
  23. package/dist/cjs/scout-select.entry.cjs.js.map +1 -1
  24. package/dist/cjs/scout-stack.cjs.entry.js +2 -2
  25. package/dist/cjs/scout-switch.cjs.entry.js +2 -2
  26. package/dist/cjs/scout-switch.entry.cjs.js.map +1 -1
  27. package/dist/cjs/ui-webc.cjs.js +1 -1
  28. package/dist/collection/components/app-bar/app-bar.css +2 -1
  29. package/dist/collection/components/app-bar/app-bar.js +6 -1
  30. package/dist/collection/components/app-bar/app-bar.js.map +1 -1
  31. package/dist/collection/components/button/button.css +86 -105
  32. package/dist/collection/components/button/button.js +6 -5
  33. package/dist/collection/components/button/button.js.map +1 -1
  34. package/dist/collection/components/card/card.js +1 -1
  35. package/dist/collection/components/checkbox/checkbox.js +7 -1
  36. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  37. package/dist/collection/components/divider/divider.js +1 -1
  38. package/dist/collection/components/field/field.js +6 -1
  39. package/dist/collection/components/field/field.js.map +1 -1
  40. package/dist/collection/components/input/input.css +26 -4
  41. package/dist/collection/components/input/input.js +86 -2
  42. package/dist/collection/components/input/input.js.map +1 -1
  43. package/dist/collection/components/list-view/list-view.js +1 -1
  44. package/dist/collection/components/list-view-item/list-view-item.js +23 -3
  45. package/dist/collection/components/list-view-item/list-view-item.js.map +1 -1
  46. package/dist/collection/components/list-view-subheader/list-view-subheader.css +3 -2
  47. package/dist/collection/components/list-view-subheader/list-view-subheader.js +1 -1
  48. package/dist/collection/components/loader/loader.js +1 -1
  49. package/dist/collection/components/radio-button/radio-button.js +6 -1
  50. package/dist/collection/components/radio-button/radio-button.js.map +1 -1
  51. package/dist/collection/components/select/select.js +6 -1
  52. package/dist/collection/components/select/select.js.map +1 -1
  53. package/dist/collection/components/stack/stack.js +2 -2
  54. package/dist/collection/components/switch/switch.js +6 -1
  55. package/dist/collection/components/switch/switch.js.map +1 -1
  56. package/dist/collection/mixins/inputMixin.js +4 -0
  57. package/dist/collection/mixins/inputMixin.js.map +1 -1
  58. package/dist/components/{p-BkrRT31y.js → p-4RT-nIeK.js} +4 -4
  59. package/dist/components/{p-BkrRT31y.js.map → p-4RT-nIeK.js.map} +1 -1
  60. package/dist/components/{p-DaGMxK4K.js → p-B-kEl-ny.js} +8 -2
  61. package/dist/components/p-B-kEl-ny.js.map +1 -0
  62. package/dist/components/{p-C2_wl40t.js → p-CLzh39Ll.js} +4 -4
  63. package/dist/components/{p-C2_wl40t.js.map → p-CLzh39Ll.js.map} +1 -1
  64. package/dist/components/scout-app-bar.js +2 -2
  65. package/dist/components/scout-app-bar.js.map +1 -1
  66. package/dist/components/scout-button.js +5 -5
  67. package/dist/components/scout-button.js.map +1 -1
  68. package/dist/components/scout-card.js +1 -1
  69. package/dist/components/scout-checkbox.js +1 -1
  70. package/dist/components/scout-divider.js +1 -1
  71. package/dist/components/scout-field.js +1 -1
  72. package/dist/components/scout-field.js.map +1 -1
  73. package/dist/components/scout-input.js +26 -4
  74. package/dist/components/scout-input.js.map +1 -1
  75. package/dist/components/scout-list-view-item.js +8 -6
  76. package/dist/components/scout-list-view-item.js.map +1 -1
  77. package/dist/components/scout-list-view-subheader.js +2 -2
  78. package/dist/components/scout-list-view-subheader.js.map +1 -1
  79. package/dist/components/scout-list-view.js +1 -1
  80. package/dist/components/scout-loader.js +1 -1
  81. package/dist/components/scout-radio-button.js +1 -1
  82. package/dist/components/scout-select.js +2 -2
  83. package/dist/components/scout-select.js.map +1 -1
  84. package/dist/components/scout-stack.js +2 -2
  85. package/dist/components/scout-switch.js +2 -2
  86. package/dist/components/scout-switch.js.map +1 -1
  87. package/dist/custom-elements.json +124 -10
  88. package/dist/esm/{inputMixin-mAf9ZFOg.js → inputMixin-C9OB0DNj.js} +6 -2
  89. package/dist/esm/inputMixin-C9OB0DNj.js.map +1 -0
  90. package/dist/esm/loader.js +1 -1
  91. package/dist/esm/scout-app-bar.entry.js +2 -2
  92. package/dist/esm/scout-app-bar.entry.js.map +1 -1
  93. package/dist/esm/scout-button.entry.js +4 -4
  94. package/dist/esm/scout-button.entry.js.map +1 -1
  95. package/dist/esm/scout-card.entry.js +1 -1
  96. package/dist/esm/scout-checkbox.scout-radio-button.entry.js.map +1 -1
  97. package/dist/esm/scout-checkbox_2.entry.js +3 -3
  98. package/dist/esm/scout-divider.entry.js +1 -1
  99. package/dist/esm/scout-field.entry.js +1 -1
  100. package/dist/esm/scout-field.entry.js.map +1 -1
  101. package/dist/esm/scout-input.entry.js +23 -4
  102. package/dist/esm/scout-input.entry.js.map +1 -1
  103. package/dist/esm/scout-list-view-item.entry.js +4 -3
  104. package/dist/esm/scout-list-view-item.entry.js.map +1 -1
  105. package/dist/esm/scout-list-view-subheader.entry.js +2 -2
  106. package/dist/esm/scout-list-view-subheader.entry.js.map +1 -1
  107. package/dist/esm/scout-list-view.entry.js +1 -1
  108. package/dist/esm/scout-loader.entry.js +1 -1
  109. package/dist/esm/scout-select.entry.js +2 -2
  110. package/dist/esm/scout-select.entry.js.map +1 -1
  111. package/dist/esm/scout-stack.entry.js +2 -2
  112. package/dist/esm/scout-switch.entry.js +2 -2
  113. package/dist/esm/scout-switch.entry.js.map +1 -1
  114. package/dist/esm/ui-webc.js +1 -1
  115. package/dist/types/components/app-bar/app-bar.d.ts +5 -0
  116. package/dist/types/components/button/button.d.ts +3 -1
  117. package/dist/types/components/field/field.d.ts +5 -0
  118. package/dist/types/components/list-view-item/list-view-item.d.ts +1 -0
  119. package/dist/types/components.d.ts +190 -4
  120. package/dist/ui-webc/p-08499152.entry.js +2 -0
  121. package/dist/ui-webc/{p-97f9cf0a.entry.js.map → p-08499152.entry.js.map} +1 -1
  122. package/dist/ui-webc/{p-d8084e5c.entry.js → p-0b8a7cc9.entry.js} +2 -2
  123. package/dist/ui-webc/p-2a842a24.entry.js +2 -0
  124. package/dist/ui-webc/p-2a842a24.entry.js.map +1 -0
  125. package/dist/ui-webc/{p-3018f46f.entry.js → p-30b75968.entry.js} +2 -2
  126. package/dist/ui-webc/p-30b75968.entry.js.map +1 -0
  127. package/dist/ui-webc/p-3ac00412.entry.js +2 -0
  128. package/dist/ui-webc/p-3ac00412.entry.js.map +1 -0
  129. package/dist/ui-webc/p-4f28520e.entry.js +2 -0
  130. package/dist/ui-webc/{p-97956c4f.entry.js → p-6de2edd1.entry.js} +2 -2
  131. package/dist/ui-webc/{p-d999b8d6.entry.js → p-6e9afb25.entry.js} +2 -2
  132. package/dist/ui-webc/p-8a942414.entry.js +2 -0
  133. package/dist/ui-webc/{p-e4f5dad7.entry.js.map → p-8a942414.entry.js.map} +1 -1
  134. package/dist/ui-webc/p-8f3e4290.entry.js +2 -0
  135. package/dist/ui-webc/p-BsG0XL4c.js +2 -0
  136. package/dist/ui-webc/p-BsG0XL4c.js.map +1 -0
  137. package/dist/ui-webc/{p-4616484e.entry.js → p-b0a70cb6.entry.js} +2 -2
  138. package/dist/ui-webc/p-cbf489b1.entry.js +2 -0
  139. package/dist/ui-webc/{p-1a701759.entry.js.map → p-cbf489b1.entry.js.map} +1 -1
  140. package/dist/ui-webc/p-d68b8b37.entry.js +2 -0
  141. package/dist/ui-webc/{p-02c211ea.entry.js.map → p-d68b8b37.entry.js.map} +1 -1
  142. package/dist/ui-webc/{p-ac65f104.entry.js → p-dcc4dafa.entry.js} +2 -2
  143. package/dist/ui-webc/scout-app-bar.entry.esm.js.map +1 -1
  144. package/dist/ui-webc/scout-button.entry.esm.js.map +1 -1
  145. package/dist/ui-webc/scout-checkbox.scout-radio-button.entry.esm.js.map +1 -1
  146. package/dist/ui-webc/scout-field.entry.esm.js.map +1 -1
  147. package/dist/ui-webc/scout-input.entry.esm.js.map +1 -1
  148. package/dist/ui-webc/scout-list-view-item.entry.esm.js.map +1 -1
  149. package/dist/ui-webc/scout-list-view-subheader.entry.esm.js.map +1 -1
  150. package/dist/ui-webc/scout-select.entry.esm.js.map +1 -1
  151. package/dist/ui-webc/scout-switch.entry.esm.js.map +1 -1
  152. package/dist/ui-webc/ui-webc.esm.js +1 -1
  153. package/package.json +1 -1
  154. package/dist/cjs/inputMixin-CkYXihTB.js.map +0 -1
  155. package/dist/components/p-DaGMxK4K.js.map +0 -1
  156. package/dist/esm/inputMixin-mAf9ZFOg.js.map +0 -1
  157. package/dist/ui-webc/p-02c211ea.entry.js +0 -2
  158. package/dist/ui-webc/p-059921bb.entry.js +0 -2
  159. package/dist/ui-webc/p-059921bb.entry.js.map +0 -1
  160. package/dist/ui-webc/p-1a701759.entry.js +0 -2
  161. package/dist/ui-webc/p-3018f46f.entry.js.map +0 -1
  162. package/dist/ui-webc/p-479ae616.entry.js +0 -2
  163. package/dist/ui-webc/p-479ae616.entry.js.map +0 -1
  164. package/dist/ui-webc/p-974e8415.entry.js +0 -2
  165. package/dist/ui-webc/p-97f9cf0a.entry.js +0 -2
  166. package/dist/ui-webc/p-BzgciO7w.js +0 -2
  167. package/dist/ui-webc/p-BzgciO7w.js.map +0 -1
  168. package/dist/ui-webc/p-e2288570.entry.js +0 -2
  169. package/dist/ui-webc/p-e4f5dad7.entry.js +0 -2
  170. /package/dist/ui-webc/{p-d8084e5c.entry.js.map → p-0b8a7cc9.entry.js.map} +0 -0
  171. /package/dist/ui-webc/{p-e2288570.entry.js.map → p-4f28520e.entry.js.map} +0 -0
  172. /package/dist/ui-webc/{p-97956c4f.entry.js.map → p-6de2edd1.entry.js.map} +0 -0
  173. /package/dist/ui-webc/{p-d999b8d6.entry.js.map → p-6e9afb25.entry.js.map} +0 -0
  174. /package/dist/ui-webc/{p-974e8415.entry.js.map → p-8f3e4290.entry.js.map} +0 -0
  175. /package/dist/ui-webc/{p-4616484e.entry.js.map → p-b0a70cb6.entry.js.map} +0 -0
  176. /package/dist/ui-webc/{p-ac65f104.entry.js.map → p-dcc4dafa.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scout-switch.entry.cjs.js","sources":["src/components/switch/switch.css?tag=scout-switch&encapsulation=shadow","src/components/switch/switch.tsx"],"sourcesContent":[".switch {\n width: var(--spacing-10);\n height: var(--spacing-6);\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--spacing-8);\n background-color: var(--color-text-brand-inverse);\n border: 2px solid var(--color-gray-300);\n position: relative;\n display: flex;\n align-content: center;\n justify-content: center;\n transition-property: border-color;\n transition-duration: 0.3s;\n transition-timing-function: ease-in-out;\n cursor: pointer;\n --switch-ball-padding: calc(var(--spacing-1) / 4);\n --switch-ball-size: calc(var(--spacing-5) - var(--switch-ball-padding) * 2);\n}\n\n.switch:hover {\n transition-property: none;\n border-color: var(--color-gray-400);\n background-color: var(--color-background-brand-subtle-hovered);\n}\n\n.switch:active {\n background-color: var(--color-background-brand-subtle-pressed);\n}\n\n.switch:checked {\n border-color: var(--color-background-brand-base);\n}\n\n.switch:hover::before {\n background-color: var(--color-gray-400);\n}\n\n.switch::before {\n content: \"\";\n background-color: var(--color-gray-300);\n width: var(--switch-ball-size);\n height: var(--switch-ball-size);\n border-radius: 50%;\n position: absolute;\n top: var(--switch-ball-padding);\n left: var(--switch-ball-padding);\n transition-duration: 0.3s;\n transition-property: left, right;\n}\n.switch:checked::before {\n content: \"\";\n background-color: var(--color-background-brand-base);\n left: calc(100% - calc(var(--switch-ball-size) + var(--switch-ball-padding)));\n}\n\n.switch:disabled {\n pointer-events: none;\n background-color: var(--color-gray-100);\n border-color: var(--color-gray-100);\n}\n\n.switch:disabled::before {\n background-color: var(--color-gray-300);\n}\n\nlabel {\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n font: var(--type-label-base);\n color: var(--color-text-base);\n}\n\n.inlineDivider {\n width: var(--spacing-2);\n}\n","import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\n\n@Component({\n tag: \"scout-switch\",\n styleUrl: \"switch.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutSwitch\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\n /**\n * Indicates whether the switch is toggled on or off.\n */\n @Prop() toggled: boolean = false;\n\n @Prop() disabled: boolean = false;\n\n /**\n * Use this prop if you need to connect your switch with another element describing its use, other than the property label.\n */\n @Prop() ariaLabelledby: string;\n\n @Prop() label: string;\n\n @Event() scoutChecked: EventEmitter<{\n checked: boolean;\n element: HTMLInputElement;\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 {this.label}\n <span class=\"inlineDivider\"></span>\n <input\n ref={(el) => this.setInputRef(el)}\n id={this.ariaId}\n type=\"checkbox\"\n class=\"switch\"\n aria-labelledby={this.ariaLabelledby}\n aria-disabled={this.disabled}\n disabled={this.disabled}\n checked={this.toggled}\n onChange={(event) => {\n this.onInput();\n this.onChange(event);\n }}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\n />\n </Tag>\n );\n }\n}\n"],"names":["Mixin","inputMixin","h"],"mappings":";;;;;AAAA,MAAM,SAAS,GAAG,ktDAAktD;;ACkBvtD,MAAA,WACX,GAAA,cAAQA,WAAK,CAACC,qBAAU,CAAC,CAAA;;;;;;;;;;;AAGzB;;AAEG;IACK,OAAO,GAAY,KAAK;IAExB,QAAQ,GAAY,KAAK;AAEjC;;AAEG;AACK,IAAA,cAAc;AAEd,IAAA,KAAK;AAEJ,IAAA,YAAY;AAKrB,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA0B;AAEjD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA,CAAC;;IAGJ,MAAM,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK;QAChD,QACEC,QAAC,GAAG,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACD,IAAI,CAAC,KAAK,EACXA,OAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,eAAe,EAAQ,CAAA,EACnCA,OACE,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,QAAQ,EACG,iBAAA,EAAA,IAAI,CAAC,cAAc,EACrB,eAAA,EAAA,IAAI,CAAC,QAAQ,EAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,CAAC,KAAK,KAAI;gBAClB,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;aACrB,EACD,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,EAAA,CACjC,CACE;;;;;;;;"}
1
+ {"version":3,"file":"scout-switch.entry.cjs.js","sources":["src/components/switch/switch.css?tag=scout-switch&encapsulation=shadow","src/components/switch/switch.tsx"],"sourcesContent":[".switch {\n width: var(--spacing-10);\n height: var(--spacing-6);\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--spacing-8);\n background-color: var(--color-text-brand-inverse);\n border: 2px solid var(--color-gray-300);\n position: relative;\n display: flex;\n align-content: center;\n justify-content: center;\n transition-property: border-color;\n transition-duration: 0.3s;\n transition-timing-function: ease-in-out;\n cursor: pointer;\n --switch-ball-padding: calc(var(--spacing-1) / 4);\n --switch-ball-size: calc(var(--spacing-5) - var(--switch-ball-padding) * 2);\n}\n\n.switch:hover {\n transition-property: none;\n border-color: var(--color-gray-400);\n background-color: var(--color-background-brand-subtle-hovered);\n}\n\n.switch:active {\n background-color: var(--color-background-brand-subtle-pressed);\n}\n\n.switch:checked {\n border-color: var(--color-background-brand-base);\n}\n\n.switch:hover::before {\n background-color: var(--color-gray-400);\n}\n\n.switch::before {\n content: \"\";\n background-color: var(--color-gray-300);\n width: var(--switch-ball-size);\n height: var(--switch-ball-size);\n border-radius: 50%;\n position: absolute;\n top: var(--switch-ball-padding);\n left: var(--switch-ball-padding);\n transition-duration: 0.3s;\n transition-property: left, right;\n}\n.switch:checked::before {\n content: \"\";\n background-color: var(--color-background-brand-base);\n left: calc(100% - calc(var(--switch-ball-size) + var(--switch-ball-padding)));\n}\n\n.switch:disabled {\n pointer-events: none;\n background-color: var(--color-gray-100);\n border-color: var(--color-gray-100);\n}\n\n.switch:disabled::before {\n background-color: var(--color-gray-300);\n}\n\nlabel {\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n font: var(--type-label-base);\n color: var(--color-text-base);\n}\n\n.inlineDivider {\n width: var(--spacing-2);\n}\n","import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\n\n/**\n * The switch component is used to toggle between two states, on and off.\n * Behaves like a checkbox. When used in a form, make sure to wrap it in a Field\n * component to display a label, help text, and error messages.\n */\n@Component({\n tag: \"scout-switch\",\n styleUrl: \"switch.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutSwitch\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\n /**\n * Indicates whether the switch is toggled on or off.\n */\n @Prop() toggled: boolean = false;\n\n @Prop() disabled: boolean = false;\n\n /**\n * Use this prop if you need to connect your switch with another element describing its use, other than the property label.\n */\n @Prop() ariaLabelledby: string;\n\n @Prop() label: string;\n\n @Event() scoutChecked: EventEmitter<{\n checked: boolean;\n element: HTMLInputElement;\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 {this.label}\n <span class=\"inlineDivider\"></span>\n <input\n ref={(el) => this.setInputRef(el)}\n id={this.ariaId}\n type=\"checkbox\"\n class=\"switch\"\n aria-labelledby={this.ariaLabelledby}\n aria-disabled={this.disabled}\n disabled={this.disabled}\n checked={this.toggled}\n onChange={(event) => {\n this.onInput();\n this.onChange(event);\n }}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\n />\n </Tag>\n );\n }\n}\n"],"names":["Mixin","inputMixin","h"],"mappings":";;;;;AAAA,MAAM,SAAS,GAAG,ktDAAktD;;ACuBvtD,MAAA,WACX,GAAA,cAAQA,WAAK,CAACC,qBAAU,CAAC,CAAA;;;;;;;;;;;AAGzB;;AAEG;IACK,OAAO,GAAY,KAAK;IAExB,QAAQ,GAAY,KAAK;AAEjC;;AAEG;AACK,IAAA,cAAc;AAEd,IAAA,KAAK;AAEJ,IAAA,YAAY;AAKrB,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA0B;AAEjD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA,CAAC;;IAGJ,MAAM,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK;QAChD,QACEC,QAAC,GAAG,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACD,IAAI,CAAC,KAAK,EACXA,OAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,eAAe,EAAQ,CAAA,EACnCA,OACE,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,QAAQ,EACG,iBAAA,EAAA,IAAI,CAAC,cAAc,EACrB,eAAA,EAAA,IAAI,CAAC,QAAQ,EAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,CAAC,KAAK,KAAI;gBAClB,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;aACrB,EACD,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,EAAA,CACjC,CACE;;;;;;;;"}
@@ -18,7 +18,7 @@ var patchBrowser = () => {
18
18
 
19
19
  patchBrowser().then(async (options) => {
20
20
  await index.globalScripts();
21
- return index.bootstrapLazy([["scout-list-view-item.cjs",[[785,"scout-list-view-item",{"icon":[1],"primary":[1],"secondary":[1],"type":[1],"href":[1],"target":[1],"rel":[1],"name":[1],"value":[1],"checked":[4]}]]],["scout-app-bar.cjs",[[785,"scout-app-bar",{"titleText":[1,"title-text"]}]]],["scout-bottom-bar.cjs",[[273,"scout-bottom-bar"]]],["scout-bottom-bar-item.cjs",[[785,"scout-bottom-bar-item",{"type":[1],"href":[1],"target":[1],"rel":[1],"icon":[1],"label":[1],"active":[4]}]]],["scout-button.cjs",[[774,"scout-button",{"type":[1],"href":[1],"target":[1],"rel":[1],"variant":[1],"icon":[1],"iconPosition":[1,"icon-position"],"iconOnly":[4,"icon-only"]}]]],["scout-card.cjs",[[273,"scout-card"]]],["scout-divider.cjs",[[273,"scout-divider"]]],["scout-field.cjs",[[774,"scout-field",{"label":[1],"helpText":[1,"help-text"],"inputId":[32],"errorText":[32],"errorHidden":[32]},[[0,"_scoutFieldId","catchFieldId"],[0,"_scoutValidate","handleValidation"],[0,"scoutBlur","showError"],[0,"_scoutInvalid","showError"]]]]],["scout-input.cjs",[[770,"scout-input",{"validate":[16],"type":[1],"inputmode":[1],"pattern":[1],"value":[1],"name":[1],"disabled":[4],"ariaId":[32]}]]],["scout-link.cjs",[[785,"scout-link",{"href":[1],"label":[1],"rel":[1],"linkAriaLabel":[1,"link-aria-label"],"type":[1],"target":[1]}]]],["scout-list-view.cjs",[[273,"scout-list-view",null,[[0,"scoutChecked","onScoutChecked"]]]]],["scout-list-view-subheader.cjs",[[785,"scout-list-view-subheader",{"text":[1],"headingLevel":[1,"heading-level"]}]]],["scout-loader.cjs",[[769,"scout-loader",{"text":[1],"size":[1]}]]],["scout-select.cjs",[[774,"scout-select",{"validate":[16],"value":[1],"disabled":[4],"name":[1],"ariaId":[32]}]]],["scout-stack.cjs",[[785,"scout-stack",{"direction":[1],"gapSize":[1,"gap-size"]}]]],["scout-switch.cjs",[[785,"scout-switch",{"validate":[16],"toggled":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"ariaId":[32]}]]],["scout-checkbox_2.cjs",[[770,"scout-checkbox",{"validate":[16],"checked":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"value":[1],"name":[1],"ariaId":[32]}],[770,"scout-radio-button",{"validate":[16],"checked":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"value":[1],"name":[1],"ariaId":[32]}]]]], options);
21
+ return index.bootstrapLazy([["scout-list-view-item.cjs",[[785,"scout-list-view-item",{"icon":[1],"primary":[1],"secondary":[1],"type":[1],"href":[1],"target":[1],"rel":[1],"name":[1],"value":[1],"checked":[4],"disabled":[4]}]]],["scout-app-bar.cjs",[[785,"scout-app-bar",{"titleText":[1,"title-text"]}]]],["scout-bottom-bar.cjs",[[273,"scout-bottom-bar"]]],["scout-bottom-bar-item.cjs",[[785,"scout-bottom-bar-item",{"type":[1],"href":[1],"target":[1],"rel":[1],"icon":[1],"label":[1],"active":[4]}]]],["scout-button.cjs",[[772,"scout-button",{"type":[1],"href":[1],"target":[1],"rel":[1],"variant":[1],"icon":[1],"iconPosition":[1,"icon-position"],"iconOnly":[4,"icon-only"]}]]],["scout-card.cjs",[[273,"scout-card"]]],["scout-divider.cjs",[[273,"scout-divider"]]],["scout-field.cjs",[[774,"scout-field",{"label":[1],"helpText":[1,"help-text"],"inputId":[32],"errorText":[32],"errorHidden":[32]},[[0,"_scoutFieldId","catchFieldId"],[0,"_scoutValidate","handleValidation"],[0,"scoutBlur","showError"],[0,"_scoutInvalid","showError"]]]]],["scout-input.cjs",[[770,"scout-input",{"validate":[16],"size":[1],"variant":[1],"type":[1],"inputmode":[1],"pattern":[1],"value":[1],"name":[1],"disabled":[4],"placeholder":[1],"ariaId":[32]}]]],["scout-link.cjs",[[785,"scout-link",{"href":[1],"label":[1],"rel":[1],"linkAriaLabel":[1,"link-aria-label"],"type":[1],"target":[1]}]]],["scout-list-view.cjs",[[273,"scout-list-view",null,[[0,"scoutChecked","onScoutChecked"]]]]],["scout-list-view-subheader.cjs",[[785,"scout-list-view-subheader",{"text":[1],"headingLevel":[1,"heading-level"]}]]],["scout-loader.cjs",[[769,"scout-loader",{"text":[1],"size":[1]}]]],["scout-select.cjs",[[774,"scout-select",{"validate":[16],"value":[1],"disabled":[4],"name":[1],"ariaId":[32]}]]],["scout-stack.cjs",[[785,"scout-stack",{"direction":[1],"gapSize":[1,"gap-size"]}]]],["scout-switch.cjs",[[785,"scout-switch",{"validate":[16],"toggled":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"ariaId":[32]}]]],["scout-checkbox_2.cjs",[[770,"scout-checkbox",{"validate":[16],"checked":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"value":[1],"name":[1],"ariaId":[32]}],[770,"scout-radio-button",{"validate":[16],"checked":[4],"disabled":[4],"ariaLabelledby":[1,"aria-labelledby"],"label":[1],"value":[1],"name":[1],"ariaId":[32]}]]]], options);
22
22
  });
23
23
 
24
24
  exports.setNonce = index.setNonce;
@@ -4,7 +4,8 @@
4
4
  }
5
5
 
6
6
  ::slotted(scout-button) {
7
- height: 100%;
7
+ /* biome-ignore lint/complexity/noImportantStyles: This is a cheeky override, so we're good with it */
8
+ height: 100% !important;
8
9
  }
9
10
 
10
11
  .container {
@@ -1,8 +1,13 @@
1
1
  import { h } from "@stencil/core";
2
+ /**
3
+ * The App Bar component is used at the top of a page to display a title and
4
+ * optional prefix and suffix actions. It's typically used to provide a
5
+ * native-like navigation experience.
6
+ */
2
7
  export class ScoutAppBar {
3
8
  titleText;
4
9
  render() {
5
- return (h("header", { key: '041b27816bb20c69b19b27ef90515c2cec8f2131', class: "container" }, h("slot", { key: '0171b39a13600bc784df175ad4499891415a58b2', name: "prefix" }), h("div", { key: '43c4905c019583a11ae290e4c049f1ccb7c08242', class: "title" }, this.titleText), h("slot", { key: '26741e8d7ec8559a720dd52a152d939ef857e2b5', name: "suffix" })));
10
+ return (h("header", { key: '32779c0aa2d189ea43d2ad14dd920e6b7c4b3e17', class: "container" }, h("slot", { key: '0e6b6e66c1f129cb9833335e87298b7c99a6f35c', name: "prefix" }), h("div", { key: '9f1e2ac9696717a2defe268dd85eb35b641918f9', class: "title" }, this.titleText), h("slot", { key: 'b6b0405705921bfd0bdd17ca76bfee97f9bc6105', name: "suffix" })));
6
11
  }
7
12
  static get is() { return "scout-app-bar"; }
8
13
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"app-bar.js","sourceRoot":"","sources":["../../../src/components/app-bar/app-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AASnD,MAAM,OAAO,WAAW;IACd,SAAS,CAAU;IAE3B,MAAM;QACJ,OAAO,CACL,+DAAQ,KAAK,EAAC,WAAW;YACvB,6DAAM,IAAI,EAAC,QAAQ,GAAG;YACtB,4DAAK,KAAK,EAAC,OAAO,IAAE,IAAI,CAAC,SAAS,CAAO;YACzC,6DAAM,IAAI,EAAC,QAAQ,GAAG,CACf,CACV,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop } from \"@stencil/core\";\n\n@Component({\n tag: \"scout-app-bar\",\n styleUrl: \"app-bar.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutAppBar {\n @Prop() titleText?: string;\n\n render() {\n return (\n <header class=\"container\">\n <slot name=\"prefix\" />\n <div class=\"title\">{this.titleText}</div>\n <slot name=\"suffix\" />\n </header>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"app-bar.js","sourceRoot":"","sources":["../../../src/components/app-bar/app-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AAQH,MAAM,OAAO,WAAW;IACd,SAAS,CAAU;IAE3B,MAAM;QACJ,OAAO,CACL,+DAAQ,KAAK,EAAC,WAAW;YACvB,6DAAM,IAAI,EAAC,QAAQ,GAAG;YACtB,4DAAK,KAAK,EAAC,OAAO,IAAE,IAAI,CAAC,SAAS,CAAO;YACzC,6DAAM,IAAI,EAAC,QAAQ,GAAG,CACf,CACV,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop } from \"@stencil/core\";\n\n/**\n * The App Bar component is used at the top of a page to display a title and\n * optional prefix and suffix actions. It's typically used to provide a\n * native-like navigation experience.\n */\n@Component({\n tag: \"scout-app-bar\",\n styleUrl: \"app-bar.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ScoutAppBar {\n @Prop() titleText?: string;\n\n render() {\n return (\n <header class=\"container\">\n <slot name=\"prefix\" />\n <div class=\"title\">{this.titleText}</div>\n <slot name=\"suffix\" />\n </header>\n );\n }\n}\n"]}
@@ -1,118 +1,99 @@
1
- :host {
1
+ scout-button {
2
2
  display: inline-block;
3
- }
4
-
5
- .button {
6
- flex: 1;
7
- display: inline-flex;
8
3
  height: var(--spacing-10);
9
- align-items: center;
10
- justify-content: center;
11
- gap: var(--spacing-3);
12
- padding: 0 var(--spacing-4);
13
- font: var(--type-body-base);
14
- border-radius: var(--spacing-2);
15
- border: 1px solid transparent;
16
- cursor: pointer;
17
- -webkit-text-decoration: none;
18
- text-decoration: none;
19
- }
20
-
21
- .icon {
22
- width: var(--spacing-5);
23
- height: var(--spacing-5);
24
- margin: 0 calc(var(--spacing-1) * -1);
25
- }
26
-
27
- .icon svg {
28
- width: 100%;
29
- height: 100%;
30
- }
31
-
32
- .button.icon-only {
33
- aspect-ratio: 1 / 1;
34
- justify-content: center;
35
- padding: 0;
36
- }
37
-
38
- .button.icon-only .icon {
39
- margin: 0;
40
- }
41
-
42
- .button.icon-only .content {
43
- /* Visually hidden: https://www.a11yproject.com/posts/how-to-hide-content/ */
44
- clip: rect(0 0 0 0);
45
- clip-path: inset(50%);
46
- height: 1px;
47
- overflow: hidden;
48
- position: absolute;
49
- white-space: nowrap;
50
- width: 1px;
51
4
  }
52
-
53
- .button.primary {
54
- background-color: var(--color-background-brand-base);
55
- color: var(--color-text-brand-inverse);
56
- }
57
-
58
- .button.primary:hover {
59
- background-color: var(--color-background-brand-hovered);
5
+ scout-button .button {
6
+ flex: 1;
7
+ display: inline-flex;
8
+ height: 100%;
9
+ align-items: center;
10
+ justify-content: center;
11
+ gap: var(--spacing-3);
12
+ padding: 0 var(--spacing-4);
13
+ font: var(--type-body-base);
14
+ border-radius: var(--spacing-2);
15
+ border: 1px solid transparent;
16
+ cursor: pointer;
17
+ -webkit-text-decoration: none;
18
+ text-decoration: none;
19
+ box-sizing: border-box;
60
20
  }
61
-
62
- .button.primary:active {
63
- background-color: var(--color-background-brand-pressed);
21
+ scout-button .icon {
22
+ width: var(--spacing-5);
23
+ height: var(--spacing-5);
24
+ margin: 0 calc(var(--spacing-1) * -1);
64
25
  }
65
-
66
- .button.outlined {
67
- background-color: transparent;
68
- border-color: var(--color-background-brand-subtle-base);
69
- color: var(--color-text-brand-base);
70
- }
71
-
72
- .button.outlined:hover {
73
- background-color: var(--color-background-brand-subtle-hovered);
26
+ scout-button .icon svg {
27
+ width: 100%;
28
+ height: 100%;
74
29
  }
75
-
76
- .button.outlined:active {
77
- background-color: var(--color-background-brand-subtle-pressed);
30
+ scout-button.icon-only .button {
31
+ aspect-ratio: 1 / 1;
32
+ justify-content: center;
33
+ padding: 0;
78
34
  }
79
-
80
- .button.text {
81
- background-color: transparent;
82
- border-color: transparent;
83
- color: var(--color-text-brand-base);
84
- }
85
-
86
- .button.text:hover {
87
- background-color: var(--color-background-brand-subtle-hovered);
35
+ scout-button.icon-only .icon {
36
+ margin: 0;
88
37
  }
89
-
90
- .button.text:active {
91
- background-color: var(--color-background-brand-subtle-pressed);
38
+ scout-button.icon-only .content {
39
+ /* Visually hidden: https://www.a11yproject.com/posts/how-to-hide-content/ */
40
+ clip: rect(0 0 0 0);
41
+ clip-path: inset(50%);
42
+ height: 1px;
43
+ overflow: hidden;
44
+ position: absolute;
45
+ white-space: nowrap;
46
+ width: 1px;
92
47
  }
93
-
94
- .button.caution {
95
- background-color: var(--color-background-caution-bold-base);
96
- color: var(--color-text-caution-bold-base);
97
- }
98
-
99
- .button.caution:hover {
100
- background-color: var(--color-background-caution-bold-hovered);
48
+ scout-button .button.primary {
49
+ background-color: var(--color-background-brand-base);
50
+ color: var(--color-text-brand-inverse);
101
51
  }
102
-
103
- .button.caution:active {
104
- background-color: var(--color-background-caution-bold-pressed);
52
+ scout-button .button.primary:hover {
53
+ background-color: var(--color-background-brand-hovered);
54
+ }
55
+ scout-button .button.primary:active {
56
+ background-color: var(--color-background-brand-pressed);
57
+ }
58
+ scout-button .button.outlined {
59
+ background-color: transparent;
60
+ border-color: var(--color-background-brand-subtle-base);
61
+ color: var(--color-text-brand-base);
105
62
  }
106
-
107
- .button.danger {
108
- background-color: var(--color-background-danger-bold-base);
109
- color: var(--color-text-danger-bold-base);
110
- }
111
-
112
- .button.danger:hover {
113
- background-color: var(--color-background-danger-bold-hovered);
63
+ scout-button .button.outlined:hover {
64
+ background-color: var(--color-background-brand-subtle-hovered);
65
+ }
66
+ scout-button .button.outlined:active {
67
+ background-color: var(--color-background-brand-subtle-pressed);
68
+ }
69
+ scout-button .button.text {
70
+ background-color: transparent;
71
+ border-color: transparent;
72
+ color: var(--color-text-brand-base);
73
+ }
74
+ scout-button .button.text:hover {
75
+ background-color: var(--color-background-brand-subtle-hovered);
76
+ }
77
+ scout-button .button.text:active {
78
+ background-color: var(--color-background-brand-subtle-pressed);
79
+ }
80
+ scout-button .button.caution {
81
+ background-color: var(--color-background-caution-bold-base);
82
+ color: var(--color-text-caution-bold-base);
114
83
  }
115
-
116
- .button.danger:active {
117
- background-color: var(--color-background-danger-bold-pressed);
84
+ scout-button .button.caution:hover {
85
+ background-color: var(--color-background-caution-bold-hovered);
86
+ }
87
+ scout-button .button.caution:active {
88
+ background-color: var(--color-background-caution-bold-pressed);
89
+ }
90
+ scout-button .button.danger {
91
+ background-color: var(--color-background-danger-bold-base);
92
+ color: var(--color-text-danger-bold-base);
118
93
  }
94
+ scout-button .button.danger:hover {
95
+ background-color: var(--color-background-danger-bold-hovered);
96
+ }
97
+ scout-button .button.danger:active {
98
+ background-color: var(--color-background-danger-bold-pressed);
99
+ }
@@ -1,6 +1,8 @@
1
- import { h } from "@stencil/core";
1
+ import { h, Host, } from "@stencil/core";
2
2
  /**
3
- * A simple button component.
3
+ * A button component that can be used either as a normal button or as a link.
4
+ * Will render a `<button>` element when the `type` is set to "button",
5
+ * "submit", or "reset", and an `<a>` element when the `type` is set to "link".
4
6
  */
5
7
  export class ScoutButton {
6
8
  type = "button";
@@ -31,11 +33,10 @@ export class ScoutButton {
31
33
  : {
32
34
  type: this.type,
33
35
  };
34
- const icon = this.icon && h("span", { key: '4a3e7eb143e3cf53d6a6327163be00947d3cf370', class: "icon", innerHTML: this.icon });
35
- return (h(Tag, { key: 'd7807c803a4032c6a48c9ffbc08ea1b4bb845058', class: `button ${this.variant} ${this.iconOnly ? "icon-only" : ""}`, onClick: () => this.scoutClick.emit(), ...props }, this.iconPosition === "before" && icon, h("span", { key: 'f89787ee6e018587d87c1656d32c1b438263d8c9', class: "content" }, h("slot", { key: '31567811c1d3151aaa74546df5c50fc01a41d582' })), this.iconPosition === "after" && icon));
36
+ const icon = this.icon && h("span", { key: '0f03bad87dbcaf10cc387fd20121bd6b3ecdf42d', class: "icon", innerHTML: this.icon });
37
+ return (h(Host, { key: '7a2f998327c5e3dc7139c11f3fcbbe827346c0ee', class: this.iconOnly ? "icon-only" : "" }, h(Tag, { key: 'cabe4acf010df2880a83d5b27f2e885bf326673c', class: `button ${this.variant}`, onClick: () => this.scoutClick.emit(), ...props }, this.iconPosition === "before" && icon, h("span", { key: '7388a6a872149b4cff84256017ee251196612e1a', class: "content" }, h("slot", { key: '0002a40443d7da3b386a708543185cbc572bb461' })), this.iconPosition === "after" && icon)));
36
38
  }
37
39
  static get is() { return "scout-button"; }
38
- static get encapsulation() { return "scoped"; }
39
40
  static get originalStyleUrls() {
40
41
  return {
41
42
  "$": ["button.css"]
@@ -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;AAMH,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,YAAY,GAAuB,OAAO,CAAC;IAC3C,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,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,6DAAM,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;QAEtE,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;YAER,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI;YACvC,6DAAM,KAAK,EAAC,SAAS;gBACnB,8DAAQ,CACH;YACN,IAAI,CAAC,YAAY,KAAK,OAAO,IAAI,IAAI,CAClC,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 scoped: true,\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() iconPosition: \"before\" | \"after\" = \"after\";\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 const icon = this.icon && <span class=\"icon\" innerHTML={this.icon} />;\n\n return (\n <Tag\n class={`button ${this.variant} ${this.iconOnly ? \"icon-only\" : \"\"}`}\n onClick={() => this.scoutClick.emit()}\n {...props}\n >\n {this.iconPosition === \"before\" && icon}\n <span class=\"content\">\n <slot />\n </span>\n {this.iconPosition === \"after\" && icon}\n </Tag>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,IAAI,GACL,MAAM,eAAe,CAAC;AAIvB;;;;GAIG;AAKH,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,YAAY,GAAuB,OAAO,CAAC;IAC3C,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,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,6DAAM,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;QAEtE,OAAO,CACL,EAAC,IAAI,qDAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAC3C,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;gBAER,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI;gBACvC,6DAAM,KAAK,EAAC,SAAS;oBACnB,8DAAQ,CACH;gBACN,IAAI,CAAC,YAAY,KAAK,OAAO,IAAI,IAAI,CAClC,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Event,\n type EventEmitter,\n h,\n Host,\n Prop,\n} from \"@stencil/core\";\n\nexport type Variant = \"primary\" | \"outlined\" | \"text\" | \"caution\" | \"danger\";\n\n/**\n * A button component that can be used either as a normal button or as a link.\n * Will render a `<button>` element when the `type` is set to \"button\",\n * \"submit\", or \"reset\", and an `<a>` element when the `type` is set to \"link\".\n */\n@Component({\n tag: \"scout-button\",\n styleUrl: \"button.css\",\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() iconPosition: \"before\" | \"after\" = \"after\";\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 const icon = this.icon && <span class=\"icon\" innerHTML={this.icon} />;\n\n return (\n <Host class={this.iconOnly ? \"icon-only\" : \"\"}>\n <Tag\n class={`button ${this.variant}`}\n onClick={() => this.scoutClick.emit()}\n {...props}\n >\n {this.iconPosition === \"before\" && icon}\n <span class=\"content\">\n <slot />\n </span>\n {this.iconPosition === \"after\" && icon}\n </Tag>\n </Host>\n );\n }\n}\n"]}
@@ -4,7 +4,7 @@ import { h } from "@stencil/core";
4
4
  */
5
5
  export class ScoutCard {
6
6
  render() {
7
- return (h("div", { key: 'ffeed5909a251bf61e750ebb575b278e90490945', class: "card" }, h("slot", { key: 'a8d457f36995146e722c2d53ddfb03f36848f6d1' })));
7
+ return (h("div", { key: '1ea5b0a2ea2a8f342e0153d9e90565cc69e2f336', class: "card" }, h("slot", { key: '328519393a7ad17aa158dea8835f16ebdc0cc7bc' })));
8
8
  }
9
9
  static get is() { return "scout-card"; }
10
10
  static get encapsulation() { return "shadow"; }
@@ -1,6 +1,12 @@
1
1
  import { h, Mixin, } from "@stencil/core";
2
2
  import checkIcon from "@tabler/icons/outline/check.svg";
3
3
  import { inputMixin } from "../../mixins/inputMixin";
4
+ /**
5
+ * The checkbox component is used to let users select one or more options from a
6
+ * set. For toggling a single option, consider using the Switch component
7
+ * instead. When used in a form, make sure to wrap it in a Field component to
8
+ * display a label, help text, and error messages.
9
+ */
4
10
  export class ScoutCheckbox extends Mixin(inputMixin) {
5
11
  constructor() {
6
12
  super();
@@ -24,7 +30,7 @@ export class ScoutCheckbox extends Mixin(inputMixin) {
24
30
  }
25
31
  render() {
26
32
  const Tag = this.label?.length ? "label" : "div";
27
- return (h(Tag, { key: '6c0a45c9c34f6d2e7dd972186d4fa51b15bbe318' }, h("input", { key: '3649ab29a57824ff4b7f56bee0be1aa48dec8371', ref: (el) => this.setInputRef(el), 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) => {
33
+ return (h(Tag, { key: '67b42b2b686fffecf891da832236fde663b740dc' }, h("input", { key: '81821918d102e1ca809915c14a20aa0847f46e30', ref: (el) => this.setInputRef(el), 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) => {
28
34
  this.onInput();
29
35
  this.onChange(event);
30
36
  }, onBlur: () => this.onBlur(), onInvalid: () => this.onInvalid() }), this.label));
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,EAEL,CAAC,EACD,KAAK,EACL,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAOrD,MAAM,OAAO,aACX,SAAQ,KAAK,CAAC,UAAU,CAAC;;;;IAGjB,OAAO,GAAY,KAAK,CAAC;IAEzB,QAAQ,GAAY,KAAK,CAAC;IAElC;;OAEG;IACK,cAAc,CAAS;IAEvB,KAAK,CAAS;IAEd,KAAK,CAAS;IAEd,IAAI,CAAS;IAEZ,YAAY,CAGlB;IAEH,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,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,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;oBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,EACD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GACjC;YACD,IAAI,CAAC,KAAK,CACP,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport checkIcon from \"@tabler/icons/outline/check.svg\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\n\n@Component({\n tag: \"scout-checkbox\",\n styleUrl: \"checkbox.css\",\n scoped: true,\n})\nexport class ScoutCheckbox\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\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 @Event() scoutChecked: EventEmitter<{\n checked: boolean;\n element: HTMLInputElement;\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 ref={(el) => this.setInputRef(el)}\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) => {\n this.onInput();\n this.onChange(event);\n }}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\n />\n {this.label}\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,EAET,KAAK,EAEL,CAAC,EACD,KAAK,EACL,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;;;GAKG;AAMH,MAAM,OAAO,aACX,SAAQ,KAAK,CAAC,UAAU,CAAC;;;;IAGjB,OAAO,GAAY,KAAK,CAAC;IAEzB,QAAQ,GAAY,KAAK,CAAC;IAElC;;OAEG;IACK,cAAc,CAAS;IAEvB,KAAK,CAAS;IAEd,KAAK,CAAS;IAEd,IAAI,CAAS;IAEZ,YAAY,CAGlB;IAEH,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,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,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;oBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,EACD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GACjC;YACD,IAAI,CAAC,KAAK,CACP,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n Event,\n type EventEmitter,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport checkIcon from \"@tabler/icons/outline/check.svg\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\n\n/**\n * The checkbox component is used to let users select one or more options from a\n * set. For toggling a single option, consider using the Switch component\n * instead. When used in a form, make sure to wrap it in a Field component to\n * display a label, help text, and error messages.\n */\n@Component({\n tag: \"scout-checkbox\",\n styleUrl: \"checkbox.css\",\n scoped: true,\n})\nexport class ScoutCheckbox\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\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 @Event() scoutChecked: EventEmitter<{\n checked: boolean;\n element: HTMLInputElement;\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 ref={(el) => this.setInputRef(el)}\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) => {\n this.onInput();\n this.onChange(event);\n }}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\n />\n {this.label}\n </Tag>\n );\n }\n}\n"]}
@@ -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: '6a4d3d0bed1689875ec867b16f0c77f391662fc8' });
5
5
  }
6
6
  static get is() { return "scout-divider"; }
7
7
  static get encapsulation() { return "shadow"; }
@@ -1,4 +1,9 @@
1
1
  import { h } from "@stencil/core";
2
+ /**
3
+ * The field component is used to wrap form fields with a label, help text, and
4
+ * error messages. It automatically captures validation events from its child
5
+ * input components and displays error messages accordingly.
6
+ */
2
7
  export class ScoutField {
3
8
  /**
4
9
  * Label shown above the field.
@@ -30,7 +35,7 @@ export class ScoutField {
30
35
  this.errorHidden = false;
31
36
  }
32
37
  render() {
33
- return (h("div", { key: 'faca4ec5b46ef2e8f30ba1d83c9541454c6c42af', class: "field" }, h("label", { key: '38f84753a62d401c34aa5626dfecd7bbb80e24d8', htmlFor: this.inputId, class: "label" }, this.label), h("slot", { key: '328f3c36f3241eae23a0918ad8a1c8eaa7e27027' }), h("p", { key: 'b200a60b5e1948fca8b6922f5046ee3e898ebde6', class: "error-text", "aria-live": "polite" }, !this.errorHidden && this.errorText), this.helpText && h("p", { key: '09b0acb16e4faefb3eb681ea0eb5229f305a163c', class: "help-text" }, this.helpText)));
38
+ return (h("div", { key: 'e7539abfb11fac14a5ffd87cfb1a70dd9c41cca7', class: "field" }, h("label", { key: 'c4501be15aafbb2d6e3c447c5893aa2510e20b89', htmlFor: this.inputId, class: "label" }, this.label), h("slot", { key: '5806c8d41926245074fb395b08226272a2432d96' }), h("p", { key: 'f1a36881c2ce2f8485d31e8faac452c9c2423d74', class: "error-text", "aria-live": "polite" }, !this.errorHidden && this.errorText), this.helpText && h("p", { key: '0d9ea374551b527d085ef33595fdee27e80d08fb', class: "help-text" }, this.helpText)));
34
39
  }
35
40
  static get is() { return "scout-field"; }
36
41
  static get encapsulation() { return "scoped"; }
@@ -1 +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;AAO3E,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,gBAAgB,CACd,KAOE;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;IAID,SAAS;QACP,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\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(\"_scoutFieldId\")\n catchFieldId(event: CustomEvent<string>) {\n event.stopPropagation();\n this.inputId = event.detail;\n }\n\n @Listen(\"_scoutValidate\")\n handleValidation(\n event: CustomEvent<{\n element:\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLOutputElement\n | HTMLSelectElement\n | HTMLTextAreaElement;\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 @Listen(\"_scoutInvalid\")\n showError() {\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"]}
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;;;;GAIG;AAMH,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,gBAAgB,CACd,KAOE;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;IAID,SAAS;QACP,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\n/**\n * The field component is used to wrap form fields with a label, help text, and\n * error messages. It automatically captures validation events from its child\n * input components and displays error messages accordingly.\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(\"_scoutFieldId\")\n catchFieldId(event: CustomEvent<string>) {\n event.stopPropagation();\n this.inputId = event.detail;\n }\n\n @Listen(\"_scoutValidate\")\n handleValidation(\n event: CustomEvent<{\n element:\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLOutputElement\n | HTMLSelectElement\n | HTMLTextAreaElement;\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 @Listen(\"_scoutInvalid\")\n showError() {\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"]}
@@ -1,9 +1,24 @@
1
- .input {
1
+ :host {
2
+ display: flex;
2
3
  height: var(--spacing-10);
3
- padding: var(--spacing-2);
4
- font: var(--type-body-base);
4
+ --scout-input-padding: var(--spacing-2);
5
+ --scout-input-border-radius: var(--spacing-2);
6
+ --scout-input-type: var(--type-body-base);
7
+ }
8
+
9
+ :host(.large) {
10
+ height: var(--spacing-14);
11
+ --scout-input-padding: var(--spacing-3);
12
+ --scout-input-border-radius: var(--spacing-3);
13
+ --scout-input-type: var(--type-body-lg);
14
+ }
15
+
16
+ .input {
17
+ flex: 1;
18
+ padding: var(--scout-input-padding);
19
+ font: var(--scout-input-type);
5
20
  border: 1px solid var(--color-gray-300);
6
- border-radius: var(--spacing-2);
21
+ border-radius: var(--scout-input-border-radius);
7
22
  background-color: var(--color-white);
8
23
  color: var(--color-text-base);
9
24
  }
@@ -13,3 +28,10 @@
13
28
  color: var(--color-gray-700);
14
29
  cursor: not-allowed;
15
30
  }
31
+
32
+ :host(.elevated) .input {
33
+ box-shadow:
34
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
35
+ 0 2px 4px -2px rgba(0, 0, 0, 0.1);
36
+ border-color: transparent;
37
+ }
@@ -1,9 +1,27 @@
1
- import { h, Mixin, } from "@stencil/core";
1
+ import { Host, h, Mixin, } from "@stencil/core";
2
2
  import { inputMixin } from "../../mixins/inputMixin";
3
+ /**
4
+ * The input component is a basic text input field that can be used to capture
5
+ * user input. It supports various types and input modes for different use
6
+ * cases. When used in a form, make sure to wrap it in a Field component to
7
+ * display a label, help text, and error messages.
8
+ */
3
9
  export class ScoutInput extends Mixin(inputMixin) {
4
10
  constructor() {
5
11
  super();
6
12
  }
13
+ /**
14
+ * Size of the input element. Large fields are typically used for prominent
15
+ * inputs, such as a top search field on a page, while medium fields are used
16
+ * for regular form inputs.
17
+ */
18
+ size = "medium";
19
+ /**
20
+ * Visual variant of the input element. Elevated inputs have a shadow to help
21
+ * them stand out from the background and should only be used when absolutely
22
+ * positioned above other content.
23
+ */
24
+ variant = "default";
7
25
  /**
8
26
  * Type of input element. If you need a number input, read the accessibility
9
27
  * section of this MDN article first:
@@ -28,8 +46,15 @@ export class ScoutInput extends Mixin(inputMixin) {
28
46
  * from tab order and are not validated.
29
47
  */
30
48
  disabled = false;
49
+ /**
50
+ * Placeholder text should rarely be used as it poses a lot of accessibility
51
+ * issues.
52
+ */
53
+ placeholder;
31
54
  render() {
32
- return (h("input", { key: '15b07e42a3bd97ccc5bfb2d35c97db4a63aa98b9', ref: (el) => this.setInputRef(el), id: this.ariaId, type: this.type, name: this.name, inputMode: this.inputmode, pattern: this.pattern, class: "input", value: this.value, disabled: this.disabled, onInput: () => this.onInput(), onBlur: () => this.onBlur(), onInvalid: () => this.onInvalid() }));
55
+ const sizeClass = this.size === "large" ? "large" : "";
56
+ const variantClass = this.variant === "elevated" ? "elevated" : "";
57
+ return (h(Host, { key: '769603f718f511a0a2202814a7621d60a2a9f34c', class: `${sizeClass} ${variantClass}` }, h("input", { key: '6a4e1ad8173dfe37ce5facf8627990fd797dfc60', ref: (el) => this.setInputRef(el), id: this.ariaId, type: this.type, name: this.name, inputMode: this.inputmode, pattern: this.pattern, class: "input", value: this.value, disabled: this.disabled, placeholder: this.placeholder, onInput: () => this.onInput(), onBlur: () => this.onBlur(), onInvalid: () => this.onInvalid() })));
33
58
  }
34
59
  static get is() { return "scout-input"; }
35
60
  static get encapsulation() { return "scoped"; }
@@ -45,6 +70,46 @@ export class ScoutInput extends Mixin(inputMixin) {
45
70
  }
46
71
  static get properties() {
47
72
  return {
73
+ "size": {
74
+ "type": "string",
75
+ "mutable": false,
76
+ "complexType": {
77
+ "original": "\"medium\" | \"large\"",
78
+ "resolved": "\"large\" | \"medium\"",
79
+ "references": {}
80
+ },
81
+ "required": false,
82
+ "optional": false,
83
+ "docs": {
84
+ "tags": [],
85
+ "text": "Size of the input element. Large fields are typically used for prominent\ninputs, such as a top search field on a page, while medium fields are used\nfor regular form inputs."
86
+ },
87
+ "getter": false,
88
+ "setter": false,
89
+ "reflect": false,
90
+ "attribute": "size",
91
+ "defaultValue": "\"medium\""
92
+ },
93
+ "variant": {
94
+ "type": "string",
95
+ "mutable": false,
96
+ "complexType": {
97
+ "original": "\"default\" | \"elevated\"",
98
+ "resolved": "\"default\" | \"elevated\"",
99
+ "references": {}
100
+ },
101
+ "required": false,
102
+ "optional": false,
103
+ "docs": {
104
+ "tags": [],
105
+ "text": "Visual variant of the input element. Elevated inputs have a shadow to help\nthem stand out from the background and should only be used when absolutely\npositioned above other content."
106
+ },
107
+ "getter": false,
108
+ "setter": false,
109
+ "reflect": false,
110
+ "attribute": "variant",
111
+ "defaultValue": "\"default\""
112
+ },
48
113
  "type": {
49
114
  "type": "string",
50
115
  "mutable": false,
@@ -173,6 +238,25 @@ export class ScoutInput extends Mixin(inputMixin) {
173
238
  "reflect": false,
174
239
  "attribute": "disabled",
175
240
  "defaultValue": "false"
241
+ },
242
+ "placeholder": {
243
+ "type": "string",
244
+ "mutable": false,
245
+ "complexType": {
246
+ "original": "string",
247
+ "resolved": "string",
248
+ "references": {}
249
+ },
250
+ "required": false,
251
+ "optional": true,
252
+ "docs": {
253
+ "tags": [],
254
+ "text": "Placeholder text should rarely be used as it poses a lot of accessibility\nissues."
255
+ },
256
+ "getter": false,
257
+ "setter": false,
258
+ "reflect": false,
259
+ "attribute": "placeholder"
176
260
  }
177
261
  };
178
262
  }
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,CAAC,EACD,KAAK,EACL,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA6BrD,MAAM,OAAO,UACX,SAAQ,KAAK,CAAC,UAAU,CAAC;;;;IAGzB;;;;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,MAAM;QACJ,OAAO,CACL,8DACE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,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,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GACjC,CACH,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\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\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\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 render() {\n return (\n <input\n ref={(el) => this.setInputRef(el)}\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={() => this.onInput()}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\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,IAAI,EACJ,CAAC,EACD,KAAK,EACL,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAwBrD;;;;;GAKG;AAMH,MAAM,OAAO,UACX,SAAQ,KAAK,CAAC,UAAU,CAAC;;;;IAGzB;;;;OAIG;IACK,IAAI,GAAuB,QAAQ,CAAC;IAE5C;;;;OAIG;IACK,OAAO,GAA2B,SAAS,CAAC;IAEpD;;;;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;;;OAGG;IACK,WAAW,CAAU;IAE7B,MAAM;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnE,OAAO,CACL,EAAC,IAAI,qDAAC,KAAK,EAAE,GAAG,SAAS,IAAI,YAAY,EAAE;YACzC,8DACE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EACjC,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,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GACjC,CACG,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n type ComponentInterface,\n Host,\n h,\n Mixin,\n Prop,\n} from \"@stencil/core\";\nimport { inputMixin } from \"../../mixins/inputMixin\";\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/**\n * The input component is a basic text input field that can be used to capture\n * user input. It supports various types and input modes for different use\n * cases. When used in a form, make sure to wrap it in a Field component to\n * display a label, help text, and error messages.\n */\n@Component({\n tag: \"scout-input\",\n styleUrl: \"input.css\",\n scoped: true,\n})\nexport class ScoutInput\n extends Mixin(inputMixin)\n implements ComponentInterface\n{\n /**\n * Size of the input element. Large fields are typically used for prominent\n * inputs, such as a top search field on a page, while medium fields are used\n * for regular form inputs.\n */\n @Prop() size: \"medium\" | \"large\" = \"medium\";\n\n /**\n * Visual variant of the input element. Elevated inputs have a shadow to help\n * them stand out from the background and should only be used when absolutely\n * positioned above other content.\n */\n @Prop() variant: \"default\" | \"elevated\" = \"default\";\n\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 * Placeholder text should rarely be used as it poses a lot of accessibility\n * issues.\n */\n @Prop() placeholder?: string;\n\n render() {\n const sizeClass = this.size === \"large\" ? \"large\" : \"\";\n const variantClass = this.variant === \"elevated\" ? \"elevated\" : \"\";\n\n return (\n <Host class={`${sizeClass} ${variantClass}`}>\n <input\n ref={(el) => this.setInputRef(el)}\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 placeholder={this.placeholder}\n onInput={() => this.onInput()}\n onBlur={() => this.onBlur()}\n onInvalid={() => this.onInvalid()}\n />\n </Host>\n );\n }\n}\n"]}