peryl 1.5.2 → 1.5.4

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 (187) hide show
  1. package/README.md +31 -17
  2. package/demo/hsml-app-form-validation_demo.html +1 -0
  3. package/demo/hsml-app-form-validation_demo.ts +22 -23
  4. package/demo/hsml-app-form_demo.html +1 -0
  5. package/demo/hsml-app-form_demo.ts +24 -20
  6. package/demo/hsml-app-test_demo.ts +36 -41
  7. package/demo/hsml-app-tictactoe_demo.ts +17 -16
  8. package/demo/hsml-app_demo.html +1 -0
  9. package/demo/hsml-app_demo.ts +16 -16
  10. package/demo/hsml-appel_demo.html +7 -0
  11. package/demo/hsml-appel_demo.ts +47 -27
  12. package/demo/hsml-appi_demo.ts +15 -22
  13. package/demo/hsml_demo.ts +27 -22
  14. package/demo/js/hsml-app-js-happi_demo.html +28 -21
  15. package/demo/js/hsml-app-js_demo.html +15 -17
  16. package/dist/browser-esmodule/encode.js.map +1 -1
  17. package/dist/browser-esmodule/hsml-app.js +114 -123
  18. package/dist/browser-esmodule/hsml-app.js.map +1 -1
  19. package/dist/browser-esmodule/hsml-convert.js.map +1 -1
  20. package/dist/browser-esmodule/hsml-dom.js +3 -3
  21. package/dist/browser-esmodule/hsml-dom.js.map +1 -1
  22. package/dist/browser-esmodule/hsml-h.js.map +1 -1
  23. package/dist/browser-esmodule/hsml-html.js +2 -2
  24. package/dist/browser-esmodule/hsml-html.js.map +1 -1
  25. package/dist/browser-esmodule/hsml-idom.js +5 -5
  26. package/dist/browser-esmodule/hsml-idom.js.map +1 -1
  27. package/dist/browser-esmodule/hsml.js.map +1 -1
  28. package/dist/browser-esmodule/http.js.map +1 -1
  29. package/dist/browser-esmodule/index.js +118 -127
  30. package/dist/browser-esmodule/index.js.map +1 -1
  31. package/dist/browser-esmodule/router.js.map +1 -1
  32. package/dist/browser-umd/encode.js +1 -1
  33. package/dist/browser-umd/encode.js.map +1 -1
  34. package/dist/browser-umd/hsml-app.js +1 -1
  35. package/dist/browser-umd/hsml-app.js.map +1 -1
  36. package/dist/browser-umd/hsml-convert.js.map +1 -1
  37. package/dist/browser-umd/hsml-dom.js +1 -1
  38. package/dist/browser-umd/hsml-dom.js.map +1 -1
  39. package/dist/browser-umd/hsml-h.js.map +1 -1
  40. package/dist/browser-umd/hsml-html.js +1 -1
  41. package/dist/browser-umd/hsml-html.js.map +1 -1
  42. package/dist/browser-umd/hsml-idom.js +1 -1
  43. package/dist/browser-umd/hsml-idom.js.map +1 -1
  44. package/dist/browser-umd/hsml.js.map +1 -1
  45. package/dist/browser-umd/http.js +1 -1
  46. package/dist/browser-umd/http.js.map +1 -1
  47. package/dist/browser-umd/index.js +1 -1
  48. package/dist/browser-umd/index.js.map +1 -1
  49. package/dist/browser-umd/router.js +1 -1
  50. package/dist/browser-umd/router.js.map +1 -1
  51. package/dist/browser-umd/validators-moment.js +1 -1
  52. package/dist/browser-umd/validators-moment.js.map +1 -1
  53. package/dist/browser-umd/validators-numeral.js.map +1 -1
  54. package/dist/demo/encode_demo.ce182166.js.map +1 -1
  55. package/dist/demo/encode_demo.f40a44eb.js.map +1 -1
  56. package/dist/demo/hsml-app-form-validation_demo.8e406f15.js +2 -0
  57. package/dist/demo/hsml-app-form-validation_demo.8e406f15.js.map +1 -0
  58. package/dist/demo/hsml-app-form-validation_demo.9a95cff3.js +2 -0
  59. package/dist/demo/hsml-app-form-validation_demo.9a95cff3.js.map +1 -0
  60. package/dist/demo/hsml-app-form-validation_demo.c6856b02.js +2 -0
  61. package/dist/demo/hsml-app-form-validation_demo.c6856b02.js.map +1 -0
  62. package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js +2 -0
  63. package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js.map +1 -0
  64. package/dist/demo/hsml-app-form-validation_demo.html +1 -1
  65. package/dist/demo/hsml-app-form_demo.950b2a09.js +2 -0
  66. package/dist/demo/hsml-app-form_demo.950b2a09.js.map +1 -0
  67. package/dist/demo/hsml-app-form_demo.ea3af725.js +2 -0
  68. package/dist/demo/hsml-app-form_demo.ea3af725.js.map +1 -0
  69. package/dist/demo/hsml-app-form_demo.html +1 -1
  70. package/dist/demo/hsml-app-test_demo.36a210b8.js +2 -0
  71. package/dist/demo/hsml-app-test_demo.36a210b8.js.map +1 -0
  72. package/dist/demo/hsml-app-test_demo.6ab4ea94.js +2 -0
  73. package/dist/demo/hsml-app-test_demo.6ab4ea94.js.map +1 -0
  74. package/dist/demo/hsml-app-test_demo.html +1 -1
  75. package/dist/demo/hsml-app-tictactoe_demo.7a91c368.js +2 -0
  76. package/dist/demo/hsml-app-tictactoe_demo.7a91c368.js.map +1 -0
  77. package/dist/demo/hsml-app-tictactoe_demo.97905c2f.js +2 -0
  78. package/dist/demo/hsml-app-tictactoe_demo.97905c2f.js.map +1 -0
  79. package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
  80. package/dist/demo/hsml-app_demo.b5c1d27d.js +2 -0
  81. package/dist/demo/hsml-app_demo.b5c1d27d.js.map +1 -0
  82. package/dist/demo/hsml-app_demo.bbebbbcf.js +2 -0
  83. package/dist/demo/hsml-app_demo.bbebbbcf.js.map +1 -0
  84. package/dist/demo/hsml-app_demo.html +1 -1
  85. package/dist/demo/hsml-appel_demo.4d9e135c.js +2 -0
  86. package/dist/demo/hsml-appel_demo.4d9e135c.js.map +1 -0
  87. package/dist/demo/hsml-appel_demo.7ddb6fb3.js +2 -0
  88. package/dist/demo/hsml-appel_demo.7ddb6fb3.js.map +1 -0
  89. package/dist/demo/hsml-appel_demo.html +1 -1
  90. package/dist/demo/hsml-appi_demo.e5e28a65.js +2 -0
  91. package/dist/demo/hsml-appi_demo.e5e28a65.js.map +1 -0
  92. package/dist/demo/hsml-appi_demo.fef950c1.js +2 -0
  93. package/dist/demo/hsml-appi_demo.fef950c1.js.map +1 -0
  94. package/dist/demo/hsml-appi_demo.html +1 -1
  95. package/dist/demo/hsml-convert_demo.0ea1fa3b.js.map +1 -1
  96. package/dist/demo/hsml-convert_demo.63e3e7b5.js.map +1 -1
  97. package/dist/demo/{hsml_demo.ff950ba1.js → hsml_demo.a248689a.js} +2 -2
  98. package/dist/demo/hsml_demo.a248689a.js.map +1 -0
  99. package/dist/demo/hsml_demo.eb3b08be.js +2 -0
  100. package/dist/demo/hsml_demo.eb3b08be.js.map +1 -0
  101. package/dist/demo/hsml_demo.html +1 -1
  102. package/dist/demo/http_demo.3e7da3d8.js.map +1 -1
  103. package/dist/demo/http_demo.8e435f23.js.map +1 -1
  104. package/dist/demo/i18n_demo.html +1 -1
  105. package/dist/demo/router_demo.3cfa03aa.js.map +1 -1
  106. package/dist/demo/router_demo.89ab1681.js.map +1 -1
  107. package/dist/demo/{validators_demo.252e13a6.js → validators_demo.90ff6001.js} +2 -2
  108. package/dist/demo/validators_demo.90ff6001.js.map +1 -0
  109. package/dist/demo/{validators_demo.66893723.js → validators_demo.ef5b2dea.js} +2 -2
  110. package/dist/demo/validators_demo.ef5b2dea.js.map +1 -0
  111. package/dist/demo/validators_demo.html +1 -1
  112. package/dist/encode.js +1 -1
  113. package/dist/encode.js.map +1 -1
  114. package/dist/hsml-app.d.ts +63 -42
  115. package/dist/hsml-app.js +110 -117
  116. package/dist/hsml-app.js.map +1 -1
  117. package/dist/hsml-convert.d.ts +3 -3
  118. package/dist/hsml-convert.js.map +1 -1
  119. package/dist/hsml-dom.d.ts +2 -2
  120. package/dist/hsml-dom.js +3 -3
  121. package/dist/hsml-dom.js.map +1 -1
  122. package/dist/hsml-h.d.ts +8 -8
  123. package/dist/hsml-h.js.map +1 -1
  124. package/dist/hsml-html.d.ts +4 -4
  125. package/dist/hsml-html.js +2 -2
  126. package/dist/hsml-html.js.map +1 -1
  127. package/dist/hsml-idom.d.ts +2 -2
  128. package/dist/hsml-idom.js +5 -5
  129. package/dist/hsml-idom.js.map +1 -1
  130. package/dist/hsml.d.ts +26 -27
  131. package/dist/hsml.js.map +1 -1
  132. package/dist/http.js +1 -1
  133. package/dist/http.js.map +1 -1
  134. package/dist/router.js +1 -1
  135. package/dist/router.js.map +1 -1
  136. package/package.json +8 -8
  137. package/src/hsml-app.ts +305 -197
  138. package/src/hsml-convert.ts +8 -8
  139. package/src/hsml-dom.ts +18 -18
  140. package/src/hsml-h.ts +10 -10
  141. package/src/hsml-html.ts +19 -19
  142. package/src/hsml-idom.ts +25 -25
  143. package/src/hsml.ts +46 -143
  144. package/demo/hsml-appc_demo.html +0 -16
  145. package/demo/hsml-appc_demo.ts +0 -49
  146. package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
  147. package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
  148. package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
  149. package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
  150. package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
  151. package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
  152. package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
  153. package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
  154. package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
  155. package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
  156. package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
  157. package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
  158. package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
  159. package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
  160. package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
  161. package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
  162. package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
  163. package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
  164. package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
  165. package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
  166. package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
  167. package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
  168. package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
  169. package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
  170. package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
  171. package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
  172. package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
  173. package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
  174. package/dist/demo/hsml-appc_demo.html +0 -1
  175. package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
  176. package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
  177. package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
  178. package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
  179. package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
  180. package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
  181. package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
  182. package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
  183. package/dist/demo/hsml_demo.33f28c29.js +0 -2
  184. package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
  185. package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
  186. package/dist/demo/validators_demo.252e13a6.js.map +0 -1
  187. package/dist/demo/validators_demo.66893723.js.map +0 -1
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/encode.ts","demo/encode_demo.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n","import { UrlEncodedData, Base64 } from \"../src/encode\";\n\n\n// UrlEncodedData\nconst dataObj = {text: \"Hello World!\", num: 5, a: [1, 2, \"33\"]};\nconsole.log(dataObj);\n\nconst encodedData = UrlEncodedData.encode(dataObj);\nconsole.log(\"UrlEncodedData encode: \", encodedData,\n encodedData === \"text=Hello%20World!&num=5&a=1&a=2&a=33\");\n\nconst decodedData = UrlEncodedData.decode(encodedData);\nconsole.log(\"UrlEncodedData decode: \", JSON.stringify(decodedData),\n JSON.stringify(decodedData) === `{\"text\":\"Hello World!\",\"num\":\"5\",\"a\":[\"1\",\"2\",\"33\"]}`);\n\n\n// Base64\nconst dataStr = \"Hello World!\";\nconsole.log(dataStr);\n\nconst encodedString = Base64.encode(dataStr);\nconsole.log(\"Base64 encode: \", encodedString, encodedString === \"SGVsbG8gV29ybGQh\");\n\nconst decodedString = Base64.decode(encodedString);\nconsole.log(\"Base64 decode: \", decodedString, decodedString === \"Hello World!\");\n"],"names":["$161bee74d05bfaa4$export$650092b01c62e427","static","data","prefix","str","params","size","key","hasOwnProperty","value","Array","valueLength","length","i","val","arguments","callee","encodeURIComponent","join","split","paramsLength","j","parameter","decodeURIComponent","path","obj","property","o","push","$161bee74d05bfaa4$export$f436b0c2107cbd35","e","n","r","s","u","a","t","f","_utf8_encode","charCodeAt","isNaN","_keyStr","charAt","replace","this","indexOf","String","fromCharCode","_utf8_decode","c1","c2","$483fa1c38fcc1bf2$var$dataObj","text","num","console","log","$483fa1c38fcc1bf2$var$encodedData","encode","$483fa1c38fcc1bf2$var$decodedData","decode","JSON","stringify","$483fa1c38fcc1bf2$var$dataStr","$483fa1c38fcc1bf2$var$encodedString","$483fa1c38fcc1bf2$var$decodedString"],"version":3,"file":"encode_demo.f40a44eb.js.map"}
1
+ {"mappings":"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","sources":["src/encode.ts","demo/encode_demo.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n","import { UrlEncodedData, Base64 } from \"../src/encode\";\n\n\n// UrlEncodedData\nconst dataObj = {text: \"Hello World!\", num: 5, a: [1, 2, \"33\"]};\nconsole.log(dataObj);\n\nconst encodedData = UrlEncodedData.encode(dataObj);\nconsole.log(\"UrlEncodedData encode: \", encodedData,\n encodedData === \"text=Hello%20World!&num=5&a=1&a=2&a=33\");\n\nconst decodedData = UrlEncodedData.decode(encodedData);\nconsole.log(\"UrlEncodedData decode: \", JSON.stringify(decodedData),\n JSON.stringify(decodedData) === `{\"text\":\"Hello World!\",\"num\":\"5\",\"a\":[\"1\",\"2\",\"33\"]}`);\n\n\n// Base64\nconst dataStr = \"Hello World!\";\nconsole.log(dataStr);\n\nconst encodedString = Base64.encode(dataStr);\nconsole.log(\"Base64 encode: \", encodedString, encodedString === \"SGVsbG8gV29ybGQh\");\n\nconst decodedString = Base64.decode(encodedString);\nconsole.log(\"Base64 decode: \", decodedString, decodedString === \"Hello World!\");\n"],"names":["$161bee74d05bfaa4$export$650092b01c62e427","static","data","prefix","str","params","size","key","hasOwnProperty","value","Array","valueLength","length","i","val","arguments","callee","encodeURIComponent","join","split","paramsLength","j","parameter","decodeURIComponent","path","obj","property","o","push","$161bee74d05bfaa4$export$f436b0c2107cbd35","e","n","r","s","u","a","t","f","_utf8_encode","charCodeAt","isNaN","_keyStr","charAt","replace","this","indexOf","String","fromCharCode","_utf8_decode","c1","c2","$483fa1c38fcc1bf2$var$dataObj","text","num","console","log","$483fa1c38fcc1bf2$var$encodedData","encode","$483fa1c38fcc1bf2$var$decodedData","decode","JSON","stringify","$483fa1c38fcc1bf2$var$dataStr","$483fa1c38fcc1bf2$var$encodedString","$483fa1c38fcc1bf2$var$decodedString"],"version":3,"file":"encode_demo.f40a44eb.js.map"}
@@ -0,0 +1,2 @@
1
+ function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},a=e.parcelRequirede31;null==a&&((a=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var a={id:t,exports:{}};return n[t]=a,e.call(a.exports,a,a.exports),a.exports}var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}).register=function(t,e){i[t]=e},e.parcelRequirede31=a);var r=a("enc1X"),s={};t(s,"HAppActions",(function(){return h}),(function(t){return h=t})),t(s,"HDispatchScopes",(function(){return p}),(function(t){return p=t})),t(s,"happ",(function(){return _}),(function(t){return _=t})),t(s,"HApp",(function(){return O}),(function(t){return O=t})),t(s,"happel",(function(){return y}),(function(t){return y=t}));var o=a("hrCkK"),l=function(t,e,n,i){return new(n||(n=Promise))((function(a,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function o(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}l((i=i.apply(t,e||[])).next())}))};const d=console.log,u=console.error,c=console.warn;var h,m,p,v;(m=h||(h={})).init="happ-init",m.mount="happ-mount",m.umount="happ-umount",m.update="happ-update",m.action="happ-action",m.attribute="happ-attribute",(v=p||(p={})).element="element",v.window="window";const b=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},f=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},g="action:",w="dispatch:",j="render:",x="happ";function _(t){return new O(t.state,t.view,t.dispatcher,t.element,t.debug,t.name)}function y(t){customElements.define(`${x}-${t.name}`,class extends HTMLElement{static get observedAttributes(){return t.attributes}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch(h.attribute,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new O(t.state,t.view,t.dispatcher,void 0,t.debug,t.name,t.attributes),this._happel.customElement=this}})}class O{_dispatchAction(t,e,n,i){return l(this,void 0,void 0,(function*(){if(this.debug){d(this.name,g,{type:t,data:e,event:n});const a=performance.now();yield this._dispatch(t,e,n,i);const r=performance.now();d(this.name,w,r-a+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return l(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){u(this.name,w,t)}}))}windowDispatchOn(){this._windowEventListener?c("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener(h.action,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(h.action,this._windowEventListener)}_updateDom(t,e,n){if(this.debug){const i=performance.now();(0,o.hsmls2idomPatch)(t,e,n);const a=performance.now();d(this.name,"update:",a-i+" ms",t)}else(0,o.hsmls2idomPatch)(t,e,n)}constructor(t,e,n,i,a,r,s){this.refs={},this.dispatch=(t,e,n)=>l(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>l(this,void 0,void 0,(function*(){this.customElement&&S(this.customElement,h.action,{type:t,data:e}),!this.customElement&&this.element&&S(this.element,h.action,{type:t,data:e})})),this._dispatchWindow=(t,e)=>l(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(h.action,{detail:{type:t,data:e}}))})),this.render=()=>{if(this.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){u(this.name,j,t)}const n=performance.now();return d(this.name,j,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){u(this.name,j,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=q(n[t]);if("object"==typeof e){const a=Object.keys(e);if(a.length){const r=a[0],s=e[r];void 0===i[r]?i[r]=s:"string"==typeof i[r]||i[r]instanceof String?i[r]=s instanceof Array?[i[r],...s]:[i[r],s]:i[r]instanceof Array?s instanceof Array?i[r]=i[r].concat(s):i[r].push(s):i[r]=s instanceof Array?[i[r],...s]:[i[r],s],i[r]instanceof Array&&(i[r]=i[r].filter((t=>null!==t)),"radio"===n[t].type&&(i[r]=i[r].length?i[r][0]:null))}}}return i}return q(e)}(n)),this._dispatchAction(t,e,n)},this.mount=t=>{const e="string"==typeof t?document.getElementById(t):t;if(e&&e[x]){e[x].umount()}if(e&&!this.element){this.element=e,e[x]=this;const t=this.render();this._updateDom(e,t,this),this._dispatchAction(h.mount,this.element)}return this},this.umount=()=>{if(this.element){this._dispatchAction(h.umount,this.element),this.element.hasAttribute(x)&&this.element.removeAttribute(x);const t=this.element.querySelectorAll(`[${x}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);delete this.element.happ,this.element=void 0}return this},this.update=()=>(this.element&&!this._updateSched&&(this._updateSched=b((()=>{if(this.element){const t=this.render();this._updateDom(this.element,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.element){if(!this._updateSched)return["div",{skip:!0}];f(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.element||(this.element=t,t.happ=this,this._dispatchAction(h.mount,this.element))})),["div",t]},this.toHtml=()=>this.element?this.element.outerHTML:"",this.debug=null!=a&&a,this.name=null!=r?r:x,this.attributes=null!=s?s:[],this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>l(this,void 0,void 0,(function*(){return d(this.name,g,t.type,t.data)})),this._dispatchAction(h.init,this).then((()=>i&&this.mount(i)))}}function S(t,e,n){var i,a;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(a=(i=t)[`on${e}`])||void 0===a||a.call(i,new CustomEvent(e,{detail:n}))}function q(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const a=t;e=a.name?{[a.name]:a.value}:a.value;break;case"BUTTON":const r=t;e=r.name?{[r.name]:r.value}:r.value}return e}const D="required",T="not_in_range",k="invalid_format";class E{validate(t){if("string"==typeof t||null==t){const e=t;this.str=e;const n=this.strToObj(e);if(this.obj=n.obj,n.err)return this.err=n.err,{str:null!=e?e:"",obj:n.obj,err:n.err};const i=this.objCheck(n.obj);return this.err=i,{str:null!=e?e:"",obj:n.obj,err:i}}{this.str=null==t?null:""+t;const e=this.objCheck(t);return this.err=e,{str:this.str,obj:t,err:e}}}format(t,e){var n;const i=this.objToStr(t,e);return{str:null!==(n=i.str)&&void 0!==n?n:"",err:i.err}}constructor(t,e){this.str=null,this.err=null,this.obj=null,this.opts=null!=t?t:{},this.msgs=null!=e?e:{}}}function A(t,e){return Object.keys(e).map((t=>[t,e[t]])).reduce(((t,e)=>t.replace(new RegExp(`\\{\\{${e[0]}\\}\\}`,"g"),String(e[1]))),t)}class N extends E{strToObj(t){const e=this.opts,n=this.msgs;return"required"in e&&e.required&&!t?{obj:null,err:n.required?A(n.required,Object.assign(Object.assign({},e.data),{options:"options"in e?e.options.join(", "):""})):D}:{obj:void 0===t?null:t,err:""}}objCheck(t){if(null==t)return"";const e=this.opts,n=this.msgs;return"options"in e&&t&&-1===e.options.indexOf(t)?n.invalid_option?A(n.invalid_option,Object.assign(Object.assign({},e.data),{option:null===t?"":t,options:"options"in e?e.options.join(", "):""})):"invalid_option":""}objToStr(t,e){return{str:null!=t?t:"",err:""}}constructor(t,e){super(t,e)}}class C extends E{strToObj(t){var e,n,i,a;const r=this.opts,s=this.msgs;return"required"in r&&r.required&&!t?{obj:null,err:s.required?A(s.required,Object.assign(Object.assign({},r.data),{min:"min"in r?""+(null!==(e=r.min)&&void 0!==e?e:""):"",max:"max"in r?""+(null!==(n=r.max)&&void 0!==n?n:""):"",regexp:"regexp"in r?""+(null!==(i=r.regexp)&&void 0!==i?i:""):""})):D}:t?"regexp"in r&&!r.regexp.test(t)?{obj:null,err:s.invalid_format?A(s.invalid_format,Object.assign(Object.assign({},r.data),{regexp:"regexp"in r?""+(null!==(a=r.regexp)&&void 0!==a?a:""):""})):k}:{obj:t,err:""}:{obj:null,err:""}}objCheck(t){var e,n;if(null==t)return"";const i=this.opts,a=this.msgs;let r=!1;return"max"in i&&t.length>i.max&&(r=!0),"min"in i&&t.length<i.min&&(r=!0),"min"in i&&"max"in i&&t.length>i.max&&t.length<i.min&&(r=!0),r?a.not_in_range?A(a.not_in_range,Object.assign(Object.assign({},i.data),{min:"min"in i?""+(null!==(e=i.min)&&void 0!==e?e:""):"",max:"max"in i?""+(null!==(n=i.max)&&void 0!==n?n:""):""})):T:""}objToStr(t,e){return{str:null!=t?t:"",err:""}}constructor(t,e){super(t,e)}}class L extends E{strToObj(t){var e,n,i;const a=this.opts,r=this.msgs;if("required"in a&&a.required&&!t)return{obj:null,err:r.required?A(r.required,Object.assign(Object.assign({},a.data),{min:"min"in a?""+(null!==(e=a.min)&&void 0!==e?e:""):"",max:"max"in a?""+(null!==(n=a.max)&&void 0!==n?n:""):""})):D};if(t){const e=Number(t);let n=!1;if(isNaN(e)&&(n=!0),a.strict&&t!==this.objToStr(e).str&&(n=!0),n){const t=isNaN(e)?1234.45:e;return{obj:isNaN(e)?null:e,err:r.invalid_format?A(r.invalid_format,Object.assign(Object.assign({},a.data),{num:null!==(i=this.objToStr(t).str)&&void 0!==i?i:""})):k}}return{obj:e,err:""}}return{obj:null,err:""}}objCheck(t){var e,n;if(null==t)return"";const i=this.opts,a=this.msgs;let r=!1;return"max"in i&&t>i.max&&(r=!0),"min"in i&&t<i.min&&(r=!0),r?a.not_in_range?A(a.not_in_range,Object.assign(Object.assign({},i.data),{min:"min"in i?""+(null!==(e=i.min)&&void 0!==e?e:""):"",max:"max"in i?""+(null!==(n=i.max)&&void 0!==n?n:""):""})):T:""}objToStr(t,e){let n;return n=null==t?"":"decimals"in this.opts?t.toFixed(this.opts.decimals):String(t),{str:n,err:""}}constructor(t,e){super(t,e)}}const F=t=>t.toLocaleString(),R=t=>t.toLocaleDateString(),I=t=>t.toISOString(),M=t=>new Date(t.toDateString()).toISOString();class H extends E{strToObj(t){var e;const n=this.opts,i=this.msgs;if("required"in n&&n.required&&!t)return{obj:null,err:i.required?A(i.required,Object.assign(Object.assign({},n.data),{min:"min"in n&&n.min?this.dateToStr(n.min):"",max:"max"in n&&n.max?this.dateToStr(n.max):""})):D};if(t){const a=Date.parse(t);let r=new Date(a);n.dateOnly&&(r=new Date(r.getFullYear(),r.getMonth(),r.getDate()));let s=!1;if(isNaN(a)&&(s=!0),s){const t=isNaN(a)?new Date:r;return{obj:isNaN(a)?null:r,err:i.invalid_format?A(i.invalid_format,Object.assign(Object.assign({},n.data),{date:null!==(e=this.objToStr(t).str)&&void 0!==e?e:""})):k}}return{obj:r,err:""}}return{obj:null,err:""}}objCheck(t){if(null==t)return"";const e=this.opts,n=this.msgs;let i=!1;return"max"in e&&e.max&&t.getTime()>e.max.getTime()&&(i=!0),"min"in e&&e.min&&t<e.min&&(i=!0),i?n.not_in_range?A(n.not_in_range,Object.assign(Object.assign({},e.data),{min:"min"in e&&e.min?this.dateToStr(e.min):"",max:"max"in e&&e.max?this.dateToStr(e.max):""})):T:""}objToStr(t,e){return{str:null==t?"":this.dateToStr(t),err:""}}constructor(t,e){super(t,e),(null==t?void 0:t.iso)?this.dateToStr=(null==t?void 0:t.dateOnly)?M:I:this.dateToStr=(null==t?void 0:t.dateOnly)?R:F,(null==t?void 0:t.dateOnly)&&(null==t?void 0:t.min)&&(t.min=new Date(t.min.getFullYear(),t.min.getMonth(),t.min.getDate())),(null==t?void 0:t.dateOnly)&&(null==t?void 0:t.max)&&(t.max=new Date(t.max.getFullYear(),t.max.getMonth(),t.max.getDate()+1))}}class V extends E{strToObj(t){const e=this.opts,n=this.msgs;if("required"in e&&e.required&&!t)return{obj:null,err:n.required?A(n.required,Object.assign({},e.data)):D};let i;switch(t){case"true":case"1":case"on":case"yes":i=!0;break;default:i=!1}return{obj:i,err:""}}objCheck(t){var e;if(null==t)return"";const n=this.opts,i=this.msgs;let a=!1;return"value"in n&&t!==n.value&&(a=!0),a?i.invalid_value?A(i.invalid_value,Object.assign(Object.assign({},n.data),{value:"value"in n?""+(null!==(e=n.value)&&void 0!==e?e:""):""})):"invalid_value":""}objToStr(t,e){return{str:null==t?"":""+t,err:""}}constructor(t,e){super(t,e)}}class P{addValidator(t,e){return this.validators[t]=e,this}validate(t){const e=Object.keys(this.validators).reduce(((e,n)=>{const i=t[n],a=this.validators[n].validate(i);return e.str[n]=a.str,e.obj[n]=a.obj,e.err[n]=a.err,a.err&&(e.valid=!1),e}),{str:{},obj:{},err:{},valid:!0});return this.str=e.str,this.obj=e.obj,this.err=e.err,this.valid=e.valid,this}format(t){const e=Object.keys(this.validators).reduce(((e,n)=>{const i=t[n],a=this.validators[n].format(i);return e.str[n]=a.str,e.obj[n]=i,e.err[n]=a.err,a.err&&(e.valid=!1),e}),{str:{},obj:{},err:{},valid:!0});return this.str=e.str,this.obj=e.obj,this.err=e.err,this.valid=e.valid,this}data(){return{str:this.str,obj:this.obj,err:this.err,valid:this.valid}}constructor(){this.validators={}}}var $=function(t,e,n,i){return new(n||(n=Promise))((function(a,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function o(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}l((i=i.apply(t,e||[])).next())}))};var U,Y;(Y=U||(U={})).change="form-validation-change",Y.submit="form-validation-submit";let B;function J(t){if(!t)return"";if(0===-t.getTimezoneOffset())return t.toISOString();{const e=function(t,e=2){return String(t).padStart(e,"0")};return t.getFullYear()+"-"+e(t.getMonth()+1)+"-"+e(t.getDate())+"T"+e(t.getHours())+":"+e(t.getMinutes())}}new(0,s.HApp)((function(){return{title:"Form Validation",data:{name:"Ema",born:new Date,children:0,married:!1,gender:"female",sport:"gymnastics"},genders:[{label:"Male",value:"male"},{label:"Female",value:"female"}],sports:["football","gymnastics"]}}),(function(t){return[["div.w3-content",[["h1",t.title],["form.w3-container",{on:[["change",U.change],["submit",U.submit]]},[["p",[["label",["Name",["input.w3-input",{type:"text",name:"name",value:t.validatorData.str.name,on:["input",U.change]}]]]]],["p.w3-text-red",[t.validatorData.err.name]],["p",[["label",["Born",["input.w3-input",{type:"datetime-local",name:"born",value:J(t.validatorData.obj.born)}]]]]],["p.w3-text-red",[t.validatorData.err.born]],["p",[["label",["Children",["input.w3-input",{type:"number",name:"children",value:t.validatorData.str.children}]]]]],["p.w3-text-red",[t.validatorData.err.children]],["p",[["label",[["input.w3-check",{type:"checkbox",name:"married",checked:t.validatorData.obj.married}]," Married"]]]],["p.w3-text-red",[t.validatorData.err.married]],["p",(0,r.hjoin)(t.genders.map((e=>["label",[["input.w3-radio",{type:"radio",name:"gender",value:e.value,checked:t.validatorData.obj.gender===e.value}]," ",e.label]])),["br"])],["p.w3-text-red",[t.validatorData.err.gender]],["p",[["select.w3-select",{name:"sport"},[["option",{value:"",disabled:!0,selected:!0},"Sport"],...t.sports.map((e=>["option",{value:e,selected:e===t.validatorData.obj.sport},e]))]]]],["p.w3-text-red",t.validatorData.err.sport],["button.w3-btn.w3-blue","Submit"]]]]]]}),(function(t,e){return $(this,void 0,void 0,(function*(){switch(console.log("action",t),t.type){case s.HAppActions.init:n=e,B=(new P).addValidator("name",new C({required:!0,min:3,max:5},{required:"Required {{min}} - {{max}} {{regexp}}",invalid_format:"Invalid format {{regexp}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("born",new H({required:!0,max:new Date,dateOnly:!1,iso:!0},{required:"Required {{min}} - {{max}}",invalid_format:"Invalid format {{date}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("children",new L({required:!0,min:0,max:10},{required:"Required {{min}} - {{max}}",invalid_format:"Invalid format, use format {{num}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("gender",new N({required:!0,options:n.genders.map((t=>t.value))},{required:"Required {{options}}",invalid_option:"Invalod option {{option}} {{options}}"})).addValidator("married",new V({required:!0},{required:"Required",invalid_value:"Invalid value {{value}}"})).addValidator("sport",new N({required:!0,options:n.sports},{required:"Required {{options}}",invalid_option:"Invalod option {{option}} {{options}}"})).format(n.data),e.validatorData=B.data();break;case U.change:B.validate(Object.assign(Object.assign({},e.validatorData.str),t.data)),e.validatorData=B.data(),console.log("obj:",JSON.stringify(e.validatorData,null,4));break;case U.submit:if(t.event.preventDefault(),B.validate(t.data),e.validatorData=B.data(),e.validatorData=B.data(),B.valid){console.log(B),e.data=B.obj;const t=JSON.stringify(e.data,null,4);console.dir(t),alert(`Form submit: \n${t}`)}}var n}))}),"app");
2
+ //# sourceMappingURL=hsml-app-form-validation_demo.8e406f15.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/hsml-app.ts","src/validators.ts","demo/hsml-app-form-validation_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\n\nexport type HState<State> = () => State;\n\nexport type HView<State, HActionType extends string> = (\n state: State\n) => HElements<HActionType>;\n\nexport type HView1<State, HActionType extends string> = (\n state: State\n) => HElement<HActionType>;\n\nexport type HAppActionType =\n | \"happ-init\"\n | \"happ-mount\"\n | \"happ-umount\"\n | \"happ-update\"\n | \"happ-action\"\n | \"happ-attribute\";\n\nexport enum HAppActions {\n init = \"happ-init\",\n mount = \"happ-mount\",\n umount = \"happ-umount\",\n update = \"happ-update\",\n action = \"happ-action\",\n attribute = \"happ-attribute\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType | HAppActionType | HAppActions;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatchScope =\n | \"element\"\n | \"window\";\n\nexport enum HDispatchScopes {\n element = \"element\",\n window = \"window\"\n}\n\nexport type HDispatch<HActionType extends string> = (\n type: HAction<HActionType>[\"type\"],\n data?: HAction<HActionType>[\"data\"],\n scope?: HDispatchScope | HDispatchScopes\n) => Promise<void>;\n\nexport type HDispatcher<State, HActionType extends string> = (\n // this: HApp<State, HActionType>,\n action: HAction<HActionType>,\n state: State,\n dispatch: HDispatch<HActionType>\n) => Promise<void>;\n\nconst schedule = window.requestAnimationFrame ||\n // window.webkitRequestAnimationFrame ||\n // (window as any).mozRequestAnimationFrame ||\n // (window as any).oRequestAnimationFrame ||\n // (window as any).msRequestAnimationFrame ||\n function (callback: Function) { window.setTimeout(callback, 1000 / 60); };\n\nconst unschedule = window.cancelAnimationFrame ||\n // window.webkitCancelAnimationFrame ||\n // (window as any).mozCancelAnimationFrame ||\n // (window as any).oCancelAnimationFrame ||\n // (window as any).msCancelAnimationFrame ||\n function (handle: number) { window.clearTimeout(handle); };\n\nconst msgAction = \"action:\";\nconst msgDispatch = \"dispatch:\";\nconst msgRender = \"render:\";\nconst msgUpdate = \"update:\";\n\nconst HAPP = \"happ\";\n\nexport interface HAppI<State, HActionType extends string> {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element?: Element | string | null;\n debug?: boolean;\n name?: string;\n attributes?: string[];\n}\n\n/**\n * HApp definition\n *\n * @param hAppI HApp definition\n * @returns HApp instance\n */\nexport function happ<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element: Element | string | null;\n debug?: boolean;\n name?: string;\n // attributes?: string[];\n}) {\n return new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n hAppI.element,\n hAppI.debug,\n hAppI.name\n // hAppI!.attributes\n );\n}\n\n// export type Class<T = object> = new (...args: any[]) => T;\n\n// export function happi<State, HActionType extends string>(\n// hAppI: Class<HAppI<State, HActionType>>,\n// element?: Element | string | null,\n// debug? boolean,\n// name?: string,\n// attributes: string[]\n// ) {\n// const hapi = new hAppI();\n// return new HApp<State, HActionType>(\n// hapi.state,\n// hapi.view,\n// hapi.dispatcher,\n// element,\n// debug\n// );\n// }\n\n// HAppEl\n\n/**\n * HApp custom HTML element definition.\n *\n * @param hAppI HApp definition\n */\nexport function happel<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n /** Element suffix name, element name patern is `happ-${name}` */\n name: string;\n /** Element attribute list */\n attributes: string[];\n debug?: boolean;\n}): void {\n customElements.define(\n `${HAPP}-${hAppI.name}`,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return hAppI.attributes;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n undefined,\n hAppI.debug,\n hAppI.name,\n hAppI.attributes\n );\n (this._happel as any).customElement = this;\n }\n\n connectedCallback() {\n // this._happel.mount(this);\n this.attachShadow({ mode: \"open\" });\n this._happel.mount(this.shadowRoot as any);\n }\n\n disconnectedCallback() {\n this._happel.umount();\n }\n\n adoptedCallback() {\n this._happel.update();\n }\n\n attributeChangedCallback(\n attrName: string,\n oldVal: string | null,\n newVal: string | null\n ) {\n this._happel.dispatch(HAppActions.attribute, {\n attrName,\n oldVal,\n newVal,\n });\n }\n }\n );\n}\n\n/**\n * HSML App\n */\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n debug: boolean;\n\n readonly name: string;\n readonly attributes: string[];\n\n readonly element?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowEventListener?: (event: Event) => void;\n\n constructor(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher?: HDispatcher<State, HActionType>,\n element?: Element | string | null,\n debug?: boolean ,\n name?: string,\n attributes?: string[]\n ) {\n this.debug = debug ?? false;\n this.name = name ?? HAPP;\n this.attributes = attributes ?? [];\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(this.name, msgAction, a.type, a.data));\n this._dispatchAction(HAppActions.init, this).then(() => element && this.mount(element));\n }\n\n dispatch: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any,\n scope?: HDispatchScope\n ): Promise<void> => {\n return this._dispatchAction(type, data, undefined, scope);\n }\n\n // onDispatch = (dispatcher: HDispatcher<State>): this => {\n // this._onDispatch = dispatcher;\n // return this;\n // }\n\n private async _dispatchAction(\n type: HActionType | HAppActionType,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (this.debug) {\n log(this.name, msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n log(this.name, msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event, scope);\n }\n }\n\n private async _dispatch(\n type: HActionType | HAppActionType,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n this.update();\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n } catch (e) {\n error(this.name, msgDispatch, e);\n }\n }\n\n private _dispatchElement: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any\n ): Promise<void> => {\n this.customElement && elementDispatchCustomEvent(this.customElement, HAppActions.action, { type, data });\n !this.customElement && this.element && elementDispatchCustomEvent(this.element, HAppActions.action, { type, data });\n // this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n // !this.customElement && this.element && elementDispatchCustomEvent(this.element, type, data);\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private _dispatchWindow: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any): Promise<void> => {\n window.dispatchEvent(new CustomEvent(HAppActions.action, { detail: { type, data } }));\n }\n\n windowDispatchOn() {\n if (!this._windowEventListener) {\n this._windowEventListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(action.type, action.data);\n };\n window.addEventListener(HAppActions.action, this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(HAppActions.action, this._windowEventListener);\n }\n }\n\n render = (): HElements<HActionType> => {\n if (this.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(this.name, msgRender, e);\n }\n const t1 = performance.now();\n log(this.name, msgRender, `${t1 - t0} ms`, hsmls);\n return hsmls ?? [];\n } else {\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(this.name, msgRender, e);\n }\n return hsmls ?? [];\n }\n }\n\n actionCb = (actionType: HActionType, data: HAttrOnData, event: Event): void => {\n data = (data?.constructor === Function)\n ? (data as HAttrOnDataFnc)(event)\n : data;\n if (data === undefined && event) {\n if (event instanceof CustomEvent) {\n data = event.detail;\n } else {\n data = formData(event);\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n private _updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n ): void {\n if (this.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n log(this.name, msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\n }\n }\n\n mount = (e: Element | string | null): this => {\n const el = (typeof e === \"string\") ? document.getElementById(e) : e;\n if (el && (el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (el && !this.element) {\n (this as any).element = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n this._updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(HAppActions.mount, this.element);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.element) {\n this._dispatchAction(HAppActions.umount, this.element);\n if (this.element.hasAttribute(HAPP)) {\n this.element.removeAttribute(HAPP);\n }\n const aNodes = this.element.querySelectorAll(`[${HAPP}]`);\n for (let i = 0; i < aNodes.length; i++) {\n const a = (aNodes[i] as any).happ as HApp<State, HActionType>;\n a?.umount();\n }\n while (this.element.firstChild /*.hasChildNodes()*/) {\n this.element.removeChild(this.element.firstChild);\n }\n delete (this.element as any).happ;\n (this as any).element = undefined;\n }\n return this;\n }\n\n update = (): this => {\n if (this.element && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.element) {\n const hsmls = this.render();\n this._updateDom<HActionType>(this.element, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.element) {\n if (this._updateSched) {\n unschedule(this._updateSched);\n this._updateSched = undefined;\n } else {\n return [\"div\", { skip: true }];\n }\n }\n const hsmls = this.render();\n hsmls.push(\n (e: Element) => {\n if (!this.element) {\n (this as any).element = e;\n (e as any).happ = this;\n this._dispatchAction(HAppActions.mount, this.element);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.element ? this.element.outerHTML : \"\";\n }\n\n}\n\nfunction elementDispatchCustomEvent<HActionType extends string>(\n el: HTMLElement,\n type: HActionType,\n data: any\n) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type}`]?.(new CustomEvent(type, { detail: data }));\n}\n\nfunction formData(e: Event): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const els = (el as HTMLFormElement).elements;\n const data = {} as { [k: string]: string | null | Array<string | null> };\n for (let i = 0; i < els.length; i++) {\n const d = formInputData(els[i]);\n if (typeof d === \"object\") {\n const names = Object.keys(d as object);\n if (names.length) {\n const name = names[0];\n const value = (d as any)[name];\n if (data[name] === undefined) {\n data[name] = value;\n } else if (typeof data[name] === \"string\" || data[name] instanceof String) {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value as string];\n }\n } else if (data[name] instanceof Array) {\n if (value instanceof Array) {\n data[name] = (data[name] as Array<string | null>).concat(value);\n } else {\n (data[name] as Array<string | null>).push(value);\n }\n } else {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value];\n }\n }\n if (data[name] instanceof Array) {\n data[name] = (data[name] as Array<string | null>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n data[name] = (data[name] as Array<string | null>).length\n ? (data[name] as Array<string | null>)[0]\n : null;\n }\n }\n }\n }\n }\n return data;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n let data: { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> = null;\n switch (el.nodeName) {\n case \"INPUT\":\n const iel = el as HTMLInputElement;\n switch (iel.type) {\n case \"text\":\n case \"hidden\":\n case \"password\":\n case \"email\":\n case \"number\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"date\":\n case \"datetime-local\":\n case \"month\":\n case \"range\":\n case \"time\":\n case \"week\":\n case \"submit\":\n case \"button\":\n if (iel.name) {\n data = { [iel.name]: iel.value };\n } else {\n data = iel.value;\n }\n break;\n case \"radio\":\n if (iel.name) {\n data = { [iel.name]: iel.checked ? iel.value : null };\n } else {\n data = iel.checked ? iel.value : null;\n }\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n if (iel.name) {\n data = { [iel.name]: iel.checked };\n } else {\n data = iel.checked;\n }\n } else {\n if (iel.name) {\n data = { [iel.name]: iel.checked\n ? String(iel.value)\n : null };\n } else {\n data = iel.checked\n ? String(iel.value)\n : null;\n }\n }\n break;\n }\n break;\n case \"SELECT\":\n const sel = el as HTMLSelectElement;\n if (sel.multiple) {\n const values = Array.from(sel.selectedOptions).map(o => o.value);\n if (sel.name) {\n data = { [sel.name]: values };\n } else {\n data = values;\n }\n } else {\n if (sel.name) {\n data = { [sel.name]: sel.value };\n } else {\n data = sel.value;\n }\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n if (tel.name) {\n data = { [tel.name]: tel.value };\n } else {\n data = tel.value;\n }\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n if (bel.name) {\n data = { [bel.name]: bel.value };\n } else {\n data = bel.value;\n }\n break;\n }\n return data;\n}\n","const requiredMsg = \"required\";\nconst notInRangeMsg = \"not_in_range\";\nconst invalidFormatMsg = \"invalid_format\";\nconst invalidOptionMsg = \"invalid_option\";\nconst invalidValueMsg = \"invalid_value\";\n\n// name@doamin.net\nexport const emailRegex = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n// +421901123456 or +421 901 123 456 or +421-901-123-456 or 901123456 or 901 123 456 or 901-123-456\nexport const phoneRgex = /^(((00)([- ]?)|\\+)(\\d{1,3})([- ]?))?((\\d{3})([- ]?))((\\d{3})([- ]?))(\\d{3})$/;\n\n// 123 45 or 12345\nexport const pscRgex = /^\\d{3} ?\\d{2}$/;\n\n// 450115/8346\nexport const rodneCisloRgex = /^\\s*(\\d\\d)(\\d\\d)(\\d\\d)[ /]*(\\d\\d\\d)(\\d?)\\s*$/;\n\nexport abstract class Validator<TYPE, OPTS, MSGS> {\n\n readonly opts: OPTS;\n readonly msgs: MSGS;\n\n readonly str: string | null = null;\n readonly err: string | null = null;\n readonly obj: TYPE | null = null;\n\n constructor(opts?: OPTS, msgs?: MSGS) {\n this.opts = opts ?? {} as OPTS;\n this.msgs = msgs ?? {} as MSGS;\n }\n\n protected abstract strToObj(str?: string | null): { obj: TYPE | null, err: string };\n\n protected abstract objCheck(obj?: TYPE | null): string;\n\n protected abstract objToStr(obj?: TYPE | null,\n format?: string): { str: string, err: string };\n\n validate(value?: string | TYPE): { str?: string | null, obj?: TYPE | null, err: string } {\n if (typeof value === \"string\" || value === undefined || value === null) {\n const v = value as string | null | undefined;\n (this.str as any) = v;\n const sto = this.strToObj(v);\n (this.obj as any) = sto.obj;\n if (sto.err) {\n (this.err as any) = sto.err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err: sto.err\n };\n }\n const err = this.objCheck(sto.obj);\n (this.err as any) = err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err\n };\n } else {\n (this.str as any) = (value === undefined || value === null) ? null : (\"\" + value);\n const err = this.objCheck(value);\n (this.err as any) = err;\n return {\n str: this.str,\n obj: value,\n err\n };\n }\n }\n\n format(obj?: TYPE | null, format?: string): { str: string, err: string } {\n // const err = this.objCheck(obj);\n const ots = this.objToStr(obj, format);\n return {\n str: ots.str ?? \"\",\n // err: ots.err ? ots.err : err\n err: ots.err\n };\n }\n\n}\n\nexport function tpl(tmpl: string, data: { [k: string]: any }): string {\n return Object.keys(data)\n .map(k => [k, data[k]])\n .reduce((t, d) =>\n t.replace(new RegExp(`\\\\{\\\\{${d[0]}\\\\}\\\\}`, \"g\"), String(d[1])), tmpl);\n}\n\nexport interface ValidatorDataOpts {\n data?: { [key: string]: any };\n}\n\nexport interface SelectValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n options?: string[];\n}\n\nexport interface SelectValidatorMsgs {\n required?: string;\n invalid_option?: string;\n}\n\nexport class SelectValidator\n extends Validator<string, SelectValidatorOpts, SelectValidatorMsgs> {\n\n constructor(opts?: SelectValidatorOpts, msgs?: SelectValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n return {\n obj: str === undefined ? null : str,\n err: \"\"\n };\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"options\" in opts) {\n if (obj && opts.options!.indexOf(obj) === -1) {\n return msgs.invalid_option\n ? tpl(msgs.invalid_option,\n {\n ...opts.data,\n option: obj === null ? \"\" : obj,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : invalidOptionMsg;\n }\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface StringValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n regexp?: RegExp;\n}\n\nexport interface StringValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class StringValidator\n extends Validator<string, StringValidatorOpts, StringValidatorMsgs> {\n\n constructor(opts?: StringValidatorOpts, msgs?: StringValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n if (\"regexp\" in opts) {\n if (!opts.regexp!.test(str)) {\n return {\n obj: null,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : invalidFormatMsg\n };\n }\n }\n return { obj: str , err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj.length > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj.length < opts.min!) {\n err = true;\n }\n }\n if ((\"min\" in opts) && (\"max\" in opts)) {\n if (obj.length > opts.max! && obj.length < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface NumberValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n strict?: boolean;\n decimals?: number;\n}\n\nexport interface NumberValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class NumberValidator\n extends Validator<number, NumberValidatorOpts, NumberValidatorMsgs> {\n\n constructor(opts?: NumberValidatorOpts, msgs?: NumberValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: number | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const n = Number(str);\n let err: boolean = false;\n if (isNaN(n)) {\n err = true;\n }\n if (opts.strict && (str !== this.objToStr(n).str)) {\n err = true;\n }\n if (err) {\n const num = isNaN(n) ? 1234.45 : n;\n return {\n obj: isNaN(n) ? null : n,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n num: this.objToStr(num).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: n, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: number | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: number | null,\n format?: string): { str: string, err: string } {\n let str;\n if (obj === undefined || obj === null) {\n str = \"\";\n } else {\n if (\"decimals\" in this.opts) {\n str = obj.toFixed(this.opts.decimals);\n } else {\n str = String(obj);\n }\n }\n return {\n str,\n err: \"\"\n };\n }\n\n}\n\nexport interface DateValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: Date;\n max?: Date;\n dateOnly?: boolean;\n iso?: boolean;\n // strict?: boolean;\n\n}\n\nexport interface DateValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nconst dateToLocaleString = (date: Date) => date.toLocaleString();\nconst dateToLocaleDateString = (date: Date) => date.toLocaleDateString();\n\nconst dateToIsoString = (date: Date) => date.toISOString();\nconst dateToIsoDateString = (date: Date) => new Date(date.toDateString()).toISOString();\n\nexport class DateValidator\n extends Validator<Date, DateValidatorOpts, DateValidatorMsgs> {\n\n dateToStr: (date: Date) => string;\n\n constructor(opts?: DateValidatorOpts, msgs?: DateValidatorMsgs) {\n super(opts, msgs);\n if (opts?.iso) {\n this.dateToStr = opts?.dateOnly ? dateToIsoDateString : dateToIsoString;\n } else {\n this.dateToStr = opts?.dateOnly ? dateToLocaleDateString : dateToLocaleString;\n }\n if (opts?.dateOnly && opts?.min) {\n opts.min = new Date(opts.min.getFullYear(), opts.min.getMonth(), opts.min.getDate());\n }\n if (opts?.dateOnly && opts?.max) {\n opts.max = new Date(opts.max.getFullYear(), opts.max.getMonth(), opts.max.getDate() + 1);\n }\n }\n\n protected strToObj(str?: string | null): { obj: Date | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const dt = Date.parse(str);\n let d = new Date(dt);\n if (opts.dateOnly) {\n d = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n let err: boolean = false;\n if (isNaN(dt)) {\n err = true;\n }\n // if (opts.strict && (str !== this.objToStr(d).str)) {\n // err = true;\n // }\n if (err) {\n const date = isNaN(dt) ? new Date() : d;\n return {\n obj: isNaN(dt) ? null : d,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n date: this.objToStr(date).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: d, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: Date | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (opts.max && obj.getTime() > opts.max.getTime()) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (opts.min && obj < opts.min) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: Date | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : this.dateToStr(obj),\n err: \"\"\n };\n }\n\n}\n\nexport interface BooleanValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n value?: boolean;\n}\n\nexport interface BooleanValidatorMsgs {\n required?: string;\n invalid_value?: string;\n}\n\nexport class BooleanValidator\n extends Validator<boolean, BooleanValidatorOpts, BooleanValidatorMsgs> {\n\n constructor(opts?: BooleanValidatorOpts, msgs?: BooleanValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: boolean | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data\n })\n : requiredMsg\n };\n }\n }\n let b;\n switch (str) {\n case \"true\":\n case \"1\":\n case \"on\":\n case \"yes\":\n b = true;\n break;\n default:\n b = false;\n }\n return { obj: b, err: \"\" };\n }\n\n protected objCheck(obj?: boolean | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err = false;\n if (\"value\" in opts) {\n if (obj !== opts.value) {\n err = true;\n }\n }\n if (err) {\n return msgs.invalid_value\n ? tpl(msgs.invalid_value,\n {\n ...opts.data,\n value: (\"value\" in opts) ? (\"\" + (opts.value ?? \"\")) : \"\",\n })\n : invalidValueMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: boolean | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : (\"\" + obj),\n err: \"\"\n };\n }\n\n}\n\ntype FormValidators<TYPE> = { [key in keyof TYPE]: Validator<any, any, any> };\n\nexport type Str<TYPE> = { [key in keyof TYPE]: string };\nexport type Obj<TYPE> = { [key in keyof TYPE]: any };\nexport type Err<TYPE> = { [key in keyof TYPE]: string };\n\nexport interface FormValidatorData<TYPE> {\n str: Str<TYPE>;\n obj: Obj<TYPE>;\n err: Err<TYPE>;\n valid: boolean;\n}\n\nexport class FormValidator<TYPE extends { [key: string]: any }> {\n\n readonly validators: FormValidators<TYPE> = {} as FormValidators<TYPE>;\n\n readonly str?: Str<TYPE>;\n readonly obj?: Obj<TYPE>;\n readonly err?: Err<TYPE>;\n\n readonly valid?: boolean;\n\n addValidator(field: keyof TYPE, validator: Validator<any, any, any>): this {\n this.validators[field] = validator;\n return this;\n }\n\n validate(data: { [key in keyof TYPE]?: string }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].validate(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = r.obj;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n format(data: { [key in keyof TYPE]: any }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].format(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = v;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n data(): FormValidatorData<TYPE> {\n return {\n str: this.str!,\n obj: this.obj!,\n err: this.err!,\n valid: this.valid!\n };\n }\n\n}\n\n\n// TEST\n\n// const sv = new StringValidator(\n// {\n// required: true,\n// min: 3,\n// max: 5,\n// // regexp: /^[0123]+$/\n// data: {\n// xxx: \"xXx\"\n// }\n// },\n// {\n// required: \"required {{min}} {{max}} {{regexp}}\",\n// invalid_format: \"invalid_format {{regexp}}\",\n// not_in_range: \"not_in_range {{min}} {{max}} | data.xxx={{xxx}}\"\n// });\n\n// [\n// \"x1234\",\n// \"x1234y\",\n// \"xy\"\n// ].forEach(v => {\n// console.log();\n// console.log(v);\n// const r = sv.validate(v);\n// console.log(r);\n// if (r.obj) {\n// const f = sv.format(r.obj);\n// console.log(f);\n// }\n// });\n\n// console.log();\n\n// const nv = new NumberValidator(\n// {\n// required: true,\n// min: 3,\n// max: 500000,\n// decimals: 2,\n// strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{num}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(nv.format(undefined));\n// console.log(nv.format(12345.6789));\n\n// console.log(nv.validate(\"12345.6789\"));\n// console.log(nv.validate(\"12345,6789\"));\n// console.log(nv.validate(\"12,345.6789\"));\n\n// const dv = new DateValidator(\n// {\n// required: false,\n// // min: new Date(),\n// max: new Date(),\n// clearTime: false\n// // strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{date}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(dv.opts);\n\n// console.log(dv.format(undefined));\n\n// console.log(dv.format(new Date));\n\n// console.log(dv.validate(\"9/17/2020, 10:46:07 AM\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"9/17/2020\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"2020-09-17T08:46:07.000Z\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"\"));\n// console.log(dv.format(dv.obj).str);\n\n// console.log(new Date().toString());\n// console.log(new Date().toDateString());\n// console.log(new Date().toTimeString());\n// console.log(new Date().toLocaleString());\n// console.log(new Date().toLocaleDateString());\n// console.log(new Date().toLocaleTimeString());\n// console.log();\n// console.log(new Date(Date.parse(new Date().toString())));\n// console.log(new Date(Date.parse(new Date().toDateString())));\n// console.log(new Date(Date.parse(new Date().toTimeString())));\n// console.log(new Date(Date.parse(new Date().toLocaleString())));\n// console.log(new Date(Date.parse(new Date().toLocaleDateString())));\n// console.log(new Date(Date.parse(new Date().toLocaleTimeString())));\n\n// const formData = { str: \"123a\", num: \"123456.789\", date: \"9/17/2020, 10:46:07 AM\" };\n// const formData = { str: \"\", num: \"\", date: \"\" };\n// const formData = { str: undefined, num: undefined, date: undefined };\n\n// const fv = new FormValidator<typeof formData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// .addValidator(\"date\", dv)\n// .validate(formData);\n\n// console.log(fv.data());\n\n// fv.format(fv.obj!);\n// console.log(fv);\n\n// const ovData = { str: \"123a\", num: \"123.45\", date: \"02.01.2019 12:12\" };\n\n// const ov = new ObjectValidator<typeof ovData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// // .addValidator(\"date\", dv)\n// .validate(ovData);\n\n// // console.log(ov);\n\n// ov.format(ov.obj!);\n// console.log(ov);\n\n// console.log();\n\n// interface ReportFormData {\n// spz: string;\n// tachometer: string;\n// dateCreated: string;\n// user: {\n// // name: string[];\n// email: string;\n// };\n// }\n\n// const dov = new ObjectValidator<ReportFormData>()\n// .addValidator(\"spz\", new StringValidator({ required: true }))\n// .addValidator(\"tachometer\", new NumberValidator({ required: true, min: 1 } ))\n// .addValidator(\"dateCreated\", new StringValidator({ required: true }))\n// .addValidator(\"user\", new ObjectValidator<ReportFormData[\"user\"]>()\n// .addValidator(\"email\", new StringValidator({ required: true}))\n// // .addValidator(\"name\", { })\n// // new ArrayValidator({\n// // required: true,\n// // validator: new StringValidator({ required: true })\n// // })\n// );\n\n// dov.validate(\n// {\n// spz: \"dasdas\",\n// tachometer: \"111222\",\n// // dateCreated: \"10.02.2019\",\n// user: {\n// // email: \"dsafasdf\",\n// }\n// },\n// {\n// dateCreated: \"01.03.2011\",\n// spz: \"32ds9f0f\",\n// tachometer: \"3213214214\",\n// user: {\n// email: \"sadmaskdmk2@dsadsamkl.com\"\n// }\n// });\n\n// const avn = new ArrayValidator<number>(new NumberValidator());\n// const rn = avn.validate([345, 123]);\n// console.log(rn);\n\n\n// interface D {\n// a: number;\n// b?: string;\n// }\n\n// const av = new ArrayValidator<T>(new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// );\n\n// const d: D[] = [\n// { a: 123, b: \"text\" },\n// // { a: 5.6, b: \"\" },\n// { a: 5.6 }\n// ];\n\n// const r = av.validate(d);\n// console.log(r);\n\n// const ro = new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// .validate({\n// a: \"5.6\",\n// b: undefined\n// // b: \"text\"\n// });\n// console.log(\"---\", ro);\n\n// const v = new StringValidator({ required: true });\n// const str = undefined;\n// const sr = v.validate(str!);\n// console.log(sr);\n\n// const v = new StringValidator({ required: true, min: 8 });\n// const str = \"\";\n// const sr = v.format(str);\n// console.log(sr, v);\n","import { HElement, hjoin } from \"../src/hsml\";\nimport { HApp, HAppActions, HDispatcher, HState, HView, happ } from \"../src/hsml-app\";\nimport { BooleanValidator, DateValidator, FormValidator, FormValidatorData, NumberValidator, SelectValidator, StringValidator } from \"../src/validators\";\n\nexport interface Data {\n name: string;\n born: Date;\n children: number;\n married: boolean;\n gender: string;\n sport: string;\n}\n\nexport interface State {\n title: string;\n data: Data;\n genders: {\n label: string;\n value: string;\n }[];\n sports: string[];\n validatorData?: FormValidatorData<Data>;\n}\n\nexport const state: HState<State> = function () {\n return {\n title: \"Form Validation\",\n data: {\n name: \"Ema\",\n born: new Date(),\n children: 0,\n married: false,\n gender: \"female\",\n sport: \"gymnastics\"\n },\n genders: [\n { label: \"Male\", value: \"male\" },\n { label: \"Female\", value: \"female\" }\n ],\n sports: [\"football\", \"gymnastics\"]\n }\n};\n\nexport enum Actions {\n change = \"form-validation-change\",\n submit = \"form-validation-submit\"\n}\n\nexport const view: HView<State, Actions> = function (state) {\n return [\n [\"div.w3-content\", [\n [\"h1\", state.title],\n [\"form.w3-container\",\n {\n on: [\n [\"change\", Actions.change],\n [\"submit\", Actions.submit]\n ]\n },\n [\n [\"p\", [\n [\"label\", [\"Name\",\n [\"input.w3-input\", {\n type: \"text\",\n name: \"name\",\n value: state.validatorData!.str.name,\n on: [\"input\", Actions.change]\n }]\n ]]\n ]],\n [\"p.w3-text-red\", [state.validatorData!.err.name]],\n [\"p\", [\n [\"label\", [\"Born\",\n [\"input.w3-input\", {\n type: \"datetime-local\",\n name: \"born\",\n // placeholder: new DateValidator().format(new Date()).str,\n value: datetimeLocal(state.validatorData!.obj.born)\n }]\n ]]\n ]],\n [\"p.w3-text-red\", [state.validatorData!.err.born]],\n [\"p\", [\n [\"label\", [\"Children\",\n [\"input.w3-input\", {\n type: \"number\",\n name: \"children\",\n value: state.validatorData!.str.children\n }]\n ]]\n ]],\n [\"p.w3-text-red\", [state.validatorData!.err.children]],\n [\"p\", [\n [\"label\", [\n [\"input.w3-check\", {\n type: \"checkbox\",\n name: \"married\",\n checked: state.validatorData!.obj.married\n }],\n \" Married\"\n ]]\n ]],\n [\"p.w3-text-red\", [state.validatorData!.err.married]],\n [\"p\",\n hjoin(\n state.genders.map<HElement<Actions>>(gender => (\n [\"label\", [\n [\"input.w3-radio\", {\n type: \"radio\",\n name: \"gender\",\n value: gender.value,\n checked: state.validatorData!.obj.gender === gender.value\n }],\n \" \", gender.label\n ]]\n )),\n [\"br\"]\n )\n ],\n [\"p.w3-text-red\", [state.validatorData!.err.gender]],\n [\"p\", [\n [\"select.w3-select\", { name: \"sport\" },\n [\n [\"option\",\n { value: \"\", disabled: true, selected: true },\n \"Sport\"\n ],\n ...state.sports.map<HElement<Actions>>(sport => (\n [\"option\",\n {\n value: sport,\n selected: sport === state.validatorData!.obj.sport\n },\n sport\n ])\n )\n ]\n ]\n ]],\n [\"p.w3-text-red\", state.validatorData!.err.sport],\n [\"button.w3-btn.w3-blue\", \"Submit\"]\n ]\n ]\n ]]\n ];\n};\n\nlet formValidator: FormValidator<Data>;\n\nexport const dispatcher: HDispatcher<State, Actions> = async function (action, state) {\n console.log(\"action\", action);\n\n switch (action.type) {\n\n case HAppActions.init:\n formValidator = validator(state);\n state.validatorData = formValidator.data();\n break;\n\n case Actions.change:\n formValidator.validate({\n ...state.validatorData!.str,\n ...action.data\n });\n state.validatorData = formValidator.data();\n console.log(\"obj:\", JSON.stringify(state.validatorData, null, 4));\n break;\n\n case Actions.submit:\n action.event!.preventDefault();\n // console.log(action.data);\n formValidator.validate(action.data);\n state.validatorData = formValidator.data();\n // console.log(state.validatorData);\n state.validatorData = formValidator.data();\n if (formValidator.valid) {\n console.log(formValidator);\n state.data = formValidator.obj!;\n const formData = JSON.stringify(state.data, null, 4);\n console.dir(formData);\n alert(`Form submit: \\n${formData}`);\n }\n break;\n }\n};\n\nexport function validator(formState: State): FormValidator<Data> {\n return new FormValidator<Data>()\n .addValidator(\"name\", new StringValidator(\n {\n required: true,\n min: 3,\n max: 5\n },\n {\n required: \"Required {{min}} - {{max}} {{regexp}}\",\n invalid_format: \"Invalid format {{regexp}}\",\n not_in_range: \"Not in range {{min}} - {{max}}\"\n }))\n .addValidator(\"born\", new DateValidator(\n {\n required: true,\n // min: new Date(),\n max: new Date(),\n dateOnly: false,\n iso: true\n },\n {\n required: \"Required {{min}} - {{max}}\",\n invalid_format: \"Invalid format {{date}}\",\n not_in_range: \"Not in range {{min}} - {{max}}\"\n }))\n .addValidator(\"children\", new NumberValidator(\n {\n required: true,\n min: 0,\n max: 10\n },\n {\n required: \"Required {{min}} - {{max}}\",\n invalid_format: \"Invalid format, use format {{num}}\",\n not_in_range: \"Not in range {{min}} - {{max}}\"\n }))\n .addValidator(\"gender\", new SelectValidator(\n {\n required: true,\n options: formState.genders.map(g => g.value)\n },\n {\n required: \"Required {{options}}\",\n invalid_option: \"Invalod option {{option}} {{options}}\"\n }))\n .addValidator(\"married\", new BooleanValidator(\n {\n required: true\n },\n {\n required: \"Required\",\n invalid_value: \"Invalid value {{value}}\"\n }))\n .addValidator(\"sport\", new SelectValidator(\n {\n required: true,\n options: formState.sports\n },\n {\n required: \"Required {{options}}\",\n invalid_option: \"Invalod option {{option}} {{options}}\"\n }))\n .format(formState.data);\n}\n\nfunction datetimeLocal(date: Date) {\n if (!date) {\n return \"\";\n }\n const tzo = - date.getTimezoneOffset();\n if (tzo === 0) {\n return date.toISOString();\n } else {\n // let dif = tzo >= 0 ? \"+\" : \"-\";\n const pad = function (num: number, digits = 2) {\n return String(num).padStart(digits, \"0\");\n };\n return (\n date.getFullYear() +\n \"-\" +\n pad(date.getMonth() + 1) +\n \"-\" +\n pad(date.getDate()) +\n \"T\" +\n pad(date.getHours()) +\n \":\" +\n pad(date.getMinutes())\n // pad(tzo >= 0 ? date.getHours() + (tzo / 60) : date.getHours() - (tzo / 60)) +\n // \":\" +\n // pad(tzo >= 0 ? date.getMinutes() + (tzo % 60) : date.getMinutes() - (tzo % 60))\n );\n // return (\n // date.getFullYear() +\n // \"-\" +\n // pad(date.getMonth() + 1) +\n // \"-\" +\n // pad(date.getDate()) +\n // \"T\" +\n // pad(date.getHours()) +\n // \":\" +\n // pad(date.getMinutes()) +\n // \":\" +\n // pad(date.getSeconds()) +\n // dif +\n // pad(tzo / 60) +\n // \":\" +\n // pad(tzo % 60) +\n // \".\" +\n // pad(date.getMilliseconds(), 3)\n // );\n }\n}\n\nnew HApp<State, Actions>(state, view, dispatcher, \"app\");\n"],"names":["$fe5fa9c04fc86188$var$log","console","log","$fe5fa9c04fc86188$var$error","error","$fe5fa9c04fc86188$var$warn","warn","$fe5fa9c04fc86188$export$3dcd9fad60135c2c","HAppActions","$fe5fa9c04fc86188$export$3d736e925369e0e4","HDispatchScopes","$fe5fa9c04fc86188$var$schedule","window","requestAnimationFrame","callback","setTimeout","$fe5fa9c04fc86188$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$fe5fa9c04fc86188$var$msgAction","$fe5fa9c04fc86188$var$msgDispatch","$fe5fa9c04fc86188$var$msgRender","$fe5fa9c04fc86188$var$HAPP","$fe5fa9c04fc86188$export$eb8950696418f795","hAppI","$fe5fa9c04fc86188$export$8cfef5dc37c46888","state","view","dispatcher","element","debug","name","$fe5fa9c04fc86188$export$1cfc54b3834d3c50","customElements","define","HTMLElement","observedAttributes","attributes","connectedCallback","this","attachShadow","mode","_happel","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","attribute","constructor","super","undefined","customElement","_dispatchAction","type","data","event","scope","t0","performance","now","_dispatch","t1","_dispatchElement","_dispatchWindow","e","windowDispatchOn","_windowEventListener","action","detail","addEventListener","windowDispatchOff","removeEventListener","_updateDom","el","hsml","ctx","$hrCkK","hsmls2idomPatch","refs","$fe5fa9c04fc86188$var$__awaiter","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","dispatchEvent","CustomEvent","render","hsmls","actionCb","actionType","Function","target","nodeName","preventDefault","els","elements","i","length","d","$fe5fa9c04fc86188$var$formInputData","names","Object","keys","value","String","Array","concat","push","filter","$fe5fa9c04fc86188$var$formData","document","getElementById","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","skip","toHtml","outerHTML","init","then","_b","_a","call","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$9b7ef284060722ff$var$requiredMsg","$9b7ef284060722ff$var$notInRangeMsg","$9b7ef284060722ff$var$invalidFormatMsg","$9b7ef284060722ff$export$9eeb22c0bba4ed5e","validate","v","str","sto","strToObj","obj","err","objCheck","format","ots","objToStr","opts","msgs","$9b7ef284060722ff$export$5dfe2efd653fcea4","tmpl","k","reduce","t","replace","RegExp","$9b7ef284060722ff$export$d25426df72e77dd3","required","assign","options","join","indexOf","invalid_option","option","$9b7ef284060722ff$export$312ff19fe6f84b5e","min","max","regexp","_c","test","invalid_format","_d","not_in_range","$9b7ef284060722ff$export$5464fb7e86e4a9f1","n","Number","isNaN","strict","num","toFixed","decimals","$9b7ef284060722ff$var$dateToLocaleString","date","toLocaleString","$9b7ef284060722ff$var$dateToLocaleDateString","toLocaleDateString","$9b7ef284060722ff$var$dateToIsoString","toISOString","$9b7ef284060722ff$var$dateToIsoDateString","Date","toDateString","$9b7ef284060722ff$export$73e260ca9e9e4b55","dateToStr","dt","parse","dateOnly","getFullYear","getMonth","getDate","getTime","iso","$9b7ef284060722ff$export$d74a5d77bac81ab5","b","invalid_value","$9b7ef284060722ff$export$7c385359179c028a","addValidator","field","validator","validators","res","r","valid","$dcdf091030f286f0$export$b52183d5cfb26dc9","Actions","$dcdf091030f286f0$var$formValidator","$dcdf091030f286f0$var$datetimeLocal","getTimezoneOffset","pad","digits","padStart","getHours","getMinutes","$fe5fa9c04fc86188$exports","HApp","title","born","children","married","gender","sport","genders","label","sports","on","change","submit","validatorData","$enc1X","hjoin","disabled","selected","formState","g","JSON","stringify","formData","dir","alert"],"version":3,"file":"hsml-app-form-validation_demo.8e406f15.js.map"}
@@ -0,0 +1,2 @@
1
+ !function(){function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},a=e.parcelRequirede31;null==a&&((a=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var a={id:t,exports:{}};return n[t]=a,e.call(a.exports,a,a.exports),a.exports}var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}).register=function(t,e){i[t]=e},e.parcelRequirede31=a);var r=a("g7NCG"),s={};t(s,"HAppActions",(function(){return h}),(function(t){return h=t})),t(s,"HDispatchScopes",(function(){return p}),(function(t){return p=t})),t(s,"happ",(function(){return _}),(function(t){return _=t})),t(s,"HApp",(function(){return O}),(function(t){return O=t})),t(s,"happel",(function(){return y}),(function(t){return y=t}));var o=a("8IJ2T"),l=function(t,e,n,i){return new(n||(n=Promise))((function(a,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function o(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}l((i=i.apply(t,e||[])).next())}))};const d=console.log,u=console.error,c=console.warn;var h,m,p,v;(m=h||(h={})).init="happ-init",m.mount="happ-mount",m.umount="happ-umount",m.update="happ-update",m.action="happ-action",m.attribute="happ-attribute",(v=p||(p={})).element="element",v.window="window";const b=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},f=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},g="action:",w="dispatch:",j="render:",x="happ";function _(t){return new O(t.state,t.view,t.dispatcher,t.element,t.debug,t.name)}function y(t){customElements.define(`${x}-${t.name}`,class extends HTMLElement{static get observedAttributes(){return t.attributes}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch(h.attribute,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new O(t.state,t.view,t.dispatcher,void 0,t.debug,t.name,t.attributes),this._happel.customElement=this}})}class O{_dispatchAction(t,e,n,i){return l(this,void 0,void 0,(function*(){if(this.debug){d(this.name,g,{type:t,data:e,event:n});const a=performance.now();yield this._dispatch(t,e,n,i);const r=performance.now();d(this.name,w,r-a+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return l(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){u(this.name,w,t)}}))}windowDispatchOn(){this._windowEventListener?c("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener(h.action,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(h.action,this._windowEventListener)}_updateDom(t,e,n){if(this.debug){const i=performance.now();(0,o.hsmls2idomPatch)(t,e,n);const a=performance.now();d(this.name,"update:",a-i+" ms",t)}else(0,o.hsmls2idomPatch)(t,e,n)}constructor(t,e,n,i,a,r,s){this.refs={},this.dispatch=(t,e,n)=>l(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>l(this,void 0,void 0,(function*(){this.customElement&&S(this.customElement,h.action,{type:t,data:e}),!this.customElement&&this.element&&S(this.element,h.action,{type:t,data:e})})),this._dispatchWindow=(t,e)=>l(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(h.action,{detail:{type:t,data:e}}))})),this.render=()=>{if(this.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){u(this.name,j,t)}const n=performance.now();return d(this.name,j,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){u(this.name,j,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=q(n[t]);if("object"==typeof e){const a=Object.keys(e);if(a.length){const r=a[0],s=e[r];void 0===i[r]?i[r]=s:"string"==typeof i[r]||i[r]instanceof String?i[r]=s instanceof Array?[i[r],...s]:[i[r],s]:i[r]instanceof Array?s instanceof Array?i[r]=i[r].concat(s):i[r].push(s):i[r]=s instanceof Array?[i[r],...s]:[i[r],s],i[r]instanceof Array&&(i[r]=i[r].filter((t=>null!==t)),"radio"===n[t].type&&(i[r]=i[r].length?i[r][0]:null))}}}return i}return q(e)}(n)),this._dispatchAction(t,e,n)},this.mount=t=>{const e="string"==typeof t?document.getElementById(t):t;if(e&&e[x]){e[x].umount()}if(e&&!this.element){this.element=e,e[x]=this;const t=this.render();this._updateDom(e,t,this),this._dispatchAction(h.mount,this.element)}return this},this.umount=()=>{if(this.element){this._dispatchAction(h.umount,this.element),this.element.hasAttribute(x)&&this.element.removeAttribute(x);const t=this.element.querySelectorAll(`[${x}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);delete this.element.happ,this.element=void 0}return this},this.update=()=>(this.element&&!this._updateSched&&(this._updateSched=b((()=>{if(this.element){const t=this.render();this._updateDom(this.element,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.element){if(!this._updateSched)return["div",{skip:!0}];f(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.element||(this.element=t,t.happ=this,this._dispatchAction(h.mount,this.element))})),["div",t]},this.toHtml=()=>this.element?this.element.outerHTML:"",this.debug=null!=a&&a,this.name=null!=r?r:x,this.attributes=null!=s?s:[],this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>l(this,void 0,void 0,(function*(){return d(this.name,g,t.type,t.data)})),this._dispatchAction(h.init,this).then((()=>i&&this.mount(i)))}}function S(t,e,n){var i,a;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(a=(i=t)[`on${e}`])||void 0===a||a.call(i,new CustomEvent(e,{detail:n}))}function q(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const a=t;e=a.name?{[a.name]:a.value}:a.value;break;case"BUTTON":const r=t;e=r.name?{[r.name]:r.value}:r.value}return e}const D="required",T="not_in_range",k="invalid_format";class E{validate(t){if("string"==typeof t||null==t){const e=t;this.str=e;const n=this.strToObj(e);if(this.obj=n.obj,n.err)return this.err=n.err,{str:null!=e?e:"",obj:n.obj,err:n.err};const i=this.objCheck(n.obj);return this.err=i,{str:null!=e?e:"",obj:n.obj,err:i}}{this.str=null==t?null:""+t;const e=this.objCheck(t);return this.err=e,{str:this.str,obj:t,err:e}}}format(t,e){var n;const i=this.objToStr(t,e);return{str:null!==(n=i.str)&&void 0!==n?n:"",err:i.err}}constructor(t,e){this.str=null,this.err=null,this.obj=null,this.opts=null!=t?t:{},this.msgs=null!=e?e:{}}}function A(t,e){return Object.keys(e).map((t=>[t,e[t]])).reduce(((t,e)=>t.replace(new RegExp(`\\{\\{${e[0]}\\}\\}`,"g"),String(e[1]))),t)}class N extends E{strToObj(t){const e=this.opts,n=this.msgs;return"required"in e&&e.required&&!t?{obj:null,err:n.required?A(n.required,Object.assign(Object.assign({},e.data),{options:"options"in e?e.options.join(", "):""})):D}:{obj:void 0===t?null:t,err:""}}objCheck(t){if(null==t)return"";const e=this.opts,n=this.msgs;return"options"in e&&t&&-1===e.options.indexOf(t)?n.invalid_option?A(n.invalid_option,Object.assign(Object.assign({},e.data),{option:null===t?"":t,options:"options"in e?e.options.join(", "):""})):"invalid_option":""}objToStr(t,e){return{str:null!=t?t:"",err:""}}constructor(t,e){super(t,e)}}class C extends E{strToObj(t){var e,n,i,a;const r=this.opts,s=this.msgs;return"required"in r&&r.required&&!t?{obj:null,err:s.required?A(s.required,Object.assign(Object.assign({},r.data),{min:"min"in r?""+(null!==(e=r.min)&&void 0!==e?e:""):"",max:"max"in r?""+(null!==(n=r.max)&&void 0!==n?n:""):"",regexp:"regexp"in r?""+(null!==(i=r.regexp)&&void 0!==i?i:""):""})):D}:t?"regexp"in r&&!r.regexp.test(t)?{obj:null,err:s.invalid_format?A(s.invalid_format,Object.assign(Object.assign({},r.data),{regexp:"regexp"in r?""+(null!==(a=r.regexp)&&void 0!==a?a:""):""})):k}:{obj:t,err:""}:{obj:null,err:""}}objCheck(t){var e,n;if(null==t)return"";const i=this.opts,a=this.msgs;let r=!1;return"max"in i&&t.length>i.max&&(r=!0),"min"in i&&t.length<i.min&&(r=!0),"min"in i&&"max"in i&&t.length>i.max&&t.length<i.min&&(r=!0),r?a.not_in_range?A(a.not_in_range,Object.assign(Object.assign({},i.data),{min:"min"in i?""+(null!==(e=i.min)&&void 0!==e?e:""):"",max:"max"in i?""+(null!==(n=i.max)&&void 0!==n?n:""):""})):T:""}objToStr(t,e){return{str:null!=t?t:"",err:""}}constructor(t,e){super(t,e)}}class L extends E{strToObj(t){var e,n,i;const a=this.opts,r=this.msgs;if("required"in a&&a.required&&!t)return{obj:null,err:r.required?A(r.required,Object.assign(Object.assign({},a.data),{min:"min"in a?""+(null!==(e=a.min)&&void 0!==e?e:""):"",max:"max"in a?""+(null!==(n=a.max)&&void 0!==n?n:""):""})):D};if(t){const e=Number(t);let n=!1;if(isNaN(e)&&(n=!0),a.strict&&t!==this.objToStr(e).str&&(n=!0),n){const t=isNaN(e)?1234.45:e;return{obj:isNaN(e)?null:e,err:r.invalid_format?A(r.invalid_format,Object.assign(Object.assign({},a.data),{num:null!==(i=this.objToStr(t).str)&&void 0!==i?i:""})):k}}return{obj:e,err:""}}return{obj:null,err:""}}objCheck(t){var e,n;if(null==t)return"";const i=this.opts,a=this.msgs;let r=!1;return"max"in i&&t>i.max&&(r=!0),"min"in i&&t<i.min&&(r=!0),r?a.not_in_range?A(a.not_in_range,Object.assign(Object.assign({},i.data),{min:"min"in i?""+(null!==(e=i.min)&&void 0!==e?e:""):"",max:"max"in i?""+(null!==(n=i.max)&&void 0!==n?n:""):""})):T:""}objToStr(t,e){let n;return n=null==t?"":"decimals"in this.opts?t.toFixed(this.opts.decimals):String(t),{str:n,err:""}}constructor(t,e){super(t,e)}}const F=t=>t.toLocaleString(),I=t=>t.toLocaleDateString(),R=t=>t.toISOString(),M=t=>new Date(t.toDateString()).toISOString();class H extends E{strToObj(t){var e;const n=this.opts,i=this.msgs;if("required"in n&&n.required&&!t)return{obj:null,err:i.required?A(i.required,Object.assign(Object.assign({},n.data),{min:"min"in n&&n.min?this.dateToStr(n.min):"",max:"max"in n&&n.max?this.dateToStr(n.max):""})):D};if(t){const a=Date.parse(t);let r=new Date(a);n.dateOnly&&(r=new Date(r.getFullYear(),r.getMonth(),r.getDate()));let s=!1;if(isNaN(a)&&(s=!0),s){const t=isNaN(a)?new Date:r;return{obj:isNaN(a)?null:r,err:i.invalid_format?A(i.invalid_format,Object.assign(Object.assign({},n.data),{date:null!==(e=this.objToStr(t).str)&&void 0!==e?e:""})):k}}return{obj:r,err:""}}return{obj:null,err:""}}objCheck(t){if(null==t)return"";const e=this.opts,n=this.msgs;let i=!1;return"max"in e&&e.max&&t.getTime()>e.max.getTime()&&(i=!0),"min"in e&&e.min&&t<e.min&&(i=!0),i?n.not_in_range?A(n.not_in_range,Object.assign(Object.assign({},e.data),{min:"min"in e&&e.min?this.dateToStr(e.min):"",max:"max"in e&&e.max?this.dateToStr(e.max):""})):T:""}objToStr(t,e){return{str:null==t?"":this.dateToStr(t),err:""}}constructor(t,e){super(t,e),(null==t?void 0:t.iso)?this.dateToStr=(null==t?void 0:t.dateOnly)?M:R:this.dateToStr=(null==t?void 0:t.dateOnly)?I:F,(null==t?void 0:t.dateOnly)&&(null==t?void 0:t.min)&&(t.min=new Date(t.min.getFullYear(),t.min.getMonth(),t.min.getDate())),(null==t?void 0:t.dateOnly)&&(null==t?void 0:t.max)&&(t.max=new Date(t.max.getFullYear(),t.max.getMonth(),t.max.getDate()+1))}}class V extends E{strToObj(t){const e=this.opts,n=this.msgs;if("required"in e&&e.required&&!t)return{obj:null,err:n.required?A(n.required,Object.assign({},e.data)):D};let i;switch(t){case"true":case"1":case"on":case"yes":i=!0;break;default:i=!1}return{obj:i,err:""}}objCheck(t){var e;if(null==t)return"";const n=this.opts,i=this.msgs;let a=!1;return"value"in n&&t!==n.value&&(a=!0),a?i.invalid_value?A(i.invalid_value,Object.assign(Object.assign({},n.data),{value:"value"in n?""+(null!==(e=n.value)&&void 0!==e?e:""):""})):"invalid_value":""}objToStr(t,e){return{str:null==t?"":""+t,err:""}}constructor(t,e){super(t,e)}}class P{addValidator(t,e){return this.validators[t]=e,this}validate(t){const e=Object.keys(this.validators).reduce(((e,n)=>{const i=t[n],a=this.validators[n].validate(i);return e.str[n]=a.str,e.obj[n]=a.obj,e.err[n]=a.err,a.err&&(e.valid=!1),e}),{str:{},obj:{},err:{},valid:!0});return this.str=e.str,this.obj=e.obj,this.err=e.err,this.valid=e.valid,this}format(t){const e=Object.keys(this.validators).reduce(((e,n)=>{const i=t[n],a=this.validators[n].format(i);return e.str[n]=a.str,e.obj[n]=i,e.err[n]=a.err,a.err&&(e.valid=!1),e}),{str:{},obj:{},err:{},valid:!0});return this.str=e.str,this.obj=e.obj,this.err=e.err,this.valid=e.valid,this}data(){return{str:this.str,obj:this.obj,err:this.err,valid:this.valid}}constructor(){this.validators={}}}var $=function(t,e,n,i){return new(n||(n=Promise))((function(a,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function o(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}l((i=i.apply(t,e||[])).next())}))};var U,Y;(Y=U||(U={})).change="form-validation-change",Y.submit="form-validation-submit";let B;function J(t){if(!t)return"";if(0===-t.getTimezoneOffset())return t.toISOString();{const e=function(t,e=2){return String(t).padStart(e,"0")};return t.getFullYear()+"-"+e(t.getMonth()+1)+"-"+e(t.getDate())+"T"+e(t.getHours())+":"+e(t.getMinutes())}}new(0,s.HApp)((function(){return{title:"Form Validation",data:{name:"Ema",born:new Date,children:0,married:!1,gender:"female",sport:"gymnastics"},genders:[{label:"Male",value:"male"},{label:"Female",value:"female"}],sports:["football","gymnastics"]}}),(function(t){return[["div.w3-content",[["h1",t.title],["form.w3-container",{on:[["change",U.change],["submit",U.submit]]},[["p",[["label",["Name",["input.w3-input",{type:"text",name:"name",value:t.validatorData.str.name,on:["input",U.change]}]]]]],["p.w3-text-red",[t.validatorData.err.name]],["p",[["label",["Born",["input.w3-input",{type:"datetime-local",name:"born",value:J(t.validatorData.obj.born)}]]]]],["p.w3-text-red",[t.validatorData.err.born]],["p",[["label",["Children",["input.w3-input",{type:"number",name:"children",value:t.validatorData.str.children}]]]]],["p.w3-text-red",[t.validatorData.err.children]],["p",[["label",[["input.w3-check",{type:"checkbox",name:"married",checked:t.validatorData.obj.married}]," Married"]]]],["p.w3-text-red",[t.validatorData.err.married]],["p",(0,r.hjoin)(t.genders.map((e=>["label",[["input.w3-radio",{type:"radio",name:"gender",value:e.value,checked:t.validatorData.obj.gender===e.value}]," ",e.label]])),["br"])],["p.w3-text-red",[t.validatorData.err.gender]],["p",[["select.w3-select",{name:"sport"},[["option",{value:"",disabled:!0,selected:!0},"Sport"],...t.sports.map((e=>["option",{value:e,selected:e===t.validatorData.obj.sport},e]))]]]],["p.w3-text-red",t.validatorData.err.sport],["button.w3-btn.w3-blue","Submit"]]]]]]}),(function(t,e){return $(this,void 0,void 0,(function*(){switch(console.log("action",t),t.type){case s.HAppActions.init:n=e,B=(new P).addValidator("name",new C({required:!0,min:3,max:5},{required:"Required {{min}} - {{max}} {{regexp}}",invalid_format:"Invalid format {{regexp}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("born",new H({required:!0,max:new Date,dateOnly:!1,iso:!0},{required:"Required {{min}} - {{max}}",invalid_format:"Invalid format {{date}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("children",new L({required:!0,min:0,max:10},{required:"Required {{min}} - {{max}}",invalid_format:"Invalid format, use format {{num}}",not_in_range:"Not in range {{min}} - {{max}}"})).addValidator("gender",new N({required:!0,options:n.genders.map((t=>t.value))},{required:"Required {{options}}",invalid_option:"Invalod option {{option}} {{options}}"})).addValidator("married",new V({required:!0},{required:"Required",invalid_value:"Invalid value {{value}}"})).addValidator("sport",new N({required:!0,options:n.sports},{required:"Required {{options}}",invalid_option:"Invalod option {{option}} {{options}}"})).format(n.data),e.validatorData=B.data();break;case U.change:B.validate(Object.assign(Object.assign({},e.validatorData.str),t.data)),e.validatorData=B.data(),console.log("obj:",JSON.stringify(e.validatorData,null,4));break;case U.submit:if(t.event.preventDefault(),B.validate(t.data),e.validatorData=B.data(),e.validatorData=B.data(),B.valid){console.log(B),e.data=B.obj;const t=JSON.stringify(e.data,null,4);console.dir(t),alert(`Form submit: \n${t}`)}}var n}))}),"app")}();
2
+ //# sourceMappingURL=hsml-app-form-validation_demo.9a95cff3.js.map