@govtechsg/sgds-web-component 3.0.0-rc.1 → 3.0.0-rc.2

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 (478) hide show
  1. package/README.md +5 -5
  2. package/base/button.js +1 -1
  3. package/base/form-control-element.d.ts +4 -11
  4. package/base/form-control-element.js +13 -23
  5. package/base/form-control-element.js.map +1 -1
  6. package/components/Accordion/accordion-item.js +1 -1
  7. package/components/Accordion/index.umd.js +7 -19
  8. package/components/Accordion/index.umd.js.map +1 -1
  9. package/components/Accordion/sgds-accordion-item.d.ts +3 -7
  10. package/components/Accordion/sgds-accordion-item.js +6 -18
  11. package/components/Accordion/sgds-accordion-item.js.map +1 -1
  12. package/components/ActionCard/index.umd.js +407 -329
  13. package/components/ActionCard/index.umd.js.map +1 -1
  14. package/components/Alert/alert.js +1 -1
  15. package/components/Alert/index.umd.js +553 -485
  16. package/components/Alert/index.umd.js.map +1 -1
  17. package/components/Alert/sgds-alert.d.ts +2 -2
  18. package/components/Alert/sgds-alert.js +6 -13
  19. package/components/Alert/sgds-alert.js.map +1 -1
  20. package/components/Badge/badge.js +1 -1
  21. package/components/Badge/index.umd.js +8 -9
  22. package/components/Badge/index.umd.js.map +1 -1
  23. package/components/Badge/sgds-badge.d.ts +4 -5
  24. package/components/Badge/sgds-badge.js +5 -6
  25. package/components/Badge/sgds-badge.js.map +1 -1
  26. package/components/Button/index.umd.js +8 -81
  27. package/components/Button/index.umd.js.map +1 -1
  28. package/components/Button/sgds-button.js +1 -1
  29. package/components/Button/sgds-button.js.map +1 -1
  30. package/components/Checkbox/checkbox.js +1 -1
  31. package/components/Checkbox/index.umd.js +541 -475
  32. package/components/Checkbox/index.umd.js.map +1 -1
  33. package/components/Checkbox/sgds-checkbox-group.d.ts +7 -1
  34. package/components/Checkbox/sgds-checkbox-group.js +15 -4
  35. package/components/Checkbox/sgds-checkbox-group.js.map +1 -1
  36. package/components/Checkbox/sgds-checkbox.d.ts +30 -21
  37. package/components/Checkbox/sgds-checkbox.js +77 -60
  38. package/components/Checkbox/sgds-checkbox.js.map +1 -1
  39. package/components/ComboBox/index.umd.js +385 -216
  40. package/components/ComboBox/index.umd.js.map +1 -1
  41. package/components/Datepicker/datepicker-input.d.ts +4 -2
  42. package/components/Datepicker/datepicker-input.js +24 -7
  43. package/components/Datepicker/datepicker-input.js.map +1 -1
  44. package/components/Datepicker/index.umd.js +433 -244
  45. package/components/Datepicker/index.umd.js.map +1 -1
  46. package/components/Datepicker/sgds-datepicker.d.ts +1 -1
  47. package/components/Datepicker/sgds-datepicker.js.map +1 -1
  48. package/components/Drawer/index.umd.js +2 -2
  49. package/components/Drawer/index.umd.js.map +1 -1
  50. package/components/Dropdown/index.umd.js +8 -81
  51. package/components/Dropdown/index.umd.js.map +1 -1
  52. package/components/FileUpload/file-upload.js +1 -1
  53. package/components/FileUpload/index.umd.js +579 -272
  54. package/components/FileUpload/index.umd.js.map +1 -1
  55. package/components/FileUpload/sgds-file-upload.d.ts +42 -30
  56. package/components/FileUpload/sgds-file-upload.js +147 -103
  57. package/components/FileUpload/sgds-file-upload.js.map +1 -1
  58. package/components/Footer/footer-item.js +6 -0
  59. package/components/Footer/footer-item.js.map +1 -0
  60. package/components/Footer/footer.js +1 -1
  61. package/components/Footer/index.d.ts +2 -0
  62. package/components/Footer/index.js +2 -0
  63. package/components/Footer/index.js.map +1 -1
  64. package/components/Footer/index.umd.js +93 -94
  65. package/components/Footer/index.umd.js.map +1 -1
  66. package/components/Footer/sgds-footer-item.d.ts +13 -0
  67. package/components/Footer/sgds-footer-item.js +27 -0
  68. package/components/Footer/sgds-footer-item.js.map +1 -0
  69. package/components/Footer/sgds-footer.d.ts +9 -30
  70. package/components/Footer/sgds-footer.js +65 -90
  71. package/components/Footer/sgds-footer.js.map +1 -1
  72. package/components/Icon/icon.js +6 -0
  73. package/components/Icon/icon.js.map +1 -0
  74. package/components/Icon/index.d.ts +6 -0
  75. package/components/Icon/index.js +4 -0
  76. package/components/Icon/index.js.map +1 -0
  77. package/components/Icon/index.umd.js +4389 -0
  78. package/components/Icon/index.umd.js.map +1 -0
  79. package/components/Icon/sgds-icon.d.ts +21 -0
  80. package/components/Icon/sgds-icon.js +64 -0
  81. package/components/Icon/sgds-icon.js.map +1 -0
  82. package/components/IconButton/icon-button.js +1 -1
  83. package/components/IconButton/index.umd.js +6 -9
  84. package/components/IconButton/index.umd.js.map +1 -1
  85. package/components/IconButton/sgds-icon-button.d.ts +2 -2
  86. package/components/IconButton/sgds-icon-button.js +4 -9
  87. package/components/IconButton/sgds-icon-button.js.map +1 -1
  88. package/components/Input/index.umd.js +1734 -1376
  89. package/components/Input/index.umd.js.map +1 -1
  90. package/components/Input/sgds-input.d.ts +41 -21
  91. package/components/Input/sgds-input.js +103 -66
  92. package/components/Input/sgds-input.js.map +1 -1
  93. package/components/Modal/index.umd.js +2 -2
  94. package/components/Modal/index.umd.js.map +1 -1
  95. package/components/QuantityToggle/index.umd.js +894 -316
  96. package/components/QuantityToggle/index.umd.js.map +1 -1
  97. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +42 -15
  98. package/components/QuantityToggle/sgds-quantity-toggle.js +129 -62
  99. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  100. package/components/Radio/index.umd.js +516 -203
  101. package/components/Radio/index.umd.js.map +1 -1
  102. package/components/Radio/sgds-radio-group.d.ts +38 -27
  103. package/components/Radio/sgds-radio-group.js +100 -84
  104. package/components/Radio/sgds-radio-group.js.map +1 -1
  105. package/components/Radio/sgds-radio.js +1 -1
  106. package/components/Radio/sgds-radio.js.map +1 -1
  107. package/components/Stepper/index.umd.js +1 -0
  108. package/components/Stepper/index.umd.js.map +1 -1
  109. package/components/Stepper/sgds-stepper.d.ts +1 -0
  110. package/components/Stepper/sgds-stepper.js +1 -0
  111. package/components/Stepper/sgds-stepper.js.map +1 -1
  112. package/components/Switch/index.umd.js +21 -321
  113. package/components/Switch/index.umd.js.map +1 -1
  114. package/components/Switch/sgds-switch.js +1 -2
  115. package/components/Switch/sgds-switch.js.map +1 -1
  116. package/components/Textarea/index.umd.js +1554 -1336
  117. package/components/Textarea/index.umd.js.map +1 -1
  118. package/components/Textarea/sgds-textarea.d.ts +33 -22
  119. package/components/Textarea/sgds-textarea.js +78 -75
  120. package/components/Textarea/sgds-textarea.js.map +1 -1
  121. package/components/Textarea/textarea.js +1 -1
  122. package/components/Toast/index.umd.js +9 -21
  123. package/components/Toast/index.umd.js.map +1 -1
  124. package/components/Toast/sgds-toast.d.ts +2 -1
  125. package/components/Toast/sgds-toast.js +6 -18
  126. package/components/Toast/sgds-toast.js.map +1 -1
  127. package/components/Toast/toast.js +1 -1
  128. package/components/Tooltip/index.umd.js +14 -14
  129. package/components/Tooltip/index.umd.js.map +1 -1
  130. package/components/Tooltip/sgds-tooltip.d.ts +4 -7
  131. package/components/Tooltip/sgds-tooltip.js +14 -14
  132. package/components/Tooltip/sgds-tooltip.js.map +1 -1
  133. package/components/index.d.ts +1 -0
  134. package/components/index.js +1 -0
  135. package/components/index.js.map +1 -1
  136. package/components/index.umd.js +1318 -1124
  137. package/components/index.umd.js.map +1 -1
  138. package/icons/arrow-bar-down.svg +3 -0
  139. package/icons/arrow-bar-left.svg +3 -0
  140. package/icons/arrow-bar-right.svg +3 -0
  141. package/icons/arrow-bar-up.svg +3 -0
  142. package/icons/arrow-clockwise.svg +3 -0
  143. package/icons/arrow-down.svg +3 -0
  144. package/icons/arrow-left.svg +3 -0
  145. package/icons/arrow-repeat.svg +3 -0
  146. package/icons/arrow-right.svg +3 -0
  147. package/icons/arrow-up.svg +3 -0
  148. package/icons/bank-fill.svg +3 -0
  149. package/icons/bell-slash.svg +3 -0
  150. package/icons/bell.svg +3 -0
  151. package/icons/bi-funnel.svg +3 -0
  152. package/icons/bookmark-fill.svg +3 -0
  153. package/icons/bookmark.svg +3 -0
  154. package/icons/box-arrow-up-right.svg +3 -0
  155. package/icons/box-seam.svg +3 -0
  156. package/icons/building.svg +3 -0
  157. package/icons/calculator.svg +3 -0
  158. package/icons/calendar-check.svg +4 -0
  159. package/icons/calendar-x.svg +4 -0
  160. package/icons/calendar.svg +3 -0
  161. package/icons/camera.svg +3 -0
  162. package/icons/chat-left-text.svg +3 -0
  163. package/icons/check-circle-fill.svg +3 -0
  164. package/icons/check-circle.svg +3 -0
  165. package/icons/check.svg +3 -0
  166. package/icons/chevron-down.svg +3 -0
  167. package/icons/chevron-left.svg +3 -0
  168. package/icons/chevron-right.svg +3 -0
  169. package/icons/chevron-up .svg +3 -0
  170. package/icons/clock.svg +4 -0
  171. package/icons/cloud-check.svg +4 -0
  172. package/icons/cloud-download.svg +3 -0
  173. package/icons/cloud-upload.svg +3 -0
  174. package/icons/cloud.svg +3 -0
  175. package/icons/compass.svg +4 -0
  176. package/icons/cross.svg +3 -0
  177. package/icons/cursor-fill.svg +3 -0
  178. package/icons/cursor.svg +3 -0
  179. package/icons/dash-circle.svg +3 -0
  180. package/icons/dash-square.svg +3 -0
  181. package/icons/dash.svg +3 -0
  182. package/icons/download.svg +3 -0
  183. package/icons/exclamation-circle-fill.svg +3 -0
  184. package/icons/exclamation-circle.svg +4 -0
  185. package/icons/exclamation-triangle-fill.svg +3 -0
  186. package/icons/exclamation-triangle.svg +4 -0
  187. package/icons/exclamation.svg +4 -0
  188. package/icons/eye-fill.svg +3 -0
  189. package/icons/eye-slash-fill.svg +4 -0
  190. package/icons/eye-slash.svg +3 -0
  191. package/icons/eye.svg +3 -0
  192. package/icons/facebook.svg +3 -0
  193. package/icons/file-earmark-text.svg +3 -0
  194. package/icons/file-pdf.svg +4 -0
  195. package/icons/file-plus.svg +4 -0
  196. package/icons/file-text.svg +3 -0
  197. package/icons/file.svg +3 -0
  198. package/icons/files.svg +4 -0
  199. package/icons/folder-check.svg +4 -0
  200. package/icons/folder-minus.svg +4 -0
  201. package/icons/folder-plus.svg +4 -0
  202. package/icons/folder.svg +3 -0
  203. package/icons/gear.svg +3 -0
  204. package/icons/geo-alt.svg +4 -0
  205. package/icons/geo-fill.svg +4 -0
  206. package/icons/geo.svg +4 -0
  207. package/icons/google.svg +3 -0
  208. package/icons/grid-fill.svg +3 -0
  209. package/icons/hand-thumbs-down.svg +3 -0
  210. package/icons/hand-thumbs-up.svg +3 -0
  211. package/icons/hdd.svg +3 -0
  212. package/icons/house-door.svg +3 -0
  213. package/icons/house.svg +3 -0
  214. package/icons/image.svg +3 -0
  215. package/icons/inbox.svg +3 -0
  216. package/icons/info-circle-fill.svg +3 -0
  217. package/icons/info-circle.svg +4 -0
  218. package/icons/instagram.svg +3 -0
  219. package/icons/layers.svg +3 -0
  220. package/icons/layout-text-window-reverse.svg +3 -0
  221. package/icons/layout-text-window.svg +3 -0
  222. package/icons/layout.svg +3 -0
  223. package/icons/link.svg +3 -0
  224. package/icons/linkedin.svg +3 -0
  225. package/icons/list.svg +3 -0
  226. package/icons/lock-fill.svg +3 -0
  227. package/icons/lock.svg +3 -0
  228. package/icons/mail.svg +3 -0
  229. package/icons/map.svg +3 -0
  230. package/icons/paperclip.svg +3 -0
  231. package/icons/pencil.svg +3 -0
  232. package/icons/pending-circle.svg +3 -0
  233. package/icons/person-dash.svg +3 -0
  234. package/icons/person-plus.svg +3 -0
  235. package/icons/person-x.svg +3 -0
  236. package/icons/person.svg +3 -0
  237. package/icons/pin-map-fill.svg +3 -0
  238. package/icons/pin.svg +3 -0
  239. package/icons/placeholder.svg +3 -0
  240. package/icons/plus-circle.svg +3 -0
  241. package/icons/plus-square.svg +3 -0
  242. package/icons/plus.svg +3 -0
  243. package/icons/printer.svg +3 -0
  244. package/icons/question-circle.svg +4 -0
  245. package/icons/save.svg +3 -0
  246. package/icons/search.svg +3 -0
  247. package/icons/share.svg +3 -0
  248. package/icons/slash-circle.svg +3 -0
  249. package/icons/sliders.svg +3 -0
  250. package/icons/speedometer.svg +3 -0
  251. package/icons/star-fill.svg +3 -0
  252. package/icons/star.svg +3 -0
  253. package/icons/stoplights.svg +4 -0
  254. package/icons/telephone.svg +3 -0
  255. package/icons/three-dots-vertical.svg +3 -0
  256. package/icons/three-dots.svg +3 -0
  257. package/icons/toggle-off.svg +3 -0
  258. package/icons/toggle-on.svg +3 -0
  259. package/icons/trash.svg +3 -0
  260. package/icons/twitter-x.svg +3 -0
  261. package/icons/unlock.svg +3 -0
  262. package/icons/upload.svg +3 -0
  263. package/icons/window-dash.svg +4 -0
  264. package/icons/window-desktop.svg +4 -0
  265. package/icons/window-dock.svg +4 -0
  266. package/icons/window-fullscreen.svg +3 -0
  267. package/icons/window-plus.svg +4 -0
  268. package/icons/window-sidebar.svg +3 -0
  269. package/icons/window-split.svg +3 -0
  270. package/icons/window-stack.svg +3 -0
  271. package/icons/window-x.svg +4 -0
  272. package/icons/window.svg +3 -0
  273. package/icons/x-circle-fill.svg +3 -0
  274. package/icons/x-circle.svg +3 -0
  275. package/icons/youtube.svg +3 -0
  276. package/icons/zoom-in.svg +3 -0
  277. package/icons/zoom-out.svg +3 -0
  278. package/index.d.ts +1 -0
  279. package/index.js +1 -0
  280. package/index.js.map +1 -1
  281. package/index.umd.js +1338 -1119
  282. package/index.umd.js.map +1 -1
  283. package/internals/CloseButton/close-button.js +1 -1
  284. package/internals/CloseButton/sgds-close-button.js +1 -1
  285. package/internals/CloseButton/sgds-close-button.js.map +1 -1
  286. package/package.json +1 -1
  287. package/react/base/button.cjs.js +1 -1
  288. package/react/base/button.js +1 -1
  289. package/react/base/form-control-element.cjs.js +13 -23
  290. package/react/base/form-control-element.cjs.js.map +1 -1
  291. package/react/base/form-control-element.js +13 -23
  292. package/react/base/form-control-element.js.map +1 -1
  293. package/react/checkbox/index.cjs.js +2 -0
  294. package/react/checkbox/index.cjs.js.map +1 -1
  295. package/react/checkbox/index.d.ts +2 -0
  296. package/react/checkbox/index.js +2 -0
  297. package/react/checkbox/index.js.map +1 -1
  298. package/react/components/Accordion/accordion-item.cjs.js +1 -1
  299. package/react/components/Accordion/accordion-item.js +1 -1
  300. package/react/components/Accordion/sgds-accordion-item.cjs.js +6 -18
  301. package/react/components/Accordion/sgds-accordion-item.cjs.js.map +1 -1
  302. package/react/components/Accordion/sgds-accordion-item.js +6 -18
  303. package/react/components/Accordion/sgds-accordion-item.js.map +1 -1
  304. package/react/components/Alert/alert.cjs.js +1 -1
  305. package/react/components/Alert/alert.js +1 -1
  306. package/react/components/Alert/sgds-alert.cjs.js +5 -12
  307. package/react/components/Alert/sgds-alert.cjs.js.map +1 -1
  308. package/react/components/Alert/sgds-alert.js +6 -13
  309. package/react/components/Alert/sgds-alert.js.map +1 -1
  310. package/react/components/Badge/badge.cjs.js +1 -1
  311. package/react/components/Badge/badge.js +1 -1
  312. package/react/components/Badge/sgds-badge.cjs.js +5 -6
  313. package/react/components/Badge/sgds-badge.cjs.js.map +1 -1
  314. package/react/components/Badge/sgds-badge.js +5 -6
  315. package/react/components/Badge/sgds-badge.js.map +1 -1
  316. package/react/components/Button/sgds-button.cjs.js +2 -2
  317. package/react/components/Button/sgds-button.cjs.js.map +1 -1
  318. package/react/components/Button/sgds-button.js +1 -1
  319. package/react/components/Button/sgds-button.js.map +1 -1
  320. package/react/components/Checkbox/checkbox.cjs.js +1 -1
  321. package/react/components/Checkbox/checkbox.js +1 -1
  322. package/react/components/Checkbox/sgds-checkbox-group.cjs.js +15 -4
  323. package/react/components/Checkbox/sgds-checkbox-group.cjs.js.map +1 -1
  324. package/react/components/Checkbox/sgds-checkbox-group.js +15 -4
  325. package/react/components/Checkbox/sgds-checkbox-group.js.map +1 -1
  326. package/react/components/Checkbox/sgds-checkbox.cjs.js +77 -60
  327. package/react/components/Checkbox/sgds-checkbox.cjs.js.map +1 -1
  328. package/react/components/Checkbox/sgds-checkbox.js +77 -60
  329. package/react/components/Checkbox/sgds-checkbox.js.map +1 -1
  330. package/react/components/Datepicker/datepicker-input.cjs.js +24 -7
  331. package/react/components/Datepicker/datepicker-input.cjs.js.map +1 -1
  332. package/react/components/Datepicker/datepicker-input.js +24 -7
  333. package/react/components/Datepicker/datepicker-input.js.map +1 -1
  334. package/react/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
  335. package/react/components/Datepicker/sgds-datepicker.js.map +1 -1
  336. package/react/components/FileUpload/file-upload.cjs.js +1 -1
  337. package/react/components/FileUpload/file-upload.js +1 -1
  338. package/react/components/FileUpload/sgds-file-upload.cjs.js +145 -101
  339. package/react/components/FileUpload/sgds-file-upload.cjs.js.map +1 -1
  340. package/react/components/FileUpload/sgds-file-upload.js +147 -103
  341. package/react/components/FileUpload/sgds-file-upload.js.map +1 -1
  342. package/react/components/Footer/footer-item.cjs.js +11 -0
  343. package/react/components/Footer/footer-item.cjs.js.map +1 -0
  344. package/react/components/Footer/footer-item.js +7 -0
  345. package/react/components/Footer/footer-item.js.map +1 -0
  346. package/react/components/Footer/footer.cjs.js +1 -1
  347. package/react/components/Footer/footer.js +1 -1
  348. package/react/components/Footer/sgds-footer-item.cjs.js +33 -0
  349. package/react/components/Footer/sgds-footer-item.cjs.js.map +1 -0
  350. package/react/components/Footer/sgds-footer-item.js +28 -0
  351. package/react/components/Footer/sgds-footer-item.js.map +1 -0
  352. package/react/components/Footer/sgds-footer.cjs.js +65 -90
  353. package/react/components/Footer/sgds-footer.cjs.js.map +1 -1
  354. package/react/components/Footer/sgds-footer.js +65 -90
  355. package/react/components/Footer/sgds-footer.js.map +1 -1
  356. package/react/components/Icon/icon.cjs.js +11 -0
  357. package/react/components/Icon/icon.cjs.js.map +1 -0
  358. package/react/components/Icon/icon.js +7 -0
  359. package/react/components/Icon/icon.js.map +1 -0
  360. package/react/components/Icon/sgds-icon.cjs.js +70 -0
  361. package/react/components/Icon/sgds-icon.cjs.js.map +1 -0
  362. package/react/components/Icon/sgds-icon.js +65 -0
  363. package/react/components/Icon/sgds-icon.js.map +1 -0
  364. package/react/components/IconButton/icon-button.cjs.js +1 -1
  365. package/react/components/IconButton/icon-button.js +1 -1
  366. package/react/components/IconButton/sgds-icon-button.cjs.js +4 -9
  367. package/react/components/IconButton/sgds-icon-button.cjs.js.map +1 -1
  368. package/react/components/IconButton/sgds-icon-button.js +4 -9
  369. package/react/components/IconButton/sgds-icon-button.js.map +1 -1
  370. package/react/components/Input/sgds-input.cjs.js +101 -64
  371. package/react/components/Input/sgds-input.cjs.js.map +1 -1
  372. package/react/components/Input/sgds-input.js +103 -66
  373. package/react/components/Input/sgds-input.js.map +1 -1
  374. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +128 -61
  375. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  376. package/react/components/QuantityToggle/sgds-quantity-toggle.js +129 -62
  377. package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  378. package/react/components/Radio/sgds-radio-group.cjs.js +99 -83
  379. package/react/components/Radio/sgds-radio-group.cjs.js.map +1 -1
  380. package/react/components/Radio/sgds-radio-group.js +100 -84
  381. package/react/components/Radio/sgds-radio-group.js.map +1 -1
  382. package/react/components/Radio/sgds-radio.cjs.js +1 -1
  383. package/react/components/Radio/sgds-radio.cjs.js.map +1 -1
  384. package/react/components/Radio/sgds-radio.js +1 -1
  385. package/react/components/Radio/sgds-radio.js.map +1 -1
  386. package/react/components/Stepper/sgds-stepper.cjs.js +1 -0
  387. package/react/components/Stepper/sgds-stepper.cjs.js.map +1 -1
  388. package/react/components/Stepper/sgds-stepper.js +1 -0
  389. package/react/components/Stepper/sgds-stepper.js.map +1 -1
  390. package/react/components/Switch/sgds-switch.cjs.js +1 -2
  391. package/react/components/Switch/sgds-switch.cjs.js.map +1 -1
  392. package/react/components/Switch/sgds-switch.js +1 -2
  393. package/react/components/Switch/sgds-switch.js.map +1 -1
  394. package/react/components/Textarea/sgds-textarea.cjs.js +76 -73
  395. package/react/components/Textarea/sgds-textarea.cjs.js.map +1 -1
  396. package/react/components/Textarea/sgds-textarea.js +78 -75
  397. package/react/components/Textarea/sgds-textarea.js.map +1 -1
  398. package/react/components/Textarea/textarea.cjs.js +1 -1
  399. package/react/components/Textarea/textarea.js +1 -1
  400. package/react/components/Toast/sgds-toast.cjs.js +6 -18
  401. package/react/components/Toast/sgds-toast.cjs.js.map +1 -1
  402. package/react/components/Toast/sgds-toast.js +6 -18
  403. package/react/components/Toast/sgds-toast.js.map +1 -1
  404. package/react/components/Toast/toast.cjs.js +1 -1
  405. package/react/components/Toast/toast.js +1 -1
  406. package/react/components/Tooltip/sgds-tooltip.cjs.js +14 -14
  407. package/react/components/Tooltip/sgds-tooltip.cjs.js.map +1 -1
  408. package/react/components/Tooltip/sgds-tooltip.js +14 -14
  409. package/react/components/Tooltip/sgds-tooltip.js.map +1 -1
  410. package/react/footer-item/index.cjs.js +39 -0
  411. package/react/footer-item/index.cjs.js.map +1 -0
  412. package/react/footer-item/index.d.ts +3 -0
  413. package/react/footer-item/index.js +15 -0
  414. package/react/footer-item/index.js.map +1 -0
  415. package/react/icon/index.cjs.js +42 -0
  416. package/react/icon/index.cjs.js.map +1 -0
  417. package/react/icon/index.d.ts +6 -0
  418. package/react/icon/index.js +18 -0
  419. package/react/icon/index.js.map +1 -0
  420. package/react/index.cjs.js +64 -60
  421. package/react/index.cjs.js.map +1 -1
  422. package/react/index.d.ts +2 -0
  423. package/react/index.js +2 -0
  424. package/react/index.js.map +1 -1
  425. package/react/input/index.cjs.js +3 -1
  426. package/react/input/index.cjs.js.map +1 -1
  427. package/react/input/index.d.ts +2 -0
  428. package/react/input/index.js +3 -1
  429. package/react/input/index.js.map +1 -1
  430. package/react/internals/CloseButton/close-button.cjs.js +1 -1
  431. package/react/internals/CloseButton/close-button.js +1 -1
  432. package/react/internals/CloseButton/sgds-close-button.cjs.js +1 -1
  433. package/react/internals/CloseButton/sgds-close-button.cjs.js.map +1 -1
  434. package/react/internals/CloseButton/sgds-close-button.js +1 -1
  435. package/react/internals/CloseButton/sgds-close-button.js.map +1 -1
  436. package/react/styles/form-hint.cjs.js +1 -1
  437. package/react/styles/form-hint.js +1 -1
  438. package/react/styles/form-label.cjs.js +1 -1
  439. package/react/styles/form-label.js +1 -1
  440. package/react/utils/formSubmitController.cjs.js +64 -0
  441. package/react/utils/formSubmitController.cjs.js.map +1 -0
  442. package/react/utils/formSubmitController.js +60 -0
  443. package/react/utils/formSubmitController.js.map +1 -0
  444. package/react/utils/inputValidationController.cjs.js +130 -0
  445. package/react/utils/inputValidationController.cjs.js.map +1 -0
  446. package/react/utils/inputValidationController.js +126 -0
  447. package/react/utils/inputValidationController.js.map +1 -0
  448. package/react/utils/validatorMixin.cjs.js +108 -0
  449. package/react/utils/validatorMixin.cjs.js.map +1 -0
  450. package/react/utils/validatorMixin.js +104 -0
  451. package/react/utils/validatorMixin.js.map +1 -0
  452. package/styles/form-hint.js +1 -1
  453. package/styles/form-label.js +1 -1
  454. package/themes/day.css +1 -1
  455. package/themes/night.css +3 -2
  456. package/themes/root.css +1 -0
  457. package/utils/{form.d.ts → formSubmitController.d.ts} +10 -20
  458. package/utils/formSubmitController.js +59 -0
  459. package/utils/formSubmitController.js.map +1 -0
  460. package/utils/inputValidationController.d.ts +70 -0
  461. package/utils/inputValidationController.js +125 -0
  462. package/utils/inputValidationController.js.map +1 -0
  463. package/utils/validatorMixin.d.ts +24 -0
  464. package/utils/validatorMixin.js +103 -0
  465. package/utils/validatorMixin.js.map +1 -0
  466. package/base/form-check-element.d.ts +0 -50
  467. package/base/form-check-element.js +0 -169
  468. package/base/form-check-element.js.map +0 -1
  469. package/react/base/form-check-element.cjs.js +0 -175
  470. package/react/base/form-check-element.cjs.js.map +0 -1
  471. package/react/base/form-check-element.js +0 -170
  472. package/react/base/form-check-element.js.map +0 -1
  473. package/react/utils/form.cjs.js +0 -137
  474. package/react/utils/form.cjs.js.map +0 -1
  475. package/react/utils/form.js +0 -133
  476. package/react/utils/form.js.map +0 -1
  477. package/utils/form.js +0 -132
  478. package/utils/form.js.map +0 -1
@@ -0,0 +1,130 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ /**
7
+ * SGDS custom form validation methods and behaviours
8
+ */
9
+ class InputValidationController {
10
+ constructor(host, options) {
11
+ (this.host = host).addController(this);
12
+ this._internals = this.host.attachInternals();
13
+ this.options = Object.assign({ setInvalid: (host, value) => {
14
+ host.invalid = value;
15
+ }, value: (host) => {
16
+ return host.value;
17
+ }, input: (host) => host.input }, options);
18
+ }
19
+ hostConnected() {
20
+ this.host.addEventListener("invalid", e => this.handleInvalid(e));
21
+ }
22
+ hostDisconnected() {
23
+ this.host.removeEventListener("invalid", e => this.handleInvalid(e));
24
+ }
25
+ /**
26
+ * Prevents the native browser error message pop up when reportValidity() called by
27
+ * associated form or the component's reportValidity during constraint validation
28
+ * Sets invalid reactive prop to true
29
+ */
30
+ handleInvalid(e) {
31
+ e.preventDefault();
32
+ this.options.setInvalid(this.host, true);
33
+ }
34
+ /**
35
+ * Sets invalid to false when invoked and
36
+ * Updates the ValidityState based on new value, but
37
+ * does not update invalid reactive prop
38
+ * @param e
39
+ */
40
+ handleInput(e) {
41
+ const input = e.target;
42
+ this.options.setInvalid(this.host, false);
43
+ this.validateInput(input);
44
+ }
45
+ /**
46
+ * Validate the input's new value after onChange and
47
+ * update invalid reactive prop
48
+ * @param e
49
+ */
50
+ handleChange(e) {
51
+ const input = e.target;
52
+ this.validateInput(input);
53
+ this.options.setInvalid(this.host, !this.checkValidity());
54
+ }
55
+ get form() {
56
+ return this._internals.form;
57
+ }
58
+ get validity() {
59
+ return this._internals.validity;
60
+ }
61
+ get validationMessage() {
62
+ return this._internals.validationMessage;
63
+ }
64
+ get willValidate() {
65
+ return this._internals.willValidate;
66
+ }
67
+ /**
68
+ * Checks the validity and updates the invalid reactive prop of form components
69
+ */
70
+ updateInvalidState() {
71
+ this.options.setInvalid(this.host, !this.checkValidity());
72
+ }
73
+ /**
74
+ * Resets the ValidityState of the control
75
+ */
76
+ resetValidity() {
77
+ return this._internals.setValidity({});
78
+ }
79
+ /**
80
+ * Reports the validity
81
+ */
82
+ checkValidity() {
83
+ return this._internals.checkValidity();
84
+ }
85
+ /**
86
+ * Reports the validity with a error popup message
87
+ */
88
+ reportValidity() {
89
+ return this._internals.reportValidity();
90
+ }
91
+ /**
92
+ * Sets the form control value into FormData,
93
+ * making the value of control accessible via FormData
94
+ */
95
+ setFormValue() {
96
+ const value = this.options.value(this.host);
97
+ this._internals.setFormValue(value);
98
+ }
99
+ /**
100
+ * Updates the ValidityState of the input in form component at current state
101
+ */
102
+ validateInput(input) {
103
+ /** When the form control is disabled, its always valid */
104
+ if (this.options.input(this.host).disabled) {
105
+ return this._internals.setValidity({});
106
+ }
107
+ // get the validity of the internal <input>
108
+ const validState = input.validity;
109
+ // if the input is invalid, show the correct error
110
+ if (!validState.valid) {
111
+ // loop through the error reasons
112
+ for (const state in validState) {
113
+ // if there is an error and corresponding attribute holding
114
+ // the message
115
+ if (validState[state]) {
116
+ this.validationError = state.toString();
117
+ // set the validity error reason and the corresponding
118
+ // message
119
+ this._internals.setValidity({ [this.validationError]: true }, input.validationMessage, input);
120
+ }
121
+ }
122
+ }
123
+ else {
124
+ this._internals.setValidity({});
125
+ }
126
+ }
127
+ }
128
+
129
+ exports.InputValidationController = InputValidationController;
130
+ //# sourceMappingURL=inputValidationController.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputValidationController.cjs.js","sources":["../../../src/utils/inputValidationController.ts"],"sourcesContent":["import { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { SgdsFormControl } from \"./formSubmitController\";\nimport { SgdsCheckbox, SgdsInput } from \"../components\";\n\n/**\n * SGDS custom form validation methods and behaviours\n */\nexport class InputValidationController implements ReactiveController {\n host: ReactiveControllerHost & HTMLElement;\n _internals: ElementInternals;\n validationError: keyof ValidityState;\n options: InputValidationControllerOptions;\n\n constructor(host: ReactiveControllerHost & HTMLElement, options?: Partial<InputValidationControllerOptions>) {\n (this.host = host).addController(this);\n this._internals = this.host.attachInternals();\n this.options = {\n setInvalid: (host: SgdsFormControl, value: boolean) => {\n host.invalid = value;\n },\n value: (host: SgdsFormControl) => {\n return host.value;\n },\n input: (host: SgdsFormControl) => host.input,\n ...options\n };\n }\n\n hostConnected(): void {\n this.host.addEventListener(\"invalid\", e => this.handleInvalid(e));\n }\n\n hostDisconnected(): void {\n this.host.removeEventListener(\"invalid\", e => this.handleInvalid(e));\n }\n /**\n * Prevents the native browser error message pop up when reportValidity() called by\n * associated form or the component's reportValidity during constraint validation\n * Sets invalid reactive prop to true\n */\n handleInvalid(e: Event) {\n e.preventDefault();\n this.options.setInvalid(this.host, true);\n }\n\n /**\n * Sets invalid to false when invoked and\n * Updates the ValidityState based on new value, but\n * does not update invalid reactive prop\n * @param e\n */\n handleInput(e: Event) {\n const input = e.target as HTMLInputElement;\n this.options.setInvalid(this.host, false);\n this.validateInput(input);\n }\n /**\n * Validate the input's new value after onChange and\n * update invalid reactive prop\n * @param e\n */\n handleChange(e: Event) {\n const input = e.target as HTMLInputElement;\n this.validateInput(input);\n this.options.setInvalid(this.host, !this.checkValidity());\n }\n\n get form() {\n return this._internals.form;\n }\n\n get validity() {\n return this._internals.validity;\n }\n\n get validationMessage() {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n /**\n * Checks the validity and updates the invalid reactive prop of form components\n */\n updateInvalidState() {\n this.options.setInvalid(this.host, !this.checkValidity());\n }\n /**\n * Resets the ValidityState of the control\n */\n resetValidity() {\n return this._internals.setValidity({});\n }\n /**\n * Reports the validity\n */\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n /**\n * Reports the validity with a error popup message\n */\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n /**\n * Sets the form control value into FormData,\n * making the value of control accessible via FormData\n */\n setFormValue() {\n const value = this.options.value(this.host) as string | FormData | File;\n this._internals.setFormValue(value);\n }\n /**\n * Updates the ValidityState of the input in form component at current state\n */\n validateInput(input) {\n /** When the form control is disabled, its always valid */\n if (this.options.input(this.host).disabled) {\n return this._internals.setValidity({});\n }\n // get the validity of the internal <input>\n const validState = input.validity;\n // if the input is invalid, show the correct error\n if (!validState.valid) {\n // loop through the error reasons\n for (const state in validState) {\n // if there is an error and corresponding attribute holding\n // the message\n if (validState[state]) {\n this.validationError = state.toString() as keyof ValidityState;\n\n // set the validity error reason and the corresponding\n // message\n this._internals.setValidity({ [this.validationError]: true }, input.validationMessage, input);\n }\n }\n } else {\n this._internals.setValidity({});\n }\n }\n}\n\nexport interface InputValidationControllerOptions {\n /** A function that sets the value of host invalid reactive prop */\n setInvalid: (host: ReactiveControllerHost & HTMLElement, value: boolean) => void;\n /** A function that gets the value of host value reactive prop */\n value: (host: ReactiveControllerHost & HTMLElement) => unknown;\n /** A function that gets the input control of host value reactive prop */\n input: (host: ReactiveController & HTMLElement) => HTMLInputElement | SgdsInput | SgdsCheckbox;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ 'use client';
2
+ /**
3
+ * SGDS custom form validation methods and behaviours
4
+ */
5
+ class InputValidationController {
6
+ constructor(host, options) {
7
+ (this.host = host).addController(this);
8
+ this._internals = this.host.attachInternals();
9
+ this.options = Object.assign({ setInvalid: (host, value) => {
10
+ host.invalid = value;
11
+ }, value: (host) => {
12
+ return host.value;
13
+ }, input: (host) => host.input }, options);
14
+ }
15
+ hostConnected() {
16
+ this.host.addEventListener("invalid", e => this.handleInvalid(e));
17
+ }
18
+ hostDisconnected() {
19
+ this.host.removeEventListener("invalid", e => this.handleInvalid(e));
20
+ }
21
+ /**
22
+ * Prevents the native browser error message pop up when reportValidity() called by
23
+ * associated form or the component's reportValidity during constraint validation
24
+ * Sets invalid reactive prop to true
25
+ */
26
+ handleInvalid(e) {
27
+ e.preventDefault();
28
+ this.options.setInvalid(this.host, true);
29
+ }
30
+ /**
31
+ * Sets invalid to false when invoked and
32
+ * Updates the ValidityState based on new value, but
33
+ * does not update invalid reactive prop
34
+ * @param e
35
+ */
36
+ handleInput(e) {
37
+ const input = e.target;
38
+ this.options.setInvalid(this.host, false);
39
+ this.validateInput(input);
40
+ }
41
+ /**
42
+ * Validate the input's new value after onChange and
43
+ * update invalid reactive prop
44
+ * @param e
45
+ */
46
+ handleChange(e) {
47
+ const input = e.target;
48
+ this.validateInput(input);
49
+ this.options.setInvalid(this.host, !this.checkValidity());
50
+ }
51
+ get form() {
52
+ return this._internals.form;
53
+ }
54
+ get validity() {
55
+ return this._internals.validity;
56
+ }
57
+ get validationMessage() {
58
+ return this._internals.validationMessage;
59
+ }
60
+ get willValidate() {
61
+ return this._internals.willValidate;
62
+ }
63
+ /**
64
+ * Checks the validity and updates the invalid reactive prop of form components
65
+ */
66
+ updateInvalidState() {
67
+ this.options.setInvalid(this.host, !this.checkValidity());
68
+ }
69
+ /**
70
+ * Resets the ValidityState of the control
71
+ */
72
+ resetValidity() {
73
+ return this._internals.setValidity({});
74
+ }
75
+ /**
76
+ * Reports the validity
77
+ */
78
+ checkValidity() {
79
+ return this._internals.checkValidity();
80
+ }
81
+ /**
82
+ * Reports the validity with a error popup message
83
+ */
84
+ reportValidity() {
85
+ return this._internals.reportValidity();
86
+ }
87
+ /**
88
+ * Sets the form control value into FormData,
89
+ * making the value of control accessible via FormData
90
+ */
91
+ setFormValue() {
92
+ const value = this.options.value(this.host);
93
+ this._internals.setFormValue(value);
94
+ }
95
+ /**
96
+ * Updates the ValidityState of the input in form component at current state
97
+ */
98
+ validateInput(input) {
99
+ /** When the form control is disabled, its always valid */
100
+ if (this.options.input(this.host).disabled) {
101
+ return this._internals.setValidity({});
102
+ }
103
+ // get the validity of the internal <input>
104
+ const validState = input.validity;
105
+ // if the input is invalid, show the correct error
106
+ if (!validState.valid) {
107
+ // loop through the error reasons
108
+ for (const state in validState) {
109
+ // if there is an error and corresponding attribute holding
110
+ // the message
111
+ if (validState[state]) {
112
+ this.validationError = state.toString();
113
+ // set the validity error reason and the corresponding
114
+ // message
115
+ this._internals.setValidity({ [this.validationError]: true }, input.validationMessage, input);
116
+ }
117
+ }
118
+ }
119
+ else {
120
+ this._internals.setValidity({});
121
+ }
122
+ }
123
+ }
124
+
125
+ export { InputValidationController };
126
+ //# sourceMappingURL=inputValidationController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputValidationController.js","sources":["../../../src/utils/inputValidationController.ts"],"sourcesContent":["import { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { SgdsFormControl } from \"./formSubmitController\";\nimport { SgdsCheckbox, SgdsInput } from \"../components\";\n\n/**\n * SGDS custom form validation methods and behaviours\n */\nexport class InputValidationController implements ReactiveController {\n host: ReactiveControllerHost & HTMLElement;\n _internals: ElementInternals;\n validationError: keyof ValidityState;\n options: InputValidationControllerOptions;\n\n constructor(host: ReactiveControllerHost & HTMLElement, options?: Partial<InputValidationControllerOptions>) {\n (this.host = host).addController(this);\n this._internals = this.host.attachInternals();\n this.options = {\n setInvalid: (host: SgdsFormControl, value: boolean) => {\n host.invalid = value;\n },\n value: (host: SgdsFormControl) => {\n return host.value;\n },\n input: (host: SgdsFormControl) => host.input,\n ...options\n };\n }\n\n hostConnected(): void {\n this.host.addEventListener(\"invalid\", e => this.handleInvalid(e));\n }\n\n hostDisconnected(): void {\n this.host.removeEventListener(\"invalid\", e => this.handleInvalid(e));\n }\n /**\n * Prevents the native browser error message pop up when reportValidity() called by\n * associated form or the component's reportValidity during constraint validation\n * Sets invalid reactive prop to true\n */\n handleInvalid(e: Event) {\n e.preventDefault();\n this.options.setInvalid(this.host, true);\n }\n\n /**\n * Sets invalid to false when invoked and\n * Updates the ValidityState based on new value, but\n * does not update invalid reactive prop\n * @param e\n */\n handleInput(e: Event) {\n const input = e.target as HTMLInputElement;\n this.options.setInvalid(this.host, false);\n this.validateInput(input);\n }\n /**\n * Validate the input's new value after onChange and\n * update invalid reactive prop\n * @param e\n */\n handleChange(e: Event) {\n const input = e.target as HTMLInputElement;\n this.validateInput(input);\n this.options.setInvalid(this.host, !this.checkValidity());\n }\n\n get form() {\n return this._internals.form;\n }\n\n get validity() {\n return this._internals.validity;\n }\n\n get validationMessage() {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n /**\n * Checks the validity and updates the invalid reactive prop of form components\n */\n updateInvalidState() {\n this.options.setInvalid(this.host, !this.checkValidity());\n }\n /**\n * Resets the ValidityState of the control\n */\n resetValidity() {\n return this._internals.setValidity({});\n }\n /**\n * Reports the validity\n */\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n /**\n * Reports the validity with a error popup message\n */\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n /**\n * Sets the form control value into FormData,\n * making the value of control accessible via FormData\n */\n setFormValue() {\n const value = this.options.value(this.host) as string | FormData | File;\n this._internals.setFormValue(value);\n }\n /**\n * Updates the ValidityState of the input in form component at current state\n */\n validateInput(input) {\n /** When the form control is disabled, its always valid */\n if (this.options.input(this.host).disabled) {\n return this._internals.setValidity({});\n }\n // get the validity of the internal <input>\n const validState = input.validity;\n // if the input is invalid, show the correct error\n if (!validState.valid) {\n // loop through the error reasons\n for (const state in validState) {\n // if there is an error and corresponding attribute holding\n // the message\n if (validState[state]) {\n this.validationError = state.toString() as keyof ValidityState;\n\n // set the validity error reason and the corresponding\n // message\n this._internals.setValidity({ [this.validationError]: true }, input.validationMessage, input);\n }\n }\n } else {\n this._internals.setValidity({});\n }\n }\n}\n\nexport interface InputValidationControllerOptions {\n /** A function that sets the value of host invalid reactive prop */\n setInvalid: (host: ReactiveControllerHost & HTMLElement, value: boolean) => void;\n /** A function that gets the value of host value reactive prop */\n value: (host: ReactiveControllerHost & HTMLElement) => unknown;\n /** A function that gets the input control of host value reactive prop */\n input: (host: ReactiveController & HTMLElement) => HTMLInputElement | SgdsInput | SgdsCheckbox;\n}\n"],"names":[],"mappings":";AAIA;;AAEG;MACU,yBAAyB,CAAA;IAMpC,WAAY,CAAA,IAA0C,EAAE,OAAmD,EAAA;QACzG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,EACV,UAAU,EAAE,CAAC,IAAqB,EAAE,KAAc,KAAI;AACpD,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,aAAC,EACD,KAAK,EAAE,CAAC,IAAqB,KAAI;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,aAAC,EACD,KAAK,EAAE,CAAC,IAAqB,KAAK,IAAI,CAAC,KAAK,EACzC,EAAA,OAAO,CACX,CAAC;KACH;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;KACnE;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;KACtE;AACD;;;;AAIG;AACH,IAAA,aAAa,CAAC,CAAQ,EAAA;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC1C;AAED;;;;;AAKG;AACH,IAAA,WAAW,CAAC,CAAQ,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC3B;AACD;;;;AAIG;AACH,IAAA,YAAY,CAAC,CAAQ,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;KAC3D;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;KAC7B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;KACjC;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;KAC1C;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;KACrC;AACD;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;KAC3D;AACD;;AAEG;IACH,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KACxC;AACD;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;KACxC;AACD;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;KACzC;AACD;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAA6B,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACrC;AACD;;AAEG;AACH,IAAA,aAAa,CAAC,KAAK,EAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACxC;;AAED,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC;;AAElC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAErB,YAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;;;AAG9B,gBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;;;oBAI/D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;iBAC/F;aACF;SACF;aAAM;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACjC;KACF;AACF;;;;"}
@@ -0,0 +1,108 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var tslib = require('tslib');
7
+ var decorators_js = require('lit/decorators.js');
8
+ var inputValidationController = require('./inputValidationController.cjs.js');
9
+
10
+ /**
11
+ * @summary The FormValidationMixin used by the form components
12
+ * @param superClass
13
+ * @returns
14
+ */
15
+ const SgdsFormValidatorMixin = (superClass) => {
16
+ class ToBeValidatedElement extends superClass {
17
+ constructor() {
18
+ super(...arguments);
19
+ this._isTouched = false;
20
+ }
21
+ connectedCallback() {
22
+ super.connectedCallback();
23
+ this.inputValidationController = new inputValidationController.InputValidationController(this);
24
+ }
25
+ async firstUpdated(changedProperties) {
26
+ super.firstUpdated(changedProperties);
27
+ /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */
28
+ this.input =
29
+ this.shadowRoot.querySelector("input") || (await this.sgdsInput) || this.shadowRoot.querySelector("textarea");
30
+ this._mixinValidate(this.input);
31
+ }
32
+ /**
33
+ * Native lifecycle of Form-Associated Custom Element Callbacks
34
+ */
35
+ formResetCallback() {
36
+ if (this._mixinResetFormControl) {
37
+ this._mixinResetFormControl();
38
+ }
39
+ else {
40
+ this.value = this.defaultValue;
41
+ this._mixinResetValidity(this.input);
42
+ }
43
+ this._mixinSetFormValue();
44
+ }
45
+ /**
46
+ *
47
+ * Methods use by classes using this mixin
48
+ */
49
+ /**
50
+ * OnChange of form component
51
+ * 1. Make value of control accessible via FormData
52
+ * 2. Run change handler
53
+ */
54
+ _mixinHandleChange(e) {
55
+ this._mixinSetFormValue();
56
+ this.inputValidationController.handleChange(e);
57
+ }
58
+ /**
59
+ * OnChange of form component
60
+ * 1. Make value of control accessible via FormData
61
+ * 2. Run input handler
62
+ */
63
+ _mixinHandleInputChange(e) {
64
+ this._mixinSetFormValue();
65
+ this.inputValidationController.handleInput(e);
66
+ }
67
+ /**
68
+ * During form resetting,
69
+ * 1. ValidityState is reset
70
+ * 2. invalid reactive prop is updated after the reset
71
+ * 3. Revalidates the ValidityState (but do not update invalid prop)
72
+ * to prepare for the next validity check
73
+ * 4. Reset touched state to false for a pristine form
74
+ */
75
+ _mixinResetValidity(input) {
76
+ this.inputValidationController.resetValidity();
77
+ this.inputValidationController.updateInvalidState();
78
+ this.inputValidationController.validateInput(input);
79
+ this._isTouched ? (this._isTouched = false) : null;
80
+ }
81
+ _mixinValidate(input) {
82
+ this.inputValidationController.validateInput(input);
83
+ }
84
+ _mixinSetFormValue() {
85
+ this.inputValidationController.setFormValue();
86
+ }
87
+ _mixinCheckValidity() {
88
+ return this.inputValidationController.checkValidity();
89
+ }
90
+ _mixinReportValidity() {
91
+ return this.inputValidationController.reportValidity();
92
+ }
93
+ _mixinGetValidity() {
94
+ return this.inputValidationController.validity;
95
+ }
96
+ _mixinGetValidationMessage() {
97
+ return this.inputValidationController.validationMessage;
98
+ }
99
+ }
100
+ ToBeValidatedElement.formAssociated = true;
101
+ tslib.__decorate([
102
+ decorators_js.queryAsync("sgds-input")
103
+ ], ToBeValidatedElement.prototype, "sgdsInput", void 0);
104
+ return ToBeValidatedElement;
105
+ };
106
+
107
+ exports.SgdsFormValidatorMixin = SgdsFormValidatorMixin;
108
+ //# sourceMappingURL=validatorMixin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatorMixin.cjs.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.inputValidationController = new InputValidationController(this);\n }\n async firstUpdated(changedProperties) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") || (await this.sgdsInput) || this.shadowRoot.querySelector(\"textarea\");\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset\n * 2. invalid reactive prop is updated after the reset\n * 3. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check\n * 4. Reset touched state to false for a pristine form\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this.inputValidationController.validateInput(input);\n this._isTouched ? (this._isTouched = false) : null;\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n this.inputValidationController.setFormValue();\n }\n _mixinCheckValidity(): boolean {\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this.inputValidationController.validity;\n }\n _mixinGetValidationMessage(): string {\n return this.inputValidationController.validationMessage;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n}\n"],"names":["InputValidationController","__decorate","queryAsync"],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ 'use client';
2
+ import { __decorate } from 'tslib';
3
+ import { queryAsync } from 'lit/decorators.js';
4
+ import { InputValidationController } from './inputValidationController.js';
5
+
6
+ /**
7
+ * @summary The FormValidationMixin used by the form components
8
+ * @param superClass
9
+ * @returns
10
+ */
11
+ const SgdsFormValidatorMixin = (superClass) => {
12
+ class ToBeValidatedElement extends superClass {
13
+ constructor() {
14
+ super(...arguments);
15
+ this._isTouched = false;
16
+ }
17
+ connectedCallback() {
18
+ super.connectedCallback();
19
+ this.inputValidationController = new InputValidationController(this);
20
+ }
21
+ async firstUpdated(changedProperties) {
22
+ super.firstUpdated(changedProperties);
23
+ /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */
24
+ this.input =
25
+ this.shadowRoot.querySelector("input") || (await this.sgdsInput) || this.shadowRoot.querySelector("textarea");
26
+ this._mixinValidate(this.input);
27
+ }
28
+ /**
29
+ * Native lifecycle of Form-Associated Custom Element Callbacks
30
+ */
31
+ formResetCallback() {
32
+ if (this._mixinResetFormControl) {
33
+ this._mixinResetFormControl();
34
+ }
35
+ else {
36
+ this.value = this.defaultValue;
37
+ this._mixinResetValidity(this.input);
38
+ }
39
+ this._mixinSetFormValue();
40
+ }
41
+ /**
42
+ *
43
+ * Methods use by classes using this mixin
44
+ */
45
+ /**
46
+ * OnChange of form component
47
+ * 1. Make value of control accessible via FormData
48
+ * 2. Run change handler
49
+ */
50
+ _mixinHandleChange(e) {
51
+ this._mixinSetFormValue();
52
+ this.inputValidationController.handleChange(e);
53
+ }
54
+ /**
55
+ * OnChange of form component
56
+ * 1. Make value of control accessible via FormData
57
+ * 2. Run input handler
58
+ */
59
+ _mixinHandleInputChange(e) {
60
+ this._mixinSetFormValue();
61
+ this.inputValidationController.handleInput(e);
62
+ }
63
+ /**
64
+ * During form resetting,
65
+ * 1. ValidityState is reset
66
+ * 2. invalid reactive prop is updated after the reset
67
+ * 3. Revalidates the ValidityState (but do not update invalid prop)
68
+ * to prepare for the next validity check
69
+ * 4. Reset touched state to false for a pristine form
70
+ */
71
+ _mixinResetValidity(input) {
72
+ this.inputValidationController.resetValidity();
73
+ this.inputValidationController.updateInvalidState();
74
+ this.inputValidationController.validateInput(input);
75
+ this._isTouched ? (this._isTouched = false) : null;
76
+ }
77
+ _mixinValidate(input) {
78
+ this.inputValidationController.validateInput(input);
79
+ }
80
+ _mixinSetFormValue() {
81
+ this.inputValidationController.setFormValue();
82
+ }
83
+ _mixinCheckValidity() {
84
+ return this.inputValidationController.checkValidity();
85
+ }
86
+ _mixinReportValidity() {
87
+ return this.inputValidationController.reportValidity();
88
+ }
89
+ _mixinGetValidity() {
90
+ return this.inputValidationController.validity;
91
+ }
92
+ _mixinGetValidationMessage() {
93
+ return this.inputValidationController.validationMessage;
94
+ }
95
+ }
96
+ ToBeValidatedElement.formAssociated = true;
97
+ __decorate([
98
+ queryAsync("sgds-input")
99
+ ], ToBeValidatedElement.prototype, "sgdsInput", void 0);
100
+ return ToBeValidatedElement;
101
+ };
102
+
103
+ export { SgdsFormValidatorMixin };
104
+ //# sourceMappingURL=validatorMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatorMixin.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.inputValidationController = new InputValidationController(this);\n }\n async firstUpdated(changedProperties) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") || (await this.sgdsInput) || this.shadowRoot.querySelector(\"textarea\");\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset\n * 2. invalid reactive prop is updated after the reset\n * 3. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check\n * 4. Reset touched state to false for a pristine form\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this.inputValidationController.validateInput(input);\n this._isTouched ? (this._isTouched = false) : null;\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n this.inputValidationController.setFormValue();\n }\n _mixinCheckValidity(): boolean {\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this.inputValidationController.validity;\n }\n _mixinGetValidationMessage(): string {\n return this.inputValidationController.validationMessage;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { css } from 'lit';
2
2
 
3
- var css_248z = css`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-1)}`;
3
+ var css_248z = css`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-1)}.form-text.disabled{opacity:var(--sgds-opacity-50)}`;
4
4
 
5
5
  export { css_248z as default };
6
6
  //# sourceMappingURL=form-hint.js.map
@@ -1,6 +1,6 @@
1
1
  import { css } from 'lit';
2
2
 
3
- var css_248z = css`.form-label{margin-bottom:0}.form-check-label,.form-label{color:var(--sgds-form-color)}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:not-allowed}`;
3
+ var css_248z = css`.form-label{color:var(--sgds-form-color);margin-bottom:0}.form-label.disabled{opacity:var(--sgds-opacity-50)}.form-check-label{color:var(--sgds-form-color)}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:not-allowed}`;
4
4
 
5
5
  export { css_248z as default };
6
6
  //# sourceMappingURL=form-label.js.map
package/themes/day.css CHANGED
@@ -13,7 +13,7 @@
13
13
  --sgds-default-color: var(--sgds-gray-900);
14
14
  --sgds-default-color-inverse: var(--sgds-gray-000);
15
15
  --sgds-default-color-muted: var(--sgds-gray-200);
16
- --sgds-default-color-subtle: var(--sgds-gray-400);
16
+ --sgds-default-color-subtle: var(--sgds-gray-500);
17
17
  --sgds-default-color-emphasis: var(--sgds-gray-800);
18
18
  --sgds-default-color-on-dark: var(--sgds-gray-000);
19
19
  --sgds-default-color-on-light: var(--sgds-gray-800);
package/themes/night.css CHANGED
@@ -5,8 +5,9 @@
5
5
  /* Semantic - Default Colors */
6
6
  --sgds-default-bg: var(--sgds-gray-900);
7
7
  --sgds-default-bg-muted: var(--sgds-gray-700);
8
- --sgds-default-bg-subtle: var(--sgds-gray-400);
9
- --sgds-default-bg-emphasis: var(--sgds-gray-800);
8
+ --sgds-default-bg-subtle: var(--sgds-gray-500);
9
+ --sgds-default-bg-emphasis: var(--sgds-gray-200);
10
+ --sgds-default-bg-overlay: oklch(from var(--sgds-gray-900) l c h / 0.4);
10
11
  --sgds-default-bg-translucent: oklch(from var(--sgds-gray-000) l c h / 0.1);
11
12
  --sgds-default-bg-translucent-subtle: oklch(from var(--sgds-gray-000) l c h / 0.1);
12
13
  --sgds-default-bg-transparent: transparent;
package/themes/root.css CHANGED
@@ -145,6 +145,7 @@
145
145
  --sgds-icon-size-lg: 1.5rem;
146
146
  --sgds-icon-size-xl: 2rem;
147
147
  --sgds-icon-size-2-xl: 3rem;
148
+ --sgds-icon-size-3-xl: 4rem;
148
149
 
149
150
  /* Primitive - Letter Spacing */
150
151
  --sgds-letter-spacing-tighter: -1px;
@@ -1,6 +1,10 @@
1
1
  import type SgdsButton from "../components/Button/sgds-button";
2
2
  import type { ReactiveController, ReactiveControllerHost } from "lit";
3
3
  import SgdsElement from "../base/sgds-element";
4
+ import { SgdsInput } from "../components";
5
+ /**
6
+ * A controller to help with form submission
7
+ */
4
8
  export declare class FormSubmitController implements ReactiveController {
5
9
  host?: ReactiveControllerHost & Element;
6
10
  form?: HTMLFormElement | null;
@@ -8,10 +12,10 @@ export declare class FormSubmitController implements ReactiveController {
8
12
  constructor(host: ReactiveControllerHost & Element, options?: Partial<FormSubmitControllerOptions>);
9
13
  hostConnected(): void;
10
14
  hostDisconnected(): void;
11
- handleFormData(event: FormDataEvent): void;
12
- handleFormSubmit(event: Event): void;
13
- handleFormReset(): void;
14
- reportFormValidity(): boolean;
15
+ /**
16
+ * Creates a temporary native HTML button that can participate in form and invoke form submits and reset
17
+ * Button is removed once action is performed
18
+ */
15
19
  doAction(type: "submit" | "reset", invoker?: HTMLInputElement | SgdsButton): void;
16
20
  /** Resets the form, restoring all the control to their default value */
17
21
  reset(invoker?: HTMLInputElement | SgdsButton): void;
@@ -21,21 +25,6 @@ export declare class FormSubmitController implements ReactiveController {
21
25
  export interface FormSubmitControllerOptions {
22
26
  /** A function that returns the form containing the form control. */
23
27
  form: (input: unknown) => HTMLFormElement | null;
24
- /** A function that returns the form control's name, which will be submitted with the form data. */
25
- name: (input: unknown) => string;
26
- /** A function that returns the form control's current value. */
27
- value: (input: unknown) => unknown | unknown[];
28
- /** A function that returns the form control's default value. */
29
- defaultValue: (input: unknown) => unknown | unknown[];
30
- /** A function that returns the form control's current disabled state. If disabled, the value won't be submitted. */
31
- disabled: (input: unknown) => boolean;
32
- /**
33
- * A function that maps to the form control's reportValidity() function. When the control is invalid, this will
34
- * prevent submission and trigger the browser's constraint violation warning.
35
- */
36
- reportValidity: (input: unknown) => boolean;
37
- /** A function that sets the form control's value */
38
- setValue: (input: unknown, value: unknown) => void;
39
28
  }
40
29
  export interface SgdsFormControl extends SgdsElement {
41
30
  name: string;
@@ -43,7 +32,7 @@ export interface SgdsFormControl extends SgdsElement {
43
32
  disabled?: boolean;
44
33
  defaultValue?: unknown;
45
34
  defaultChecked?: boolean;
46
- form?: string;
35
+ form?: HTMLFormElement;
47
36
  valid?: boolean;
48
37
  invalid?: boolean;
49
38
  pattern?: string;
@@ -53,4 +42,5 @@ export interface SgdsFormControl extends SgdsElement {
53
42
  required?: boolean;
54
43
  minlength?: number;
55
44
  maxlength?: number;
45
+ input?: HTMLInputElement | SgdsInput;
56
46
  }