x4js 1.5.18 → 1.5.20

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 (242) hide show
  1. package/lib/{README.md → README.txt} +0 -0
  2. package/lib/cjs/index.js +39 -103
  3. package/lib/cjs/index.js.map +7 -0
  4. package/lib/esm/index.mjs +39 -87
  5. package/lib/esm/index.mjs.map +7 -0
  6. package/lib/{license.md → licence.md} +0 -0
  7. package/lib/src/MIT-license.md +14 -0
  8. package/lib/{types/action.d.ts → src/action.ts} +64 -33
  9. package/lib/src/alpha.jpg +0 -0
  10. package/lib/src/app_sockets.ts +81 -0
  11. package/lib/src/application.ts +251 -0
  12. package/lib/src/autocomplete.ts +197 -0
  13. package/lib/src/base64.ts +166 -0
  14. package/lib/src/base_component.ts +152 -0
  15. package/lib/src/button.ts +355 -0
  16. package/lib/src/calendar.ts +328 -0
  17. package/lib/src/canvas.ts +505 -0
  18. package/lib/src/cardview.ts +227 -0
  19. package/lib/src/checkbox.ts +188 -0
  20. package/lib/src/color.ts +752 -0
  21. package/lib/src/colorpicker.ts +1639 -0
  22. package/lib/src/combobox.ts +465 -0
  23. package/lib/src/component.ts +2329 -0
  24. package/lib/{esm/dom_events.js → src/copyright.txt} +27 -29
  25. package/lib/src/datastore.ts +1322 -0
  26. package/lib/src/dialog.ts +656 -0
  27. package/lib/src/dom_events.ts +315 -0
  28. package/lib/src/drag_manager.ts +199 -0
  29. package/lib/src/drawtext.ts +355 -0
  30. package/lib/src/fileupload.ts +213 -0
  31. package/lib/src/form.ts +375 -0
  32. package/lib/src/formatters.ts +105 -0
  33. package/lib/src/gridview.ts +1185 -0
  34. package/lib/src/i18n.ts +346 -0
  35. package/lib/src/icon.ts +335 -0
  36. package/lib/src/image.ts +204 -0
  37. package/lib/src/index.ts +89 -0
  38. package/lib/src/input.ts +249 -0
  39. package/lib/src/label.ts +128 -0
  40. package/lib/src/layout.ts +430 -0
  41. package/lib/src/link.ts +86 -0
  42. package/lib/src/listview.ts +765 -0
  43. package/lib/{esm/md5.js → src/md5.ts} +438 -403
  44. package/lib/src/menu.ts +425 -0
  45. package/lib/src/messagebox.ts +224 -0
  46. package/lib/src/panel.ts +86 -0
  47. package/lib/src/popup.ts +494 -0
  48. package/lib/src/property_editor.ts +337 -0
  49. package/lib/src/radiobtn.ts +197 -0
  50. package/lib/src/rating.ts +135 -0
  51. package/lib/src/request.ts +300 -0
  52. package/lib/src/router.ts +185 -0
  53. package/lib/src/settings.ts +77 -0
  54. package/lib/src/sidebarview.ts +103 -0
  55. package/lib/src/spreadsheet.ts +1449 -0
  56. package/lib/src/styles.ts +343 -0
  57. package/lib/src/svgcomponent.ts +577 -0
  58. package/lib/src/tabbar.ts +151 -0
  59. package/lib/src/tabview.ts +110 -0
  60. package/lib/src/textarea.ts +235 -0
  61. package/lib/src/textedit.ts +544 -0
  62. package/lib/src/toaster.ts +80 -0
  63. package/lib/src/tools.ts +1473 -0
  64. package/lib/src/tooltips.ts +191 -0
  65. package/lib/src/treeview.ts +716 -0
  66. package/lib/{esm/version.js → src/version.ts} +30 -29
  67. package/lib/{styles → src}/x4.less +0 -0
  68. package/lib/src/x4dom.ts +57 -0
  69. package/lib/src/x4events.ts +585 -0
  70. package/lib/src/x4react.ts +90 -0
  71. package/package.json +52 -46
  72. package/lib/cjs/action.js +0 -58
  73. package/lib/cjs/app_sockets.js +0 -74
  74. package/lib/cjs/application.js +0 -182
  75. package/lib/cjs/autocomplete.js +0 -155
  76. package/lib/cjs/base_component.js +0 -124
  77. package/lib/cjs/button.js +0 -263
  78. package/lib/cjs/calendar.js +0 -254
  79. package/lib/cjs/canvas.js +0 -361
  80. package/lib/cjs/cardview.js +0 -161
  81. package/lib/cjs/checkbox.js +0 -139
  82. package/lib/cjs/color.js +0 -591
  83. package/lib/cjs/colorpicker.js +0 -1468
  84. package/lib/cjs/combobox.js +0 -349
  85. package/lib/cjs/component.js +0 -1719
  86. package/lib/cjs/datastore.js +0 -985
  87. package/lib/cjs/dialog.js +0 -478
  88. package/lib/cjs/dom_events.js +0 -30
  89. package/lib/cjs/drag_manager.js +0 -145
  90. package/lib/cjs/drawtext.js +0 -276
  91. package/lib/cjs/fileupload.js +0 -167
  92. package/lib/cjs/form.js +0 -304
  93. package/lib/cjs/formatters.js +0 -90
  94. package/lib/cjs/gridview.js +0 -881
  95. package/lib/cjs/i18n.js +0 -266
  96. package/lib/cjs/icon.js +0 -272
  97. package/lib/cjs/image.js +0 -157
  98. package/lib/cjs/input.js +0 -174
  99. package/lib/cjs/label.js +0 -95
  100. package/lib/cjs/layout.js +0 -322
  101. package/lib/cjs/link.js +0 -64
  102. package/lib/cjs/listview.js +0 -546
  103. package/lib/cjs/md5.js +0 -403
  104. package/lib/cjs/menu.js +0 -301
  105. package/lib/cjs/messagebox.js +0 -177
  106. package/lib/cjs/panel.js +0 -68
  107. package/lib/cjs/popup.js +0 -383
  108. package/lib/cjs/property_editor.js +0 -252
  109. package/lib/cjs/radiobtn.js +0 -140
  110. package/lib/cjs/rating.js +0 -102
  111. package/lib/cjs/request.js +0 -246
  112. package/lib/cjs/router.js +0 -139
  113. package/lib/cjs/settings.js +0 -69
  114. package/lib/cjs/sidebarview.js +0 -82
  115. package/lib/cjs/spreadsheet.js +0 -1084
  116. package/lib/cjs/styles.js +0 -275
  117. package/lib/cjs/svgcomponent.js +0 -447
  118. package/lib/cjs/tabbar.js +0 -111
  119. package/lib/cjs/tabview.js +0 -85
  120. package/lib/cjs/textarea.js +0 -165
  121. package/lib/cjs/textedit.js +0 -415
  122. package/lib/cjs/toaster.js +0 -64
  123. package/lib/cjs/tools.js +0 -1197
  124. package/lib/cjs/tooltips.js +0 -157
  125. package/lib/cjs/treeview.js +0 -535
  126. package/lib/cjs/version.js +0 -32
  127. package/lib/cjs/x4dom.js +0 -32
  128. package/lib/cjs/x4events.js +0 -384
  129. package/lib/cjs/x4react.js +0 -72
  130. package/lib/esm/action.js +0 -53
  131. package/lib/esm/app_sockets.js +0 -70
  132. package/lib/esm/application.js +0 -184
  133. package/lib/esm/autocomplete.js +0 -155
  134. package/lib/esm/base_component.js +0 -107
  135. package/lib/esm/button.js +0 -257
  136. package/lib/esm/calendar.js +0 -249
  137. package/lib/esm/canvas.js +0 -358
  138. package/lib/esm/cardview.js +0 -159
  139. package/lib/esm/checkbox.js +0 -134
  140. package/lib/esm/color.js +0 -588
  141. package/lib/esm/colorpicker.js +0 -1475
  142. package/lib/esm/combobox.js +0 -351
  143. package/lib/esm/component.js +0 -1711
  144. package/lib/esm/datastore.js +0 -990
  145. package/lib/esm/dialog.js +0 -490
  146. package/lib/esm/drag_manager.js +0 -147
  147. package/lib/esm/drawtext.js +0 -271
  148. package/lib/esm/fileupload.js +0 -163
  149. package/lib/esm/form.js +0 -304
  150. package/lib/esm/formatters.js +0 -81
  151. package/lib/esm/gridview.js +0 -889
  152. package/lib/esm/i18n.js +0 -257
  153. package/lib/esm/icon.js +0 -261
  154. package/lib/esm/image.js +0 -154
  155. package/lib/esm/input.js +0 -182
  156. package/lib/esm/label.js +0 -90
  157. package/lib/esm/layout.js +0 -310
  158. package/lib/esm/link.js +0 -59
  159. package/lib/esm/listview.js +0 -534
  160. package/lib/esm/menu.js +0 -300
  161. package/lib/esm/messagebox.js +0 -161
  162. package/lib/esm/panel.js +0 -65
  163. package/lib/esm/popup.js +0 -379
  164. package/lib/esm/property_editor.js +0 -251
  165. package/lib/esm/radiobtn.js +0 -136
  166. package/lib/esm/rating.js +0 -97
  167. package/lib/esm/request.js +0 -224
  168. package/lib/esm/router.js +0 -136
  169. package/lib/esm/settings.js +0 -66
  170. package/lib/esm/sidebarview.js +0 -79
  171. package/lib/esm/spreadsheet.js +0 -1097
  172. package/lib/esm/styles.js +0 -270
  173. package/lib/esm/svgcomponent.js +0 -450
  174. package/lib/esm/tabbar.js +0 -107
  175. package/lib/esm/tabview.js +0 -83
  176. package/lib/esm/textarea.js +0 -160
  177. package/lib/esm/textedit.js +0 -412
  178. package/lib/esm/toaster.js +0 -62
  179. package/lib/esm/tools.js +0 -1158
  180. package/lib/esm/tooltips.js +0 -153
  181. package/lib/esm/treeview.js +0 -527
  182. package/lib/esm/x4dom.js +0 -29
  183. package/lib/esm/x4events.js +0 -376
  184. package/lib/esm/x4react.js +0 -71
  185. package/lib/types/app_sockets.d.ts +0 -29
  186. package/lib/types/application.d.ts +0 -104
  187. package/lib/types/autocomplete.d.ts +0 -58
  188. package/lib/types/base_component.d.ts +0 -88
  189. package/lib/types/button.d.ts +0 -151
  190. package/lib/types/calendar.d.ts +0 -82
  191. package/lib/types/canvas.d.ts +0 -92
  192. package/lib/types/cardview.d.ts +0 -87
  193. package/lib/types/checkbox.d.ts +0 -77
  194. package/lib/types/color.d.ts +0 -148
  195. package/lib/types/colorpicker.d.ts +0 -107
  196. package/lib/types/combobox.d.ts +0 -107
  197. package/lib/types/component.d.ts +0 -601
  198. package/lib/types/datastore.d.ts +0 -396
  199. package/lib/types/dialog.d.ts +0 -175
  200. package/lib/types/dom_events.d.ts +0 -302
  201. package/lib/types/drag_manager.d.ts +0 -54
  202. package/lib/types/drawtext.d.ts +0 -48
  203. package/lib/types/fileupload.d.ts +0 -64
  204. package/lib/types/form.d.ts +0 -133
  205. package/lib/types/formatters.d.ts +0 -35
  206. package/lib/types/gridview.d.ts +0 -175
  207. package/lib/types/i18n.d.ts +0 -73
  208. package/lib/types/icon.d.ts +0 -64
  209. package/lib/types/image.d.ts +0 -55
  210. package/lib/types/index.d.ts +0 -84
  211. package/lib/types/input.d.ts +0 -91
  212. package/lib/types/label.d.ts +0 -58
  213. package/lib/types/layout.d.ts +0 -87
  214. package/lib/types/link.d.ts +0 -50
  215. package/lib/types/listview.d.ts +0 -178
  216. package/lib/types/md5.d.ts +0 -61
  217. package/lib/types/menu.d.ts +0 -130
  218. package/lib/types/messagebox.d.ts +0 -69
  219. package/lib/types/panel.d.ts +0 -47
  220. package/lib/types/popup.d.ts +0 -75
  221. package/lib/types/property_editor.d.ts +0 -71
  222. package/lib/types/radiobtn.d.ts +0 -73
  223. package/lib/types/rating.d.ts +0 -53
  224. package/lib/types/request.d.ts +0 -52
  225. package/lib/types/router.d.ts +0 -42
  226. package/lib/types/settings.d.ts +0 -37
  227. package/lib/types/sidebarview.d.ts +0 -49
  228. package/lib/types/spreadsheet.d.ts +0 -222
  229. package/lib/types/styles.d.ts +0 -85
  230. package/lib/types/svgcomponent.d.ts +0 -215
  231. package/lib/types/tabbar.d.ts +0 -58
  232. package/lib/types/tabview.d.ts +0 -49
  233. package/lib/types/textarea.d.ts +0 -77
  234. package/lib/types/textedit.d.ts +0 -123
  235. package/lib/types/toaster.d.ts +0 -42
  236. package/lib/types/tools.d.ts +0 -394
  237. package/lib/types/tooltips.d.ts +0 -46
  238. package/lib/types/treeview.d.ts +0 -144
  239. package/lib/types/version.d.ts +0 -29
  240. package/lib/types/x4dom.d.ts +0 -49
  241. package/lib/types/x4events.d.ts +0 -269
  242. package/lib/types/x4react.d.ts +0 -41
package/lib/esm/index.mjs CHANGED
@@ -1,87 +1,39 @@
1
- /**
2
- * ___ ___ __
3
- * \ \_/ / / _
4
- * \ / /_| |_
5
- * / _ \____ _|
6
- * /__/ \__\ |_|
7
- *
8
- * @file index.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2022 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
- export * from "./application";
30
- export * from "./autocomplete";
31
- export * from "./base_component";
32
- //export * from "./base64"
33
- export * from "./button";
34
- export * from "./calendar";
35
- export * from "./canvas";
36
- export * from "./cardview";
37
- export * from "./checkbox";
38
- export * from "./color";
39
- export * from "./colorpicker";
40
- export * from "./combobox";
41
- export * from "./component";
42
- export * from "./datastore";
43
- export * from "./dialog";
44
- export * from "./dom_events";
45
- export * from "./drag_manager";
46
- export * from "./drawtext";
47
- export * from "./fileupload";
48
- export * from "./form";
49
- export * from "./formatters";
50
- export * from "./gridview";
51
- export * from "./i18n";
52
- export * from "./icon";
53
- export * from "./image";
54
- export * from "./input";
55
- export * from "./label";
56
- export * from "./layout";
57
- export * from "./link";
58
- export * from "./listview";
59
- export * from "./md5";
60
- export * from "./menu";
61
- export * from "./messagebox";
62
- export * from "./panel";
63
- export * from "./popup";
64
- export * from "./property_editor";
65
- export * from "./radiobtn";
66
- export * from "./rating";
67
- export * from "./request";
68
- export * from "./router";
69
- export * from "./settings";
70
- export * from "./sidebarview";
71
- //export * from "./smartedit"
72
- export * from "./spreadsheet";
73
- export * from "./styles";
74
- export * from "./svgcomponent";
75
- export * from "./tabbar";
76
- export * from "./tabview";
77
- export * from "./textarea";
78
- export * from "./textedit";
79
- //export * from "./texthiliter"
80
- export * from "./toaster";
81
- export * from "./tools";
82
- export * from "./tooltips";
83
- export * from "./treeview";
84
- export * from "./x4events";
85
- export * from "./x4react";
86
- export * from "./app_sockets";
87
- export * from "./version";
1
+ var Gi=Object.defineProperty;var ys=(o,e,t)=>e in o?Gi(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var l=(o,e)=>Gi(o,"name",{value:e,configurable:!0});var k=(o,e,t)=>(ys(o,typeof e!="symbol"?e+"":e,t),t);var f=document;var $i=l(function(){this.propagationStopped=!0},"stopPropagation"),qi=l(function(){this.defaultPrevented=!0},"preventDefault");function P(o){return{stopPropagation:$i,preventDefault:qi,...o}}l(P,"BasicEvent");function ne(o=null){return P({context:o})}l(ne,"EvClick");function M(o,e=null){return P({value:o,context:e})}l(M,"EvChange");function ie(o,e=null){return P({selection:o,context:e})}l(ie,"EvSelectionChange");function fe(o,e=null){return P({uievent:o,context:e})}l(fe,"EvContextMenu");function Yi(o,e=0,t=null){return P({timer:o,time:e,context:t})}l(Yi,"EvTimer");function un(o,e,t){return P({msg:o,params:e,source:t})}l(un,"EvMessage");function Xi(o,e,t){return P({element:o,data:e,context:t})}l(Xi,"EvDrag");function Zi(o,e){return P({code:o,message:e})}l(Zi,"EvError");var ce=class{m_source;m_eventRegistry;m_defaultHandlers;constructor(e=null){this.m_source=e??this}emit(e,t){this._emit(e,t)}_emit(e,t){let i=this.m_eventRegistry?.get(e),s=this.m_defaultHandlers?.get(e);if(t||(t={}),t.source||(t.source=this.m_source),t.type||(t.type=e),i&&i.length)if(t.preventDefault||(t.preventDefault=qi),t.stopPropagation||(t.stopPropagation=$i),i.length==1)i[0](t);else{let n=i.slice();for(let r=0,a=n.length;r<a&&(n[r](t),!t.propagationStopped);r++);}if(s&&s.length&&!t.defaultPrevented)return s[0](t)}signal(e,t,i=-1){this._signal(e,t,i)}_signal(e,t,i=-1){if(!this.m_eventRegistry)return;let s=this.m_eventRegistry.get(e);if(!(!s||!s.length))if(t||(t={}),t.type||(t.type=e),t.source||(t.source=this.m_source),t.preventDefault=t.stopPropagation=()=>{console.error("this event cannot be stopped not default prevented")},s.length==1&&i==-1)s[0](t);else{let n=s.slice(),r=l(()=>{for(let a=0,h=n.length;a<h;a++)n[a](t)},"call");i==-1?r():setTimeout(r,i)}}once(e,t){this._once(e,t)}_once(e,t){let i=l(s=>{this._off(e,i),t(s)},"newCallback");if(this._on(e,i),!t)return new Promise(function(s){t=s})}setDefaultHandler(e,t){let i=this.m_defaultHandlers;i||(i=this.m_defaultHandlers=new Map);let s=i.get(e);if(s){let n=s.indexOf(t);n!=-1&&s.splice(n,1),s.unshift(t)}else i.set(e,[t])}removeDefaultHandler(e,t){let i=this.m_defaultHandlers;if(!i)return;let s=i.get(e);if(s){let n=s.indexOf(t);n!=-1&&s.splice(n,1)}}listen(e){for(let t in e)this._on(t,e[t])}defaults(e){for(let t in e)this.setDefaultHandler(t,e[t])}on(e,t){return this._on(e,t)}_on(e,t,i=!1){this.m_eventRegistry||(this.m_eventRegistry=new Map);let s=this.m_eventRegistry.get(e);return s||(s=[],this.m_eventRegistry.set(e,s)),s.indexOf(t)==-1&&(i?s.unshift(t):s.push(t)),{dispose:()=>{this._off(e,t)}}}off(e,t){return this._off(e,t)}_off(e,t){if(!this.m_eventRegistry)return;let i=this.m_eventRegistry.get(e);if(!i)return;let s=i.indexOf(t);s!==-1&&i.splice(s,1)}removeAllListeners(e){e?(this.m_eventRegistry&&(this.m_eventRegistry[e]=void 0),this.m_defaultHandlers&&(this.m_defaultHandlers[e]=void 0)):this.m_eventRegistry=this.m_defaultHandlers=void 0}};l(ce,"EventSource");var oe=class extends ce{m_props;#e;constructor(e){super(),this.m_props=e,e.events&&this.listen(e.events)}startTimer(e,t,i=!0,s=null){this.#e?this.stopTimer(e):this.#e=new Map;let n=(i?setInterval:setTimeout)(r=>{s?s(e,r):this.emit("timer",Yi(e,r))},t);this.#e.set(e,()=>{(i?clearInterval:clearTimeout)(n)})}stopTimer(e){let t=this.#e.get(e);t&&t()}disposeTimers(){this.#e?.forEach(e=>e()),this.#e=void 0}singleShot(e,t=0){setTimeout(e,t)}mapPropEvents(e,...t){t.forEach(i=>{let s=i;e[s]&&this._on(s,e[s])})}};l(oe,"BaseComponent");var Ji=Symbol("i18n"),Ne={};function Qi(o,e){Ne[o]={name:o,base:e,src_translations:{},translations:{}}}l(Qi,"createLanguage");function es(o){return Ne[o]!==void 0}l(es,"isLanguage");function ts(o,...e){if(!es(o))return;let t=Ne[o];e.forEach(i=>{is(t.src_translations,i,t.base)}),t.translations=ss(t.src_translations,t.base,!0)}l(ts,"addTranslation");function is(o,e,t){for(let i in e)o[i]instanceof Object?is(o[i],e[i],t):(o[i]=e[i],o[i]=ss(o[i],t,!1));return o}l(is,"_patch");var It;function Fs(o){for(;o;){let e=Ne[o],t=e.translations,i;for(let s of It){if(i=t[s],i===void 0)break;t=i}if(i!==void 0)return t;o=e.base}console.error("I18N error: unable to find","_tr."+It.join("."))}l(Fs,"_findBaseTrans");function ss(o,e,t){return new Proxy(o,{get:(i,s)=>{t?It=[s]:It.push(s);let n=i[s];return n===void 0&&e&&(n=Fs(e),i[s]=n),n}})}l(ss,"_mk_proxy");var D={};function ks(o){es(o)&&(D=Ne[o].translations,D[Ji]=o)}l(ks,"selectLanguage");function vn(){return D[Ji]}l(vn,"getCurrentLanguage");function Cn(){return Object.keys(Ne)}l(Cn,"getAvailableLanguages");var Is={global:{ok:"OK",cancel:"Annuler",ignore:"Ignorer",yes:"Oui",no:"Non",open:"Ouvrir",new:"Nouveau",delete:"Supprimer",close:"Fermer",save:"Enregistrer",search:"Rechercher",search_tip:"Saisissez le texte \xE0 rechercher. <b>Enter</b> pour lancer la recherche. <b>Esc</b> pour annuler.",required_field:"information requise",invalid_format:"format invalide",invalid_email:"adresse mail invalide",invalid_number:"valeur num\xE9rique invalide",diff_date_seconds:"{0} secondes",diff_date_minutes:"{0} minutes",diff_date_hours:"{0} heures",invalid_date:"Date non reconnue ({0})",empty_list:"Liste vide",date_input_formats:"d/m/y|d.m.y|d m y|d-m-y|dmy",date_format:"D/M/Y",day_short:["dim","lun","mar","mer","jeu","ven","sam"],day_long:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],month_short:["jan","f\xE9v","mar","avr","mai","jun","jui","ao\xFB","sep","oct","nov","d\xE9c"],month_long:["janvier","f\xE9vrier","mars","avril","mai","juin","juillet","ao\xFBt","septembre","octobre","novembre","d\xE9cembre"],property:"Propri\xE9t\xE9",value:"Valeur",err_403:"Vous n'avez pas les droits suffisants pour effectuer cette action",copy:"Copier",cut:"Couper",paste:"Coller"}},Ds={global:{ok:"OK",cancel:"Cancel",ignore:"Ignore",yes:"Yes",no:"No",open:"Open",new:"New",delete:"Delete",close:"Close",save:"Save",search:"Search",search_tip:"Type in the text to search. <b>Enter</b> to start the search. <b>Esc</b> to cancel.",required_field:"missing information",invalid_format:"invalid format",invalid_email:"invalid email address",invalid_number:"bad numeric value",diff_date_seconds:"{0} seconds",diff_date_minutes:"{0} minutes",diff_date_hours:"{0} hours",invalid_date:"Unrecognized date({0})",empty_list:"Empty list",date_input_formats:"m/d/y|m.d.y|m d y|m-d-y|mdy",date_format:"M/D/Y",day_short:["sun","mon","tue","wed","thu","fri","sat"],day_long:["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],month_short:["jan","feb","mar","apr","may","jun","jui","aug","sep","oct","nov","dec"],month_long:["january","february","march","april","mau","june","jully","august","september","october","november","december"],property:"Property",value:"Value",err_403:"You do not have sufficient rights to do that action",copy:"Copy",cut:"Cut",paste:"Paste"}};Qi("fr",null);ts("fr",Is);Qi("en","fr");ts("en",Ds);ks("fr");function Mt(){return"ontouchstart"in window}l(Mt,"isTouchDevice");function je(o,e){let t=Math.pow(10,e),i=Math.round(o*t)/t;return Object.is(i,-0)&&(i=0),i}l(je,"roundTo");function rs(o){return o=o.replace(/\s*/g,""),o=o.replace(",","."),o.length==0?0:parseFloat(o)}l(rs,"parseIntlFloat");function Ue(o){let e=o;return e=e.replace(/([a-z])([A-Z])/g,"$1 $2"),e=e.toLowerCase(),e=e.replace(/[^- a-z0-9]+/g," "),e.indexOf(" ")<0?e:(e=e.trim(),e.replace(/ /g,"-"))}l(Ue,"pascalCase");function kn(o){let e=o.toLowerCase();return e=e.replace(/[^a-zA-Z0-9]+(.)/g,(t,i)=>i.toUpperCase()),e}l(kn,"camelCase");var ae=class{x;y;constructor(e=0,t=0){this.x=e,this.y=t}};l(ae,"Point");var ge=class{width;height;constructor(e=0,t=0){this.width=e,this.height=t}};l(ge,"Size");var Y=class{left;top;width;height;constructor(e,t,i,s){if(e===void 0)this.left=this.top=this.right=this.bottom=0;else if(e instanceof Y||e instanceof DOMRect){let n=e;this.left=n.left,this.top=n.top,this.width=n.width,this.height=n.height}else this.left=e,this.top=t,this.width=i,this.height=s}set(e,t,i,s){this.left=e,this.top=t,this.width=i,this.height=s}get bottom(){return this.top+this.height}set bottom(e){this.height=e-this.top}get right(){return this.left+this.width}set right(e){this.width=e-this.left}get topLeft(){return new ae(this.left,this.top)}get bottomRight(){return new ae(this.right,this.bottom)}get size(){return new ge(this.width,this.height)}moveTo(e,t){return this.left=e,this.top=t,this}movedTo(e,t){return new Y(e,t,this.width,this.height)}moveBy(e,t){return this.left+=e,this.top+=t,this}movedBy(e,t){return new Y(this.left+e,this.top+t,this.width,this.height)}isEmpty(){return this.width==0&&this.height==0}normalize(){let e=this.width,t=this.height;return e<0&&(this.left+=e,this.width=-e),t<0&&(this.top+=t,this.height=-t),this}normalized(){let e=new Y(this),t=e.width,i=e.height;return t<0&&(e.left+=t,e.width=-t),i<0&&(e.top+=i,e.height=-i),e}containsPt(e,t){return e>=this.left&&e<=this.right&&t>=this.top&&t<=this.bottom}contains(e){return e instanceof Y?e.left>=this.left&&e.right<=this.right&&e.top>=this.top&&e.bottom<=this.bottom:e.x>=this.left&&e.x<this.right&&e.y>=this.top&&e.y<this.bottom}touches(e){return!(this.left>e.right||this.right<e.left||this.top>e.bottom||this.bottom<e.top)}inflate(e,t){t===void 0&&(t=e),this.left-=e,this.top-=t,this.width+=e+e,this.height+=t+t}inflatedBy(e,t){return t===void 0&&(t=e),new Y(this.left-e,this.top-t,this.width+e+e,this.height+t+t)}combine(e){let t=Math.min(this.left,e.left),i=Math.min(this.top,e.top),s=Math.max(this.right,e.right),n=Math.max(this.bottom,e.bottom);this.left=t,this.top=i,this.right=s,this.bottom=n}};l(Y,"Rect");function Ze(o,...e){return o.replace(/{(\d+)}/g,function(t,i){return typeof e[i]<"u"?e[i]:t})}l(Ze,"sprintf");function Pt(o,e=!1){if(!o||o.length==0)return"";let t=o.replace(/[<>\&\"\']/g,function(i){return"&#"+i.charCodeAt(0)+";"});return e&&(t=t.replace(/(\r\n|\n\r|\r|\n)/g,"<br/>")),t}l(Pt,"escapeHtml");function In(o,e=!1){if(o==null||!B(o)||o.length==0)return"";let t="";for(let i=0;i<o.length;i++){let s=o.codePointAt(i);s>127?t+="&#"+s+";":s==60?t+="&lt;":t+=o.charAt(i)}return t}l(In,"removeHtmlTags");var Ms="fr-FR";function Dn(o){Ms=o}l(Dn,"_date_set_locale");function Mn(o,e){return $(o)}l(Mn,"date_format");function Pn(o,e,t){var i=(o.getTime()-e.getTime())/1e3;let s=i;if(s<60)return Ze(D.global.diff_date_seconds,Math.round(s));let n=Math.floor(s/60);if(n<60)return Ze(D.global.diff_date_minutes,Math.round(n));let r=Math.floor(n/60);return Ze(D.global.diff_date_hours,r,n%60)}l(Pn,"date_diff");function Sn(o,e){return e?$(o,"Y-M-D H:I:S"):$(o,"Y-M-D")}l(Sn,"date_to_sql");function An(o){return new Date(o+" GMT")}l(An,"date_sql_utc");function Qe(o){return o.getFullYear()<<16|o.getMonth()<<8|o.getDate()}l(Qe,"date_hash");Date.prototype.hash=function(){return Qe(this)};function et(o){return new Date(o.getTime())}l(et,"date_clone");function ei(o){let e=new Date(o.getFullYear(),0,1),t=(o.valueOf()-e.valueOf())/864e5;return Math.floor((t+e.getDay()+1)/7)}l(ei,"date_calc_weeknum");function St(o,e=D.global.date_input_formats){let t=e.split("|");for(let i of t){let s="";for(let a of i)a=="d"||a=="D"?s+="(?<day>\\d{1,2})":a=="m"||a=="M"?s+="(?<month>\\d{1,2})":a=="y"||a=="Y"?s+="(?<year>\\d{1,4})":a=="h"||a=="H"?s+="(?<hour>\\d{1,2})":a=="i"||a=="I"?s+="(?<min>\\d{1,2})":a=="s"||a=="S"?s+="(?<sec>\\d{1,2})":a==" "?s+="\\s+":s+="\\s*\\"+a+"\\s*";let r=new RegExp("^"+s+"$","m").exec(o);if(r){let a=new Date,h=parseInt(r.groups.day??"1"),m=parseInt(r.groups.month??"1"),c=parseInt(r.groups.year??a.getFullYear()+""),d=parseInt(r.groups.hour??"0"),p=parseInt(r.groups.min??"0"),g=parseInt(r.groups.sec??"0");c>0&&c<100&&(c+=2e3);let x=new Date(c,m-1,h,d,p,g,0),_=x.getFullYear(),F=x.getMonth()+1,S=x.getDate();return _!=c||F!=m||S!=h?null:x}}return null}l(St,"parseIntlDate");function $(o,e=D.global.date_format){if(!o)return"";let t={year:o.getFullYear(),month:o.getMonth()+1,day:o.getDate(),wday:o.getDay(),hours:o.getHours(),minutes:o.getMinutes(),seconds:o.getSeconds(),milli:o.getMilliseconds()},i="",s=0;for(let n of e){if(n=="{"){if(++s==1)continue}else if(n=="}"&&--s==0)continue;if(s){i+=n;continue}n=="d"?i+=t.day:n=="D"?i+=ye(t.day,-2):n=="j"?i+=D.global.day_short[t.wday]:n=="J"?i+=D.global.day_long[t.wday]:n=="w"?i+=ei(o):n=="W"?i+=ye(ei(o),-2):n=="m"?i+=t.month:n=="M"?i+=ye(t.month,-2):n=="o"?i+=D.global.month_short[t.month-1]:n=="O"?i+=D.global.month_long[t.month-1]:n=="y"||n=="Y"?i+=ye(t.year,-4):n=="a"||n=="A"?i+=t.hours<12?"am":"pm":n=="h"?i+=t.hours:n=="H"?i+=ye(t.hours,-2):n=="i"?i+=t.minutes:n=="I"?i+=ye(t.minutes,-2):n=="s"?i+=t.seconds:n=="S"?i+=ye(t.seconds,-2):n=="l"?i+=t.milli:n=="L"?i+=ye(t.milli,-3):i+=n}return i}l($,"formatIntlDate");function Tn(o,e){if(e===void 0&&(e=new Date),!o)return 0;let t=e.getFullYear()-o.getFullYear();return(e.getMonth()<o.getMonth()||e.getMonth()==o.getMonth()&&e.getDate()<o.getDate())&&t--,t}l(Tn,"calcAge");Date.prototype.isSameDay=function(o){return this.getDate()==o.getDate()&&this.getMonth()==o.getMonth()&&this.getFullYear()==o.getFullYear()};Date.prototype.hash=function(){return Qe(this)};Date.prototype.clone=function(){return et(this)};Date.prototype.weekNum=function(){return ei(this)};Date.prototype.format=function(o){return $(this,o)};Date.prototype.addDays=function(o){return this.setDate(this.getDate()+o),this};function os(o,e,t){let i=new Blob([o],{type:e}),s=window.URL.createObjectURL(i),n=f.createElement("a");n.style.display="none",n.href=s,n.download=t,f.body.appendChild(n),n.click(),window.URL.revokeObjectURL(s)}l(os,"downloadData");function B(o){return typeof o=="string"}l(B,"isString");function X(o){return o instanceof Array}l(X,"isArray");function Z(o){return o instanceof Function}l(Z,"isFunction");function as(o){return!!o&&o.constructor===Object}l(as,"isLiteralObject");function ye(o,e,t="0"){let i;return B(o)?i=o:i=""+o,e>0?i.padEnd(e,t):i.padStart(-e,t)}l(ye,"pad");function tt(o){return typeof o=="number"&&isFinite(o)}l(tt,"isNumber");function Bn(o){let e=f.createElement("div");return e.style.position="absolute",e.style.fontFamily=o,e.style.fontSize="44px",e.style.opacity="0.001",e.innerText="X",f.body.appendChild(e),new Promise(t=>{let i=e.getBoundingClientRect(),s=setInterval(()=>{e.getBoundingClientRect().height!=i.height&&(clearInterval(s),f.body.removeChild(e),t())},0)})}l(Bn,"waitFontLoading");function ls(o,e=0,...t){setTimeout(o,e,...t)}l(ls,"deferCall");function ue(o){requestAnimationFrame(o)}l(ue,"asap");function Ln(o){if(!o)return"";let e=o.split(`
2
+ `),t="para",i="p",s=[];return e.forEach(n=>{let r=n.trim();if(t=="para"){if(r[0]=="-")r=r.substr(1),s.push("<ul>"),t="list",i="li";else if(r[0]==">")r=r.substr(1),s.push("<blockquote>"),t="quote",i="p";else if(r[0]=="#"){let m=0;do r=r.substr(1),m++;while(r[0]=="#"&&m<5);i="h"+m,t="title"}}else t=="list"?r[0]!="-"?(s.push("</ul>"),t="para",i="p"):r=r.substr(1):t=="quote"&&(r[0]!=">"?(s.push("</blockquote>"),t="para",i="p"):r=r.substr(1));let a=/\*\*([^*]+)\*\*/gi;r=Pt(r,!1),r=r.replace(a,(m,...c)=>"<b>"+m.substr(2,m.length-4)+"</b>");let h=/\*([^*]+)\*/gi;r=r.replace(h,(m,...c)=>"<i>"+m.substr(1,m.length-2)+"</i>"),r==""&&(r="&nbsp;"),s.push(`<${i}>`+r+`</${i}>`),t=="title"&&(t="para",i="p")}),t=="list"?s.push("</ul>"):t=="quote"&&s.push("</blockquote>"),s.join("")}l(Ln,"markdownToHtml");var Je=class extends Error{m_code;constructor(e,t){e instanceof Response?(super(e.statusText),this.m_code=e.status):(super(t),this.m_code=e)}get code(){return this.m_code}};l(Je,"NetworkError");function re(o,e){let t="offsetX",i="offsetY";if(e&&(t="clientX",i="clientY"),o.type=="mousemove"||o.type=="mousedown"||o.type=="mouseup"){let s=o;return new ae(s[t],s[i])}else if(o.type=="pointermove"||o.type=="pointerdown"||o.type=="pointerup"){let s=o;return new ae(s[t],s[i])}else if(o.type=="touchmove"||o.type=="touchstart"){let s=o;return new ae(s.touches[0][t],s.touches[0][i])}else if(o.type=="contextmenu"){let s=o;return new ae(s[t],s[i])}else return new ae(0,0)}l(re,"getMousePos");function it(o,e,t){return Math.min(Math.max(o,e),t)}l(it,"clamp");var G=class extends String{constructor(e){super(e)}static from(e){return new G(e)}};l(G,"HtmlString");function st(o,...e){return G.from(String.raw(o,...e))}l(st,"html");function le(o){return o instanceof G}l(le,"isHtmlString");var Qt=class{static copy(e){navigator.clipboard&&navigator.clipboard.writeText(JSON.stringify(e))}static paste(e){navigator.clipboard?navigator.clipboard.readText().then(t=>e(t)):console.error("no clipboard, are you in https ?")}};l(Qt,"Clipboard");function Hn(o){let e=-1,t=Buffer.from(o),i=0,s=t.length;for(;i<s;)e=e>>>8^Ps[(e^t[i])&255],i++;return(e^-1)>>>0}l(Hn,"crc32");var Ps=new Int32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]),Rn=l(o=>new Dt(o),"mix"),Dt=class{superclass;constructor(e){this.superclass=e}with(...e){return e.reduce((t,i)=>i(t),this.superclass)}};l(Dt,"MixinBuilder");function ti(...o){let e="";for(let t of o)if(typeof t=="string")e+=" "+t;else if(t)for(let i in t)t[i]&&(e+=" "+i);return e}l(ti,"classNames");function zn(o,e){(!o||o==null)&&(o=8),e||(e=[{chars:"abcdefghijklmnopqrstuvwxyz",min:3},{chars:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",min:2},{chars:"0123456789",min:2},{chars:"!@#$*|%+-_.;",min:2}]);let t="",i=0;e.forEach(function(n){t+=n.chars,i+=n.min}),o<i&&(o=i),e.push({chars:t,min:o-i});let s="";return e.forEach(function(n){n.min>0&&(s+=ns(n.chars,n.min))}),ns(s)}l(zn,"generatePassword");function ns(o,e){let t=o.split("").sort(()=>.5-Math.random()).join("");return e>0&&(t=t.substr(0,e)),t}l(ns,"shuffle");function Vn(o="127.0.0.1",e="9876",t){let i;function s(){document.body.style.visibility="hidden";let h=[].slice.call(document.getElementsByTagName("link")),m=document.getElementsByTagName("head")[0];for(let c=0;c<h.length;++c){let d=h[c];m.removeChild(d);let p=d.rel;if(d.href&&typeof p!="string"||p.length==0||p.toLowerCase()=="stylesheet"){let g=d.href.replace(/(&|\?)_cacheOverride=\d+/,"");d.href=g+(g.indexOf("?")>=0?"&":"?")+"_cacheOverride="+new Date().valueOf()}m.appendChild(d)}i&&clearTimeout(i),i=setTimeout(()=>{document.body.style.visibility="unset"},50)}l(s,"refreshCSS");let r=`${window.location.protocol==="https:"?"wss://":"ws://"}${o}:${e}/ws`,a=new WebSocket(r);a.onmessage=function(h){h.data=="reload"?t?t():window.location.reload():h.data=="refreshcss"&&s()},console.log("Live reload enabled.")}l(Vn,"installHMR");var rt=class{m_sheet;m_rules=new Map;constructor(){function e(t){for(let i=0;i<f.styleSheets.length;i++){let s=f.styleSheets[i];if(s.title===t)return s}}if(l(e,"getStyleSheet"),this.m_sheet=e("@dynamic-css"),!this.m_sheet){let t=f.createElement("style");t.setAttribute("id","@dynamic-css"),f.head.appendChild(t),this.m_sheet=t.sheet}}setRule(e,t){if(B(t)){let i=this.m_rules.get(e);i!==void 0?this.m_sheet.deleteRule(i):i=this.m_sheet.cssRules.length,this.m_rules.set(e,this.m_sheet.insertRule(t,i))}else{let i=1;for(let s in t){let n=s+" { ",r=t[s];for(let a in r){let h=r[a];for(let m=0;m<h.length;m++)n+=a+": "+h[m]+"; "}n+="}",this.setRule(e+"--"+i,n),i++}}}static getVar(e){return rt.doc_style||(rt.doc_style=getComputedStyle(f.documentElement)),e[0]!="-"&&(e="--"+e),rt.doc_style.getPropertyValue(e)}},he=rt;l(he,"Stylesheet"),k(he,"guid",1),k(he,"doc_style");var nt=class{result={};parse(e){return this.result={},this.parse_json("",e),nt.mk_string(this.result)}static mk_string(e){let t="";for(let i in e){let s=e[i];t+=i+" { ";for(let n in s){let r=s[n];for(let a=0;a<r.length;a++)t+=n+": "+r[a]+"; "}t+=`}
3
+ `}return t}parse_json(e,t){e&&!this.result[e]&&(this.result[e]={});for(let i in t){let s=t[i];if(X(s)){let n=s;for(let r=0;r<n.length;r++)this.addProperty(e,i,n[r])}else switch(typeof s){case"number":{this.addProperty(e,i,s);break}case"string":{this.addProperty(e,i,s);break}case"object":{this.parse_json(this.makeSelectorName(e,i),s);break}default:{console.error("ignoring unknown type "+typeof s+" in property "+i);break}}}}makePropertyName(e){return Ue(e)}makeSelectorName(e,t){let i=[],s=t.split(/\s*,\s*/),n=e.split(/\s*,\s*/);for(let r=0;r<n.length;r++){let a=n[r];for(let h=0;h<s.length;h++){let m=s[h],c=!1;m.charAt(0)=="&"&&(m=m.substr(1),c=!0),m.charAt(0)==="%"&&(m=".o-"+m.substr(1)),c?i.push(a+m):i.push(a?a+" "+m:m)}}return i.join(", ")}addProperty(e,t,i){let s=t.split(/\s*,\s*/);for(let n=0;n<s.length;n++){let r=this.makePropertyName(s[n]);this.result[e][r]?this.result[e][r].push(i):this.result[e][r]=[i];let h={"box-shadow":["-moz-box-shadow","-webkit-box-shadow"],"border-radius":["-moz-border-radius","-webkit-border-radius"],"border-radius-topleft":["-moz-border-radius-topleft","-webkit-border-top-left-radius"],"border-radius-topright":["-moz-border-radius-topright","-webkit-border-top-right-radius"],"border-radius-bottomleft":["-moz-border-radius-bottomleft","-webkit-border-bottom-left-radius"],"border-radius-bottomright":["-moz-border-radius-bottomright","-webkit-border-bottom-right-radius"]}[r];for(let m=0;h&&m<h.length;m++)this.addProperty(e,h[m],i)}}};l(nt,"CSSParser");var Ke=class{m_style;constructor(e){this.m_style=e}value(e){return e=Ue(e),this.m_style[e]}parse(e){return e=Ue(e),parseInt(this.m_style[e])}get style(){return this.m_style}};l(Ke,"ComputedStyle");var Ss="x-",Te=Symbol(),de=Symbol(),si={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridColumn:1,fontWeight:1,lineClamp:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},hs={mouseleave:1,mouseenter:1,load:1,unload:1,scroll:1,focus:1,blur:1,rowexit:1,beforeunload:1,stop:1,dragdrop:1,dragenter:1,dragexit:1,draggesture:1,dragover:1,contextmenu:1,create:2,sizechange:2},As={touchstart:1,touchmove:1,touchend:1},Ts=/^-?\d+(\.\d+)?$/;function ke(o=null){return P({context:o})}l(ke,"EvDblClick");function ni(o=!0,e=null){return P({focus:o,context:e})}l(ni,"EvFocus");var v=class extends oe{m_dom;m_iprops;constructor(e=null){super(e??{}),this.m_iprops={classes:{},dom_events:{},uid:v.__comp_guid++,inrender:!1},this.m_props.cls&&this.addClass(this.m_props.cls)}get uid(){return this.m_iprops.uid}setContent(e,t=!1){this.m_props.content=e??[],!(this.m_iprops.inrender||!this.m_dom)&&(t?this.update():this._updateContent())}getContent(){return this.m_props.content}appendChild(e){if(!e)return;let t=l(i=>{this.m_props.content?X(this.m_props.content)||(this.m_props.content=[this.m_props.content]):this.m_props.content=[],this.m_props.content.push(i),this.m_dom&&this._appendChild(i)},"append");X(e)?e.forEach(t):t(e)}setTag(e,t){this.m_props.tag=e,t&&(this.m_props.ns=t)}getData(e){if(this.m_props.data!==void 0)return this.m_props.data[e.toString()]}setData(e,t){let i=this.m_props.data;i===void 0&&(i=this.m_props.data={}),i[e.toString()]=t}get dom(){return this.m_dom}show(e){e===void 0||e===!0?this.removeClass("@hidden"):this.addClass("@hidden")}hide(){this.addClass("@hidden")}enable(e){e===void 0||e===!0?(this.removeClass("@disable"),this.removeAttribute("disabled")):this.disable()}disable(){this.addClass("@disable"),this.setAttribute("disabled","")}focus(){console.assert(!!this.m_dom),this.m_dom.focus()}setStyle(e){for(let t in e)this.setStyleValue(t,e[t])}setStyleValue(e,t){let i=this.m_props.style;i||(i=this.m_props.style={}),i[e]=t,this._setDomStyleValue(e,t)}_setDomStyleValue(e,t){this.m_dom&&(t===void 0?t=null:!si[e]&&(tt(t)||Ts.test(t))&&(t=t+"px"),this.m_dom.style[e]=t)}getComputedStyle(e){return this.dom?new Ke(getComputedStyle(this.dom,e??null)):new Ke(this.m_props.style)}getStyleValue(e){return this.getComputedStyle()[e]}setAttributes(e){for(let t in e)this.setAttribute(t,e[t])}setAttribute(e,t){if(t===!1||t===void 0)this.removeAttribute(e);else{t===!0?t="":tt(t)&&(t=""+t);let i=this.m_props.attrs;i||(i=this.m_props.attrs={}),i[e]=t,this._setDomAttribute(e,t)}}_setDomAttribute(e,t){this.m_dom&&this.m_dom.setAttribute(e,t)}removeAttribute(e){let t=this.m_props.attrs;t&&(delete t[e],this.m_dom&&this.m_dom.removeAttribute(e))}getAttribute(e){return this.m_dom?this.m_dom.getAttribute(e):this.m_props.attrs?this.m_props.attrs[e]:void 0}hasAttribute(e){return this.m_dom?this.m_dom.hasAttribute(e):this.m_props.attrs.hasOwnProperty(e)}addClass(e){if(e==null||(e=e.trim(),e===""))return;let t=l(s=>{s==null||s===""||(s=this._makeCls(s),i[s]=!0,this.m_dom&&this.m_dom.classList.add(s))},"add"),i=this.m_iprops.classes;e.indexOf(" ")<0?t(e):e.split(" ").forEach(n=>t(n))}removeClass(e){if(e===void 0)return;let t=l(i=>{i==null||i===""||(i=this._makeCls(i),delete this.m_iprops.classes[i],this.m_dom&&this.m_dom.classList.remove(i))},"remove");if(e.indexOf(" ")<0)t(e);else{let i=e.trim().split(" ");for(let s of i)s!=null&&s!==""&&t(s)}}setClass(e,t){return t?this.addClass(e):this.removeClass(e),this}toggleClass(e){let t=l(i=>{i===void 0&&i===null&&i===""||(i=this._makeCls(i),this.m_iprops.classes[i]?delete this.m_iprops.classes[i]:this.m_iprops.classes[i]=!0,this.m_dom&&this.m_dom.classList.toggle(i))},"toggle");if(e.indexOf(" ")<0)t(e);else{let i=e.trim().split(" ");for(let s of i)t(s)}}hasClass(e){let t=this._makeCls(e);return this.m_dom?this.dom.classList.contains(t):!!this.m_iprops.classes[t]}clearClasses(){if(this.m_iprops.classes={},this.m_dom)return this.m_dom.classList.value=""}_build(){return this.m_dom?this.m_dom:(this._createDOM(),this.m_dom)}render(e){}_createDOM(){if(this.m_dom)return this.m_dom;let e=this.m_props;if(e.tabIndex!==void 0&&this._setTabIndex(e.tabIndex),this.render(e),e.left!==void 0&&this.setStyleValue("left",e.left),e.top!==void 0&&this.setStyleValue("top",e.top),e.width!==void 0&&this.setStyleValue("width",e.width),e.height!==void 0&&this.setStyleValue("height",e.height),e.flex!==void 0&&(this.addClass("@flex"),e.flex!=1&&this.setStyleValue("flex",e.flex)),e.enabled===!1&&this.disable(),e.tooltip!==void 0&&this.setAttribute("tip",e.tooltip.replace(/\n/gi,"<br/>")),e.dom_events)for(let a in e.dom_events)this._setDomEvent(a,e.dom_events[a]);this._genClassName(),this.m_props.cls=void 0;let t=this.m_iprops;e.ns?this.m_dom=f.createElementNS(e.ns,e.tag??"div"):this.m_dom=f.createElement(e.tag??"div"),this.m_dom[de]=this,this.m_dom.classList.add(...Object.keys(t.classes));let i=e.style;if(i)for(let a in i)this._setDomStyleValue(a,i[a]);let s=e.attrs;if(s)for(let a in s){let h=s[a];h!==!1&&h!==void 0&&this._setDomAttribute(a,s[a])}this.m_props.id&&this._setDomAttribute("id",this.m_props.id);let n=this.m_iprops.dom_events;if(n)for(let a in n){let h=n[a];for(let m of h)this.createEvent(a,m)}let r=e.content;return r&&(X(r)||(r=[r]),r.forEach(a=>{a&&(B(a)?this.m_dom.insertAdjacentText("beforeend",a):le(a)?this.m_dom.insertAdjacentHTML("beforeend",a):a instanceof v?this.m_dom.append(a._build()):console.log("unknown element type: ",a))})),v.__createObserver||(v.__createObserver=new MutationObserver(v._observeCreation),v.__createObserver.observe(f.body,{childList:!0,subtree:!0})),this.m_dom}_setTabIndex(e,t=0){e===!0?e=0:e===void 0&&(e=t),e!==!1&&e!==void 0&&this.setAttribute("tabindex",e),this.m_props.tabIndex=e}static _observeCreation(e){for(let t of e)if(t.type=="childList")for(let i=0,s=t.addedNodes.length;i<s;i++){let r=t.addedNodes[i][de];r&&(r.enumChilds(a=>{a.dom&&a.m_iprops.dom_events&&a.m_iprops.dom_events.create&&a.dom.dispatchEvent(new Event("create")),a.componentCreated()},!0),r.m_iprops.dom_events&&r.m_iprops.dom_events.create&&r.dom.dispatchEvent(new Event("create")),r.componentCreated())}}dispose(){this.m_dom&&this._dispose(!0,!0)}_dispose(e,t){let i=this.m_dom;delete i[de],delete i[Te],e&&i.remove(),this.enumChilds(s=>{s._dispose(!1,!0)}),this.m_dom=null,t&&this.disposeTimers(),this.componentDisposed()}componentDisposed(){}componentCreated(){}update(e=0){if(this.m_dom){let t=l(()=>{let i=this.m_dom;this._dispose(!1,!1);let s=this._build();console.assert(!!i.parentNode,"update in componentCreated is not allowed, use updateContent"),i.parentNode.replaceChild(s,i)},"_update");e?this.singleShot(t,e):t()}}_empty(){let e=this.m_dom;if(e)for(;e.firstChild;)e.removeChild(e.firstChild)}_updateContent(){if(!this.m_dom)return;this._empty();let e=this.m_props.content;e&&(X(e)||(e=[e]),e.forEach(t=>{t&&(le(t)?this.m_dom.insertAdjacentHTML("beforeend",t):t instanceof v?this.m_dom.append(t._build()):this.m_dom.insertAdjacentText("beforeend",t+""))}))}getBoundingRect(e=!1){console.assert(this.dom!=null,"cannot get bounding rect of an non DOM element");let t=this.dom.getBoundingClientRect(),i=new Y(t.left,t.top,t.width,t.height);if(e){let s=this.getComputedStyle(),n=s.parse("marginTop"),r=s.parse("marginBottom"),a=s.parse("marginLeft"),h=s.parse("marginRight");i.left-=a,i.width+=a+h,i.top-=n,i.height+=n+r}return i}setDomEvent(e,t){let i=t;this._setDomEvent(e,i)}_setDomEvent(e,t){this.m_iprops.dom_events||(this.m_iprops.dom_events={});let i=this.m_iprops.dom_events[e];i?i.push(t):i=this.m_iprops.dom_events[e]=[t],this.m_dom&&this.createEvent(e,t)}clearDomEvent(e){if(!this.m_iprops.dom_events)return;delete this.m_iprops.dom_events[e];let t=this.m_dom;if(t){let i=t[Te];i&&delete i[e]}}createEvent(e,t){let i=this.m_dom,s=i[Te];s||(s=i[Te]={}),s[e]?s[e].push(t):s[e]=[t],hs[e]===1?i["on"+e]=v._dispatchUnbubbleEvent:v.__privateEvents[e]||(v.__privateEvents[e]=!0,As[e]?f.addEventListener(e,v._dispatchEvent,{passive:!1,capture:!0}):f.addEventListener(e,v._dispatchEvent,!0)),e==="sizechange"&&(v.__sizeObserver||(v.__sizeObserver=new ResizeObserver(v._observeSize)),v.__sizeObserver.observe(this.m_dom))}static _dispatchEvent(e){let t=e.target,i=hs[e.type]===2;for(;t;){if(t[Te]){let s=t[Te][e.type];if(s){let n=t[de],r=n?.root??null;if(s instanceof Array?s.some(a=>{if(a(e,r),!n.dom)return!0}):s(e,r),e.cancelBubble||e.defaultPrevented||i)break}}if(t=t.parentNode,t==document)break}}static _dispatchUnbubbleEvent(e){let t=e.currentTarget||e.target,i=e.type,s=t[Te],n=s&&s[i];if(n){let a=t[de]?.root??null;n instanceof Array?n.forEach(h=>{h(e,a)}):n(e,a)}}static _observeSize(e){e.forEach(t=>{let i=t.target;i.offsetParent!==null&&i.dispatchEvent(new Event("sizechange"))})}enumChilds(e,t=!1){if(this.m_dom){let i=this.m_dom.firstChild;for(;i;){let s=i[de];if(s&&(e(s),t&&s.enumChilds(e,!0)===!0))return!0;i=i.nextSibling}}else{let i=this.m_props.content;if(!i)return;X(i)||(i=[i]),i.some(s=>{if(!(!s||B(s)||le(s))&&(e(s)||t&&s.enumChilds(e,!0)===!0))return!0})}return!1}_appendChild(e){if(B(e))this.m_dom.insertAdjacentText("beforeend",e);else if(le(e))this.m_dom.insertAdjacentHTML("beforeend",e);else{let t=e;try{t._build(),this.m_dom.appendChild(t.m_dom)}catch(i){console.error(i)}}}_genClassName(){this.addClass("@comp");let e=Object.getPrototypeOf(this);for(;e&&e.constructor!==v;){let t=e.constructor.name;this.addClass("@"+Ue(t)),e=Object.getPrototypeOf(e)}}_makeCls(e){return e[0]=="@"?e=Ss+e.substring(1):e}static dispatchCaptures(e){v.__capture.handler(e)}static setCapture(e,t){if(console.assert(!v.__capture),v.__capture)debugger;let i=f.querySelectorAll("iframe");i.forEach(a=>{J(a).setStyleValue("pointer-events","none")});let s=f.querySelectorAll(":hover"),n=null;if(s.length){let a=s[s.length-1];n=window.getComputedStyle(a).cursor}v.__capture_mask=f.createElement("div");let r=J(v.__capture_mask);r.addClass("@capture-mask"),n&&r.setStyleValue("cursor",n),f.body.appendChild(r.dom),f.addEventListener("mousedown",v.dispatchCaptures),f.addEventListener("mousemove",v.dispatchCaptures),f.addEventListener("mouseup",v.dispatchCaptures),f.addEventListener("touchstart",v.dispatchCaptures),f.addEventListener("touchmove",v.dispatchCaptures),f.addEventListener("touchend",v.dispatchCaptures),v.__capture={initiator:e,handler:t,iframes:i}}static releaseCapture(){console.assert(!!v.__capture),f.removeEventListener("touchstart",v.dispatchCaptures),f.removeEventListener("touchmove",v.dispatchCaptures),f.removeEventListener("touchend",v.dispatchCaptures),f.removeEventListener("mousedown",v.dispatchCaptures),f.removeEventListener("mousemove",v.dispatchCaptures),f.removeEventListener("mouseup",v.dispatchCaptures),v.__capture.iframes.forEach(e=>{J(e).setStyleValue("pointer-events",null)}),v.__capture=null,v.__capture_mask&&(f.body.removeChild(v.__capture_mask),v.__capture_mask=null)}scrollIntoView(e){if(this.m_dom){let t=new Y(this.dom.getBoundingClientRect()),i,s,n,r,a=this.dom.parentElement,h=f.body;for(;a&&a!=h;){let m=a.getBoundingClientRect();(i===void 0||i<m.top)&&(i=m.top),(s===void 0||s>m.bottom)&&(s=m.bottom),(n===void 0||n<m.left)&&(n=m.left),(r===void 0||r>m.right)&&(r=m.right),a=a.parentElement}(i===void 0||t.top<i||t.bottom>s||t.left<n||t.right>r)&&this.m_dom.scrollIntoView({behavior:"auto",block:"nearest",inline:"start"})}}queryItem(e){let t=this.dom.querySelector(e);return t?v.getElement(t):null}queryAll(e,t){let i=Array.from(this.m_dom.querySelectorAll(e));return t&&i.forEach(s=>{t(J(s))}),i}itemWithId(e){let t=this.dom.querySelector("#"+e);return t?v.getElement(t):null}itemWithRef(e){let t=null;return this.enumChilds(i=>{if(i.m_props.ref===e)return t=i,!0},!0),t}get ref(){return this.m_props.ref}static getCss(){return v.__css||(v.__css=new he),v.__css}getParent(){console.assert(!!this.m_dom);let e=this.dom.parentNode;return v.getElement(e)}static getElement(e,t){if(t){let i=B(t);for(;e;){let s=e[de];if(i){if(s&&s.hasClass(t))return s}else if(s instanceof t)return s;e=e.parentElement}return null}else return e?e[de]:null}static getScrollbarSize(){if(v.__sb_width===void 0){let e=f.createElement("div");e.style.cssText="overflow:auto;position:absolute;top:0;width:100px;height:100px";let t=f.createElement("div");t.style.width="200px",t.style.height="200px",e.appendChild(t),f.body.appendChild(e),v.__sb_width=e.offsetWidth-e.clientWidth,f.body.removeChild(e)}return v.__sb_width}isUserVisible(){return this.m_dom?this.m_dom.offsetParent!==null:!1}},u=v;l(u,"Component"),k(u,"__sb_width"),k(u,"__comp_guid",1e3),k(u,"__privateEvents",{}),k(u,"__sizeObserver"),k(u,"__createObserver"),k(u,"__capture",null),k(u,"__capture_mask",null),k(u,"__css",null);var ms=null;function J(o){if(o[de])return o[de];let e=ms;return e||(e=ms=new u({})),e.m_dom=o,e}l(J,"flyWrap");var Fe=class extends u{constructor(e={}){e.flex||(e.flex=1),super(e)}};l(Fe,"Flex");var ii=class extends u{m_size;constructor(e){super({}),this.m_size=e}componentCreated(){let e=this.dom,t=null;for(;e;){let i=e[de];if(i.hasClass("@hlayout")){t={width:this.m_size};break}else if(i.hasClass("@vlayout")){t={height:this.m_size};break}e=e.parentElement}t||(t={width:this.m_size,height:this.m_size}),this.setStyle(t)}};l(ii,"Space");function Q(o,e=null,t=null){return P({size:o,mode:e,context:t})}l(Q,"EvSize");var ot=class extends u{m_irect;m_delta;m_target;constructor(e){super(e),this.setDomEvent("mousedown",t=>this._mousedown(t)),this.setDomEvent("touchstart",t=>this._mousedown(t)),this.setDomEvent("dblclick",t=>this._collapse(t))}render(){this.addClass(this.m_props.orientation)}_collapse(e){this.m_props.collapsible&&(this._findTarget(),this.m_target&&this.m_target.toggleClass("@collapsed"))}_mousedown(e){if(e.type=="touchstart"){let t=e;t.touches.length==1&&this._startMoving(t.touches[0].pageX,t.touches[0].pageY,e)}else{let t=e;this._startMoving(t.pageX,t.pageY,e)}}_startMoving(e,t,i){this._findTarget(),this.m_target&&(this.m_props.orientation=="horizontal"?this.m_props.sizing=="before"?this.m_delta=e-this.m_irect.right:this.m_delta=e-this.m_irect.left:this.m_props.sizing=="before"?this.m_delta=t-this.m_irect.bottom:this.m_delta=t-this.m_irect.top,i.preventDefault(),i.stopPropagation(),this.m_target.addClass("sizing"),u.setCapture(this,s=>this._pointerMoved(s)))}_pointerMoved(e){let t=l((i,s)=>{if(this.m_props.orientation=="horizontal"){let n;if(this.m_props.sizing=="after"?n=this.m_irect.right-(i-this.m_delta):n=i-this.m_delta-this.m_irect.left,n>0){let r=new ge(n,0);this.emit("resize",Q(r)),this.m_target.setStyleValue("width",r.width),this.m_target.setStyleValue("flex",null),this.m_target.removeClass("@flex")}}else{let n;if(this.m_props.sizing=="after"?n=this.m_irect.bottom-(s-this.m_delta):n=s-this.m_delta-this.m_irect.top,n>0){let r=new ge(0,n);this.emit("resize",Q(r)),this.m_target.setStyleValue("height",r.height),this.m_target.setStyleValue("flex",null),this.m_target.removeClass("@flex")}}},"__move");if(e.type=="mousemove"){let i=e;t(i.pageX,i.pageY),e.preventDefault(),e.stopPropagation()}else if(e.type=="touchmove"){let i=e;t(i.touches[0].pageX,i.touches[0].pageY),e.preventDefault(),e.stopPropagation()}else(e.type=="mouseup"||e.type=="touchend")&&(this.m_target.removeClass("sizing"),u.releaseCapture(),e.preventDefault(),e.stopPropagation())}_findTarget(){if(!this.m_target)if(this.m_props.sizing=="before"){let e=this.dom.previousElementSibling,t=e?u.getElement(e):null;this.m_target=t}else{let e=this.dom.nextElementSibling,t=e?u.getElement(e):null;this.m_target=t}this.m_target?this.m_irect=this.m_target.getBoundingRect():this.m_irect=null}};l(ot,"Separator");function Bs(o,e,t=null){return P({ui_event:o,sens:e,context:t})}l(Bs,"EvOverlayResize");var ve=class extends u{m_delta;m_irect;constructor(e){super(e),this.addClass(e.sens),this.setDomEvent("mousedown",t=>this._mousedown(t)),this.setDomEvent("touchstart",t=>this._mousedown(t)),this.setDomEvent("dblclick",t=>this.resetflex(t)),e.target.appendChild(this),e.resize&&this.on("resize",this.m_props.resize)}resetflex(e){this.m_props.target.addClass("@flex"),this.emit("resize",Q({width:-1,height:0})),e.preventDefault(),e.stopPropagation()}_mousedown(e){e.preventDefault(),e.stopPropagation();let t=Bs(e,this.m_props.sens);if(this.emit("rawresize",t),t.defaultPrevented)return;let i=re(e,!0);this.m_irect=this.m_props.target.getBoundingRect(),this.m_props.sens=="right"?this.m_delta=i.x-this.m_irect.right:this.m_props.sens=="left"?this.m_delta=i.x-this.m_irect.left:this.m_props.sens=="bottom"?this.m_delta=i.y-this.m_irect.bottom:this.m_props.sens=="top"&&(this.m_delta=i.y-this.m_irect.top),this.m_props.target.addClass("sizing"),u.setCapture(this,s=>this._handle_mouse(s))}_is_horz(){return this.m_props.sens=="left"||this.m_props.sens=="right"}get sens(){return this.m_props.sens}_handle_mouse(e){let t=l((i,s)=>{if(this._is_horz()){let n;if(this.m_props.sens=="left"?n=this.m_irect.right-(i-this.m_delta):n=i-this.m_delta-this.m_irect.left,n>0){let r={width:n,height:void 0};this.emit("resize",Q(r)),this.m_props.target.setStyleValue("width",r.width),this.m_props.target.setStyleValue("flex",null),this.m_props.target.removeClass("@flex")}}else{let n;if(this.m_props.sens=="top"?n=this.m_irect.bottom-(s-this.m_delta):n=s-this.m_delta-this.m_irect.top,n>0){let r=new ge(0,n);this.emit("resize",Q(r)),this.m_props.target.setStyleValue("height",r.height),this.m_props.target.setStyleValue("flex",null),this.m_props.target.removeClass("@flex")}}},"__move");if(e.type=="mousemove"){let i=e;t(i.pageX,i.pageY),e.preventDefault(),e.stopPropagation()}else if(e.type=="touchmove"){let i=e;t(i.touches[0].pageX,i.touches[0].pageY),e.preventDefault(),e.stopPropagation()}else(e.type=="mouseup"||e.type=="touchend")&&(this.m_props.target.removeClass("sizing"),u.releaseCapture(),e.preventDefault(),e.stopPropagation())}};l(ve,"SizerOverlay");function Ls(o){return P({name:o})}l(Ls,"EvShortcut");var O=class extends u{m_shortcuts;constructor(e){X(e)?super({content:e}):super(e)}addShortcut(e,t,i=null,s=!1){this.m_shortcuts||(this.m_shortcuts=[],this.setDomEvent("keydown",n=>this._handleKeydown(n))),X(e)||(e=[e]),e.forEach(n=>{let r="";n.match(/SHIFT/i)&&(n=n.replace(/SHIFT/i,""),r+="shift+"),n.match(/CTRL/i)&&(n=n.replace(/CTRL/i,""),r+="ctrl+"),n.match(/CMD/i)&&(n=n.replace(/CMD/i,""),r+="cmd+"),n.match(/ALT/i)&&(n=n.replace(/ALT/i,""),r+="alt+"),r+=n.replace("+","").toLowerCase(),this.m_shortcuts.push({sequence:r,name:t,immediate:s,callback:i})})}removeShortcuts(){this.m_shortcuts&&(this.m_shortcuts=[])}_handleKeydown(e){if(!this.m_shortcuts)return;let t="";e.shiftKey&&(t+="shift+"),e.ctrlKey&&(t+="ctrl+"),e.metaKey&&(t+="cmd+"),e.altKey&&(t+="alt+"),t+=e.key.toLowerCase(),this.m_shortcuts.some(i=>{if(i.sequence==t)return i.callback?i.immediate?i.callback(e):ue(()=>{i.callback(e)}):this.emit("shortcut",Ls(i.name)),e.preventDefault(),e.stopPropagation(),!0})}};l(O,"Container");var at=class{m_data;m_name;constructor(e){this.m_data=null,this.m_name=e??"settings"}set(e,t){this._load(),this.m_data[e]=t,this._save()}get(e,t){return this._load(),this.m_data[e]??t}_save(){let e=JSON.stringify(this.m_data);localStorage.setItem(this.m_name,e)}_load(){if(this.m_data)return;this.m_data={};let e=localStorage.getItem(this.m_name);e!==null&&(e=JSON.parse(e),e?this.m_data=e:console.info("There was an error attempting to read your settings."))}};l(at,"Settings");var dr=Symbol(),lt=class extends oe{static instance(){return lt.self}m_mainView;m_app_name;m_app_version;m_app_uid;m_local_storage;m_user_data;m_touch_time;m_touch_count;constructor(e){console.assert(lt.self===null,"application is a singleton"),super(e),this.m_app_name=e.app_name??"application",this.m_app_version=e.app_version??"1.0",this.m_app_uid=e.app_uid??"application";let t=`${this.m_app_name}.${this.m_app_version}.settings`;this.m_local_storage=new at(t),this.m_user_data={},this.m_touch_time=0,this.m_touch_count=0,lt.self=this,"onload"in globalThis?globalThis.addEventListener("load",()=>{this.ApplicationCreated()}):this.ApplicationCreated()}ApplicationCreated(){this.setTitle("")}get app_name(){return this.m_app_name}get app_uid(){return this.m_app_uid}get app_version(){return this.m_app_version}get local_storage(){return this.m_local_storage}get user_data(){return this.m_user_data}get history(){debugger;return null}setMainView(e,t){let i=this.m_props.renderTo??f.body,s=J(i);this.m_props.renderTo||s.setStyleValue("position","absolute"),s.addClass("x4-root-element"),t&&s._empty(),this.m_mainView=e,e.setStyleValue("position","absolute"),e._build(),i.appendChild(e.dom)}set mainView(e){this.setMainView(e,!1)}get mainView(){return this.m_mainView}setTitle(e){f.title=this.m_app_name+(e?" > "+e:"")}disableZoomWheel(){window.addEventListener("wheel",function(e){e.ctrlKey&&e.preventDefault()},{passive:!1,capture:!0})}enterModal(e){}enableTouchDblClick(){f.addEventListener("touchstart",e=>{let t=Date.now();if(t-this.m_touch_time>700?this.m_touch_count=1:this.m_touch_count++,this.m_touch_time=t,this.m_touch_count==2){this.m_touch_count=0;let i=e.touches[0],s={type:"dblclick"};for(let n in i)s[n]=i[n];u._dispatchEvent(s),e.stopPropagation()}})}},Ce=lt;l(Ce,"Application"),k(Ce,"self",null);var ri=class extends O{};l(ri,"AbsLayout");var w=class extends O{};l(w,"HLayout");var H=class extends O{};l(H,"VLayout");var oi=class extends O{constructor(e){super(e),this.setDomEvent("sizechange",()=>this._updateLayout())}componentCreated(){super.componentCreated(),this._updateLayout()}_updateLayout(){let e=this.m_props.defaultLayout=="horizontal";if(this.m_props.switchSize<=0&&window.screen.height>window.screen.width)e=!e;else{let t=this.getBoundingRect();(e&&t.width<this.m_props.switchSize||!e&&t.height<this.m_props.switchSize)&&(e=!e)}e?(this.removeClass("@vlayout"),this.addClass("@hlayout")):(this.addClass("@vlayout"),this.removeClass("@hlayout"))}};l(oi,"AutoLayout");var ai=class extends O{constructor(e){super(e)}render(){this.m_props.colSizes&&this.setStyleValue("grid-template-columns",this.m_props.colSizes),this.m_props.rowSizes&&this.setStyleValue("grid-template-rows",this.m_props.rowSizes),this.m_props.colGap&&this.setStyleValue("grid-gap",this.m_props.colGap),this.m_props.template&&this.setStyleValue("grid-template-areas",this.m_props.template.join(`
4
+ `))}};l(ai,"GridLayout");var li=class extends O{m_cells;constructor(e){super(e),this.setTag("table"),this.m_cells=new Map}_getCell(e,t,i=!0){let s=ht(e,t);return this.m_cells.get(s)??(i?{item:void 0}:null)}_setCell(e,t,i,s=!1){let n=ht(e,t);this.m_cells.set(n,i),this.dom&&i.item&&s&&(i.item instanceof u?i.item.update():this.enumChilds(r=>{if(r.getData("row")==e&&r.getData("col")==t)return r.setContent(i.item),r.update(),!0}))}setCell(e,t,i){let s=this._getCell(e,t);s.item=i,this._setCell(e,t,s,!0)}merge(e,t,i,s){let n=this._getCell(e,t);n.rowSpan=i,n.colSpan=s,this._setCell(e,t,n)}setCellWidth(e,t,i){let s=this._getCell(e,t);s.width=i,this._setCell(e,t,s)}setCellHeight(e,t,i){let s=this._getCell(e,t);s.height=i,this._setCell(e,t,s)}setCellClass(e,t,i){let s=this._getCell(e,t);s.cls=i,this._setCell(e,t,s)}setColClass(e,t){let i=this._getCell(-1,e);i.cls=t,this._setCell(-1,e,i)}setRowClass(e,t){let i=this._getCell(e,999);i.cls=t,this._setCell(e,999,i)}getCell(e,t){return this._getCell(e,t)?.item}render(){let e=[],t=[];for(let i=0;i<this.m_props.rows;i++){let s=[];for(let a=0;a<this.m_props.columns;a++){let h=ht(i,a);if(t.indexOf(h)>=0)continue;let m=this.m_cells.get(h),c=this.m_cells.get(ht(-1,a)),d="";m&&m.cls&&(d=m.cls),c&&c.cls&&(d+=" "+c.cls);let p=new u({tag:"td",content:m?.item,width:m?.width,height:m?.height,data:{row:i,col:a},cls:d});if(m){let g=m.rowSpan??0,x=m.colSpan??0;if(g>0&&p.setAttribute("rowspan",g+1),x>0&&p.setAttribute("colspan",x+1),g||x)for(let _=0;_<=g;_++)for(let F=0;F<=x;F++)t.push(ht(_+i,F+a))}s.push(p)}let n=this._getCell(i,999,!1),r=new u({tag:"tr",data:{row:i},content:s,cls:n?.cls});e.push(r)}this.setContent(e)}};l(li,"TableLayout");function ht(o,e){return o*1e3+e}l(ht,"_mkid");var hi=class extends u{constructor(e){super(e),this.setContent(e.content)}setContent(e){if(!e)super.setContent(null);else{let t;X(e)?t=new H({content:e}):t=e,t.addClass("@scroll-container"),super.setContent(t)}}};l(hi,"ScrollView");var mi=class extends O{constructor(e){let t=e.items;e.items=void 0,super(e),this.setDomEvent("sizechange",()=>{this.resizeAllItems()}),t&&t.forEach(i=>{this.addItem(i)})}resizeItem(e){let t=this.getComputedStyle(),i=t.parse("grid-auto-rows"),s=t.parse("grid-row-gap"),n=e.queryItem(".content");if(n||(n=e),n&&i+s){let r=n.getBoundingRect(),a=Math.ceil((r.height+s)/(i+s));e.setStyleValue("gridRowEnd","span "+a)}}resizeAllItems(){this.queryAll(".item",e=>{this.resizeItem(e)})}addItem(e){e.addClass("content"),this.appendChild(new O({cls:"item",content:e}))}};l(mi,"Masonry");function us(o){return P({pos:o})}l(us,"EvMove");var mt=class extends O{m_ui_mask;m_hasMask=!0;constructor(e){super(e),this.addClass("@hidden")}enableMask(e=!0){this.m_hasMask=e}show(e){if(e!==void 0?this.m_hasMask=!!e:e=this.m_hasMask,this.m_hasMask){let t=f.activeElement;for(t&&t.blur(),this.m_ui_mask=f.body.lastChild;this.m_ui_mask;){if(this.m_ui_mask.nodeType==1){let i=J(this.m_ui_mask);if(!(i.hasClass("@menu")||i.hasClass("@non-maskable"))){if(!(i.getStyleValue("display")=="none"||!i.isUserVisible())){if(i.hasClass("@comp"))break}}}this.m_ui_mask=this.m_ui_mask.previousSibling}this.m_ui_mask&&J(this.m_ui_mask).addClass("@mask")}if(e&&Ce.instance().enterModal(!0),this.setStyle({left:0,top:0}),f.body.appendChild(this._build()),this.removeClass("@hidden"),this.centerOnScreen(),e){let t=f.activeElement;if(!this.dom.contains(t)){let i=this.queryItem("[autofocus]");if(i)i.focus();else{let s=this.queryAll("[tabindex]");s&&(s=s.filter(n=>n.offsetParent!==null),s.length&&s[0].focus())}}mt.modal_stack.push(this.dom)}}centerOnScreen(){let e=this.getBoundingRect(),t=`max( 0px, 50vw - ${e.width/2}px )`,i=`max( 0px, 50vh - ${e.height/2}px )`;this.setStyleValue("left",t),this.setStyleValue("top",i)}displayAt(e,t,i="top left",s,n=!1){this.show(n);let r="l",a="t";i.indexOf("right")>=0&&(r="r"),i.indexOf("bottom")>=0&&(a="b");let h=f.body.getBoundingClientRect(),m=this.getBoundingRect();r=="r"&&(e-=m.width),a=="b"&&(t-=m.height),s&&(e+=s.x,t+=s.y),e<4&&(e=4),e+m.width>h.right-4&&(e=h.right-4-m.width,s?.x<0&&(e+=s.x)),t<4&&(t=4),t+m.height>h.bottom-4&&(t=h.bottom-4-m.height,s?.y<0&&(t+=s.y)),this.setStyle({left:e,top:t})}close(){this.hide(),this.m_hasMask&&this.m_ui_mask&&(J(this.m_ui_mask).removeClass("@mask"),Ce.instance().enterModal(!1));let e=mt.modal_stack.indexOf(this.dom);e>=0&&mt.modal_stack.splice(e),this.dispose()}componentCreated(){if(this.m_props.sizable){this.addClass("@size-all");let e=["top","right","bottom","left","topleft","topright","bottomleft","bottomright"];for(let t of e)new ve({target:this,sens:t,events:{rawresize:i=>this._mouseResize(i)}})}}_mouseResize(e){e.preventDefault();let t=this.getBoundingRect(),i=this.getComputedStyle(),s=e.ui_event,n=i.parse("marginTop"),r=i.parse("marginLeft"),a=i.parse("marginRight"),h=i.parse("marginBottom"),m=0,c=0,d=re(s,!0);switch(e.sens){case"topright":case"bottomright":case"right":m=t.right-a-d.x;break;case"topleft":case"bottomleft":case"left":m=t.left-r-d.x;break}switch(e.sens){case"bottomleft":case"bottomright":case"bottom":c=t.bottom-h-d.y;break;case"topleft":case"topright":case"top":c=t.top-n-d.y;break}t.left-=r,t.top-=n;let p=e.sens;u.setCapture(this,g=>{let x=l((_,F)=>{let S=t.left,E=t.top,W=t.width,A=t.height,b,y,N=_+m,C=F+c;switch(N<0&&(N=0),C<0&&(C=0),p){case"topright":case"bottomright":case"right":W=N-S;break;case"topleft":case"bottomleft":case"left":b=S-N,W+=b,S-=b;break}switch(p){case"bottomleft":case"bottomright":case"bottom":A=C-E;break;case"topleft":case"topright":case"top":y=E-C,A+=y,E-=y;break}let T=new ge(W,A);this.setStyle({left:S,top:E,width:T.width,height:T.height}),this.emit("size",Q(T))},"__move");if(g.type=="mouseup"||g.type=="touchend")u.releaseCapture();else if(g.type=="mousemove"){let _=g;x(_.pageX,_.pageY)}else if(g.type=="touchmove"){let _=g;x(_.touches[0].pageX,_.touches[0].pageY)}})}},q=mt;l(q,"Popup"),k(q,"modal_stack",[]);function Hs(o){if(o.key=="Tab"||o.key=="Enter"){let e=o.target;if(e.tagName=="TEXTAREA")return;let t=u.getElement(e);if(t&&(t.hasAttribute("wants-tab")||t.hasAttribute("wants-enter")))return;let i=f.body;q.modal_stack.length&&(i=q.modal_stack[q.modal_stack.length-1]),Rs(i,o.target,o.shiftKey),o.stopPropagation(),o.preventDefault()}}l(Hs,"x4handleKeyDown");function Rs(o,e,t){let i=f.activeElement;if(!o.contains(i))return;let s=u.getElement(e),n=Array.from(o.querySelectorAll("[tabindex]"));if(n=n.filter(a=>a.offsetParent!==null),!n.length)return;let r=n.indexOf(e);r<0?r=0:t?r>0?r--:r=n.length-1:r<n.length-1?r++:r=0,n[r].focus()}l(Rs,"_nextTab");function cs(){f.body.addEventListener("keydown",Hs,!0)}l(cs,"installKBHandler");f.body?cs():window.addEventListener("load",cs);function zs(o){return P({source:o})}l(zs,"EvAction");var ct=class extends oe{constructor(e){super(e),this.mapPropEvents(e,"run")}get props(){return this.m_props}set text(e){this.m_props.text=e,this.emit("change",M(this))}set icon(e){this.m_props.icon=e,this.emit("change",M(this))}fire(){this.emit("run",zs(this))}};l(ct,"Action");function At(o,e,t=null){return P({url:o,svg:e,context:t})}l(At,"EvLoaded");function ds(o){let e=o.length;return o[0]=='"'&&o[e-1]=='"'&&(o=o.substring(1,e-1),o=o.replaceAll('\\"',"'")),o}l(ds,"trimQuotes");var Tt=class extends ce{svgs;constructor(){super(),this.svgs=new Map}load(e){if(this.svgs.has(e)){let t=this.svgs.get(e);t&&this.signal("loaded",At(e,t))}else this.svgs.set(e,null),l(async i=>{if(i.substring(0,24)=="data:image/svg+xml;utf8,"){let s=i.substring(24);this.svgs.set(i,s),this.signal("loaded",At(i,s))}else{let s=await fetch(i);if(s.ok){let n=await s.text();!n.startsWith("<svg")&&!n.startsWith("<?xml")?(console.error("svg loading error: ",n),this.signal("loaded",At(i,""))):(this.svgs.set(i,n),this.signal("loaded",At(i,n)))}}},"_load")(e)}};l(Tt,"Loader");var ci=new Tt,Bt=class extends u{m_icon;m_iconName;constructor(e){B(e)?super({icon:e}):super(e),this._setIcon(this.m_props.icon,!1),this.m_props.size&&this.setStyleValue("fontSize",this.m_props.size)}_setIcon(e,t){if(!e){this.m_iconName="";return}this.removeClass("@svg");let i,s;if(typeof e=="number")e=e.toString(16),i=e,console.error("deprecation error: invalid icon name");else{let a=/\s*var\s*\(\s*(.+)\s*\)\s*/gi,h=a.exec(e);for(;h;){let E=h[1].trim();if(e=he.getVar(E).trim(),e==""||e===void 0){console.error(`icon: unable to find variable named '${E}'`);return}else e=ds(e);h=a.exec(e)}if(e.startsWith("<svg")){this._setSVG("data:image/svg+xml;utf8,"+e);return}let m=/\s*svg\s*\(\s*(.+)\s*\)\s*/gi,c=/(.*\.svg)$/gi,d=m.exec(e)||c.exec(e);if(d){let E=d[1].trim();this._setSVG(E);return}let g=/^\s*(data\:image\/.+)\s*$/gi.exec(e);if(g){this._setSVG(g[1]);return}let _=/\s*cls\s*\(\s*(.+)\s*\)\s*/gi.exec(e);if(_){let E=_[1].trim();this.addClass(E);return}let S=/\s*url\s*\(\s*(.+)\s*\)\s*/gi.exec(e);if(S){s=ds(S[1].trim()),s=s.replaceAll("\\",""),this._setSVG(s);return}else console.error("deprecation error: invalid icon name"),i=e,e=he.getVar("icon-"+e),(e==""||e===void 0)&&(e="0")}if(this.m_iconName=i,this.m_icon===e)return;let n=u.getCss(),r;if(t&&this.m_icon&&(r="icon-"+i,this.removeClass(r)),r="icon-"+i,Bt.icon_cache[r]===void 0){Bt.icon_cache[r]=!0;let a;s?a=`display: block; content: ' '; background-image: url(${s}); background-size: contain; width: 100%; height: 100%; background-repeat: no-repeat; color: white;`:a=`content: "\\${e}";`,n.setRule(r,`.${r}::before {${a}}`)}this.addClass(r),this.m_icon=e}set icon(e){this._setIcon(e,!0)}get icon(){return this.m_iconName}_setSVG(e){let t=l(i=>{i.url==e&&(this.addClass("@svg-icon"),this.setContent(G.from(i.svg),!1),ci.off("loaded",t))},"set");ci.on("loaded",t),ci.load(e)}_setSVGPath(e){this.addClass("@svg-icon"),this.setContent(G.from(`<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="${e}/></svg>`),!1)}},L=Bt;l(L,"Icon"),k(L,"icon_cache",[]);var I=class extends u{constructor(e){typeof e=="string"||e instanceof G?super({text:e}):super(e)}render(e){let t=this.m_props.text;this.m_props.multiline&&!(t instanceof G)&&(t=new G(Pt(t,!0))),e.icon?(this.setTag("span"),this.addClass("@hlayout"),this.setContent([new L({icon:e.icon}),new u({content:t,ref:"text"})])):this.setContent(t),this.addClass(e.align??"left")}set text(e){let t=this.m_props;if(t.text!==e){t.text=e;let i=this.m_props.text;if(this.m_props.multiline&&!(i instanceof G)&&(i=new G(Pt(i,!0))),this.dom){let s=this;this.m_props.icon&&(s=this.itemWithRef("text")),s.setContent(i)}}}get text(){return this.m_props.text}};l(I,"Label");var ui=class extends u{};l(ui,"MenuSeparator");var di=class extends I{};l(di,"MenuTitle");var K=class extends q{m_subMenu;m_opener;m_virtual;m_lock;constructor(e,t){super(e),this.addClass("@shadow"),this.m_opener=t,this.m_virtual=!1,this.m_lock=0,this.enableMask(!1)}lock(e){this.m_lock+=e?1:-1}setVirtual(){this.m_virtual=!0}setSubMenu(e){this.m_subMenu=e}hideSubMenu(){this.m_subMenu&&(this.m_subMenu.m_opener._close(),this.m_subMenu.hide(),this.m_subMenu=null)}render(e){this.setContent(e.items)}show(){this.m_virtual||K._addMenu(this),super.show()}close(){!this.dom&&!this.m_virtual||(this.m_opener&&this.m_opener._close(),this.m_subMenu&&(this.m_subMenu.close(),this.m_subMenu=null),super.close(),K._removeMenu())}clear(){this.m_props.items=[]}static _addMenu(e){K.watchCount==0&&(K.rootMenu=e,f.addEventListener("mousedown",K._mouseWatcher)),K.watchCount++}static _removeMenu(){console.assert(K.watchCount>0),K.watchCount--,K.watchCount==0&&f.removeEventListener("mousedown",K._mouseWatcher)}static _mouseWatcher(e){if(e.defaultPrevented)return;let t=e.target;for(;t;){let i=u.getElement(t);if(i&&i instanceof K)return;t=t.parentElement}K._discardAll()}static _discardAll(){K.rootMenu&&(K.rootMenu.close(),K.rootMenu=null)}displayAt(...e){this.m_lock||K._discardAll();let t,i,s,n;e.length==1?{x:t,y:i}=re(e[0],!0):[t,i,s,n]=e,s||(s="top left"),super.displayAt(t,i,s,n)}},ee=K;l(ee,"Menu"),k(ee,"watchCount",0),k(ee,"rootMenu",null);var pe=class extends u{m_menu;m_isOpen;m_action;constructor(e,t){e instanceof ct?(super({click:()=>{e.fire()}}),this.m_action=e):B(e)?super({text:e,click:t}):super(e),this.mapPropEvents(this.m_props,"click"),this.m_menu=null,this.m_isOpen=!1,this.setDomEvent("mousedown",i=>this._mousedown(i)),this.setDomEvent("click",i=>this._click(i))}render(e){let t=e.icon??0,i=e.text;e.checked!==void 0&&(t=e.checked?"var( --x4-icon-check )":0),this.m_action&&(t||(t=this.m_action.props.icon),i===void 0&&(i=this.m_action.props.text));let s=null;this.isPopup&&(this.addClass("@popup-menu-item"),s=new L({icon:"var( --x4-icon-chevron-right )",cls:"pop-mark"})),!i&&!t&&this.addClass("@separator"),e.cls&&this.addClass(e.cls),this.setTag("a"),this.setContent([t<0?null:new L({icon:t}),new I({flex:1,text:i}),s])}get id(){return this.m_props.itemId}get text(){return this.m_props.text}get isPopup(){return!!this.m_props.items}_close(){this.removeClass("@opened"),this.m_isOpen=!1}_click(e){this.isPopup||(this.emit("click",ne()),ee._discardAll())}_mousedown(e){if(this.isPopup){this.m_menu||(this.m_menu=new ee({items:this.m_props.items},this));let t=this.m_isOpen,i=u.getElement(this.dom,ee);if(i&&i.hideSubMenu(),!t){i&&i.setSubMenu(this.m_menu),this.m_isOpen=!0;let s=this.getBoundingRect();this.m_menu.lock(!0),i?this.m_menu.displayAt(s.right,s.top):this.m_menu.displayAt(s.left,s.bottom),this.m_menu.lock(!1),this.addClass("@opened")}e.preventDefault()}}};l(pe,"MenuItem");var pi=class extends w{m_items;constructor(e,t){super(e),console.assert(!1,"not imp"),this.addClass("@shadow"),this.m_items=e.items}render(){this.setContent(this.m_items)}};l(pi,"MenuBar");var Lt=class extends H{m_selection;m_defer_sel;m_container;m_view;m_topIndex;m_itemHeight;m_cache;constructor(e){super(e),this.setDomEvent("keydown",t=>this.handleKey(t)),this.setDomEvent("click",t=>this._handleClick(t)),this.setDomEvent("dblclick",t=>this._handleClick(t)),this.setDomEvent("contextmenu",t=>this._handleCtxMenu(t)),this._setTabIndex(e.tabIndex,0),this.mapPropEvents(e,"click","dblClick","contextMenu","selectionChange","cancel")}componentCreated(){this.m_props.virtual?this._buildItems():this.m_props.populate&&(this.items=this.m_props.populate(null))}render(e){e.items=e.items||[],e.gadgets=e.gadgets,e.renderItem=e.renderItem,e.virtual=e.virtual??!1,this.m_topIndex=0,e.virtual?(console.assert(e.itemHeight!==void 0),this.m_itemHeight=e.itemHeight,this.m_cache=new Map,this.addClass("virtual")):(this.m_itemHeight=void 0,this.m_cache=void 0),this._buildContent()}set items(e){this.setItems(e)}get items(){return this.m_props.items}setItems(e,t=!0){this.m_props.items=e,t||(this.m_selection=null),this.m_container?this._buildItems():this._buildContent()}handleKey(e){let t=l(i=>{let s;Z(this.m_props.items)?(s=this.m_props.items(),this.m_props.items=s):s=this.m_props.items;let n;if(!this.m_selection)s&&(n=s[0]);else{let a=s.findIndex(h=>h===this.m_selection.item);i>0&&a<s.length-1?n=s[a+1]:i<0&&a>0?n=s[a-1]:n=this.selection}let r=this._findItemWithId(n?.id);this._selectItem(n,r,!0)},"moveSel");switch(e.key){case"ArrowDown":{t(1),e.preventDefault(),e.stopPropagation();break}case"ArrowUp":{t(-1),e.preventDefault(),e.stopPropagation();break}}}_buildContent(){let e=this.m_props;e.virtual?(this.m_container=new O({cls:"@scroll-container",content:[]}),this.m_view=new O({cls:"@scroll-view",flex:1,content:this.m_container,dom_events:{sizechange:()=>this._updateScroll(!0),scroll:()=>this._updateScroll(!1)}}),this.setContent([this.m_view,e.gadgets?new w({cls:"gadgets",content:e.gadgets}):null])):(this.m_view=void 0,this.m_container=new H({cls:"@scroll-container",content:[]}),this.addClass("@scroll-view"),this.setContent(this.m_container,!1)),e.virtual&&this.m_container.setStyleValue("height",e.items.length*this.m_itemHeight),(this.dom||!e.virtual)&&this._buildItems()}_updateScroll(e){let t=l(()=>{let i=Math.floor(this.m_view.dom.scrollTop/this.m_itemHeight);(i!=this.m_topIndex||e)&&(this.m_topIndex=i,this._buildItems())},"update");e?this.startTimer("scroll",10,!1,t):t()}async _buildItems(){let e=this.m_props,t=[],i=e.items;Z(i)&&(i=i());let s=this.m_selection?.item.id,n=!1;if(e.virtual){let r=this.getBoundingRect(),a=100,h=0,m=this.m_topIndex*this.m_itemHeight,c=this.m_topIndex,d=r.height,p=e.items.length,g=[],x=this.m_cache;for(this.m_cache=new Map;h<d&&c<p&&--a>0;){let _=e.items[c],F;x.has(_.id)?(F=x.get(_.id),x.delete(_.id)):(F=this._renderItem(_),g.push(F)),s==_.id&&(F.addClass("@selected"),n=!0),F.setStyleValue("top",m+h),t.push(F),this.m_cache.set(_.id,F),h+=this.m_itemHeight,c++}x.forEach(_=>{_.dispose()}),this.m_container.appendChild(g),this.m_container.setStyleValue("height",p*this.m_itemHeight),n||i.some(_=>s==_.id)||(this.m_selection=null)}else i.forEach(r=>{let a=this._renderItem(r);s==r.id&&(a.addClass("@selected"),n=!0),t.push(a)}),this.m_container.setContent(t,!1),n||(this.m_selection=null);if(this.m_defer_sel){let r=this.m_defer_sel;this.m_defer_sel=void 0,this.selection=r}}_renderItem(e){let t=this.onRenderItem(e);return t.setAttribute("data-id",e.id),t.addClass("@list-item"),t.setData("item-id",e.id),t}onRenderItem(e){return this.m_props.renderItem?this.m_props.renderItem(e):new w({content:e.text})}_handleClick(e){e.stopImmediatePropagation(),e.preventDefault();let t=e.target,i=this.dom,s=this.m_props.items;for(;t&&t!=i;){let n=u.getElement(t),r=n?.getData("item-id");if(r!==void 0){let a=s.find(h=>h.id==r);if(a){let h;e.type=="click"?(h=ne(a),this.emit("click",h)):(h=ke(a),this.emit("dblClick",h)),h.defaultPrevented||this._selectItem(a,n)}else this._selectItem(null,null);return}t=t.parentElement}this._selectItem(null,null)}_handleCtxMenu(e){e.preventDefault();let t=e.target,i=this.dom,s=this.m_props.items;for(;t&&t!=i;){let n=u.getElement(t),r=n?.getData("item-id");if(r){let a=s.find(h=>h.id==r);a&&(this._selectItem(a,n),this.emit("contextMenu",fe(e,a)));return}t=t.parentElement}this.emit("contextMenu",fe(e,null))}_selectItem(e,t,i=!0){this.m_selection&&this.m_selection.citem&&this.m_selection.citem.removeClass("@selected"),this.m_selection=e?{item:e,citem:t}:null,this.m_selection&&this.m_selection.citem&&this.m_selection.citem.addClass("@selected"),i&&this.emit("selectionChange",ie(e))}get selection(){return this.m_selection?this.m_selection.item:null}set selection(e){if(e==null)this._selectItem(null,null);else if(Z(this.m_props.items))this.m_defer_sel=e;else{let t=this.m_props.items.find(s=>s.id==e),i=this._findItemWithId(t.id);this._selectItem(t,i,!1)}}_findItemWithId(e){let t=null;return this.dom&&this.m_container.enumChilds(i=>{if(i.getData("item-id")==e)return i.scrollIntoView(),t=i,!0}),t}appendItem(e,t=!1,i=!0){t?this.m_props.items.unshift(e):this.m_props.items.push(e),i&&(this.selection=null),this.m_container?this._buildItems():this._buildContent(),i&&(this.selection=e.id)}updateItem(e,t){let i=this.m_props.items.findIndex(r=>r.id===e);if(i<0)return;let s=!1;this.m_selection&&this.m_selection.item===this.m_props.items[i]&&(s=!0),this.m_props.items[i]=t;let n=this.queryItem(`[data-id="${t.id}"]`)?.dom;if(n){let r=this._renderItem(t);s&&(r.addClass("@selected"),this.m_selection.citem=r,this.m_selection.item=t);let a=r._build();this.m_container.dom.replaceChild(a,n)}}};l(Lt,"ListView");function Vs(o=null){return P({context:o})}l(Vs,"EvCancel");var Be=class extends q{m_list;constructor(e){super({tabIndex:!1}),this.enableMask(!1),this.addClass("@non-maskable"),e.tabIndex=!1,this.m_list=new Lt(e),this.setContent(this.m_list),this.mapPropEvents(e,"cancel")}set items(e){this.m_list.items=e}handleKey(e){this.m_list.handleKey(e)}_handleClick=e=>{if(!this.dom)return;let t=e.target;this.dom.contains(t)||u.getElement(t,pe)||(this.signal("cancel",Vs()),this.close())};show(e){f.addEventListener("mousedown",this._handleClick),super.show(e)}hide(){f.removeEventListener("mousedown",this._handleClick),super.hide()}close(){f.removeEventListener("mousedown",this._handleClick),super.close()}get selection(){return this.m_list.selection}set selection(e){this.m_list.selection=e}};l(Be,"PopupListView");var j=class extends u{constructor(e){super(e)}render(e){this.setTag("input"),this._setTabIndex(e.tabIndex),this.setAttributes({value:e.value,type:e.type||"text",name:e.name,placeholder:e.placeHolder,autofocus:e.autoFocus,readonly:e.readOnly,autocomplete:"new-password",tabIndex:e.tabIndex,spellcheck:e.spellcheck===!1?"false":void 0,min:e.min,max:e.max,...e.attrs}),this.m_props.autosel=e.autosel??!0,e.uppercase&&this.setStyleValue("textTransform","uppercase"),this.m_props.autosel&&this.setDomEvent("focus",()=>{this.selectAll()})}getType(){return this.m_props.type}get value(){if(this.dom&&(this.m_props.value=this.dom.value),this.m_props.uppercase){let e=this.m_props.value.toUpperCase();this.dom&&e!=this.m_props.value&&(this.dom.value=e),this.m_props.value=e}return this.m_props.value}set value(e){this.m_props.value=e,this.dom&&(this.dom.value=e)}getStoreValue(){if(this.m_props.value_hook)return this.m_props.value_hook.get();{let e=this.getAttribute("type");e&&(e=e.toLowerCase());let t,i=this.dom;if(e==="file"){t=[];let s=i.files;for(let n=0;n<s.length;n++)t.push(s[n].name)}else if(e==="checkbox")i.checked?t=1:t=0;else if(e==="radio")i.checked&&(t=this.value);else if(e==="date")debugger;else t=this.value;return t}}setStoreValue(e){if(this.m_props.value_hook)return this.m_props.value_hook.set(e);{let t=this.getAttribute("type"),i=this.dom;if(t&&(t=t.toLowerCase()),t==="checkbox"){let s=e!==null&&e!=="0"&&e!==0&&e!==!1;s!==i.checked&&(i.setAttribute("checked",""+s),i.dispatchEvent(new Event("change")))}else this.value=e}}set readOnly(e){this.setAttribute("readonly",e)}selectAll(){this.dom.select()}select(e,t=9999){this.dom.setSelectionRange(e,e+t)}getSelection(){let e=this.dom;return{start:e.selectionStart,length:e.selectionEnd-e.selectionStart}}};l(j,"Input");var ut=class extends u{constructor(e){super(e),this.setTag("button"),this.setDomEvent("click",t=>this._handleClick(t)),this.setDomEvent("mousedown",()=>{this._startAutoRep(!0)}),this.setDomEvent("mouseup",()=>{this._startAutoRep(!1)}),this.setDomEvent("keydown",t=>this._handleKeyDown(t)),this.mapPropEvents(e,"click")}render(e){let t=e.action,i=e.icon,s=e.text;t&&(!i&&t.props.icon&&(i=t.props.icon),s===void 0&&t.props.text&&(s=t.props.text));let n=i?new L({icon:i,cls:"left",ref:"l_icon"}):null,r=new I({flex:1,text:s??"",align:e.align,ref:"label"}),a=e.rightIcon?new L({icon:e.rightIcon,cls:"right",ref:"r_icon"}):null;s===void 0&&r.addClass("@hidden"),this.setContent([n,r,a]),this._setTabIndex(e.tabIndex)}_startAutoRep(e){this.m_props.autoRepeat&&(e?this.startTimer("repeat",700,!1,()=>{this.startTimer("repeat",this.m_props.autoRepeat,!0,this._sendClick)}):this.stopTimer("repeat"))}_handleKeyDown(e){!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.key=="Enter"||e.key==" ")&&(this._sendClick(),e.preventDefault(),e.stopPropagation())}_handleClick(e){if(this.m_props.menu){let t=new ee({items:Z(this.m_props.menu)?this.m_props.menu():this.m_props.menu}),i=this.getBoundingRect();t.displayAt(i.left,i.bottom,"tl")}else this._sendClick();e.preventDefault(),e.stopPropagation()}_sendClick(){if(this.m_props.menu){let e=new ee({items:Z(this.m_props.menu)?this.m_props.menu():this.m_props.menu}),t=this.getBoundingRect();e.displayAt(t.left,t.bottom,"tl")}else this.emit("click",ne()),this.m_props.action&&this.m_props.action.fire()}set text(e){this.m_props.text=e;let t=this.itemWithRef("label");t&&(t.text=e,t.removeClass("@hidden"))}get text(){return this.itemWithRef("label")?.text}set icon(e){this.m_props.icon=e;let t=this.itemWithRef("l_icon");t?t.icon=e:this.update()}get icon(){return this.itemWithRef("l_icon")?.icon}set rightIcon(e){this.m_props.rightIcon=e;let t=this.itemWithRef("r_icon");t&&(t.icon=e)}get rightIcon(){return this.itemWithRef("l_icon")?.icon}set menu(e){this.m_props.menu=e}};l(ut,"BaseButton");var z=class extends ut{};l(z,"Button");var fi=class extends ut{constructor(e){super(e)}render(e){super.render(e),e.checked&&(this.addClass("checked"),this._updateIcon())}_sendClick(){super._sendClick(),this.m_props.checked=!this.m_props.checked,this.setClass("checked",this.m_props.checked),this.emit("change",M(this.m_props.checked)),this._updateIcon()}_updateIcon(){if(this.m_props.checkedIcon){let e=this.m_props.checked?this.m_props.checkedIcon:this.m_props.icon,t=this.itemWithRef("l_icon");t&&(t.icon=e)}}};l(fi,"ToggleButton");var Ht=class extends H{m_date;constructor(e){super(e),this.mapPropEvents(e,"change"),this.m_date=e.date?.clone()??new Date}render(e){let t=et(this.m_date);t.setDate(1);let i=t.getDay();i==0&&(i=7),t.setDate(-i+1+1);let s=et(t),n=this.m_date.hash(),r=et(this.m_date);r.setDate(1),r.setMonth(r.getMonth()+1),r.setDate(0);let a=Qe(r),h=[],m=new w({cls:"month-sel",content:[new I({cls:"month",text:$(this.m_date,"O"),dom_events:{click:()=>this._choose("month")}}),new I({cls:"year",text:$(this.m_date,"Y"),dom_events:{click:()=>this._choose("year")}}),new Fe,new z({text:"<",click:()=>this._next(!1)}),new z({text:">",click:()=>this._next(!0)})]});h.push(m);let c=[];c.push(new w({cls:"weeknum cell"}));for(let g=0;g<7;g++)c.push(new I({cls:"cell",flex:1,text:D.global.day_short[(g+1)%7]}));h.push(new w({cls:"week header",content:c}));let d=this.m_date.getMonth(),p=!0;for(;Qe(s)<=a;){let g=[new w({cls:"weeknum cell",content:new u({tag:"span",content:$(s,"w")})})];for(let x=0;x<7;x++){let _="cell day";s.hash()==n&&(_+=" today"),s.getMonth()!=d&&(_+=" out");let F=l(S=>new w({cls:_,flex:1,content:new u({tag:"span",content:$(S,"d")}),dom_events:{click:()=>this.select(S)}}),"mkItem");g.push(F(s.clone())),s.setDate(s.getDate()+1),p=!1}h.push(new w({cls:"week",flex:1,content:g}))}this.setContent(h)}select(e){this.m_date=e,this.emit("change",M(e)),this.update()}_next(e){this.m_date.setMonth(this.m_date.getMonth()+(e?1:-1)),this.update()}_choose(e){let t=[];if(e=="month")for(let n=0;n<12;n++)t.push(new pe({text:D.global.month_long[n],click:()=>{this.m_date.setMonth(n),this.update()}}));else if(e=="year"){let n=this.m_props.minDate?.getFullYear()??1900,r=this.m_props.maxDate?.getFullYear()??2037;for(let a=n;a<r;a++)t.push(new pe({text:""+a,click:()=>{this.m_date.setFullYear(a),this.update()}}))}let i=new ee({items:t}),s=this.getBoundingRect();i.displayAt(s.left,s.top)}get date(){return this.m_date}set date(e){this.m_date=e,this.update()}};l(Ht,"Calendar");var dt=class extends q{m_cal;constructor(e){super({tabIndex:1}),this.enableMask(!1),this.m_cal=new Ht(e),this.m_cal.addClass("@fit"),this.setContent(this.m_cal)}_handleClick=e=>{if(!this.dom)return;let t=e.target;this.dom.contains(t)||u.getElement(t,pe)||this.close()};show(e,t){f.addEventListener("mousedown",this._handleClick),t?super.displayAt(t.x,t.y,"top left",void 0,e):super.show(e)}close(){f.removeEventListener("mousedown",this._handleClick),super.close()}};l(dt,"PopupCalendar");var gi,we,Ge=class extends u{m_text;set text(e){this.m_text.text=e}render(){this.setClass("@non-maskable",!0),this.setContent([new L({icon:"var( --x4-icon-tip )"}),this.m_text=new I({text:"help"})])}displayAt(e,t,i="top left"){this.show();let s="l",n="t";i.indexOf("right")>=0&&(s="r"),i.indexOf("bottom")>=0&&(n="b");let r=f.body.getBoundingClientRect(),a=this.getBoundingRect();s=="r"&&(e-=a.width),n=="b"&&(t-=a.height),e+a.width>r.right&&(e=r.right-a.width),t+a.height>r.bottom&&(t=r.bottom-a.height-17),this.setStyle({left:e,top:t})}};l(Ge,"Tooltip");function Fa(o){if(Mt())return;let e={target:null,x:0,y:0};function t(n){e.x=n.pageX,e.y=n.pageY}l(t,"handle_mpos");function i(n){let r=n.target,a=null;for(e.x=n.pageX+10,e.y=n.pageY+15;r&&(a=r.getAttribute("tip"),!a);)r=r.parentElement;if(!(r==e.target||we&&r==we.dom)){if(!r||!a){e.target=null,o?o(null):s();return}e.target=r,o?o(null):s(),o?o(a):gi=setTimeout(()=>{we===void 0&&(we=new Ge({}),f.body.appendChild(we._build())),we.text=a,we.displayAt(e.x+17,e.y+17,"top left")},700)}}l(i,"handle_mouse");function s(){gi&&clearTimeout(gi),we&&we.hide()}l(s,"_hideTip"),f.body.addEventListener("mouseover",i),f.body.addEventListener("mouseout",i),f.body.addEventListener("mousemove",t)}l(Fa,"initTooltips");var Os=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,U=class extends u{m_cal_popup;m_ui_input;m_error_tip;constructor(e){super(e),this.addClass("@hlayout"),this.mapPropEvents(e,"change","click","focus")}componentCreated(){super.componentCreated(),this.m_props.autoFocus&&this.focus()}componentDisposed(){this.m_error_tip&&this.m_error_tip.dispose(),super.componentDisposed()}focus(){this.m_ui_input.focus()}render(e){let t={flex:1,dom_events:{focus:()=>this._focus(),focusout:()=>this._blur(),input:()=>this._change()},value:e.value,name:e.name,type:e.type,placeHolder:e.placeHolder,autoFocus:e.autoFocus,readOnly:e.readOnly,value_hook:e.value_hook,uppercase:e.uppercase,spellcheck:e.spellcheck,tabIndex:e.tabIndex===void 0?!0:e.tabIndex,attrs:e.attrs,min:e.min,max:e.max,autosel:e.autosel};if(e.type=="date"){e.format=e.format??"Y-M-D",t.type="text";let p={get:()=>this._date_get_hook(),set:g=>this._date_set_hook(g)};t.value_hook=e.value_hook??p}this.m_ui_input=new j(t);let i;e.icon?i=new z({icon:e.icon,click:()=>this._btnClick(),tabIndex:!1}):e.type=="date"&&(i=new z({cls:"gadget",icon:"var( --x4-icon-calendar-days )",tabIndex:!1,click:()=>this._showDatePicker(i)}),e.validator||(e.validator=this._date_validator));let s=e.gadgets??[];s.forEach(p=>{p.addClass("gadget")});let n=[i,...s];this.setClass("@required",e.required),e.gadgets&&e.gadgets.length&&this.addClass("with-gadgets");let r,a,h=e.labelWidth;h>0&&(r=h),h<0&&(a=-h);let m,c=e.labelAlign,d=!1;e.label&&(c=="top"&&(c="left",d=!0,a=1),m=new I({ref:"label",tag:"label",cls:"label1"+(e.label?"":" @hidden"),text:e.label??"",width:r,flex:a,align:c})),d?(this.removeClass("@hlayout"),this.addClass("@vlayout vertical"),this.setContent([m,new w({width:r,content:[this.m_ui_input,...n]})])):(this.addClass("@hlayout"),this.setContent([m,this.m_ui_input,...n]))}enable(e){e===!0&&this.m_ui_input.enable(),super.enable(e)}disable(){this.m_ui_input.disable(),super.disable()}_btnClick(){this.emit("click",ne(this.value))}setDateStoreFormat(e){this.m_props.format=e}setStoreValue(e){this.m_ui_input.setStoreValue(e)}getStoreValue(){return this.m_ui_input.getStoreValue()}_date_get_hook(){let e=St(this.value),t=this.m_props;return t.format=="native"?e:e?$(e,t.format):null}_date_set_hook(e){let t=this.m_props;if(t.format=="native")this.value=$(e);else if(e){let i=St(e,t.format);this.value=$(i)}else this.value=""}showError(e){this.m_error_tip||(this.m_error_tip=new Ge({cls:"error"}),f.body.appendChild(this.m_error_tip._build()));let t=this.m_ui_input.getBoundingRect();this.m_error_tip.text=e,this.m_error_tip.displayAt(t.right,t.top,"top left"),this.addClass("@error")}clearError(){this.m_error_tip&&(this.m_error_tip.hide(),this.removeClass("@error"))}get value(){return this.m_ui_input?this.m_ui_input.value:this.m_props.value}set value(e){this.m_ui_input?this.m_ui_input.value=e:this.m_props.value=e}selectAll(){this.m_ui_input.selectAll()}select(e,t=9999){this.m_ui_input.select(e,t)}getSelection(){return this.m_ui_input.getSelection()}set readOnly(e){this.m_ui_input.readOnly=e}get label(){return this.itemWithRef("label")?.text}set label(e){this.itemWithRef("label").text=e}_change(){let e=this.m_ui_input.value;this.emit("change",M(e))}_focus(){this.clearError(),this.emit("focus",ni(!0))}_blur(){this._validate(this.m_ui_input.value),this.emit("focus",ni(!1))}validate(){return this._validate(this.value)}_validate(e){let t=this.m_props,i=!1;if(t.required&&e.length==0)return this.showError(D.global.required_field),!1;if(e!=""){let s=this.getAttribute("pattern");if(s){let n=new RegExp(s);if(n&&!n.test(e))return this.showError(D.global.invalid_format),!1}if(t.type=="email"){if(!Os.test(e.toLowerCase()))return this.showError(D.global.invalid_email),!1}else if(t.type=="number"){let n=parseFloat(e);if(isNaN(n))return this.showError(D.global.invalid_number),!1;let r=parseFloat(this.m_ui_input.getAttribute("min"));r!==void 0&&n<r&&(e=""+r,i=!0);let a=parseFloat(this.m_ui_input.getAttribute("max"));a!==void 0&&n>a&&(e=""+a,i=!0)}}if(t.validator)try{this.value=t.validator(e)}catch(s){return this.showError(s instanceof Error?s.message:s),!1}else i&&(this.value=e);return!0}_date_validator(e){if(e=e.trim(),e=="")return"";let t;if(e=="@")t=new Date;else if(t=St(e),!t)throw Ze(D.global.invalid_date,D.global.date_format);return $(t)}_showDatePicker(e){this.m_cal_popup||(this.m_cal_popup=new dt({change:i=>{this.value=$(i.value),this.m_cal_popup.close()}}));let t=this.m_ui_input.getBoundingRect();this.m_cal_popup.displayAt(t.left,t.bottom,"top left")}get input(){return this.m_ui_input}get type(){return this.m_props.type}};l(U,"TextEdit");var _i=class extends U{m_popup;m_popvis;m_needval;m_lockpop;constructor(e){super(e),this.setDomEvent("input",()=>this._onChange()),this.setDomEvent("focusin",()=>this._onFocus()),this.startTimer("focus-check",100,!0,()=>this._checkFocus()),this.m_popvis=!1,this.m_needval=!1,this.m_lockpop=!1,this.setDomEvent("keydown",t=>this._onKey(t))}_onKey(e){this.m_popvis?e.key=="ArrowUp"||e.key=="ArrowDown"?(this.m_lockpop=!0,this.m_popup.handleKey(e),this.m_lockpop=!1,e.preventDefault(),e.stopPropagation()):e.key=="Escape"&&(this._hidePopup(),e.preventDefault(),e.stopPropagation()):e.key=="ArrowDown"&&(this._onChange(),e.preventDefault(),e.stopPropagation())}_onChange(){let e=this.m_props.enumValues(this.value);this.showPopup(e)}componentDisposed(){this.m_popup&&this._hidePopup(),super.componentDisposed()}showPopup(e){if(this.m_props.readOnly||this.hasClass("@disable"))return;if(!this.m_popup){let s=this.getComputedStyle(),n=s.value("fontFamily"),r=s.value("fontSize");this.m_popup=new Be({cls:"@combo-popup",attrs:{tabindex:0},selectionChange:a=>{this.value=a.selection.id,this.m_lockpop||(this._hidePopup(),this.focus())},style:{fontFamily:n,fontSize:r}})}this.m_popup.items=e.map(s=>({id:s,text:s}));let i=this.m_ui_input.getBoundingRect();this.m_popup.setStyle({minWidth:i.width}),this.m_popup.displayAt(i.left,i.bottom),this.m_popvis=!0}_validate(e){return!0}validate(){return super._validate(this.value)}_checkFocus(){let e=document.activeElement;this.dom&&this.dom.contains(e)||this.m_popup&&this.m_popup.dom&&this.m_popup.dom.contains(e)||this._hidePopup()}_hidePopup(){this.m_popvis&&(this.m_popup.close(),this.m_popvis=!1),this.m_needval&&(this.validate(),this.m_needval=!1)}_onFocus(){this.value.length==0&&this._onChange(),this.m_needval=!0}};l(_i,"AutoComplete");function Ws(o){return P({ctx:o})}l(Ws,"EvPaint");function Ns(o,e,t){let i=o;return i.width=e,i.height=t,i.smoothLine=js,i.smoothLineEx=Us,i.line=Ks,i.roundRect=Gs,i.calcTextSize=$s,i.setFontSize=qs,i.circle=Ys,i}l(Ns,"mkPainter");function js(o,e=null,t=!0){if(o.length<2)return;if(e||(e=this),o.length==2){t!==!1?e.moveTo(o[0].x,o[0].y):e.lineTo(o[0].x,o[0].y),e.lineTo(o[1].x,o[1].y);return}function i(h,m){return{x:h.x+(m.x-h.x)/2,y:h.y+(m.y-h.y)/2}}l(i,"midPointBtw");function s(h,m,c,d,p,g,x){return{x:(1-h)*(1-h)*m+2*(1-h)*h*d+h*h*g,y:(1-h)*(1-h)*c+2*(1-h)*h*p+h*h*x}}l(s,"getQuadraticXY");let n=o[0],r=o[1],a=n;e.moveTo(n.x,n.y);for(let h=1,m=o.length;h<m;h++){let c=i(n,r);for(let d=0;d<8;d++){let{x:p,y:g}=s(d/8,a.x,a.y,n.x,n.y,c.x,c.y);e.lineTo(p,g)}n=o[h],r=o[h+1],a=c}e.lineTo(n.x,n.y)}l(js,"smoothLine");function Us(o,e=.5,t=10,i=null,s=!0,n=!1){let r=[];for(let b=0,y=o.length;b<y;b++)r.push(o[b].x),r.push(o[b].y);let a,h=1,m=r.length,c=0,d=(m-2)*t+2+(n?2*t:0),p=new Float32Array(d),g=new Float32Array((t+2)*4),x=4;for(a=r.slice(0),n?(a.unshift(r[m-1]),a.unshift(r[m-2]),a.push(r[0],r[1])):(a.unshift(r[1]),a.unshift(r[0]),a.push(r[m-2],r[m-1])),g[0]=1;h<t;h++){var _=h/t,F=_*_,S=F*_,E=S*2,W=F*3;g[x++]=E-W+1,g[x++]=W-E,g[x++]=S-2*F+_,g[x++]=S-F}g[x]=1,A(a,g,m),n&&(a=[],a.push(r[m-4],r[m-3],r[m-2],r[m-1]),a.push(r[0],r[1],r[2],r[3]),A(a,g,4));function A(b,y,N){for(var C=2,T;C<N;C+=2){var me=b[C],Ae=b[C+1],Xe=b[C+2],Oe=b[C+3],We=(Xe-b[C-2])*e,be=(Oe-b[C-1])*e,Ee=(b[C+4]-me)*e,Wi=(b[C+5]-Ae)*e;for(T=0;T<t;T++){var kt=T<<2,Ni=y[kt],ji=y[kt+1],Ui=y[kt+2],Ki=y[kt+3];p[c++]=Ni*me+ji*Xe+Ui*We+Ki*Ee,p[c++]=Ni*Ae+ji*Oe+Ui*be+Ki*Wi}}}l(A,"parse"),m=n?0:r.length-2,p[c++]=r[m],p[c]=r[m+1],i||(i=this);for(let b=0,y=p.length;b<y;b+=2)b==0&&s!==!1?i.moveTo(p[b],p[b+1]):i.lineTo(p[b],p[b+1])}l(Us,"smoothLineEx");function Ks(o,e,t,i,s,n=1){this.save(),this.beginPath(),this.moveTo(o,e),this.lineTo(t,i),this.lineWidth=n,this.strokeStyle=s,this.stroke(),this.restore()}l(Ks,"line");function Gs(o,e,t,i,s){this.moveTo(o+s,e),this.lineTo(o+t-s,e),this.quadraticCurveTo(o+t,e,o+t,e+s),this.lineTo(o+t,e+i-s),this.quadraticCurveTo(o+t,e+i,o+t-s,e+i),this.lineTo(o+s,e+i),this.quadraticCurveTo(o,e+i,o,e+i-s),this.lineTo(o,e+s),this.quadraticCurveTo(o,e,o+s,e),this.closePath()}l(Gs,"roundRect");function $s(o,e=!1){let t=this.measureText(o),i=t.fontBoundingBoxAscent+t.fontBoundingBoxDescent;return e?{width:Math.round(t.width),height:Math.round(i)}:{width:t.width,height:i}}l($s,"calcTextSize");function qs(o){let e=Math.round(o)+"px";this.font=this.font.replace(/\d+px/,e)}l(qs,"setFontSize");function Ys(o,e,t){this.moveTo(o+t,e),this.arc(o,e,t,0,Math.PI*2)}l(Ys,"circle");var xi=class extends u{m_iwidth=-1;m_iheight=-1;m_scale=1;m_canvas;constructor(e){super(e),this.setDomEvent("sizechange",()=>{this._paint()}),this.mapPropEvents(e,"paint")}render(){this.m_iwidth=-1,this.m_iheight=-1,this.m_canvas=new u({tag:"canvas"}),this.setContent(this.m_canvas)}update(e=0){this.m_iheight=this.m_iwidth=-1,super.update(e)}scale(e){this.m_scale=e,this.m_iwidth=-1,this.redraw()}get canvas(){return this.m_canvas}$update_rep=0;redraw(e){e!==void 0?++this.$update_rep>=20?(this.stopTimer("update"),this._paint()):this.startTimer("update",e,!1,()=>this._paint()):(this.stopTimer("update"),this._paint())}_paint(){this.$update_rep=0;let e=this.dom;if(!this.isUserVisible())return;let t=this.m_canvas.dom,i=e.clientWidth,s=e.clientHeight,n=t.getContext("2d");if(i!=this.m_iwidth||s!=this.m_iheight){let r=window.devicePixelRatio||1,a=n.webkitBackingStorePixelRatio||n.mozBackingStorePixelRatio||n.msBackingStorePixelRatio||n.oBackingStorePixelRatio||n.backingStorePixelRatio||1,h=this.canvas;if(r!==a||this.m_scale!=1){let m=r/a,c=i*m,d=s*m;h.setAttribute("width",""+c),h.setAttribute("height",""+d),h.setStyleValue("width",i),h.setStyleValue("height",s),m*=this.m_scale,n.scale(m,m)}else h.setAttribute("width",""+i),h.setAttribute("height",""+s),h.setStyleValue("width",i),h.setStyleValue("height",s),n.scale(1,1);this.m_iwidth=i,this.m_iheight=s}if(i&&s){let r=Ns(n,i,s);this.m_props.autoClear&&r.clearRect(0,0,i,s),r.save(),r.translate(-.5,-.5),this.paint(r),r.restore()}}paint(e){try{this.m_props.painter?this.m_props.painter(e):this.emit("paint",Ws(e))}catch(t){console.assert(!1,t)}}};l(xi,"Canvas");var Le=class extends u{m_cards;m_ipage;m_cpage;constructor(e){super(e),this.m_cards=[],this.m_ipage=e.active,this.m_cpage=null,this.singleShot(()=>{this.setPages(e.pages)})}render(){let e=[];this.m_cards.forEach(t=>{t.page&&e.push(t.page)}),this.setContent(e)}switchTo(e){if(this.m_cards.length!=0&&(e===void 0&&(e=this.m_cards[0].name),e!==this.m_cpage?.name)){if(this.m_cpage&&(this.m_cpage.selector&&this.m_cpage.selector.removeClass("@active"),this.m_cpage.page&&!(this.m_cpage.page instanceof Function))){let t=this.m_cpage.page;t.removeClass("@active"),t.addClass("@hidden")}if(this.m_cpage=this.m_cards.find(t=>t.name==e),this.m_cpage){if(this.m_cpage.page){Z(this.m_cpage.page)&&(this.m_cpage.page=this.m_cpage.page(),console.assert(this.m_cpage.page!=null,"You must return a valid component"));let t=this.m_cpage.page;t.addClass("@active"),t.removeClass("@hidden"),t.dom||this._preparePage(t),this.m_cpage.selector&&this.m_cpage.selector.addClass("@active")}this.emit("change",M(this.m_cpage.name))}}}setPages(e){let t=this._initTabs(e);t&&ue(()=>{this.switchTo(t),this.update()})}_initTabs(e){if(!e)return;let t=this.m_ipage;return e.forEach(i=>{if(!i)return;let s={...i};s.selector=this._prepareSelector(i),s.active=!1,this.m_cards.push(s),t||(t=i.name),i.active&&(t=i.name)}),t}_updateSelector(){}_prepareSelector(e){return null}_preparePage(e){e.setStyleValue("flex",1),e.addClass("@tab-page")}};l(Le,"CardView");var Ie=class extends u{constructor(e){super(e),this.setDomEvent("focus",()=>this._setFocus()),this.mapPropEvents(e,"change"),e.slider&&this.addClass("slider")}render(e){let t=e.labelWidth??-1,i="__cb_"+this.uid;this.setTag("label"),this.addClass("@hlayout"),this.addClass(e.align??"left"),this.setContent([new j({ref:"input",type:"checkbox",name:e.name,id:i,tabIndex:e.tabIndex,value:e.value??"on",attrs:{checked:e.checked?"":void 0},dom_events:{change:this._change.bind(this)}}),e.slider?new u({cls:"@slide-el"}):null,new I({text:e.text??"",width:t<0?void 0:t,flex:t<0?-t:void 0,align:e.labelAlign??"left",style:{order:e.align=="right"?-1:1},attrs:{for:i}})])}_change(){this.emit("change",M(this.check))}_setFocus(){this.itemWithRef("input").focus()}get check(){return this.dom?this.itemWithRef("input").dom.checked:this.m_props.checked}set check(e){if(this.dom){let i=this.itemWithRef("input").dom;i&&(i.checked=e)}this.m_props.checked=e}get text(){return this.itemWithRef("label").text}set text(e){this.itemWithRef("label").text=e}toggle(){this.check=!this.check}};l(Ie,"CheckBox");var ps={lightsalmon:4294942842,lightseagreen:4280332970,lightskyblue:4287090426,lightslategray:4286023833,lightsteelblue:4289774814,lightyellow:4294967264,lime:4278255360,limegreen:4281519410,linen:4294635750,magenta:4294902015,maroon:4286578688,mediumaquamarine:4284927402,mediumblue:4278190285,mediumorchid:4290401747,mediumpurple:4287852763,mediumseagreen:4282168177,mediumslateblue:4286277870,mediumspringgreen:4278254234,mediumturquoise:4282962380,mediumvioletred:4291237253,midnightblue:4279834992,mintcream:4294311930,mistyrose:4294960353,moccasin:4294960309,navajowhite:4294958765,navy:4278190208,oldlace:4294833638,olive:4286611456,olivedrab:4285238819,orange:4294944e3,orangered:4294919424,orchid:4292505814,palegoldenrod:4293847210,palegreen:4288215960,paleturquoise:4289720046,palevioletred:4292571283,papayawhip:4294963157,peachpuff:4294957753,peru:4291659071,pink:4294951115,plum:4292714717,powderblue:4289781990,purple:4286578816,red:4294901760,rosybrown:4290547599,royalblue:4282477025,saddlebrown:4287317267,salmon:4294606962,sandybrown:4294616160,seagreen:4281240407,seashell:4294964718,sienna:4288696877,silver:4290822336,skyblue:4287090411,slateblue:4285160141,slategray:4285563024,snow:4294966010,springgreen:4278255487,steelblue:4282811060,tan:4291998860,teal:4278222976,thistle:4292394968,tomato:4294927175,turquoise:4282441936,violet:4293821166,wheat:4294303411,white:4294967295,whitesmoke:4294309365,yellow:4294967040,yellowgreen:4288335154,aliceblue:4293982463,antiquewhite:4294634455,aqua:4278255615,aquamarine:4286578644,azure:4293984255,beige:4294309340,bisque:4294960324,black:4278190080,blanchedalmond:4294962125,blue:4278190335,blueviolet:4287245282,brown:4289014314,burlywood:4292786311,cadetblue:4284456608,chartreuse:4286578432,chocolate:4291979550,coral:4294934352,cornflowerblue:4284782061,cornsilk:4294965468,crimson:4292613180,cyan:4278255615,darkblue:4278190219,darkcyan:4278225803,darkgoldenrod:4290283019,darkgray:4289309097,darkgreen:4278215680,darkkhaki:4290623339,darkmagenta:4287299723,darkolivegreen:4283788079,darkorange:4294937600,darkorchid:4288230092,darkred:4287299584,darksalmon:4293498490,darkseagreen:4287609999,darkslateblue:4282924427,darkslategray:4281290575,darkturquoise:4278243025,darkviolet:4287889619,deeppink:4294907027,deepskyblue:4278239231,dimgray:4285098345,dodgerblue:4280193279,firebrick:4289864226,floralwhite:4294966e3,forestgreen:4280453922,fuchsia:4294902015,gainsboro:4292664540,ghostwhite:4294506751,gold:4294956800,goldenrod:4292519200,gray:4286611584,green:4278222848,greenyellow:4289593135,honeydew:4293984240,hotpink:4294928820,indianred:4291648604,indigo:4283105410,ivory:4294967280,khaki:4293977740,lavender:4293322490,lavenderblush:4294963445,lawngreen:4286381056,lemonchiffon:4294965965,lightblue:4289583334,lightcoral:4293951616,lightcyan:4292935679,lightgoldenrodyellow:4294638290,lightgreen:4287688336,lightgrey:4292072403,lightpink:4294948545,none:0,transparent:0},R=class{m_value;constructor(e,t,i,s){let n=arguments.length,r=this;function a(){if(!n)return 4278190080;if(n==1)return Number.isSafeInteger(e)?4278190080|e&16777215:r._getCustomColor(e);if(n==2){let h,m=((t*255|0)&255)<<24;return Number.isSafeInteger(e)?h=e:h=r._getCustomColor(e),h&16777215|m}else if(n==4&&s!==void 0&&s<=1)return s<=0?0:(s=s*255,s|=0,(s&255)<<24|(e&255)<<16|(t&255)<<8|i&255);return 4278190080|(e&255)<<16|(t&255)<<8|i&255}l(a,"_init"),this.m_value=a()}_shade(e){let t=e<0?0:255,i=e<0?-e:e,s=this._split();return new R(Math.round((t-s.r)*i)+s.r,Math.round((t-s.g)*i)+s.g,Math.round((t-s.b)*i)+s.b,s.a/255)}darken(e){return e<0&&(e=0),e>100&&(e=100),this._shade(-e/100)}lighten(e){return e<0&&(e=0),e>100&&(e=100),this._shade(e/100)}static mix(e,t,i){let s=e._split(),n=t._split(),r=s.a===n.a?s.a:Math.round(n.a*i+s.a*(1-i)),a=s.r===n.r?s.r:Math.round(n.r*i+s.r*(1-i)),h=s.g===n.g?s.g:Math.round(n.g*i+s.g*(1-i)),m=s.b===n.b?s.b:Math.round(n.b*i+s.b*(1-i));return new R(a,h,m,r/255)}_split(){let e=this.m_value;return{a:e>>24&255,r:e>>16&255,g:e>>8&255,b:e&255}}fadeout(e){let t=this._split();if(t.a=t.a/255,t.a=t.a-t.a*e/100,t.a>1)t.a=1;else if(t.a<=0)return R.NONE;return new R(t.r,t.g,t.b,t.a)}static fromHSV(e,t,i,s=1){let n=Math.min(5,Math.floor(e*6)),r=e*6-n,a=i*(1-t),h=i*(1-r*t),m=i*(1-(1-r)*t),c,d,p;switch(n){case 0:c=i,d=m,p=a;break;case 1:c=h,d=i,p=a;break;case 2:c=a,d=i,p=m;break;case 3:c=a,d=h,p=i;break;case 4:c=m,d=a,p=i;break;case 5:c=i,d=a,p=h;break}return new R(c*255,d*255,p*255,s)}static toHSV(e){let t=e._split();t.r/=255,t.g/=255,t.b/=255,t.a/=255;let i=Math.max(t.r,t.g,t.b),s=Math.min(t.r,t.g,t.b),n=i-s,r=i===0?0:n/i,a=i,h;if(n===0)h=0;else switch(i){case t.r:h=(t.g-t.b)/n/6+(t.g<t.b?1:0);break;case t.g:h=(t.b-t.r)/n/6+1/3;break;case t.b:h=(t.r-t.g)/n/6+2/3;break}return{h,s:r,v:a,a:t.a}}static fromHLS(e,t,i){let s,n,r;if(i==0)s=n=r=t;else{let h=function(d,p,g){return g<0&&(g+=1),g>1&&(g-=1),g<1/6?d+(p-d)*6*g:g<1/2?p:g<2/3?d+(p-d)*(2/3-g)*6:d};var a=h;l(h,"hue2rgb");let m=t<.5?t*(1+i):t+i-t*i,c=2*t-m;s=h(c,m,e+1/3),n=h(c,m,e),r=h(c,m,e-1/3)}return s=(s*255|0)&255,n=(n*255|0)&255,r=(r*255|0)&255,new R(s,n,r)}static toHLS(e){let t=e.m_value,i=(t>>16&255)/255,s=(t>>8&255)/255,n=(t&255)/255,r=i,a=i;s<r&&(r=s),n<r&&(r=n),s>a&&(a=s),n>a&&(a=n);let h=0,m=0,c=0,d=a-r,p=a+r,g=.5*p,x,_;if(a!=r)h=(a-i)/d,m=(a-s)/d,c=(a-n)/d;else return{h:0,l:g,s:0};return g<.5?x=d/p:x=d/(2-p),i==a?_=60*(6+c-m):s==a?_=60*(2+h-c):_=60*(4+m-h),_>360&&(_=_-360),{h:_/360,l:g,s:x}}red(){return this.m_value>>16&255}green(){return this.m_value>>8&255}blue(){return this.m_value&255}alpha(){return(this.m_value>>24&255)/255}value(){return this.m_value}toString(){if(this.m_value===0)return"transparent";let t=this._split();if(t.a===255)return`rgb(${t.r},${t.g},${t.b})`;{t.a/=255;let i=t.a.toFixed(3);return`rgba(${t.r},${t.g},${t.b},${i})`}}toHex(e=!0){if(this.m_value===0)return"transparent";let i=this._split();return i.a===255||!e?`#${He(i.r)}${He(i.g)}${He(i.b)}`:`#${He(i.r)}${He(i.g)}${He(i.b)}${He(i.a)}`}static addCustomColor(e,t){R.custom[e]=t}static addCssColor(e){let t=he.getVar(e);R.custom["css:"+e]=R.parse(t.trim())}static parse(e){let t;if(e[0]=="#"){if((t=/#(?<r>[a-fA-F0-9]{2})(?<g>[a-fA-F0-9]{2})(?<b>[a-fA-F0-9]{2})(?<a>[a-fA-F0-9]{2})?/.exec(e))!==null){let n=t.groups;return new R(parseInt(n.r,16),parseInt(n.g,16),parseInt(n.b,16),n.a!==void 0?parseInt(n.a,16)/255:1)}if((t=/#(?<r>[a-fA-F0-9])(?<g>[a-fA-F0-9])(?<b>[a-fA-F0-9])/.exec(e))!==null){let n=t.groups,r=parseInt(n.r,16),a=parseInt(n.g,16),h=parseInt(n.b,16);return new R(r<<4|r,a<<4|a,h<<4|h,1)}}if(e[0]=="r"){if((t=/rgb\(\s*(?<r>\d+)\s*\,\s*(?<g>\d+)\s*\,\s*(?<b>\d+)\s*\)/.exec(e))!==null){let n=t.groups;return new R(parseInt(n.r,10),parseInt(n.g,10),parseInt(n.b,10),1)}if((t=/rgba\(\s*(?<r>\d+)\s*\,\s*(?<g>\d+)\s*\,\s*(?<b>\d+)\s*\,\s*(?<a>[0-9.]+)\s*\)/.exec(e))!==null){let n=t.groups;return new R(parseInt(n.r,10),parseInt(n.g,10),parseInt(n.b,10),parseFloat(n.a))}}return console.log("invalid color value: "+e),new R(0)}_getCustomColor(e){if(e===null)return 0;let t=ps[e];return t!==void 0?t:R.custom[e]!==void 0?R.custom[e].m_value:e.substr(0,4)=="css:"?(R.addCssColor(e.substr(4)),R.custom[e].m_value):R.parse(e).m_value}static contrastColor(e){let t=e._split();return(.299*t.r+.587*t.g+.114*t.b)/255>.5?R.BLACK:R.WHITE}static valueFromColorName(e){let t=ps[e];return t?new R(t):null}static fromCssVar(e){return new R(e).toString()}},V=R;l(V,"Color"),k(V,"custom",[]),k(V,"WHITE",new R(255,255,255)),k(V,"BLACK",new R(0,0,0)),k(V,"NONE",new R(0,0,0,0));function He(o){return("00"+o.toString(16)).substr(-2).toUpperCase()}l(He,"_hx");var Xs=1e4;function Rt(o){let e,t=o.url,i=o.method||"GET",s=!1;o.params instanceof FormData?(e=o.params,s=!0):i=="POST"?e=fs(o.params,!1):t+=fs(o.params,!0),t=encodeURI(t);let n=new XMLHttpRequest;if(n.open(i,t),n.upload.addEventListener("progress",r,!1),n.addEventListener("timeout",h),n.addEventListener("error",h),n.addEventListener("load",m),s||n.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=UTF-8"),i!="POST"&&(n.responseType=o.responseType||"json",n.timeout=o.timeout||Xs),o.headers)for(let c in o.headers)n.setRequestHeader(c,o.headers[c]);function r(c){if(console.log(c),o.progress)try{if(c.lengthComputable){let d=a(c.loaded)+" / "+a(c.total);o.progress(c.loaded,c.total,d)}}catch(d){console.error("unhandled exception:",d)}}l(r,"progress");function a(c){let d,p;return c>=1e9?(d="Gb",p=c/1e9):c>=1e6?(d="Mb",p=c/1e6):c>=1e3?(d="Kb",p=c/1e3):(d="bytes",p=c),p.toFixed(2)+d}l(a,"humanSize");function h(){o.failure&&o.failure(n.status,n.statusText,o.userData)}l(h,"failure");function m(){if(n.status>=200&&n.status<300){if(o.success)try{o.success(n.response,o.userData)}catch(c){console.error("unhandled exception:",c)}}else h()}return l(m,"success"),s||i=="POST"?n.send(e):n.send(),function(){n.abort()}}l(Rt,"ajaxRequest");function fs(o,e){if(!o)return"";let t=[];for(let s in o){let n=o[s];if(X(n))for(let r=0,a=n.length;r<a;r++)t.push(encodeURIComponent(s)+"[]="+encodeURIComponent(""+n[r]));else n===void 0&&(n=""),t.push(encodeURIComponent(s)+"="+encodeURIComponent(""+n))}let i=t.join("&");return e?"?"+i:i}l(fs,"buildQuery");async function kl(o,e){return(await gs(o,e,"application/json")).json()}l(kl,"ajaxAsJSON");async function Il(o,e){return(await gs(o,e,"text/plain")).text()}l(Il,"ajaxAsText");async function gs(o,e,t){let i={method:"GET",headers:{"X-Requested-With":"XMLHttpRequest"}};if(t&&(i.headers["Content-Type"]=t),e&&(i={...i,...e},e.body&&!B(e.body))){let n=!1;(as(e.body)||!(e.body instanceof Blob)&&!(e.body instanceof ArrayBuffer)&&!(e.body instanceof FormData)&&!(e.body instanceof URLSearchParams)&&!(e.body instanceof ReadableStream))&&(n=!0),n?i.body=JSON.stringify(e.body):i.body=e.body}let s=await fetch(o,i);if(e&&e.noGenX)return s;if(!s.ok)throw new Je(s);return s}l(gs,"ajax");var pt=class extends H{m_height;m_container;m_buttons;m_dirty;m_watchChanges;constructor(e){let t=e.content;e.content=null;let i=e.height;e.height=void 0,super(e),this.setTag(e.disableSuggestions?"section":"form"),this.mapPropEvents(e,"btnClick"),this.updateContent(t,e.buttons,i),this.m_dirty=!1,this.m_watchChanges=!1}get container(){return this.m_container}componentCreated(){super.componentCreated(),this.m_watchChanges&&this.watchChanges()}updateContent(e,t,i=0){i&&(this.m_height=i),this._makeButtons(t);let s=[this.m_container=new H({cls:"container",height:this.m_height,content:e}),this.m_buttons];super.setContent(s)}setContent(e,t=!0){this.m_container.setContent(e,t)}setButtons(e){this._makeButtons(e)}enableButton(e,t=!0){let i=this.getButton(e);i&&i.enable(t)}getButton(e){return this.m_buttons?.itemWithRef("@"+e)}_makeButtons(e){this.m_buttons||(this.m_buttons=new w({cls:"footer",ref:"buttons"}));let t=[];if(e)for(let i of e)if(i instanceof u)t.push(i);else switch(i){case"ok":{t.push(new z({ref:"@"+i,text:D.global.ok,click:()=>{this._click(i)}}));break}case"cancel":{t.push(new z({ref:"@"+i,text:D.global.cancel,click:()=>{this._click(i)}}));break}case"ignore":{t.push(new z({ref:"@"+i,text:D.global.ignore,click:()=>{this._click(i)}}));break}case"yes":{t.push(new z({ref:"@"+i,text:D.global.yes,click:()=>{this._click(i)}}));break}case"no":{t.push(new z({ref:"@"+i,text:D.global.no,click:()=>{this._click(i)}}));break}case"close":{t.push(new z({ref:"@"+i,text:D.global.close,click:()=>{this._click(i)}}));break}case"save":{t.push(new z({ref:"@"+i,text:D.global.save,click:()=>{this._click(i)}}));break}case"dontsave":{t.push(new z({ref:"@"+i,text:D.global.dontsave,click:()=>{this._click(i)}}));break}}t.length==1&&t[0].setAttribute("autofocus",!0),this.m_buttons.setContent(t)}validate(){let e=this.queryAll("input"),t=!0;for(let i=0;i<e.length;i++){let s=u.getElement(e[i],U);s&&!s.validate()&&(t=!1)}return t}_click(e){this.emit("btnClick",_s(e))}_getElements(){return console.assert(!!this.dom),this.queryAll("[name]")}setValues(e){let t=this._getElements();for(let i=0;i<t.length;i++){let s=t[i],n=u.getElement(s);if(!n.hasAttribute("name"))continue;let r=n.getAttribute("name"),a=n.getAttribute("type");e[r]!==void 0&&n.setStoreValue(e[r])}this.setDirty(!1)}getValues(){let e=this._getElements(),t={};for(let i=0;i<e.length;i++){let s=e[i],n=u.getElement(s);if(!n.hasAttribute("name"))continue;let r=n.getAttribute("name"),a=n.getStoreValue();a!==void 0&&(t[r]=a)}return t}submit(e,t){if(!this.validate())return!1;let i=this.getValues();if(t&&!t(i))return!1;let s=new FormData;for(let n in i)i.hasOwnProperty(n)&&s.append(n,i[n]===void 0?"":i[n]);return e.params=s,Rt(e)}watchChanges(){this.dom?(this.queryAll("input[name], textarea[name]").forEach(t=>{J(t).setDomEvent("input",()=>{this.setDirty()})}),this.m_watchChanges=!1):this.m_watchChanges=!0}setDirty(e=!0){this.m_dirty=e}isDirty(){return this.m_dirty}};l(pt,"Form");function _s(o){return P({button:o})}l(_s,"EvBtnClick");var De=class extends q{m_icon;m_title;m_form;m_buttons;m_closable;m_movable;m_maximized;m_minimized;m_maximizable;m_minimizable;m_minFormSize;m_rc_max;m_rc_min;m_el_title;m_last_down;m_auto_close;m_ui_title;m_form_cb;constructor(e){let t=e.content;e.content=null;let i=e.width,s=e.height;e.width=void 0,e.height=void 0,super(e),this.m_minFormSize={width:i,height:s},this.enableMask(!0),e.form?Z(e.form)?this.m_form_cb=e.form:(this.m_form=e.form,this.m_form.on("btnClick",n=>this._handleClick(n))):this.m_form=new pt({content:t,buttons:e.buttons,disableSuggestions:e.disableSuggestions,btnClick:n=>this._handleClick(n)}),this.m_movable=e.movable,this.m_auto_close=e.autoClose??!0,this.m_icon=e.icon,this.m_title=e.title,this.m_buttons=e.buttons??null,this.m_closable=e.closable??!1,this.m_last_down=0,this.on("size",n=>{this.addClass("@resized"),this.m_form.setStyleValue("width",null),this.m_form.setStyleValue("height",null)}),this.m_maximized=!1,this.m_minimized=!1,this.m_maximizable=!1,this.m_minimizable=!1,e.maximizable!==void 0&&(this.m_maximizable=e.maximizable),e.minimizable!==void 0&&(this.m_minimizable=e.minimizable),e.maximized==!0&&(this.m_maximizable=!0),e.btnClick&&this.on("btnClick",e.btnClick)}componentCreated(){super.componentCreated(),this.m_minFormSize.width&&this.m_form.setStyle({minWidth:this.m_minFormSize.width,width:this.m_minFormSize.width}),this.m_minFormSize.height&&this.m_form.setStyle({minHeight:this.m_minFormSize.height,height:this.m_minFormSize.height});let e=this.getBoundingRect();this.setStyleValue("min-width",e.width),this.setStyleValue("min-height",e.height),this.setStyleValue("width",e.width),this.setStyleValue("height",e.height),this.m_props.dlgWidth&&this.setStyleValue("width",this.m_props.dlgWidth+"%"),this.m_props.dlgHeight&&this.setStyleValue("height",this.m_props.dlgHeight+"%"),this.addClass("@resized"),this.m_el_title&&this.m_el_title.setStyleValue("width","auto"),this.m_props.maximized?(this._maximize(),this.emit("size",Q(null))):this.centerOnScreen()}_handleClick(e){this.emit("btnClick",e),e.defaultPrevented||this.close()}setGeometry(e){e.minimized&&this.m_minimizable?(this._minimize(!1),this.m_rc_min=new Y(e.left,e.top,e.width,e.height),this.displayAt(e.left,e.top,"top-left")):e.maximized&&this.m_maximizable?(this._maximize(!1),this.m_rc_max=new Y(e.left,e.top,e.width,e.height)):(this.setSize(e.width,e.height),this.displayAt(e.left,e.top,"top-left"))}getGeometry(){if(this.m_minimized)return{left:this.m_rc_min.left,top:this.m_rc_min.top,width:this.m_rc_min.width,height:this.m_rc_min.height,minimized:!0,maximized:!1};if(this.m_maximized)return{left:this.m_rc_max.left,top:this.m_rc_max.top,width:this.m_rc_max.width,height:this.m_rc_max.height,minimized:!1,maximized:!0};let e=this.getBoundingRect();return{left:e.left,top:e.top,width:e.width,height:e.height,minimized:!1,maximized:!1}}setSize(e,t){this.setStyle({width:e,height:t}),this.emit("size",Q({width:e,height:t}))}render(){this.m_form_cb&&(this.m_form=this.m_form_cb(),this.m_form.on("btnClick",t=>this._handleClick(t)),this.m_form_cb=null);let e=this.m_icon!==void 0||this.m_closable||this.m_title!==void 0||this.m_movable;this.m_el_title=null,e&&(this.m_el_title=new w({cls:"title",content:[this.m_icon?new L({icon:this.m_icon}):null,this.m_ui_title=new I({flex:1,text:this.m_title}),this.m_minimizable?new L({cls:"min-btn",icon:"var( --x4-icon-window-minimize )",dom_events:{click:()=>this._toggleMin()}}):null,this.m_maximizable?new L({cls:"max-btn",icon:"var( --x4-icon-window-maximize )",dom_events:{click:()=>this._toggleMax()}}):null,this.m_maximizable?new L({cls:"res-btn",icon:"var( --x4-icon-window-restore )",dom_events:{click:()=>this._toggleMax()}}):null,this.m_closable?new L({cls:"close-btn",icon:"var( --x4-icon-rectangle-times )",dom_events:{click:()=>this.close()}}):null]}),this.m_movable&&(Mt()?this.m_el_title.setDomEvent("touchstart",t=>this._mouseDown(t)):this.m_el_title.setDomEvent("mousedown",t=>this._mouseDown(t)))),super.setContent([this.m_el_title,this.m_form])}setContent(e,t=!0){this.m_form.setContent(e,t)}setButtons(e){this.m_form.setButtons(e)}get form(){return this.m_form}close(){this.emit("close",{}),super.close()}_toggleMax(){this.m_maximizable&&(this.m_maximized?(this.removeClass("maximized"),this.setStyle({left:this.m_rc_max.left,top:this.m_rc_max.top,width:this.m_rc_max.width,height:this.m_rc_max.height}),this.m_maximized=!1,this.emit("size",Q(null,"restore"))):(this._maximize(),this.emit("size",Q(null,"maximize"))))}_toggleMin(){this.m_minimizable&&(this.m_minimized?(this.removeClass("minimized"),this.setStyle({width:this.m_rc_min.width,height:this.m_rc_min.height}),this.m_minimized=!1,this.emit("size",Q(null,"restore"))):(this._minimize(),this.emit("size",Q(null,"minimize"))))}_mouseDown(e){let{x:t,y:i}=re(e,!0),s=J(f.body).getBoundingRect(),n=this.getBoundingRect(!0),r=t-n.left,a=i-n.top,h=Date.now(),m=h-this.m_last_down;if(this.m_maximizable&&m<700){this._toggleMax();return}if(this.m_last_down=h,this.m_maximized)return;let c=l((d,p)=>{d>s.right?d=s.right:d<s.left&&(d=s.left),p>s.bottom?p=s.bottom:p<s.top&&(p=s.top);let g=d-r,x=p-a;this.setStyle({left:g,top:x})},"__move");u.setCapture(this,d=>{if(d.type=="mousemove"){let p=d;c(p.clientX,p.clientY)}else if(d.type=="touchmove"){let p=d;p.touches.length==1&&c(p.touches[0].clientX,p.touches[0].clientY)}else d.type=="mouseup"||d.type=="touchend"?(u.releaseCapture(),this.emit("move",us(null))):d.type=="mousedown"||d.type=="touchstart"})}maximize(){!this.m_maximizable||this.m_maximized||(this._maximize(),this.emit("size",Q(null)))}_maximize(e=!0){e&&(this.m_rc_max=this.getBoundingRect(!1)),this.addClass("maximized"),this.m_maximized=!0,this.setStyle({left:void 0,top:void 0,width:void 0,height:void 0})}minimize(){!this.m_minimizable||this.m_minimized||(this._minimize(),this.emit("size",Q(null)))}_minimize(e=!0){e&&(this.m_rc_min=this.getBoundingRect(!1)),this.addClass("minimized"),this.m_minimized=!0,this.setStyle({width:void 0,height:void 0})}set title(e){this.m_title=e,this.m_ui_title&&(this.m_ui_title.text=e)}itemWithName(e){let t=this.dom.querySelector(`[name="${e}"]`);return t?u.getElement(t):null}getValues(){return this.m_form.getValues()}validate(){return this.m_form.validate()}};l(De,"Dialog");var zt=class extends O{m_colorSel;m_colorHue;m_colorAlpha;m_sample;m_selMark;m_hueMark;m_alphaMark;m_baseHSV;m_baseColor;m_transpCk;m_colorEdit;m_palmode;constructor(e){super(e),this.m_palmode=zt.last_palmode,this.setDomEvent("contextmenu",t=>this._showCtx(t))}_showCtx(e){let t=new ee({items:[new pe({text:"Palette",checked:this.m_palmode,click:()=>{this.m_palmode=!this.m_palmode,zt.last_palmode=this.m_palmode,this.update()}})]}),i=re(e,!0);t.displayAt(i.x,i.y)}render(e){if(this.m_baseColor=e.color,this.m_baseHSV=V.toHSV(this.m_baseColor),this.m_palmode){let h=function(m){r=[],m.forEach(c=>{let d=new V(c.hex),p=d.value()==a,g=ti("hclr-box xbox",{selected:p}),x=new u({cls:g,style:{backgroundColor:d.toHex(),color:V.contrastColor(d).toHex()},data:{color:d.value()},content:d.toHex()});r.push(x),p&&(s=x)}),i&&i.itemWithId("vsel").setContent(r)};var t=h;l(h,"fillSubs"),this.addClass("pal-mode");let i=null,s=null,n=[],r=[],a=this.m_baseColor.value();Zs.forEach(m=>{let c=m.variations[4].hex,d=c===a;d||(d=m.variations.some(x=>{if(new V(x.hex).value()===a)return!0}));let p=ti("clr-box xbox",{selected:d}),g=new u({cls:p,style:{backgroundColor:new V(c).toHex()},data:{color:c,main:m.variations}});d&&h(m.variations),n.push(g)}),i=new H({content:[new w({id:"hsel",content:n}),new H({id:"vsel",flex:1,content:r})]}),this.m_colorEdit=new U({cls:"hexv",value:"",attrs:{spellcheck:!1},change:m=>{let c=new V(m.value);c&&(this.m_baseColor=c,this.m_baseHSV=V.toHSV(c),this._updateColor(!1))}}),this.m_transpCk=new Ie({cls:"transp",text:"transparent",change:m=>{this.m_baseHSV.a=m.value?0:1,this._updateColor()}}),this.setContent([i,this.m_transpCk,this.m_colorEdit]),i.setDomEvent("click",m=>{s&&(s.removeClass("selected"),s=null);let c=u.getElement(m.target,"xbox");if(c){let d=c.getData("main");if(d)h(d);else{let p=new V(c.getData("color"));this.m_baseColor=p,this.m_baseHSV=V.toHSV(p),this._updateColor(),s=c,c.addClass("selected")}}})}else this.removeClass("pal-mode"),this.m_selMark=new u({cls:"marker"}),this.m_colorSel=new u({cls:"sel",content:[new u({cls:"@fit light"}),new u({cls:"@fit dark"}),this.m_selMark]}),this.m_hueMark=new u({cls:"marker"}),this.m_colorHue=new u({cls:"hue",content:[this.m_hueMark]}),this.m_sample=new u({cls:"sample"}),e.hasAlpha?(this.addClass("with-alpha"),this.m_alphaMark=new u({cls:"marker"}),this.m_colorAlpha=new u({cls:"alpha",content:[new u({cls:"bk @fit",ref:"color"}),this.m_alphaMark]})):(this.removeClass("with-alpha"),this.m_transpCk=new Ie({cls:"transp",text:"transparent",change:i=>{this.m_baseHSV.a=i.value?0:1,this._updateColor()}})),this.m_colorEdit=new U({cls:"hexv",value:"",attrs:{spellcheck:!1},change:i=>{let s=new V(i.value);s&&(this.m_baseColor=s,this.m_baseHSV=V.toHSV(s),this._updateColor(!1))}}),this.setContent([this.m_colorSel,this.m_colorHue,this.m_colorAlpha,this.m_transpCk,this.m_colorEdit,this.m_sample]),this.m_colorSel.setDomEvent("mousedown",i=>{u.setCapture(this,s=>this._selChange(s))}),this.m_colorHue.setDomEvent("mousedown",i=>{u.setCapture(this,s=>this._hueChange(s))}),e.hasAlpha&&this.m_colorAlpha.setDomEvent("mousedown",i=>{u.setCapture(this,s=>this._alphaChange(s))}),this._updateColor()}set color(e){this.m_baseColor=e,this.m_baseHSV=V.toHSV(this.m_baseColor),this._updateColor()}get color(){return this.m_baseColor}_selChange(e){let t=re(e,!0);console.log(t);let i=this.m_colorSel.getBoundingRect();this.m_props.hasAlpha||(this.m_baseHSV.a=1),this.m_baseHSV.s=it((t.x-i.left)/i.width,0,1),this.m_baseHSV.v=1-it((t.y-i.top)/i.height,0,1),this._updateColor(),(e.type=="mouseup"||e.type=="touchend")&&u.releaseCapture()}_hueChange(e){let t=re(e,!0),i=this.m_colorHue.getBoundingRect();this.m_baseHSV.h=it((t.y-i.top)/i.height,0,1),this._updateColor(),(e.type=="mouseup"||e.type=="touchend")&&u.releaseCapture()}_alphaChange(e){let t=re(e,!0),i=this.m_colorAlpha.getBoundingRect();this.m_baseHSV.a=it((t.x-i.left)/i.width,0,1),this._updateColor(),(e.type=="mouseup"||e.type=="touchend")&&u.releaseCapture()}_updateColor(e=!0){let t;if(this.m_palmode)this.m_transpCk.check=this.m_baseHSV.a==0;else{if(t=V.fromHSV(this.m_baseHSV.h,1,1,1),this.m_colorSel.setStyleValue("backgroundColor",t.toString()),t=V.fromHSV(this.m_baseHSV.h,this.m_baseHSV.s,this.m_baseHSV.v,1),this.m_sample.setStyleValue("backgroundColor",t.toString()),this.m_props.hasAlpha){let i=`linear-gradient(to right, rgba(0,0,0,0) 0%, ${t.toString()} 100%)`;this.m_colorAlpha.itemWithRef("color").setStyleValue("backgroundImage",i)}this.m_selMark.setStyle({left:this.m_baseHSV.s*100+"%",top:100-this.m_baseHSV.v*100+"%"}),this.m_hueMark.setStyle({top:this.m_baseHSV.h*100+"%"}),this.m_props.hasAlpha?this.m_alphaMark.setStyle({left:this.m_baseHSV.a*100+"%"}):this.m_transpCk.check=this.m_baseHSV.a==0}t=V.fromHSV(this.m_baseHSV.h,this.m_baseHSV.s,this.m_baseHSV.v,this.m_baseHSV.a),this.m_baseColor=t,e&&(this.m_colorEdit.value=t.alpha()==1?t.toHex():t.toString()),this._change()}_change(){this.emit("change",M(this.m_baseColor))}},ft=zt;l(ft,"ColorPicker"),k(ft,"last_palmode",!1);var Re=class extends De{m_picker;constructor(e){e.icon=void 0,e.buttons=void 0,super(e),this.mapPropEvents(e,"change"),this.m_picker=new ft({color:e.color,hasAlpha:e.hasAlpha,style:{padding:8},width:250,height:250});let t=this._makeCustoms(e.cust_colors);this.form.updateContent([new H({content:[this.m_picker,t]})],["ok","cancel"]),this.on("btnClick",i=>{i.button=="ok"&&this.emit("change",M(this.m_picker.color))})}_makeCustoms(e){let t=null;if(e&&e.length>0){let i=[];for(let s=0;s<e.length;s+=8){let n=[];for(let r=0;r<8;r++){let a=s+r,h=e[a];n.push(new I({cls:"cust-cc",text:"",flex:1,style:{backgroundColor:h?h.toString():"transparent"},tooltip:h?h.toString():void 0,dom_events:{click:()=>{h&&(this.m_picker.color=h,this.emit("change",M(h)),this.close())}}}))}i.push(new w({cls:"line",content:n}))}t=new H({cls:"customs",content:i})}return t}set color(e){this.m_picker.color=e}get color(){return this.m_picker.color}static show(e){let t;return B(e)?t=new Re({color:new V(e)}):t=new Re(e),t.show(),t}};l(Re,"ColorPickerBox");var bi=class extends w{constructor(e){super(e),this.mapPropEvents(e,"change")}render(e){let t=e.color,i;this._isTransp(t)?(t=V.NONE,i="black"):i=V.contrastColor(t).toString(),this.setContent([e.label?new I({cls:"label",text:e.label,flex:e.labelWidth<0?-e.labelWidth:void 0,width:e.labelWidth>=0?e.labelWidth:void 0}):null,new u({flex:1,content:[new I({cls:"alpha @fit",text:""}),new I({cls:"value @fit",text:e.displayValue===!1?"":t.toHex(),style:{backgroundColor:t.toString(),color:i},dom_events:{click:()=>this._showPicker()}})]})]),e.displayValue===!1&&this.setStyleValue("background-image","url( 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIxMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS45LjAiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pn8+b7YAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRy0tCQRSHv7Qwyh5gRIsWEtZKwwyiNi2UXlAt1CCrjV5fgdrlXiOibdBWKIja9FrUX1DboHUQFEUQ7YLWRW0qbueqoESe4cz55jdzDjNnwBLOKFm93gvZXF4LTvid85EFp+0FK5204sURVXR1JjQepqZ93lNnxluPWav2uX+tOZ7QFahrFB5VVC0vPCk8vZZXTd4R7lDS0bjwmbBbkwsK35l6rMSvJqdK/G2yFg4GwNIu7ExVcayKlbSWFZaX48pmVpXyfcyX2BO5uZDEHvFudIJM4MfJFGMEGGKAEZmH8OCjX1bUyPcW82dZkVxFZpV1NJZJkSaPW9RVqZ6QmBQ9ISPDutn/v33Vk4O+UnW7HxqeDeO9F2zb8FMwjK8jw/g5BusTXOYq+SuHMPwheqGiuQ6gbRPOrypabBcutqDrUY1q0aJkFbckk/B2Ci0RcNxA02KpZ+V9Th4gvCFfdQ17+9An59uWfgF7Hmfv4QYbGAAAAAlwSFlzAAALEwAACxMBAJqcGAAAACdJREFUGJVjbGhoYEAC9fX1yFwmBryAptKM////R+Y3NjbSzW4C0gAo9QeQBmhTIwAAAABJRU5ErkJggg=='"),this._setTabIndex(e.tabIndex)}set value(e){this.m_props.color=e,this.update()}get value(){return this.m_props.color}set custom_colors(e){this.m_props.cust_colors=e}_showPicker(){let e=new Re({color:this.m_props.color,cust_colors:this.m_props.cust_colors,hasAlpha:this.m_props.hasAlpha,events:{change:i=>{this.m_props.color=i.value,this._change(),this.update()}}}),t=this.getBoundingRect();e.displayAt(t.left,t.bottom,"tl")}_change(){this.emit("change",M(this.m_props.color))}_isTransp(e){return!e.alpha()}};l(bi,"ColorPickerEditor");var Zs=[{color:"Red",variations:[{weight:50,hex:16772078},{weight:100,hex:16764370},{weight:200,hex:15702682},{weight:300,hex:15037299},{weight:400,hex:15684432},{weight:500,hex:16007990},{weight:600,hex:15022389},{weight:700,hex:13840175},{weight:800,hex:12986408},{weight:900,hex:12000284}]},{color:"Pink",variations:[{weight:50,hex:16573676},{weight:100,hex:16301008},{weight:200,hex:16027569},{weight:300,hex:15753874},{weight:400,hex:15483002},{weight:500,hex:15277667},{weight:600,hex:14162784},{weight:700,hex:12720219},{weight:800,hex:11342935},{weight:900,hex:8916559}]},{color:"Purple",variations:[{weight:50,hex:15984117},{weight:100,hex:14794471},{weight:200,hex:13538264},{weight:300,hex:12216520},{weight:400,hex:11225020},{weight:500,hex:10233776},{weight:600,hex:9315498},{weight:700,hex:8069026},{weight:800,hex:6953882},{weight:900,hex:4854924}]},{color:"Deep Purple",variations:[{weight:50,hex:15591414},{weight:100,hex:13747433},{weight:200,hex:11771355},{weight:300,hex:9795021},{weight:400,hex:8280002},{weight:500,hex:6765239},{weight:600,hex:6174129},{weight:700,hex:5320104},{weight:800,hex:4532128},{weight:900,hex:3218322}]},{color:"Indigo",variations:[{weight:50,hex:15264502},{weight:100,hex:12962537},{weight:200,hex:10463450},{weight:300,hex:7964363},{weight:400,hex:6056896},{weight:500,hex:4149685},{weight:600,hex:3754411},{weight:700,hex:3162015},{weight:800,hex:2635155},{weight:900,hex:1713022}]},{color:"Blue",variations:[{weight:50,hex:14938877},{weight:100,hex:12312315},{weight:200,hex:9489145},{weight:300,hex:6600182},{weight:400,hex:4367861},{weight:500,hex:2201331},{weight:600,hex:2001125},{weight:700,hex:1668818},{weight:800,hex:1402304},{weight:900,hex:870305}]},{color:"Light Blue",variations:[{weight:50,hex:14808574},{weight:100,hex:11789820},{weight:200,hex:8508666},{weight:300,hex:5227511},{weight:400,hex:2733814},{weight:500,hex:240116},{weight:600,hex:236517},{weight:700,hex:166097},{weight:800,hex:161725},{weight:900,hex:87963}]},{color:"Cyan",variations:[{weight:50,hex:14743546},{weight:100,hex:11725810},{weight:200,hex:8445674},{weight:300,hex:5099745},{weight:400,hex:2541274},{weight:500,hex:48340},{weight:600,hex:44225},{weight:700,hex:38823},{weight:800,hex:33679},{weight:900,hex:24676}]},{color:"Teal",variations:[{weight:50,hex:14742257},{weight:100,hex:11722715},{weight:200,hex:8440772},{weight:300,hex:5093036},{weight:400,hex:2533018},{weight:500,hex:38536},{weight:600,hex:35195},{weight:700,hex:31083},{weight:800,hex:26972},{weight:900,hex:19776}]},{color:"Green",variations:[{weight:50,hex:15267305},{weight:100,hex:13166281},{weight:200,hex:10868391},{weight:300,hex:8505220},{weight:400,hex:6732650},{weight:500,hex:5025616},{weight:600,hex:4431943},{weight:700,hex:3706428},{weight:800,hex:3046706},{weight:900,hex:1793568}]},{color:"Light Green",variations:[{weight:50,hex:15857897},{weight:100,hex:14478792},{weight:200,hex:12968357},{weight:300,hex:11457921},{weight:400,hex:10275941},{weight:500,hex:9159498},{weight:600,hex:8172354},{weight:700,hex:6856504},{weight:800,hex:5606191},{weight:900,hex:3369246}]},{color:"Lime",variations:[{weight:50,hex:16382951},{weight:100,hex:15791299},{weight:200,hex:15134364},{weight:300,hex:14477173},{weight:400,hex:13951319},{weight:500,hex:13491257},{weight:600,hex:12634675},{weight:700,hex:11514923},{weight:800,hex:10394916},{weight:900,hex:8550167}]},{color:"Yellow",variations:[{weight:50,hex:16776679},{weight:100,hex:16775620},{weight:200,hex:16774557},{weight:300,hex:16773494},{weight:400,hex:16772696},{weight:500,hex:16771899},{weight:600,hex:16635957},{weight:700,hex:16498733},{weight:800,hex:16361509},{weight:900,hex:16088855}]},{color:"Amber",variations:[{weight:50,hex:16775393},{weight:100,hex:16772275},{weight:200,hex:16769154},{weight:300,hex:16766287},{weight:400,hex:16763432},{weight:500,hex:16761095},{weight:600,hex:16757504},{weight:700,hex:16752640},{weight:800,hex:16748288},{weight:900,hex:16740096}]},{color:"Orange",variations:[{weight:50,hex:16774112},{weight:100,hex:16769202},{weight:200,hex:16764032},{weight:300,hex:16758605},{weight:400,hex:16754470},{weight:500,hex:16750592},{weight:600,hex:16485376},{weight:700,hex:16088064},{weight:800,hex:15690752},{weight:900,hex:15094016}]},{color:"Deep Orange",variations:[{weight:50,hex:16509415},{weight:100,hex:16764092},{weight:200,hex:16755601},{weight:300,hex:16747109},{weight:400,hex:16740419},{weight:500,hex:16733986},{weight:600,hex:16011550},{weight:700,hex:15092249},{weight:800,hex:14172949},{weight:900,hex:12531212}]},{color:"Brown",variations:[{weight:50,hex:15723497},{weight:100,hex:14142664},{weight:200,hex:12364452},{weight:300,hex:10586239},{weight:400,hex:9268835},{weight:500,hex:7951688},{weight:600,hex:7162945},{weight:700,hex:6111287},{weight:800,hex:5125166},{weight:900,hex:4073251}]},{color:"Grey",variations:[{weight:50,hex:16448250},{weight:100,hex:16119285},{weight:200,hex:15658734},{weight:300,hex:14737632},{weight:400,hex:12434877},{weight:500,hex:10395294},{weight:600,hex:7697781},{weight:700,hex:6381921},{weight:800,hex:4342338},{weight:900,hex:2171169}]},{color:"Blue Grey",variations:[{weight:50,hex:15527921},{weight:100,hex:13621468},{weight:200,hex:11583173},{weight:300,hex:9479342},{weight:400,hex:7901340},{weight:500,hex:6323595},{weight:600,hex:5533306},{weight:700,hex:4545124},{weight:800,hex:3622735},{weight:900,hex:2503224}]},{color:"Grey",variations:[{weight:50,hex:16777215},{weight:100,hex:14737632},{weight:200,hex:12895428},{weight:300,hex:11053224},{weight:400,hex:9211020},{weight:500,hex:7368816},{weight:600,hex:5526612},{weight:700,hex:3684408},{weight:800,hex:1842204},{weight:900,hex:0}]}];function gt(o,e){return P({type:o,id:e})}l(gt,"EvDataChange");var Wt=class{name;id;fields;constructor(e){this.name=e,this.id=void 0,this.fields=[]}};l(Wt,"MetaInfos");var Vt=Symbol("metaField");function jt(o,e=!0){let t=o.constructor,i=t.hasOwnProperty(Vt)?t[Vt]:void 0;if(i===void 0){e||console.assert(i!==void 0),i=new Wt(t.name);let s=Object.getPrototypeOf(t);if(s!=$e){let n=s[Vt];i.fields=[...n.fields,...i.fields],console.assert(i.id===void 0,"cannot define mutiple record id"),i.id||(i.id=n.id)}o.constructor[Vt]=i}return i}l(jt,"_getMetas");var Js;(m=>{function o(){return(c,d)=>{let p=jt(c);p.fields.push({name:d,type:"any",required:!0}),p.id=d}}m.id=o,l(o,"id");function e(c){return(d,p)=>{jt(d).fields.push({name:p,...c})}}m.field=e,l(e,"field");function t(c){return e({...c,type:"string"})}m.string=t,l(t,"string");function i(c){return e({...c,type:"int"})}m.int=i,l(i,"int");function s(c){return e({...c,type:"float"})}m.float=s,l(s,"float");function n(c){return e({...c,type:"bool"})}m.bool=n,l(n,"bool");function r(c){return e({...c,type:"date"})}m.date=r,l(r,"date");function a(c){return e({...c,type:"calc"})}m.calc=a,l(a,"calc");function h(c,d){return m.field({...d,type:"array",model:new c})}m.array=h,l(h,"array")})(Js||={});var $e=class{constructor(e,t){e!==void 0&&this.unSerialize(e,t)}clone(e){let t=new this.constructor;return e&&t.unSerialize(e),t}getID(){let e=jt(this,!1);return this[e.id]}getFields(){return jt(this,!1).fields}validate(){let e=null;return this.getFields().forEach(i=>{i.required&&!this.getField(i.name)&&(e&&(e=[]),e.push(new Error(`field ${i.name} is required.`)))}),e}getFieldIndex(e){return this.getFields().findIndex(i=>i.name==e)}serialize(){let e={};return this.getFields().forEach(t=>{t.calc===void 0&&(e[t.name]=e[t.name])}),e}unSerialize(e,t){let i=this.getFields();return i.forEach(s=>{let n=e[s.name];n!==void 0&&(this[s.name]=this._convertField(s,n))}),t!==void 0?this[i[0].name]=t:console.assert(this.getID()!==void 0),this}_convertField(e,t){switch(e.type){case"float":{let i=typeof t=="number"?t:parseFloat(t);if(e.prec!==void 0){let s=Math.pow(10,e.prec);i=Math.round(i*s)/s}return i}case"int":return typeof t=="number"?t:parseInt(t);case"date":return B(t)?new Date(t):t;case"array":{let i=[];if(e.model)return t.forEach(s=>{i.push(e.model.clone(s))}),i;break}}return t}getRaw(e){let t,i=this.getFields();if(typeof e=="string"){if(t=i.findIndex(n=>n.name==e),t<0){console.assert(!1,"unknown field: "+e);return}}else if(e>=0&&e<i.length)t=e;else{console.assert(!1,"bad field name: "+e);return}let s=i[t];return s.calc!==void 0?s.calc(this):this[s.name]}setRaw(e,t){this[e]=t}getField(e){let t=this.getRaw(e);return t==null?"":""+t}setField(e,t){let i=this.getFields(),s=i.findIndex(r=>r.name==e);if(s<0){console.assert(!1,"unknown field: "+e);return}let n=i[s];if(n.calc!==void 0){console.assert(!1,"cannot set calc field: "+e);return}this.setRaw(n.name,t)}};l($e,"Record");var _t=class extends $e{m_data;m_fid;constructor(e){super(),this.m_data=e}getID(){if(!this.m_fid){let e=Object.keys(this.m_data);this.m_fid=e[0]}return this.m_data[this.m_fid]}getFields(){return Object.keys(this.m_data).map(i=>({name:i}))}getRaw(e){return this.m_data[e]}setRaw(e,t){this.m_data[e]=t}clone(e){return new _t({...e})}};l(_t,"AutoRecord");var xt=class extends oe{constructor(e){super(e)}load(){this._refresh()}save(e){this.m_props.type=="local"&&console.assert(!1)}_refresh(e=0){this.m_props.type=="local"?console.assert(!1):setTimeout(()=>{Rt({url:this.m_props.path,method:"GET",params:this.m_props.params,success:t=>{this.emit("change",M(t))}})},e)}};l(xt,"DataProxy");var ze=class extends ce{m_model;m_fields;m_records;m_proxy;m_rec_index;constructor(e){super(),this.m_fields=void 0,this.m_records=[],this.m_rec_index=null,this.m_model=e.model,this.m_fields=e.model.getFields(),e.data?this.setRawData(e.data):e.url&&this.load(e.url)}load(e){e.substr(0,7)==="file://"?(this.m_proxy=new xt({type:"local",path:e.substr(7),events:{change:t=>{this.setData(t.value)}}}),this.m_proxy.load()):(this.m_proxy=new xt({type:"ajax",path:e,events:{change:t=>{this.setData(t.value)}}}),this.m_proxy.load())}reload(){this.m_proxy.load()}setData(e){let t=[];e.forEach(i=>{t.push(this.m_model.clone(i))}),this.setRawData(t)}setRawData(e){this.m_records=e,this._rebuildIndex(),this.emit("data_change",gt("change"))}_rebuildIndex(){this.m_rec_index=null,this.m_rec_index=this.createIndex(null),this.m_rec_index=this.sortIndex(this.m_rec_index,null)}update(e){let t=e.getID(),i=this.indexOfId(t);return i<0?!1:(this.m_records[this.m_rec_index[i]]=e,this.emit("data_change",gt("update",t)),!0)}append(e){e instanceof $e||(e=this.m_model.clone().unSerialize(e)),console.assert(e.getID()),this.m_records.push(e),this._rebuildIndex(),this.emit("data_change",gt("create",e.getID()))}getMaxId(){let e;return this.m_records.forEach(t=>{let i=t.getID();(e===void 0||e<i)&&(e=i)}),e}delete(e){let t=this.indexOfId(e);return t<0?!1:(t=this.m_rec_index[t],this.m_records.splice(t,1),this._rebuildIndex(),this.emit("data_change",gt("delete",e)),!0)}get count(){return this.m_rec_index?this.m_rec_index.length:this.m_records.length}get fields(){return this.m_fields}indexOfId(e){for(let t=this.count,i=0;t!=0;t>>=1){let s=i+(t>>1),n=this.m_rec_index[s],r=this.m_records[n].getID();if(r==e)return s;r<e&&(i=s+1,t--)}return-1}getById(e){let t=this.indexOfId(e);return t<0?null:(t=this.m_rec_index[t],this.m_records[t])}getByIndex(e){let t=this.m_rec_index[e];return this._getRecord(t)}_getRecord(e){return this.m_records[e]??null}moveTo(e){e.setRawData(this.m_records)}createView(e){let t={...e,store:this};return new Nt(t)}createIndex(e){if(e&&e.op==="empty-result")return new Uint32Array(0);let t=new Uint32Array(this.m_records.length),i=0;if(!e)this.forEach((d,p)=>{t[i++]=p});else if(typeof e.op=="function"){let d=e.op;this.forEach((p,g)=>{p&&d(p)&&(t[i++]=g)})}else{let g=function(y){return y<p},x=function(y){return y<=p},_=function(y){return y==p},F=function(y){return y!=p},S=function(y){return y>=p},E=function(y){return y>p},W=function(y){return b.lastIndex=-1,b.test(y)};var s=g,n=x,r=_,a=F,h=S,m=E,c=W;l(g,"_lt"),l(x,"_le"),l(_,"_eq"),l(F,"_neq"),l(S,"_ge"),l(E,"_gt"),l(W,"_re");let d=this.m_model.getFieldIndex(e.field);if(d<0)return console.assert(!1,"unknown field name in filter"),new Uint32Array(0);let p=e.value;B(p)&&!e.caseSensitive&&(p=p.toUpperCase());let A,b;if(p instanceof RegExp)b=p,A=W;else switch(e.op){case"<":{A=g;break}case"<=":{A=x;break}case"=":{A=_;break}case">=":{A=S;break}case">":{A=E;break}case"<>":{A=F;break}}this.forEach((y,N)=>{if(!y)return;let C=y.getRaw(d);C==null?C="":(C=""+C,e.caseSensitive||(C=C.toUpperCase())),A(C)&&(t[i++]=N)})}return t.slice(0,i)}sortIndex(e,t){let i=0,s=[];if(t===null?s.push({fidx:0,asc:!0}):s=t.map(n=>{let r=this.m_model.getFieldIndex(n.field);return r==-1&&(console.assert(!1,"unknown field name in sort"),i++),{fidx:r,asc:n.ascending}}),i||s.length==0)return e;if(s.length==1){let n=s[0].fidx;e.sort((r,a)=>{let h=this.getByIndex(r).getRaw(n)??"",m=this.getByIndex(a).getRaw(n)??"";return h>m?1:h<m?-1:0}),s[0].asc||e.reverse()}else e.sort((n,r)=>{for(let a=0;a<s.length;a++){let h=s[a].fidx,m=s[a].asc?1:-1,c=this.getByIndex(n).getRaw(h)??"",d=this.getByIndex(r).getRaw(h)??"";if(c>d)return m;if(c<d)return-m}return 0});return e}forEach(e){this.m_rec_index?this.m_rec_index.some((t,i)=>{if(e(this.m_records[t],i))return i}):this.m_records.some((t,i)=>{if(t&&e(t,i))return i})}export(){return this.m_records}changed(){this.emit("data_change",gt("change"))}};l(ze,"DataStore");function Ot(o){return P({action:o})}l(Ot,"EvViewChange");var Nt=class extends oe{m_index;m_store;m_sort;m_filter;constructor(e){super(e),this.m_store=e.store,this.m_index=null,this.m_filter=null,this.m_sort=null,this.filter(e.filter),e.order?B(e.order)?this.sort([{field:e.order,ascending:!0}]):X(e.order)?this.sort(e.order):this.sort([e.order]):this.sort(null),this.m_store.on("data_change",t=>this._storeChange(t))}_storeChange(e){this._filter(this.m_filter,e.type!="change"),this._sort(this.m_sort,e.type!="change"),this.emit("view_change",Ot("change"))}filter(e){return this.m_index=null,this._filter(e,!0)}_filter(e,t){return this.m_index=this.m_store.createIndex(e),this.m_filter=e,this.m_sort&&this.sort(this.m_sort),t&&this.emit("view_change",Ot("filter")),this.m_index.length}sort(e){this._sort(e,!0)}_sort(e,t){this.m_index=this.m_store.sortIndex(this.m_index,e),this.m_sort=e,t&&this.emit("view_change",Ot("sort"))}get store(){return this.m_store}get count(){return this.m_index.length}indexOfId(e){let t=this.m_store.indexOfId(e);return this.m_index.findIndex(i=>i===t)}getByIndex(e){if(e>=0&&e<this.m_index.length){let t=this.m_index[e];return this.m_store.getByIndex(t)}return null}getById(e){return this.m_store.getById(e)}changed(){this.emit("view_change",Ot("change"))}forEach(e){debugger;this.m_index.some(t=>{let i=this.m_store.getByIndex(t);if(i&&e(i,t))return t})}};l(Nt,"DataView");var qe=class extends w{m_ui_input;m_ui_button;m_popup;m_lockpop;m_lockchg;m_popvis;m_selection;constructor(e){super(e),e.editable||this.setDomEvent("keypress",()=>this.showPopup()),this.setDomEvent("click",()=>{this.m_props.editable&&this.m_ui_input.focus(),this.showPopup()}),this.setDomEvent("keydown",t=>this._onKey(t)),this.mapPropEvents(e,"selectionChange"),this.m_popvis=!1,this.m_lockpop=!1,this.m_lockchg=!1}_onKey(e){this.m_popvis&&(e.key=="ArrowUp"||e.key=="ArrowDown"?(this.m_lockpop=!0,this.m_popup.handleKey(e),this.m_lockpop=!1,e.preventDefault(),e.stopPropagation()):e.key=="Escape"&&(this._hidePopup(),e.preventDefault(),e.stopPropagation()))}set items(e){this.m_props.items=e,this.m_popup&&(this.m_popup.items=e)}render(e){if(e.renderer)this.m_ui_input=new u({flex:1,cls:"@fake-input @hlayout",tabIndex:1});else{let n=new j({flex:1,readOnly:!this.m_props.editable,tabIndex:0,name:e.name,value_hook:{get:()=>this.value,set:r=>{this.value=r}},dom_events:{focus:()=>{this.m_props.editable&&n.value.length==0&&this.showPopup()},input:()=>{if(this.m_lockchg)return;let r=n.value;this.m_selection={id:void 0,text:r};let a=this.showPopup();a&&a.length&&a[0].text==r&&(this.m_selection={id:a[0].id,text:r})}}});this.m_ui_input=n}let t,i,s=e.labelWidth??0;s>0?t=s:s<0&&(i=-s),this.setContent([new I({cls:"label1"+(e.label?"":" @hidden"),text:e.label,width:t,flex:i,align:e.labelAlign}),new w({flex:1,content:[this.m_ui_input,this.m_ui_button=new z({cls:"gadget",icon:"var( --x4-icon-angle-down )",tabIndex:!1,click:()=>{this.showPopup(!1)},dom_events:{focus:()=>{this.dom.focus()}}})]})]),e.value!==void 0&&(this.value=e.value)}componentDisposed(){this.m_popup&&this.m_popup.close(),super.componentDisposed()}showPopup(e=!0){let t=this.m_props;if(t.readOnly||this.hasClass("@disable"))return null;let i=t.items;if(Z(i)){let r=e?this.m_ui_input.value:null;i=i(r)}if(i.length==0)return null;if(!this.m_popup){let r=this.getComputedStyle(),a=r.value("fontFamily"),h=r.value("fontSize");this.m_popup=new Be({cls:"@combo-popup",populate:t.populate,renderItem:this.m_props.renderer,selectionChange:m=>{this._selectItem(m),this.m_lockpop||(this._hidePopup(),this.focus())},cancel:m=>this.signal("cancel",m),style:{fontFamily:a,fontSize:h}})}this.m_popup.items=i;let s=this.m_ui_button.getBoundingRect(),n=this.m_ui_input.getBoundingRect();return this.m_popup.setStyle({minWidth:s.right-n.left}),this.m_popup.displayAt(n.left,n.bottom),this.m_popvis=!0,this.startTimer("focus-check",100,!0,()=>this._checkFocus()),this.value!==void 0&&(this.m_popup.selection=this.value),i}_selectItem(e){let t=e.selection;t&&(this.m_lockchg=!0,this._setInput(t,!0),this.m_lockchg=!1,this.m_selection={id:t.id,text:t.text},this.emit("selectionChange",ie(t)),this.emit("change",M(t.id)))}_setInput(e,t=!1){e?this.m_ui_input?this.m_ui_input instanceof j?(this.m_ui_input.value=e.text,t&&this.m_ui_input.dom.dispatchEvent(new Event("input"))):this.m_ui_input.setContent(this.m_props.renderer(e)):this.m_props.value=e.id:this.m_ui_input&&this.m_ui_input instanceof j&&(this.m_ui_input.value="")}get value(){return this.m_selection?this.m_selection.id:void 0}get valueText(){return this.m_selection?this.m_selection.text:this.m_props.editable?this.m_ui_input.value:""}set value(e){let t=this.m_props.items;Z(t)&&(t=t(null)),t.some(s=>{if(s.id===e)return this._setInput(s),this.m_selection=s,!0})||(this._setInput(null),this.m_selection=null)}get input(){return this.m_ui_input instanceof j?this.m_ui_input:null}_checkFocus(){let e=document.activeElement;this.dom&&this.dom.contains(e)||e==document.body||this.m_popup&&this.m_popup.dom&&this.m_popup.dom.contains(e)||this._hidePopup()}_hidePopup(){this.m_popvis&&(this.m_popup.close(),this.m_popvis=!1,this.stopTimer("focus-check"))}static storeProxy(e){let t=e.store instanceof ze?e.store.createView():e.store;return()=>{let i=new Array(e.store.count);return e.store.forEach((s,n)=>{i[n]={id:s.getID(),text:e.display(s)}}),i}}focus(){this.m_props.editable?this.m_ui_input.focus():super.focus()}};l(qe,"ComboBox");var vi=Symbol("x-drag-cb"),Ut=class{dragSource;dragGhost;dropTarget;notified;timer;registerDraggableElement(e){e.setDomEvent("dragstart",t=>{this.dragSource=e,this.dragGhost=e.dom.cloneNode(!0),this.dragGhost.classList.add("dragged"),f.body.appendChild(this.dragGhost),e.addClass("dragging"),t.dataTransfer.setData("text/string","1"),t.dataTransfer.setDragImage(new Image,0,0),t.stopPropagation()}),e.setDomEvent("drag",t=>{this.dragGhost.style.left=t.pageX+"px",this.dragGhost.style.top=t.pageY+"px"}),e.setDomEvent("dragend",t=>{e.removeClass("dragging"),this.dragGhost.remove()}),e.setAttribute("draggable","true")}registerDropTarget(e,t,i){let s=l(h=>{if(!i(this.dragSource)){console.log("reject ",e),h.dataTransfer.dropEffect="none";return}console.log("accepted ",e),h.preventDefault(),h.dataTransfer.dropEffect="copy"},"dragEnter"),n=l(h=>{if(!i(this.dragSource)){console.log("reject ",e),h.dataTransfer.dropEffect="none";return}h.preventDefault(),this.dropTarget!=e&&(this.dropTarget=e,this._startCheck()),this.dropTarget&&t("drag",this.dragSource,{x:h.pageX,y:h.pageY}),h.dataTransfer.dropEffect="copy"},"dragOver"),r=l(h=>{this.dropTarget=null,h.preventDefault()},"dragLeave"),a=l(h=>{t("drop",this.dragSource,{x:h.pageX,y:h.pageY}),this.dropTarget=null,e.removeClass("drop-over")},"drop");e.setDomEvent("dragenter",s),e.setDomEvent("dragover",n),e.setDomEvent("dragleave",r),e.setDomEvent("drop",a),e.setData(vi,t)}_startCheck(){this.timer&&(clearInterval(this.timer),this._check()),this.timer=setInterval(()=>this._check(),300)}_check(){let e=l(i=>{i.removeClass("drop-over"),i.getData(vi)("leave",this.dragSource)},"leaving"),t=l(i=>{i.addClass("drop-over"),i.getData(vi)("enter",this.dragSource)},"entering");this.dropTarget?(!this.notified||this.notified!=this.dropTarget)&&(this.notified&&e(this.notified),this.notified=this.dropTarget,t(this.notified)):this.notified&&(e(this.notified),this.notified=null,clearInterval(this.timer))}};l(Ut,"DragManager");var sm=new Ut;var Qs={align:"center",vAlign:"middle",fontSize:14,fontWeight:null,fontStyle:"",fontVariant:"",fontFamily:"Arial",lineHeight:0,clip:!0,columns:1,columnGap:0,lineBreak:!0};function hm(o,e,t,i){if(t.width<=0||t.height<=0)return;if(i={...Qs,...i},o.save(),i.clip&&(o.beginPath(),o.rect(t.left,t.top,t.width,t.height),o.clip()),i.rotation){let C=new ae(t.left+t.width/2,t.top+t.height/2),T=i.rotation/180*Math.PI;o.translate(C.x,C.y),o.rotate(T),o.translate(-C.x,-C.y)}o.textBaseline="bottom";let s=je(i.fontSize,2)??12,n="";i.fontStyle&&(n+=i.fontStyle+" "),i.fontVariant&&(n+=i.fontVariant+" "),i.fontWeight&&(n+=i.fontWeight+" "),n+=s+"px ";let r=i.fontFamily??"sans-serif";r.indexOf(".")>0&&(r='"'+r+'"'),n+=r,o.font=n.trim();let a=[],h=e.split(`
5
+ `),m=i.columns<1?1:i.columns,c=i.columnGap,d=(t.width-c*(m-1))/m,p=t.left,g=d;i.lineBreak||(g=99999999);let x=Ci(o," ");h.forEach(C=>{let T={width:0,words:[],space:0},me=Ci(o,C);if(me<g)T.width=me,T.words.push({width:me,text:C}),a.push(T);else{let Xe=C.split(/\s/).filter(be=>be!=="").map(be=>({width:Ci(o,be),text:be})),Oe=0,We=0;for(;Oe<Xe.length;){let be=Xe[Oe],Ee=T.width;Ee&&(Ee+=x),Ee+=be.width,Ee>d&&We>0?(a.push(T),We=0,me=0,T={width:0,words:[],space:0}):(T.words.push(be),T.width=Ee,Oe++,We++)}We&&(a.push(T),T.last=!0)}});let _=en(o,"Ag"),F=(i.lineHeight??1.3)*_,S=a.length,E=t.top;if(m==1){let C=F*S;S==1&&(F=_,C=_),i.vAlign==="middle"?(E=t.top+t.height/2-C/2,E+=F/2,o.textBaseline="middle"):i.vAlign==="bottom"?C<t.height&&(E=t.top+t.height-C+F):(E=t.top,o.textBaseline="top")}else E+=_;let W=i.align=="justify",A=m,b=E,y=0;switch(i.align){case"right":y=1;break;case"center":y=2;break}let N=0;return a.some(C=>{C.space=x,W&&!C.last&&tn(C,d,x);let T=p,me=0;if(y==1?T+=d-C.width:y==2&&(T+=d/2-C.width/2),C.words.forEach(Ae=>{o.fillText(Ae.text,T,b),T+=Ae.width+C.space,me+=Ae.width+C.space}),b+=F,N<me&&(N=me),b>t.bottom+F&&(b=E,p+=d+c,--A==0))return!0}),o.restore(),{width:N,height:(a.length+.3)*F}}l(hm,"drawText");function en(o,e){let t=o.measureText(e);return t.actualBoundingBoxAscent+t.actualBoundingBoxDescent}l(en,"_calcTextHeight");function Ci(o,e){return je(o.measureText(e).width,2)}l(Ci,"_measureText");function tn(o,e,t){let i=(e-o.width)/(o.words.length-1)+t;i<=0||(o.width=e,o.space=i)}l(tn,"_justify");var wi="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";function xs(o){return o.substr(0,5)=="data:"}l(xs,"_isStaticImage");var _e=class extends u{m_created;m_lazysrc;constructor(e){super(e),this.m_created=!1,this.m_props.lazy=e.lazy!==!1,this.m_props.alt=e.alt,e.lazy!==!1&&(this.m_lazysrc=e.src,e.src=wi),this.setDomEvent("create",()=>{e.lazy&&this.setImage(this.m_lazysrc,!0)})}render(){let e=this.m_props,t=new u({tag:"img",attrs:{draggable:!1,alt:e.alt??"",decoding:e.lazy?"async":void 0},style:{objectFit:e.alignment?e.alignment:void 0}});this.setContent(t)}setImage(e,t){e||(e=wi),this.m_props.lazy?(t||this.m_lazysrc!=e)&&(xs(e)?(this.m_props.src=e,this.m_lazysrc=e,this.dom&&this.dom.firstChild.setAttribute("src",this.m_props.src)):(this.m_props.src=wi,this.dom&&this.dom.firstChild.setAttribute("src",this.m_props.src),this.m_lazysrc=e,this.dom&&this._update_image())):(this.m_props.src=e,this.m_lazysrc=e,this.dom&&this.dom.firstChild.setAttribute("src",e))}_update_image(){console.assert(!!this.dom),this.m_lazysrc&&!xs(this.m_lazysrc)&&(_e.lazy_images_waiting.push({dom:this.dom,src:this.m_lazysrc}),_e.lazy_image_timer===void 0&&(_e.lazy_image_timer=setInterval(_e.lazyWatch,10)))}static lazyWatch(){let e=[],t=0;_e.lazy_images_waiting.forEach(i=>{let s=i.dom,n=i.src;if(!s||s.offsetParent===null)return;let r=s.getBoundingClientRect();!t&&s.offsetParent!==null&&r.bottom>=0&&r.right>=0&&r.top<=(window.innerHeight||f.documentElement.clientHeight)&&r.left<=(window.innerWidth||f.documentElement.clientWidth)?(s.firstChild.setAttribute("src",n),t++):e.push(i)}),_e.lazy_images_waiting=e,e.length==0&&(clearInterval(_e.lazy_image_timer),_e.lazy_image_timer=void 0)}},Ve=_e;l(Ve,"Image"),k(Ve,"lazy_images_waiting",[]),k(Ve,"lazy_image_timer");var Kt=class extends w{constructor(e){super(e)}clear(){this.m_props.value=""}};l(Kt,"FileUpload");var Ei=class extends Kt{m_path;m_ui_img;m_ui_input;render(e){let t="up"+this.uid;this.setContent([new u({tag:"label",attrs:{for:t},content:[this.m_ui_img=new Ve({src:this.m_props.value})]}),this.m_ui_input=new j({cls:"@hidden",id:t,type:"file",name:this.m_props.name,value_hook:{get:()=>this._get_value(),set:i=>{this._set_value(i)}},attrs:{accept:"image/*"},dom_events:{change:i=>{this._handleChange(i)}}})])}clear(){super.clear(),this.m_ui_input.dom.value="",this.m_ui_img.setImage(null,!1)}_get_value(){return this.m_path}_set_value(e){debugger}_handleChange(e){let t=this;function i(a){let h=new FileReader;h.addEventListener("load",m=>{t.m_ui_img.setImage(h.result.toString())}),h.readAsDataURL(a)}l(i,"createThumbnail");let s=["png","jpg","jpeg","gif"],n=e.target.files,r=n.length;for(let a=0;a<r;a++){let h=n[a].name.split(".");if(h=h[h.length-1],h=h.toLowerCase(),s.indexOf(h)!=-1){i(n[a]),this.m_path=n[a];break}}}};l(Ei,"ImageUpload");var bt=null;function bs(){return bt||(bt=new u({tag:"input",style:{display:"none",id:"fileDialog"},attrs:{type:"file"}}),f.body.appendChild(bt._build())),bt.clearDomEvent("change"),bt}l(bs,"_createFileInput");function ym(o,e,t=!1){let i=bs();i.removeAttribute("nwsaveas"),i.setAttribute("accept",o),i.setAttribute("multiple",t),i.setDomEvent("change",s=>{let n=i.dom.files;e(n)}),i.dom.click()}l(ym,"openFileDialog");function Fm(o,e,t){let i=bs();i.setAttribute("nwsaveas",o),i.setAttribute("accept",e),i.setDomEvent("change",s=>{let n=i.dom.files;t(n[0])}),i.dom.click()}l(Fm,"saveFileDialog");var yi,Gt;function sn(o){o?Gt=new Intl.NumberFormat(yi,{style:"currency",currency:o}):Gt=new Intl.NumberFormat(yi,{style:"decimal",useGrouping:!0,minimumFractionDigits:2,maximumFractionDigits:2})}l(sn,"setCurrencySymbol");function Mm(o){if(o==null||o==="")return"";let e=new Date(Date.parse(o)),t={month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"};return e.toLocaleDateString(yi,t)}l(Mm,"sql_date_formatter");function Pm(o){if(o==null||o==="")return"";let e=typeof o=="string"?new Date(Date.parse(o)):o;return $(e)}l(Pm,"date_formatter");function Sm(o){if(o==null||o==="")return"";let e=je(typeof o=="string"?parseFloat(o):o,2);return Object.is(e,-0)&&(e=0),Gt.format(e)}l(Sm,"money_formatter");function Am(o){if(o==null||o==="")return"";let e=je(typeof o=="string"?parseFloat(o):o,2);return e?Gt.format(e):""}l(Am,"money_formatter_nz");function Tm(o){return o?"oui":"-"}l(Tm,"bool_formatter");sn(null);var Hm=Symbol("update");function nn(o,e){return P({rec:o,chk:e})}l(nn,"EvGridCheck");var $t=class extends u{m_sens;m_sorted;constructor(e,t){super(e),this.m_sorted=!1,this.m_sens="dn",this.setContent([new u({tag:"span",content:t}),new L({ref:"sorter",cls:"@hidden sort",icon:"var( --x4-icon-arrow-down )"})])}get sorted(){return this.m_sorted}sort(e,t){this.m_sorted=e,this.m_sens=t;let i=this.itemWithRef("sorter");i.icon=this.m_sens=="up"?"var( --x4-icon-arrow-down )":"var( --x4-icon-arrow-up )",i.show(e)}get sens(){return this.m_sens}toggleSens(){this.m_sens=this.m_sens=="up"?"dn":"up",this.itemWithRef("sorter").icon=this.m_sens=="up"?"var( --x4-icon-arrow-down )":"var( --x4-icon-arrow-up )"}};l($t,"ColHeader");var Fi=class extends H{m_dataview;m_data_cx;m_columns;m_view_el;m_container;m_header;m_footer;m_empty_msg;m_empty_text;m_selection;m_itemHeight;m_topIndex;m_visible_rows;m_hasMarks;m_marks;m_recycler;m_rowClassifier;constructor(e){super(e),this.m_columns=e.columns,this.m_hasMarks=e.hasMarks??!1,this.m_marks=new Set,this.m_hasMarks&&this.m_columns.unshift({id:"id",title:"",width:30,renderer:t=>this._renderCheck(t)}),this.setAttribute("tabindex",0),this.m_topIndex=0,this.m_itemHeight=0,this.m_recycler=[],this.m_rowClassifier=e.calcRowClass,this.m_empty_text=e.empty_text??D.global.empty_list,this.setDomEvent("click",t=>this._itemClick(t)),this.setDomEvent("dblclick",t=>this._itemDblClick(t)),this.setDomEvent("contextmenu",t=>this._itemMenu(t)),this.setDomEvent("keydown",t=>this._handleKey(t)),this.setStore(e.store)}componentCreated(){this._updateScroll(!0)}_moveSel(e,t=!0){let i=this.m_selection,s=null;if(i===void 0)i=this.m_dataview.getByIndex(0).getID();else{let n=this.m_dataview.indexOfId(this.m_selection);e==1?n++:e==-1?n--:e==2?n+=this.m_visible_rows.length-1:e==-2&&(n-=this.m_visible_rows.length-1),e<0?s="start":s="end",n<0?n=0:n>=this.m_dataview.count&&(n=this.m_dataview.count-1),i=this.m_dataview.getByIndex(n).getID()}return this.m_selection!=i&&t&&this._selectItem(i,null,s),i}_handleKey(e){if(!(!this.m_dataview||this.m_dataview.count==0))switch(e.key){case"ArrowDown":case"Down":{this._moveSel(1);break}case"ArrowUp":case"Up":{this._moveSel(-1);break}case"PageUp":{this._moveSel(-2);break}case"PageDown":{this._moveSel(2);break}}}getNextSel(e){return this._moveSel(e,!1)}_scrollIntoView(e,t){let i=this._findItem(e);i?i.scrollIntoView({block:"center"}):(this.m_topIndex=this.m_dataview.indexOfId(e),this.m_view_el.dom.scrollTop=this.m_topIndex*this.m_itemHeight,this._buildItems(),this._scrollIntoView(e))}setStore(e){this.m_selection=void 0,e instanceof ze?this.m_dataview=e.createView():this.m_dataview=e,this.m_hasMarks&&this.clearMarks(),this.m_data_cx&&this.m_data_cx.dispose(),this.m_dataview&&(this.m_data_cx=this.m_dataview.on("view_change",t=>{t.action=="change"&&(this.m_selection=void 0),this._updateScroll(!0)}),this._updateScroll(!0))}getView(){return this.m_dataview}getSelection(){return this.m_selection}getSelRec(){return this.m_selection?this.m_dataview.getById(this.m_selection):null}setSelection(e){this._selectItem(e,null,"center")}render(){this.m_recycler=[],this.m_container=new u({cls:"content"}),this.m_empty_msg=new I({cls:"empty-msg",text:""}),this.m_view_el=new u({cls:"@scroll-view",flex:1,dom_events:{sizechange:()=>this._updateScroll(!0),scroll:()=>this._updateScroll(!1)},content:this.m_container});let e=!1,t=this.m_columns.map((s,n)=>{let r="@cell";s.cls&&(r+=" "+s.cls);let a=new $t({cls:r,flex:s.flex,sizable:"right",style:{width:s.width},dom_events:{click:m=>{J(m.target).hasClass("@sizer-overlay")||(this._sortCol(s),m.preventDefault())}}},s.title),h=l(m=>{if(this._on_col_resize(n,m.size.width),this.m_footer){let c=u.getElement(this.m_footer.dom.childNodes[n]);c&&c.setStyleValue("width",m.size.width)}},"resizeCol");return new ve({target:a,sens:"right",events:{resize:m=>h(m)}}),s.flex&&(e=!0),s.$hdr=a,a});t.push(new Fe({ref:"flex",cls:e?"@hidden":""}));let i=0;if(this.m_columns.forEach(s=>{i+=s.width??0}),this.m_header=new w({cls:"@header",content:t,style:{minWidth:i}}),this.m_props.hasFooter){let s=this.m_columns.map((n,r)=>{let a="@cell";n.align&&(a+=" "+n.align),n.cls&&(a+=" "+n.cls);let h=new u({cls:a,data:{col:r},flex:n.flex,style:{width:n.width}});return n.$ftr=h,h});s.push(new Fe({ref:"flex",cls:e?"@hidden":""})),this.m_footer=new w({cls:"@footer",content:s,style:{minWidth:i}})}else this.m_footer=null;this.setContent([this.m_header,this.m_view_el,this.m_footer,this.m_empty_msg])}_on_col_resize(e,t){let i=this.m_columns[e],s=!1;if(t>=0?(i.width=t,i.flex&&(i.$hdr.removeClass("@flex"),i.$ftr?.removeClass("@flex"),i.flex=void 0,s=!0)):t<0&&!i.flex&&(i.$hdr.addClass("@flex"),i.$ftr?.addClass("@flex"),i.flex=1,s=!0),s){let n=!1;this.m_columns.forEach(r=>{r.flex&&(n=!0)}),this.m_header.itemWithRef("flex")?.show(!n),this.m_footer&&this.m_footer.itemWithRef("flex")?.show(!n)}this._updateScroll(!0)}sortCol(e,t=!0){let i=this.m_columns.find(s=>s.id==e);if(i===void 0){console.assert(!1,"unknown field "+e+" in grid.sortCol");return}this._sortCol(i,t?"dn":"up")}_sortCol(e,t="up"){if(e.sortable===!1)return;this.m_columns.forEach(s=>{s!==e&&s.$hdr.sort(!1,"dn")});let i=e.$hdr;i.sorted?i.toggleSens():i.sort(!0,t),this.m_dataview&&this.m_dataview.sort([{field:e.id,ascending:i.sens!="dn"}])}_computeItemHeight(){let e=f.createElement("div");e.classList.add("x-row");let t=f.createElement("div");t.classList.add("x-grid-view"),t.style.position="absolute",t.style.top="-1000px",t.appendChild(e),this.dom.appendChild(t);let i=e.getBoundingClientRect();this.dom.removeChild(t),this.m_itemHeight=i.height}_createRow(e){let t;if(this.m_recycler.length){t=this.m_recycler.pop(),t.clearClasses(),t.addClass(e.cls),t.setContent(e.content),t.setStyle(e.style);for(let i in e.data)t.setData(i,e.data[i])}else t=new w(e);return t.dom||this.m_container.appendChild(t),t}_buildItems(e=!0){let t=this.getBoundingRect(),i=this.m_header.getBoundingRect(),s=t.height-i.height+this.m_itemHeight;this.m_itemHeight==0&&this._computeItemHeight();let n=this.m_topIndex*this.m_itemHeight,r=0,a=0,h=this.m_topIndex,m=this.m_dataview?this.m_dataview.count:0,c=0,d=!!(this.m_topIndex&1);if(this.m_columns.forEach(_=>{c+=_.width??0}),(m+1)*this.m_itemHeight>=s){let _=u.getScrollbarSize();this.m_header.setStyleValue("paddingRight",_),this.m_footer?.setStyleValue("paddingRight",_)}else this.m_header.setStyleValue("paddingRight",0),this.m_footer?.setStyleValue("paddingRight",0);this.m_visible_rows&&this.m_visible_rows.forEach(_=>{this.m_recycler.push(_)}),this.m_visible_rows=[];let p=100;for(;r<s&&h<m&&--p>0;){let _=this.m_dataview.getByIndex(h),F=_.getID(),S=e?this.m_recycler.findIndex(E=>E.getData("row-id")==F):-1;if(S>=0){let E=this.m_recycler.splice(S,1)[0];E.setStyle({top:r+n,minWidth:c}),this.m_hasMarks&&E.setClass("@marked",this.m_marks.has(F)),E.removeClass("@hidden"),E.setClass("@selected",this.m_selection===F),this.m_visible_rows[a]=E}else{let E=this.m_columns.map(b=>{let y="@cell";b.align&&(y+=" "+b.align),b.cls&&(y+=" "+b.cls);let N;if(b.renderer)N=b.renderer(_),N&&(N.addClass(y),N.setStyleValue("width",b.width),b.flex!==void 0&&(N.addClass("@flex"),N.setStyleValue("flex",b.flex)));else{let C=b.formatter,T;C&&C instanceof Function?T=C(_.getRaw(b.id),_):T=_.getField(b.id),N=new u({cls:y,width:b.width,content:st`<span>${T}</span>`,flex:b.flex})}return N}),W="@row @hlayout center";this.m_hasMarks&&this.m_marks.has(F)&&(W+=" @marked"),this.m_selection===F&&(W+=" @selected");let A=this.m_visible_rows[a]=this._createRow({cls:W,content:E,style:{top:r+n,minWidth:c},data:{"row-id":F,"row-idx":h}});A.addClass(d?"even":"odd"),d=!d,this.m_rowClassifier&&this.m_rowClassifier(_,A)}r+=this.m_itemHeight,h++,a++}this.m_recycler.forEach(_=>{_.addClass("@hidden")});let g=!m,x=this.m_empty_text instanceof Function?this.m_empty_text():this.m_empty_text;this.m_empty_msg.text=x,g&&x.length==0&&(g=!1),this.m_empty_msg.show(g),c<t.width?(this.m_header.setStyleValue("width",null),this.m_footer?.setStyleValue("width",null),this.m_container.setStyle({height:m*this.m_itemHeight,width:null})):(this.m_header.setStyleValue("width",c+1e3),this.m_footer?.setStyleValue("width",c+1e3),this.m_container.setStyle({height:m*this.m_itemHeight,width:c}))}_updateScroll(e){if(!this.m_view_el||!this.m_view_el.dom)return;let t=l(()=>{if(!this.dom)return;let i=Math.floor(this.m_view_el.dom.scrollTop/(this.m_itemHeight||1));(i!=this.m_topIndex||e)&&(this.m_topIndex=i,this._buildItems(!e));let s=this.m_view_el.dom.scrollLeft;this.m_header.setStyleValue("left",-s),this.m_footer?.setStyleValue("left",-s)},"update");e?this.singleShot(t,10):t()}_rowFromTarget(e){let t=this.dom;for(;e&&e!=t;){let i=u.getElement(e);if(i){let s=i.getData("row-id");if(s!==void 0)return{id:s,itm:i}}e=e.parentElement}}_itemClick(e){let t=this._rowFromTarget(e.target);t?this._selectItem(t.id,t.itm):this._selectItem(void 0,void 0)}_itemDblClick(e){let t=this._rowFromTarget(e.target);if(t){this._selectItem(t.id,t.itm);let i=this.m_dataview.getById(t.id);this.emit("dblClick",ke(i)),this.m_hasMarks&&this._toggleMark(i)}}_itemMenu(e){let t=e.target,i=this.dom;for(;t&&t!=i;){let s=u.getElement(t),n=s?.getData("row-id");if(n!==void 0){this._selectItem(n,s);let r=s.getData("row-idx"),a=this.m_dataview.getByIndex(r);this._showItemContextMenu(e,a),e.preventDefault();return}t=t.parentElement}}_findItem(e){for(let t=0;t<this.m_visible_rows.length;t++){let i=this.m_visible_rows[t];if(i.getData("row-id")===e)return i}return null}_selectItem(e,t,i){if(this.m_selection!==void 0){let s=this._findItem(this.m_selection);s&&s.removeClass("@selected")}if(this.m_selection=e,e){i&&this._scrollIntoView(e,i),t||(t=this._findItem(e)),t&&t.addClass("@selected");let s=this.m_dataview.getById(e);this.emit("selectionChange",ie(s))}else this.emit("selectionChange",ie(null))}_showItemContextMenu(e,t){this.emit("contextMenu",fe(e,t))}clearSelection(){this._selectItem(null,null)}exportData(e){let t="",i=" ",s=`\r
6
+ `,n="";this.m_columns.map(a=>{n.length&&(n+=i),n+=a.title}),t+=n+s;let r=this.m_dataview.count;for(let a=0;a<r;a++){let h=this.m_dataview.getByIndex(a);n="";let m=this.m_columns.map(c=>{let d=h.getField(c.id),p=c.formatter;p&&p instanceof Function&&(d=p(d,h)),n.length>0&&(n+=i),n+=d});t+=n+s}t=t.replace(/[àâä]/gm,"a"),t=t.replace(/[éèê]/gm,"e"),t=t.replace(/[îï]/gm,"i"),t=t.replace(/[ûüù]/gm,"u"),t=t.replace(/ /gm," "),os(t,"text/csv",e)}set empty_text(e){this.m_empty_msg.text=e}_renderCheck(e){let t="--x4-icon-square";return this.m_marks.has(e.getID())&&(t="--x4-icon-square-check"),new L({icon:`var(${t})`})}_toggleMark(e){let t=e.getID(),i=!1;this.m_marks.has(t)?this.m_marks.delete(t):(this.m_marks.add(t),i=!0),this.emit("gridCheck",nn(e,i)),this._buildItems(!1)}getMarks(){let e=[];for(let t of this.m_marks.values())e.push(t);return e}clearMarks(){this.m_marks.size&&(this.m_marks=new Set,this._buildItems(!1))}setFooterData(e){this.m_footer&&this.m_footer.enumChilds(t=>{let i=t.getData("col");if(i){let s=this.m_columns[i],n=e[s.id];if(n!==void 0)if(Z(n))n(t);else{let r,a=s.formatter;a&&a instanceof Function?r=a(n,e):r=n,t.setContent(r,!1)}}})}};l(Fi,"GridView");var ki=class extends u{constructor(e){super(e),this.setDomEvent("click",()=>this._handleClick()),this.mapPropEvents(e,"click")}_handleClick(){this.emit("click",ne())}render(e){let t=e.text??"",i=e.href??"#";this.setTag("a"),this.setAttribute("tabindex",0),this.setAttribute("href",i),this.setAttribute("target",e.target),t&&this.setContent(le(t)?t:st`<span>${t}</span>`)}set text(e){this.m_props.text=e,this.update()}};l(ki,"Link");var se=class{static hashStr(e,t=!1){return this.onePassHasher.start().appendStr(e).end(t)}static hashAsciiStr(e,t=!1){return this.onePassHasher.start().appendAsciiStr(e).end(t)}static _hex(e){let t=se.hexChars,i=se.hexOut,s,n,r,a;for(a=0;a<4;a+=1)for(n=a*8,s=e[a],r=0;r<8;r+=2)i[n+1+r]=t.charAt(s&15),s>>>=4,i[n+0+r]=t.charAt(s&15),s>>>=4;return i.join("")}static _md5cycle(e,t){let i=e[0],s=e[1],n=e[2],r=e[3];i+=(s&n|~s&r)+t[0]-680876936|0,i=(i<<7|i>>>25)+s|0,r+=(i&s|~i&n)+t[1]-389564586|0,r=(r<<12|r>>>20)+i|0,n+=(r&i|~r&s)+t[2]+606105819|0,n=(n<<17|n>>>15)+r|0,s+=(n&r|~n&i)+t[3]-1044525330|0,s=(s<<22|s>>>10)+n|0,i+=(s&n|~s&r)+t[4]-176418897|0,i=(i<<7|i>>>25)+s|0,r+=(i&s|~i&n)+t[5]+1200080426|0,r=(r<<12|r>>>20)+i|0,n+=(r&i|~r&s)+t[6]-1473231341|0,n=(n<<17|n>>>15)+r|0,s+=(n&r|~n&i)+t[7]-45705983|0,s=(s<<22|s>>>10)+n|0,i+=(s&n|~s&r)+t[8]+1770035416|0,i=(i<<7|i>>>25)+s|0,r+=(i&s|~i&n)+t[9]-1958414417|0,r=(r<<12|r>>>20)+i|0,n+=(r&i|~r&s)+t[10]-42063|0,n=(n<<17|n>>>15)+r|0,s+=(n&r|~n&i)+t[11]-1990404162|0,s=(s<<22|s>>>10)+n|0,i+=(s&n|~s&r)+t[12]+1804603682|0,i=(i<<7|i>>>25)+s|0,r+=(i&s|~i&n)+t[13]-40341101|0,r=(r<<12|r>>>20)+i|0,n+=(r&i|~r&s)+t[14]-1502002290|0,n=(n<<17|n>>>15)+r|0,s+=(n&r|~n&i)+t[15]+1236535329|0,s=(s<<22|s>>>10)+n|0,i+=(s&r|n&~r)+t[1]-165796510|0,i=(i<<5|i>>>27)+s|0,r+=(i&n|s&~n)+t[6]-1069501632|0,r=(r<<9|r>>>23)+i|0,n+=(r&s|i&~s)+t[11]+643717713|0,n=(n<<14|n>>>18)+r|0,s+=(n&i|r&~i)+t[0]-373897302|0,s=(s<<20|s>>>12)+n|0,i+=(s&r|n&~r)+t[5]-701558691|0,i=(i<<5|i>>>27)+s|0,r+=(i&n|s&~n)+t[10]+38016083|0,r=(r<<9|r>>>23)+i|0,n+=(r&s|i&~s)+t[15]-660478335|0,n=(n<<14|n>>>18)+r|0,s+=(n&i|r&~i)+t[4]-405537848|0,s=(s<<20|s>>>12)+n|0,i+=(s&r|n&~r)+t[9]+568446438|0,i=(i<<5|i>>>27)+s|0,r+=(i&n|s&~n)+t[14]-1019803690|0,r=(r<<9|r>>>23)+i|0,n+=(r&s|i&~s)+t[3]-187363961|0,n=(n<<14|n>>>18)+r|0,s+=(n&i|r&~i)+t[8]+1163531501|0,s=(s<<20|s>>>12)+n|0,i+=(s&r|n&~r)+t[13]-1444681467|0,i=(i<<5|i>>>27)+s|0,r+=(i&n|s&~n)+t[2]-51403784|0,r=(r<<9|r>>>23)+i|0,n+=(r&s|i&~s)+t[7]+1735328473|0,n=(n<<14|n>>>18)+r|0,s+=(n&i|r&~i)+t[12]-1926607734|0,s=(s<<20|s>>>12)+n|0,i+=(s^n^r)+t[5]-378558|0,i=(i<<4|i>>>28)+s|0,r+=(i^s^n)+t[8]-2022574463|0,r=(r<<11|r>>>21)+i|0,n+=(r^i^s)+t[11]+1839030562|0,n=(n<<16|n>>>16)+r|0,s+=(n^r^i)+t[14]-35309556|0,s=(s<<23|s>>>9)+n|0,i+=(s^n^r)+t[1]-1530992060|0,i=(i<<4|i>>>28)+s|0,r+=(i^s^n)+t[4]+1272893353|0,r=(r<<11|r>>>21)+i|0,n+=(r^i^s)+t[7]-155497632|0,n=(n<<16|n>>>16)+r|0,s+=(n^r^i)+t[10]-1094730640|0,s=(s<<23|s>>>9)+n|0,i+=(s^n^r)+t[13]+681279174|0,i=(i<<4|i>>>28)+s|0,r+=(i^s^n)+t[0]-358537222|0,r=(r<<11|r>>>21)+i|0,n+=(r^i^s)+t[3]-722521979|0,n=(n<<16|n>>>16)+r|0,s+=(n^r^i)+t[6]+76029189|0,s=(s<<23|s>>>9)+n|0,i+=(s^n^r)+t[9]-640364487|0,i=(i<<4|i>>>28)+s|0,r+=(i^s^n)+t[12]-421815835|0,r=(r<<11|r>>>21)+i|0,n+=(r^i^s)+t[15]+530742520|0,n=(n<<16|n>>>16)+r|0,s+=(n^r^i)+t[2]-995338651|0,s=(s<<23|s>>>9)+n|0,i+=(n^(s|~r))+t[0]-198630844|0,i=(i<<6|i>>>26)+s|0,r+=(s^(i|~n))+t[7]+1126891415|0,r=(r<<10|r>>>22)+i|0,n+=(i^(r|~s))+t[14]-1416354905|0,n=(n<<15|n>>>17)+r|0,s+=(r^(n|~i))+t[5]-57434055|0,s=(s<<21|s>>>11)+n|0,i+=(n^(s|~r))+t[12]+1700485571|0,i=(i<<6|i>>>26)+s|0,r+=(s^(i|~n))+t[3]-1894986606|0,r=(r<<10|r>>>22)+i|0,n+=(i^(r|~s))+t[10]-1051523|0,n=(n<<15|n>>>17)+r|0,s+=(r^(n|~i))+t[1]-2054922799|0,s=(s<<21|s>>>11)+n|0,i+=(n^(s|~r))+t[8]+1873313359|0,i=(i<<6|i>>>26)+s|0,r+=(s^(i|~n))+t[15]-30611744|0,r=(r<<10|r>>>22)+i|0,n+=(i^(r|~s))+t[6]-1560198380|0,n=(n<<15|n>>>17)+r|0,s+=(r^(n|~i))+t[13]+1309151649|0,s=(s<<21|s>>>11)+n|0,i+=(n^(s|~r))+t[4]-145523070|0,i=(i<<6|i>>>26)+s|0,r+=(s^(i|~n))+t[11]-1120210379|0,r=(r<<10|r>>>22)+i|0,n+=(i^(r|~s))+t[2]+718787259|0,n=(n<<15|n>>>17)+r|0,s+=(r^(n|~i))+t[9]-343485551|0,s=(s<<21|s>>>11)+n|0,e[0]=i+e[0]|0,e[1]=s+e[1]|0,e[2]=n+e[2]|0,e[3]=r+e[3]|0}_dataLength;_bufferLength;_state=new Int32Array(4);_buffer=new ArrayBuffer(68);_buffer8;_buffer32;constructor(){this._buffer8=new Uint8Array(this._buffer,0,68),this._buffer32=new Uint32Array(this._buffer,0,17),this.start()}start(){return this._dataLength=0,this._bufferLength=0,this._state.set(se.stateIdentity),this}appendStr(e){let t=this._buffer8,i=this._buffer32,s=this._bufferLength,n,r;for(r=0;r<e.length;r+=1){if(n=e.charCodeAt(r),n<128)t[s++]=n;else if(n<2048)t[s++]=(n>>>6)+192,t[s++]=n&63|128;else if(n<55296||n>56319)t[s++]=(n>>>12)+224,t[s++]=n>>>6&63|128,t[s++]=n&63|128;else{if(n=(n-55296)*1024+(e.charCodeAt(++r)-56320)+65536,n>1114111)throw new Error("Unicode standard supports code points up to U+10FFFF");t[s++]=(n>>>18)+240,t[s++]=n>>>12&63|128,t[s++]=n>>>6&63|128,t[s++]=n&63|128}s>=64&&(this._dataLength+=64,se._md5cycle(this._state,i),s-=64,i[0]=i[16])}return this._bufferLength=s,this}appendAsciiStr(e){let t=this._buffer8,i=this._buffer32,s=this._bufferLength,n,r=0;for(;;){for(n=Math.min(e.length-r,64-s);n--;)t[s++]=e.charCodeAt(r++);if(s<64)break;this._dataLength+=64,se._md5cycle(this._state,i),s=0}return this._bufferLength=s,this}appendByteArray(e){let t=this._buffer8,i=this._buffer32,s=this._bufferLength,n,r=0;for(;;){for(n=Math.min(e.length-r,64-s);n--;)t[s++]=e[r++];if(s<64)break;this._dataLength+=64,se._md5cycle(this._state,i),s=0}return this._bufferLength=s,this}getState(){let e=this,t=e._state;return{buffer:String.fromCharCode.apply(null,e._buffer8),buflen:e._bufferLength,length:e._dataLength,state:[t[0],t[1],t[2],t[3]]}}setState(e){let t=e.buffer,i=e.state,s=this._state,n;for(this._dataLength=e.length,this._bufferLength=e.buflen,s[0]=i[0],s[1]=i[1],s[2]=i[2],s[3]=i[3],n=0;n<t.length;n+=1)this._buffer8[n]=t.charCodeAt(n)}end(e=!1){let t=this._bufferLength,i=this._buffer8,s=this._buffer32,n=(t>>2)+1,r;if(this._dataLength+=t,i[t]=128,i[t+1]=i[t+2]=i[t+3]=0,s.set(se.buffer32Identity.subarray(n),n),t>55&&(se._md5cycle(this._state,s),s.set(se.buffer32Identity)),r=this._dataLength*8,r<=4294967295)s[14]=r;else{let a=r.toString(16).match(/(.*?)(.{0,8})$/);if(a===null)return;let h=parseInt(a[2],16),m=parseInt(a[1],16)||0;s[14]=h,s[15]=m}return se._md5cycle(this._state,s),e?this._state:se._hex(this._state)}},Me=se;l(Me,"Md5"),k(Me,"stateIdentity",new Int32Array([1732584193,-271733879,-1732584194,271733878])),k(Me,"buffer32Identity",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),k(Me,"hexChars","0123456789abcdef"),k(Me,"hexOut",[]),k(Me,"onePassHasher",new se);var Pe=class extends De{m_label;constructor(e){let t=e.icon??"var( --x4-icon-exclamation )";e.icon=void 0;let i=e.buttons===void 0?["ok"]:e.buttons;e.buttons=void 0,super(e);let s=e.message;this.form.updateContent(new w({style:{padding:8},content:[t?new L({cls:"icon",icon:t}):null,this.m_label=new I({cls:"text",text:s,multiline:!0})]}),i),this.on("btnClick",n=>{this.m_props.click&&ue(()=>{this.m_props.click(n.button)})})}set text(e){this.m_label.text=e}static show(e){let t;return B(e)||le(e)?t=new Pe({message:e,click:()=>{}}):t=new Pe(e),t.show(),t}static async showAsync(e){return new Promise((t,i)=>{let s,n=l(a=>{t(a)},"cb");B(e)||le(e)?s={message:e,click:n}:s={...e,click:n},new Pe(s).show()})}static alert(e,t=null){new Pe({cls:"warning",title:t,message:e,buttons:["ok"],click:()=>{}}).show()}};l(Pe,"MessageBox");var Ye=class extends De{m_edit;constructor(e){e.buttons=void 0,e.width=e.width??500,super(e),this.form.updateContent(new w({cls:"panel",content:[this.m_edit=new U({flex:1,autoFocus:!0,label:e.message,value:e.value})]}),["ok","cancel"]),e.click&&this.on("btnClick",t=>{t.button==="ok"&&ue(()=>{this.m_props.click(this.m_edit.value)})})}set text(e){this.m_edit.label=e}static show(e,t){let i;return B(e)||le(e)?i=new Ye({message:e,click:t}):i=new Ye(e),i.show(),i}};l(Ye,"PromptDialogBox");var Ii=class extends H{m_ui_title;m_ui_body;constructor(e){super(e);let t=e?.sens=="horizontal"?"@hlayout":"@vlayout";this.m_ui_title=new I({cls:"title",text:this.m_props.title}),this.m_ui_body=new u({cls:"body "+t,content:this.m_props.content,style:e.bodyStyle})}render(){let e=this.m_props.gadgets??[],t=this.m_props.icon?new L({icon:this.m_props.icon}):null;super.setContent([new w({cls:"title",content:[t,this.m_ui_title,...e]}),this.m_ui_body])}setContent(e){this.m_ui_body.setContent(e)}set title(e){this.m_ui_title.text=e}};l(Ii,"Panel");var vt=class{text;cls};l(vt,"CellData"),k(vt,"empty_cell",{text:""});var Ct=class extends H{m_columns;m_row_limit;m_cells_data;m_rows_data;m_view;m_container;m_header;m_itemHeight;m_topIndex;m_visible_cells;m_row_count;m_selection;m_editor;m_autoedit;m_lockupdate;m_auto_row_count;m_recycler;m_used_cells;constructor(e){super(e),this.m_columns=e.columns,this.m_autoedit=e.autoedit,this.m_lockupdate=0,this.m_cells_data=new Map,this.m_rows_data=new Map,this.m_itemHeight=0,this.m_selection={row:0,col:0},this.m_row_count=0,this.m_auto_row_count=!1,this.m_recycler=[],this.m_used_cells=[],e.maxrows===void 0?(this.m_row_limit=0,this.m_auto_row_count=!0):e.maxrows<0?(this.m_row_limit=0,this.m_auto_row_count=!0):this.m_row_limit=e.maxrows,this.setAttribute("tabindex",0),this.setDomEvent("click",t=>this._itemClick(t)),this.setDomEvent("dblclick",t=>this._itemDblClick(t)),this.setDomEvent("keydown",t=>this._handleKey(t)),this.setDomEvent("keypress",t=>this._keyPress(t)),this.setDomEvent("focus",()=>this._focus(!0)),this.setDomEvent("focusout",()=>this._focus(!1)),this.setDomEvent("contextmenu",t=>this._ctxMenu(t)),this.mapPropEvents(e,"dblClick","selectionChange","contextMenu","change")}componentCreated(){super.componentCreated(),this._updateScroll(!0)}setColWidth(e,t){this._on_col_resize(e,t),this.update(10)}getColWidth(e){if(this.m_columns[e])return this.m_columns[e].width}setColTitle(e,t){console.assert(this.m_columns[e]!==void 0),this.m_columns[e].title=t,this.update(10)}reset(e){e&&(this.m_columns=e),this.m_cells_data=new Map,this.m_rows_data=new Map,this.update(10)}insertRow(e){let t=new Map;this.m_cells_data.forEach((s,n)=>{let{row:r,col:a}=qt(n);r>=e?t.set(xe(r+1,a),s):t.set(n,s)});let i=new Map;this.m_rows_data.forEach((s,n)=>{n>=e?i.set(n+1,s):i.set(n,s)}),this.m_cells_data=t,this.m_rows_data=i,this._buildItems()}deleteRow(e){let t=new Map,i=new Map;this.m_cells_data.forEach((s,n)=>{let{row:r,col:a}=qt(n);r>e?t.set(xe(r-1,a),s):r<e&&t.set(n,s)}),this.m_rows_data.forEach((s,n)=>{n>e?i.set(n-1,s):n<e&&i.set(n,s)}),this.m_cells_data=t,this.m_rows_data=i,this._buildItems()}insertCol(e,t){let i=e;if(i<0&&(i=this.m_columns.length+1),this.m_columns.splice(i,0,t),e>=0){let s=new Map;this.m_cells_data.forEach((n,r)=>{let{row:a,col:h}=qt(r);h>=e?s.set(xe(a,h+1),n):s.set(r,n)}),this.m_cells_data=s}this.update()}deleteCol(e){this.m_columns.splice(e,1);let t=new Map;this.m_cells_data.forEach((i,s)=>{let{row:n,col:r}=qt(s);r>e?t.set(xe(n,r-1),i):r<e&&t.set(s,i)}),this.m_cells_data=t,this.update()}_getCellData(e,t,i=!1){let s=this.m_cells_data.get(xe(e,t));return s===void 0?i?null:vt.empty_cell:s}_focus(e){this.setClass("@focus",e)}_ctxMenu(e){let t=e.target,i=this.dom;for(;t&&t!=i;){let s=u.getElement(t),n=s.getData("row-id"),r=s.getData("col-id");if(n!==void 0){this._selectItem(n,r),this.emit("contextMenu",fe(e,{row:n,col:r,item:s})),e.preventDefault();return}t=t.parentElement}}render(){this.m_recycler=[],this.m_container=new u({cls:"content"}),this.m_view=new u({cls:"@scroll-view",flex:1,dom_events:{sizechange:()=>this._updateScroll(!0),scroll:()=>this._updateScroll(!1)},content:this.m_container});let e=this.m_columns.map((t,i)=>{let s=new u({cls:"@cell c"+i,content:t.title?t.title:"&nbsp",flex:t.width<0?-t.width:void 0,attrs:{title:t.title},style:{width:t.width>=0?t.width:void 0,minWidth:t.min_width}});return new ve({target:s,sens:"right",resize:n=>{this._on_col_resize(i,n.size.width)}}),t.$col=s,s});this.m_header=new w({cls:"@header",content:e}),this.setContent([this.m_header,this.m_view])}_on_col_resize(e,t){this.m_columns[e]&&(t<=0?this.m_columns[e].width=-1:this.m_columns[e].width=t,this._updateScroll(!0))}_computeItemHeight(){let e=f.createElement("div");e.classList.add("x-spreadsheet");let t=f.createElement("div");t.classList.add("content");let i=f.createElement("div");i.classList.add("x-cell"),i.append("&nbsp;"),t.appendChild(i),e.appendChild(t),this.dom.appendChild(e);let s=i.getBoundingClientRect();this.dom.removeChild(e),this.m_itemHeight=s.height}_calcColWidths(e){let t=0,i=0,s=new Int32Array(this.m_columns.length),n=new Int32Array(this.m_columns.length),r=new Int32Array(this.m_columns.length);if(this.m_columns.forEach((a,h)=>{let m=Math.max(10,a.min_width??0);if(a.width>0){let c=Math.max(a.width,m);t+=c,s[h]=c}else{let c=-a.width;n[h]=c,i+=c}r[h]=m}),i){let a=e-t;for(let h=0;h<this.m_columns.length&&i;h++)if(!s[h]){let m=Math.round(a/i)*n[h];m<r[h]&&(m=r[h]),s[h]=m,a-=m,i-=n[h]}}return s}_createCell(){let e;return this.m_recycler.length?(e=this.m_recycler.pop(),e.clearClasses(),e.addClass("@comp")):e=new u({cls:"@cell"}),e.dom||this.m_container.appendChild(e),e}_buildItems(){let e=this.getBoundingRect(),t=this.m_header.getBoundingRect(),i=e.height-t.height;this.m_itemHeight==0&&this._computeItemHeight();let s=this.m_topIndex*this.m_itemHeight,n=0,r=0,a=this.m_topIndex,h=this.m_row_limit;this.m_auto_row_count&&(this.m_row_limit=h=this.getMaxRowCount());let m=0;if(h*this.m_itemHeight>i){let x=u.getScrollbarSize();e.width-=x,m=x}let c=!!(this.m_topIndex&1);this.m_visible_cells=new Map,this.m_used_cells.forEach(x=>{this.m_recycler.push(x)}),this.m_used_cells=[];let d=this._calcColWidths(e.width),p=0;for(let x=0;x<d.length;x++)p+=d[x];p<=e.width?(this.m_view.setStyleValue("overflow-x","hidden"),this.m_header.setStyleValue("width",e.width),this.m_container.setStyleValue("width",e.width),this.m_container.setStyle({height:h*this.m_itemHeight})):(this.m_header.setStyleValue("width",p),this.m_container.setStyleValue("width",p),this.m_view.setStyleValue("overflow-x","visible"),this.m_container.setStyle({height:h*this.m_itemHeight,width:p})),this.m_view.addClass("@hidden");let g=100;for(;n<i&&a<h&&--g>0;){let x=this.m_rows_data.get(a),_=0,F=this.m_columns.map((S,E)=>{let W="@cell c"+E;S.align&&(W+=" "+S.align),S.cls&&(W+=" "+S.cls);let A,b=this._getCellData(a,E),y=b.text;return S.renderer&&y.length&&(y=S.renderer(y,{row:a,col:E})),W+=c?" even":" odd",x&&(W+=" "+x),A=this._createCell(),this.m_used_cells.push(A),A.setContent(y),A.addClass(W),A.setStyle({left:_,top:s+n,width:d[E],height:this.m_itemHeight}),this.m_selection.row==a&&this.m_selection.col==E&&A.addClass("@selected"),A.setData("row-id",a),A.setData("col-id",E),b.cls&&A.addClass(b.cls),this.m_visible_cells.set(xe(a,E),A),_+=d[E],A});c=!c,n+=this.m_itemHeight,a++,r++}this.m_recycler.forEach(x=>{x.addClass("@hidden")}),this.m_row_count=r,this.m_view.removeClass("@hidden"),this.setClass("empty",h==0)}_itemClick(e){let t=e.target;if(this.m_editor&&this.m_editor.dom.contains(t))return;let i=u.getElement(t,u);if(!i)return;let s=i.getData("row-id"),n=i.getData("col-id");s===void 0||n===void 0||this._selectItem(s,n)}_itemDblClick(e){let t=e.target;if(this.m_editor&&this.m_editor.dom.contains(t))return;let i=u.getElement(t),s=i.getData("row-id"),n=i.getData("col-id");s===void 0||n===void 0||(this.emit("dblClick",ke({row:s,col:n})),this.editCell(s,n))}_selectItem(e,t,i){e<0&&(e=0),e>this.m_row_limit-1&&(e=this.m_row_limit-1),t<0&&(t=0);let s=this.m_columns.length-1;t>s&&(t=s),!(this.m_selection.row==e&&this.m_selection.col==t)&&this.select(e,t,i)}_scrollIntoView(e,t){let i=l((n,r="nearest")=>{n.scrollIntoView({block:r})},"doscroll"),s=this.m_topIndex+this.m_row_count-1;e<this.m_topIndex?(this.m_topIndex=e,this.m_view.dom.scrollTop=this.m_topIndex*this.m_itemHeight,this._buildItems(),i(this._findItem(e,t),"start")):e>s?(this.m_topIndex=e-this.m_row_count+1,this.m_view.dom.scrollTop=this.m_topIndex*this.m_itemHeight,this._buildItems(),i(this._findItem(e,t),"end")):i(this._findItem(e,t))}_findItem(e,t){return this.m_visible_cells?this.m_visible_cells.get(xe(e,t)):null}_updateScroll(e){if(!this?.m_view?.dom)return;let t=Math.floor(this.m_view.dom.scrollTop/(this.m_itemHeight||1));(t!=this.m_topIndex||e)&&(this.m_topIndex=t,this._buildItems());let i=this.m_view.dom.scrollLeft;this.m_header.setStyleValue("left",-i)}_moveSel(e,t){let i=this.m_selection,s=i.row??0,n=i.col??0;if(e==1?s++:e==-1?s--:e==2?s+=this.m_row_count-1:e==-2?s-=this.m_row_count-1:e==3?s=this.m_row_limit-1:e==-3&&(s=0),t==1)n++;else if(t==-1)n--;else if(t==2)n=this.m_columns.length-1;else if(t==-2)n=0;else if(t==3){n++;let r=this.m_columns.length-1;e:for(let a=0;a<2;a++){for(;n<r;){if(this.m_columns[n].createEditor!==null)break e;n++}n>r&&(s++,n=0)}}else if(t==-3){n--;let r=this.m_columns.length-1;e:for(let a=0;a<2;a++){for(;n>=0;){if(this.m_columns[n].createEditor!==null)break e;n--}n<0&&(s--,n=r)}}this._selectItem(s,n,!0)}_handleKey(e){let t=e.target;if(!(this.m_editor&&this.m_editor.dom.contains(t)))switch(e.key){case"ArrowDown":case"Down":{this._moveSel(1,0);break}case"ArrowUp":case"Up":{this._moveSel(-1,0);break}case"PageUp":{this._moveSel(-2,0);break}case"PageDown":{this._moveSel(2,0);break}case"ArrowLeft":case"Left":{this._moveSel(0,-1);break}case"ArrowRight":case"Right":{this._moveSel(0,1);break}case"Home":{e.ctrlKey?this._moveSel(-3,0):this._moveSel(0,-2);break}case"End":{e.ctrlKey?this._moveSel(3,0):this._moveSel(0,2);break}case"Enter":{this.editCurCell(),e.stopPropagation(),e.preventDefault();break}case"Delete":{this.clearCell(this.m_selection.row,this.m_selection.col);break}default:break}}_keyPress(e){let t=e.target;this.m_editor&&this.m_editor.dom.contains(t)||e.ctrlKey||e.altKey||this.editCurCell(e.key)}getSelection(){return this.m_selection}select(e,t,i=!0){if(this.m_selection.row==e&&this.m_selection.col==t)return;let s=this._findItem(this.m_selection.row,this.m_selection.col);s&&s.removeClass("@selected"),this.m_selection={row:e,col:t},i&&this._scrollIntoView(e,t);let n=this._findItem(e,t);n&&n.addClass("@selected"),this.emit("selectionChange",ie({row:e,col:t}))}rowCount(){return this.m_row_limit}getMaxRowCount(){let e=0;return this.m_cells_data.forEach((t,i)=>{let s=Math.round(i/1e3)+1;e<s&&(e=s)}),e}getColCount(){return this.m_columns.length}setRowStyle(e,t){this.m_rows_data.set(e,t),this.m_lockupdate==0&&this._buildItems()}getRowStyle(e){return this.m_rows_data.get(e)}setCellStyle(e,t,i){let s=this._getCellData(e,t,!0);if(s||(s={text:""},this.m_cells_data.set(xe(e,t),s)),s.cls=i,this.m_lockupdate==0&&this.m_visible_cells){let n=this._findItem(e,t);n?n.setClass(i,!0):this._buildItems()}}getCellText(e,t){return this._getCellData(e,t).text}getCellNumber(e,t){let i=this._getCellData(e,t).text;return rs(i)}clearRow(e){for(let t=0;t<this.m_columns.length;t++)this.clearCell(e,t);this.update(10)}clearCell(e,t){this.setCellText(e,t,null)}editCurCell(e){this.editCell(this.m_selection.row,this.m_selection.col,e)}editCell(e,t,i){if(!this.m_autoedit||this.m_columns[t].createEditor===null)return;this._scrollIntoView(e,t);let n=this._findItem(e,t).dom,r=n.parentElement,a=n.getBoundingClientRect(),h=r.getBoundingClientRect(),m=this._getCellData(e,t,!0),c=l((p,g,x)=>new U(p),"edtBuilder");this.m_columns[t].createEditor&&(c=this.m_columns[t].createEditor);let d=i||(m?m.text:"");this.m_editor=c({cls:"@editor",style:{left:a.left-h.left,top:a.top-h.top,width:a.width-1,height:a.height-1},tabIndex:!1,value:d,data:{row:e,col:t}},e,t),this.m_editor&&(r.appendChild(this.m_editor._build()),this._setupEditor(),this.m_editor.setData("old-value",d),this.m_editor.focus(),this.m_editor instanceof U&&this.m_editor.selectAll())}_setupEditor(){let e=l((t,i)=>{ls(()=>{this.killEditor(!0),this._moveSel(t,i),this.editCurCell()})},"movesel");if(this.m_editor instanceof U){let i=this.m_editor.input;i.setDomEvent("blur",()=>{this.killEditor(!0)}),i.setDomEvent("keydown",s=>{if(!s.defaultPrevented)switch(s.key){case"Escape":{this.killEditor(!1),s.stopPropagation(),s.preventDefault();break}case"Enter":case"Tab":{let n=3;s.shiftKey&&(n=-3),e(0,n),s.stopPropagation(),s.preventDefault();break}case"ArrowUp":case"Up":{e(-1,0),s.stopPropagation(),s.preventDefault();break}case"ArrowDown":case"Down":{e(1,0),s.stopPropagation(),s.preventDefault();break}}})}else if(this.m_editor instanceof qe){let t=this.m_editor.input;t.setDomEvent("blur",()=>{this.killEditor(!0)}),t.setDomEvent("keydown",i=>{switch(i.key){case"Escape":{this.killEditor(!1),i.stopPropagation(),i.preventDefault();break}case"Enter":case"Tab":{let s=3;i.shiftKey&&(s=-3),e(0,s),i.stopPropagation(),i.preventDefault();break}}}),this.m_editor.showPopup(),this.m_editor.on("change",i=>{this.killEditor(!0)}),this.m_editor.on("cancel",i=>{this.killEditor(!1)})}}killEditor(e){if(this.m_editor){if(e){let i,s;this.m_editor instanceof U?i=this.m_editor.value:this.m_editor instanceof qe&&(s=this.m_editor.value,i=this.m_editor.valueText);let n=this.m_editor.getData("row"),r=this.m_editor.getData("col"),a=this.m_editor.getData("old-value");this.setCellText(n,r,i);let h=M(i,{row:n,col:r,oldValue:a,id:s});this.emit("change",h),h.defaultPrevented&&this.setCellText(n,r,a)}let t=this.m_editor;ue(()=>{t.dispose()}),this.m_editor=null,this.focus()}}clearData(){this.m_cells_data=new Map,this.m_rows_data=new Map}setCellText(e,t,i){if(i==null||i.length==0)this.m_cells_data.delete(xe(e,t)),i="";else{let s=this._getCellData(e,t,!0);s||(s={}),s.text=i,this.m_cells_data.set(xe(e,t),s)}if(this.m_lockupdate==0&&this.m_visible_cells){let s=this._findItem(e,t);s?(this.m_columns[t].renderer&&(i=this.m_columns[t].renderer(i,{row:e,col:t})),s.setContent(i)):this._buildItems()}}lockUpdate(e){e?this.m_lockupdate++:--this.m_lockupdate==0&&this._updateScroll(!0)}};l(Ct,"Spreadsheet");function xe(o,e){return o*1e3+e}l(xe,"_mkid");function qt(o){return{row:Math.floor(o/1e3)|0,col:o%1e3|0}}l(qt,"_getid");var Di=class extends u{m_fields;m_record;m_sheet;m_label_w;constructor(e){super(e),this.mapPropEvents(e,"change")}render(e){this.m_record=e.record,this.m_fields=e.fields??[],this.m_label_w=e.labelWidth,this.m_sheet=new Ct({cls:"@fit",columns:[{title:D.global.property,width:this.m_label_w>0?this.m_label_w:-1,cls:"property"},{title:D.global.value,width:-1,createEditor:(...t)=>this._editCell(...t),renderer:(...t)=>this._renderCell(...t)}],autoedit:!0,change:t=>this._cellChange(t)}),this._updateProperties(),this.setContent(this.m_sheet)}setFields(e){e?(this.m_fields=e,this._updateProperties()):this.m_sheet.clearData()}setRecord(e){this.m_record=e,this._updateProperties()}_updateProperties(){this.m_sheet.lockUpdate(!0),this.m_sheet.clearData(),this.m_fields.forEach((e,t)=>{this.m_sheet.setCellText(t,0,e.title),this.m_record?this.m_sheet.setCellText(t,1,this.m_record.getField(e.id)):this.m_sheet.setCellText(t,1,e.value)}),this.m_sheet.lockUpdate(!1)}_cellChange(e){let t=e.context,i=e.value;if(t.col!=1)return;let s=this.m_fields[t.row];switch(s.type){default:case"string":break;case"number":break;case"password":break;case"boolean":break;case"choice":break}this.m_record?this.m_record.setField(s.id,i):s.value=i,this.emit("change",M(i,s))}_renderCell(e,t){switch(this.m_fields[t.row].type){default:case"string":break;case"number":break;case"password":{e="\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF";break}case"boolean":break;case"choice":break}return e}_editCell(e,t,i){let s=this.m_fields[t],n;switch(s.type){default:case"string":{n=new U(e);break}case"number":{n=new U(e);break}case"password":{e.type="password",e.value=this.m_record.getField(s.id),n=new j(e);break}case"boolean":{n=new Ie(e);break}case"choice":break}return n}_choicesFromArray(e){return e.map(i=>typeof i=="object"?{id:i.id,text:i.value}:{id:i,text:""+i})}_choicesFromStore(e,t){let i=[];for(let s=0,n=e.count;s<n;s++){let r=e.getByIndex(s);i.push({id:r.getID(),text:r.getField(t)})}return i}};l(Di,"PropertyEditor");var wt=class extends u{m_ui_input;constructor(e){super(e),this.mapPropEvents(e,"change")}render(e){let t=e.text??"",i=e.name??e.group,s=e.labelWidth??-1,n=e.checked??!1,r=e.align??"left",a=e.value,h=e.icon;this.setTag("label"),this.addClass("@hlayout"),this.addClass(r),this._setTabIndex(e.tabIndex),n&&this.addClass("checked"),this.setContent([this.m_ui_input=new j({type:"radio",name:i,tabIndex:e.tabIndex,value:a,attrs:{checked:n?"":void 0},dom_events:{change:()=>this._change(),focus:()=>this.m_ui_input.focus()}}),new I({ref:"label",icon:h,text:t,width:s==="flex"?void 0:s,flex:s==="flex"?1:void 0,style:{order:r=="right"?-1:void 0}})])}_change(){let t=".x-input[name="+this.m_props.name+"]";f.querySelectorAll(t).forEach(n=>{u.getElement(n,wt).removeClass("checked")});let s=this.m_ui_input.dom;this.setClass("checked",s.checked),this.emit("change",M(!0))}get check(){return this.m_ui_input?this.m_ui_input.dom.checked:this.m_props.checked}set check(e){let t=this.m_ui_input.dom;e?(t&&(t.checked=!0),this.m_props.checked=!0):(t&&(t.checked=!1),this.m_props.checked=!1)}get text(){return this.itemWithRef("label").text}set text(e){this.itemWithRef("label").text=e}};l(wt,"RadioBtn");var Mi=class extends w{m_els;m_input;constructor(e){super(e),e.steps=e.steps??5}render(e){let t=e.shape??"star",i=e.value??0;this.m_input=new j({cls:"@hidden",name:e.name,value:""+i}),this.addClass(t),this.setDomEvent("click",s=>this._onclick(s)),this.m_els=[];for(let s=0;s<e.steps;s++){let n="item";s+1<=i&&(n+=" checked");let r=new u({tag:"option",cls:n,data:{value:s+1}});this.m_els.push(r)}this.m_els.push(this.m_input),this.setContent(this.m_els)}getValue(){return this.m_props.value??0}set value(e){this.m_props.value=e;for(let t=0;t<this.m_props.steps;t++)this.m_els[t].setClass("checked",this.m_els[t].getData("value")<=e);this.m_input.value=""+this.m_props.value}set steps(e){this.m_props.steps=e,this.update()}set shape(e){this.removeClass(this.m_props.shape),this.m_props.shape=e,this.addClass(this.m_props.shape)}_onclick(e){let t=!0;for(let i=this.dom.firstChild;i;i=i.nextSibling){let s=u.getElement(i);s.setClass("checked",t),i==e.target&&(this.m_input.value=s.getData("value"),t=!1)}this.emit("change",M(this.m_props.value))}};l(Mi,"Rating");function rn(o,e=!1){if(o instanceof RegExp)return{keys:null,pattern:o};let t=o.split("/"),i=[],s="";t[0]==""&&t.shift();for(let n of t){let r=n[0];if(r==="*")i.push("wild"),s+="/(.*)";else if(r===":"){let a=n.indexOf("?",1),h=n.indexOf(".",1);i.push(n.substring(1,a>=0?a:h>=0?h:n.length)),s+=a>=0&&h<0?"(?:/([^/]+?))?":"/([^/]+?)",h>=0&&(s+=(a>=0?"?":"")+"\\"+n.substring(h))}else s+="/"+n}return{keys:i,pattern:new RegExp(`^${s}${e?"(?=$|/)":"/?$"}`,"i")}}l(rn,"parseRoute");var Pi=class extends ce{routes;constructor(){super(),this.routes=[],window.addEventListener("popstate",e=>{let t=f.location.pathname,i=this._find(t);i.handlers.forEach(s=>{s(i.params,t)})})}get(e,t){let{keys:i,pattern:s}=rn(e);this.routes.push({keys:i,pattern:s,handler:t})}init(){this.navigate(window.location.pathname)}navigate(e,t=!0){let i=this._find(e);if(!i||i.handlers.length==0){console.log("route not found: "+e),this.signal("error",Zi(404,"route not found"));return}window.history.pushState({},"",e),t&&i.handlers.forEach(s=>{s(i.params,e)})}_find(e){let t=[],i={},s=[];for(let n of this.routes)if(n.keys)if(n.keys.length>0){if(t=n.pattern.exec(e),t===null)continue;for(let r=0;r<n.keys.length;)i[n.keys[r]]=t[++r];s=[...s,n.handler]}else n.pattern.test(e)&&(s=[...s,n.handler]);else{if(t=n.pattern.exec(e),!t)continue;if(t.groups)for(let r in t.groups)i[r]=t.groups[r];s=[...s,n.handler]}return{params:i,handlers:s}}};l(Pi,"Router");var Si=class extends Le{m_sidebar;m_content;constructor(e){super(e),this.addClass("@hlayout"),this.m_sidebar=new H({cls:"@side-bar",width:e.bar_width??void 0}),this.m_content=new w({flex:1,cls:"@tab-container"})}render(){let e=[];this.m_cards.forEach(t=>{e.push(t.selector)}),this.m_sidebar.setContent(new H({flex:1,cls:"content",content:e})),this.setContent([this.m_sidebar,this.m_props.bar_sizable?new ot({orientation:"horizontal",sizing:"before"}):void 0,this.m_content])}_prepareSelector(e){return new z({text:e.title,icon:e.icon,tooltip:e.title,click:()=>{this.switchTo(e.name)}})}_preparePage(e){super._preparePage(e),e.dom||this.m_content.appendChild(e)}};l(Si,"SideBarView");var on=/^-?\d+(\.\d+)?$/;function an(o){return o*Math.PI/180}l(an,"d2r");function vs(o,e,t,i){let s=an(i);return{x:o+t*Math.cos(s),y:e+t*Math.sin(s)}}l(vs,"p2c");function te(o){return Math.round(o*1e3)/1e3}l(te,"num");function Ai(o,...e){return e=e.map(t=>typeof t=="number"&&isFinite(t)?te(t):t),String.raw(o,...e)}l(Ai,"clean");var Se=class{m_tag;m_attrs;m_style;constructor(e){this.m_tag=e,this.m_attrs=new Map,this.m_style=new Map}render(){return`<${this.m_tag} ${this.renderAttrs()} ${this.renderStyle()}>${this.renderContent()}</${this.m_tag}>`}stroke(e,t){return this.attr("stroke",e),t!==void 0&&this.attr("stroke-width",t+"px"),this}strokeWidth(e){return this.attr("stroke-width",e+"px"),this}fill(e){return this.attr("fill",e),this}attr(e,t){return this.m_attrs.set(e,t),this}style(e,t){if(t===void 0||t===""||t===void 0){this.m_style.delete(e);return}return!si[e]&&(tt(t)||on.test(t))&&(t=t+"px"),this.m_style.set(e,""+t),this}class(e){let t=this.m_attrs.get("class");return this.m_attrs.set("class",(t??" "+e).trim()),this}renderAttrs(){if(!this.m_attrs.size)return"";let e="";return this.m_attrs.forEach((t,i)=>{e+=` ${i} = "${t}"`}),e}renderStyle(){if(!this.m_style.size)return"";let e='style="';return this.m_style.forEach((t,i)=>{e+=`${i}:${t};`}),e+'"'}renderContent(){return""}clip(e){return this.attr("clip-path",`url(#${e})`),this}transform(e){this.attr("transform",e)}rotate(e,t,i){this.transform(`rotate( ${e} ${t} ${i} )`)}translate(e,t){this.transform(`translate( ${e} ${t} )`)}scale(e){this.transform(`scale( ${e} )`)}};l(Se,"SVGItem");var Xt=class extends Se{m_path;constructor(){super("path"),this.m_path=""}renderAttrs(){return this.attr("d",this.m_path),super.renderAttrs()}moveTo(e,t){return this.m_path+=Ai`M${e},${t}`,this}lineTo(e,t){return this.m_path+=Ai`L${e},${t}`,this}closePath(){return this.m_path+="Z",this}arc(e,t,i,s,n){let r=vs(e,t,i,s-90),a=vs(e,t,i,n-90),h=n-s<=180?"0":"1";return this.m_path+=Ai`M${r.x},${r.y}A${i},${i} 0 ${h} 1 ${a.x},${a.y}`,this}};l(Xt,"SVGPath");var Zt=class extends Se{m_text;constructor(e,t,i){super("text"),this.m_text=i,this.attr("x",te(e)+""),this.attr("y",te(t)+"")}font(e){return this.attr("font-family",e),this}fontSize(e){return this.attr("font-size",e+""),this}fontWeight(e){return this.attr("font-weight",e),this}textAlign(e){let t;switch(e){case"left":t="start";break;case"center":t="middle";break;case"right":t="end";break;default:return this}return this.attr("text-anchor",t),this}verticalAlign(e){let t;switch(e){case"top":t="hanging";break;case"center":t="middle";break;case"bottom":t="baseline";break;default:return}return this.attr("alignment-baseline",t),this}renderContent(){return this.m_text}};l(Zt,"SVGText");var yt=class extends Se{constructor(e){super(e)}};l(yt,"SVGShape");var Jt=class extends Se{m_id;m_stops;constructor(e,t,i,s){super("linearGradient"),this.m_id="gx-"+Jt.g_id,this.attr("id",this.m_id),this.attr("x1",B(e)?e:te(e)+""),this.attr("x2",B(i)?i:te(i)+""),this.attr("y1",B(t)?t:te(t)+""),this.attr("y2",B(s)?s:te(s)+""),this.m_stops=[],Jt.g_id++}get id(){return"url(#"+this.m_id+")"}addStop(e,t){return this.m_stops.push({offset:e,color:t}),this}renderContent(){let e=[];return this.m_stops.forEach(t=>{e.push(`<stop offset="${t.offset}%" stop-color="${t.color}"></stop>`)}),e.join(`
7
+ `)}},Et=Jt;l(Et,"SVGGradient"),k(Et,"g_id",1);var Ft=class extends Se{m_items;constructor(e="g"){super(e),this.m_items=[]}path(){let e=new Xt;return this.m_items.push(e),e}text(e,t,i){let s=new Zt(e,t,i);return this.m_items.push(s),s}ellipse(e,t,i,s=i){let n=new yt("ellipse");return n.attr("cx",te(e)+""),n.attr("cy",te(t)+""),n.attr("rx",te(i)+""),n.attr("ry",te(s)+""),this.m_items.push(n),n}rect(e,t,i,s){let n=new yt("rect");return n.attr("x",te(e)+""),n.attr("y",te(t)+""),n.attr("width",te(i)+""),n.attr("height",te(s)+""),this.m_items.push(n),n}linear_gradient(e,t,i,s){let n=new Et(e,t,i,s);return this.m_items.push(n),n}clear(){this.m_items=[]}renderContent(){let e=[];return this.m_items.forEach(t=>{e.push(t.render())}),e.join(`
8
+ `)}};l(Ft,"SVGGroup");var Bi=class extends Ft{constructor(){super("")}addClip(e,t,i,s){let n="c-"+Bi.g_clip_id++,r=new Ft("clipPath");return r.attr("id",n),r.rect(e,t,i,s),this.m_items.push(r),n}render(){let e=[];return this.m_items.forEach(t=>{e.push(t.render())}),e.join(`
9
+ `)}},Yt=Bi;l(Yt,"SVGPathBuilder"),k(Yt,"g_clip_id",1);var Ti=class extends u{constructor(e){super(e),this.setTag("svg","http://www.w3.org/2000/svg"),this.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.setAttributes({viewBox:e.viewBox}),this.setContent(e.path)}};l(Ti,"SVGComponent");var Li=class extends O{m_pages;m_curPage;constructor(e){super(e),this.m_pages=[],this.m_curPage=null,this.mapPropEvents(e,"change"),e.vertical?this.addClass("@vlayout"):this.addClass("@hlayout"),this.m_props.pages?.forEach(t=>this.addPage(t))}componentCreated(){this.m_props.default&&this.select(this.m_props.default,!0)}addPage(e){this.m_pages.push({...e}),this._updateContent()}render(){let e=[];this.m_pages.forEach(t=>{t.btn=new z({cls:t===this.m_curPage?"selected":"",text:t.title,icon:t.icon,click:()=>this._select(t,!0)}),e.push(t.btn)}),this.setContent(e)}select(e,t=!1){if(e){let i=this.m_pages.find(s=>s.id===e);return i?(this._select(i,t),!0):!1}else return this._select(null,t),!0}_select(e,t){if(this.m_curPage!=e){if(!this.dom){this.m_props.default=e.id;return}this.m_curPage&&(this.m_curPage.btn.removeClass("selected"),this.m_curPage.page&&this.m_curPage.page.hide()),this.m_curPage=e,t&&this.signal("change",M(e?e.id:null)),this.m_curPage&&(this.m_curPage.btn.addClass("selected"),this.m_curPage.page&&this.m_curPage.page.show())}}get selection(){return this.m_curPage?.page}};l(Li,"TabBar");var Hi=class extends Le{m_tab_selector;m_menu;constructor(e){super(e),this.m_tab_selector=!!e.tab_selector,this.m_menu=e.menu,this.addClass("@vlayout")}render(){let e=[],t=[];this.m_menu&&(this.m_menu.addClass("@button @tab-btn"),this.m_menu.removeClass("@menu-item"),e.push(this.m_menu)),this.m_cards.forEach(i=>{e.push(i.selector),i.page instanceof Function||t.push(i.page)}),this.m_tab_selector&&t.unshift(new w({cls:"@tab-switch",content:e})),this.setContent(t)}_updateSelector(){}_prepareSelector(e){return new z({cls:"@tab-btn",text:e.title,icon:e.icon,click:()=>{this.switchTo(e.name)}})}_preparePage(e){super._preparePage(e),e.dom||this.appendChild(e)}};l(Hi,"TabView");var Ri=class extends u{constructor(e){super(e),this.mapPropEvents(e,"change")}render(e){e.text=e.text??"",this.setAttribute("tabindex",e.tabIndex??0),e.spellcheck===!1&&this.setAttribute("spellcheck","false"),e.readOnly!==void 0&&this.setAttribute("readonly",e.readOnly),e.rows&&this.setAttribute("rows",e.rows),e.placeHolder&&this.setAttribute("placeholder",e.placeHolder),e.autoFocus&&this.setAttribute("autofocus",e.autoFocus),e.name&&this.setAttribute("name",e.name),e.autoGrow&&(this.m_props.autoGrow=!0,this.setAttribute("rows",this._calcHeight(e.text)),this.setDomEvent("keydown",()=>{ue(()=>this._updateHeight())})),this.setDomEvent("keydown",t=>{t.stopPropagation()}),this.setTag("textarea"),this.setDomEvent("input",()=>this._change())}_change(){this.emit("change",M(this.value))}componentCreated(){this.value=this.m_props.text}get value(){return this.dom?this.dom.value:this.m_props.text}set value(e){this.m_props.text=e??"",this.dom&&(this.dom.value=this.m_props.text,this.m_props.autoGrow&&this.setAttribute("rows",this._calcHeight(this.m_props.text)))}get text(){return this.value}set text(e){this.value=e}_calcHeight(e){return 1+(e.match(/\n/g)||[]).length}_updateHeight(){let e=this.value,t=this._calcHeight(e);this.getData("lines")!=t&&(this.setAttribute("rows",t),this.setData("lines",t))}insertText(e){this.appendText(e)}appendText(e){if(this.dom){let t=this.dom,i=t.selectionEnd;t.setRangeText(e,i,i,"end")}}replaceText(e){this.dom&&this.dom.setRangeText(e)}getSelection(){if(this.dom){let e=this.dom;return{start:e.selectionStart,end:e.selectionEnd}}else return{start:0,end:0}}setSelection(e){if(this.dom){let t=this.dom;e.start!==void 0&&(t.selectionStart=e.start),e.end!==void 0&&(t.selectionEnd=e.end)}}getStoreValue(){return this.value}setStoreValue(e){this.value=e}};l(Ri,"TextArea");var zi=class extends q{m_message;m_icon;constructor(e){super(e),this.m_message=e.message,this.m_icon=e.icon,this.enableMask(!1),this.addClass("@non-maskable")}render(){this.addClass("@hlayout"),this.setContent([new I({icon:this.m_icon,text:this.m_message})])}show(){this.show=super.show,this.displayAt(9999,9999,"br",{x:0,y:-24});let e=1;this.startTimer("fadeout",2e3,!1,()=>{this.startTimer("opacity",100,!0,()=>{this.setStyleValue("opacity",e),e-=.1,e<0&&this.dispose()})})}};l(zi,"Toaster");function ln(o){return P({node:o})}l(ln,"EvExpand");var Vi=class extends H{m_view;m_container;m_selection;constructor(e){super(e),e.root=e.root,e.indent=e.indent??8,e.gadgets=e.gadgets,e.sort=e.sort??!1,this.m_selection=null,this.m_container=new O({cls:"@scroll-container"}),this.m_view=new O({cls:"@scroll-view",flex:1,content:this.m_container}),this.setContent([this.m_view,e.gadgets?new w({cls:"gadgets",content:e.gadgets}):null]),this.setDomEvent("click",t=>this._click(t)),this.setDomEvent("dblclick",t=>this._click(t)),this.setDomEvent("contextmenu",t=>this._handleCtxMenu(t)),e.canDragItems&&(this.setDomEvent("dragstart",t=>{let s=u.getElement(t.target,u)?.getData("node");s?(t.dataTransfer.effectAllowed="move",t.dataTransfer.items.add(JSON.stringify({type:"treeview",id:s.id}),"string")):(t.preventDefault(),t.stopPropagation())}),this.setDomEvent("dragover",t=>this._dragEnter(t)),this.setDomEvent("dragenter",t=>this._dragEnter(t)),this.setDomEvent("dragend",t=>this._dragLeave(t)),this.setDomEvent("dragleave",t=>this._dragLeave(t)),this.setDomEvent("drop",t=>this._dragLeave(t)),this.setDomEvent("drop",t=>this._drop(t))),this.mapPropEvents(e,"dblclick","drag","selectionchange","contextMenu")}_dragEnter(e){e.preventDefault();let t=u.getElement(e.target,u);t?.getData("node")&&(t.addClass("@drag-over"),e.dataTransfer.dropEffect="move")}_dragLeave(e){let t=u.getElement(e.target,u);t?.getData("node")&&t.removeClass("@drag-over")}_drop(e){let t=u.getElement(e.target,u),i=t?.getData("node");if(i||(i=this.m_props.root),i){let s;i.children?s=i:s=t.getData("parent");for(let n=0;n<e.dataTransfer.items.length;n++)e.dataTransfer.items[0].getAsString(r=>{let a=JSON.parse(r);this.emit("drag",Xi(i,a,s))})}}render(){this.__update()}__update(){if(this.m_props.root){let e=[];this._buildBranch(this.m_props.root,-1,e,this.m_props.root),this.m_container.setContent(e)}}updateElement(e){let{node:t,item:i}=this._getNode(e);if(t){let s=t.dom.parentNode,n=this._makeNode(i,t.dom.classList.value,t.getData("icon"),t.getData("level")),r=n._build();s.replaceChild(r,t.dom),this.m_selection?.el===t&&(this.m_selection.el=n)}}set root(e){this.m_props.root=e,this.update()}openAll(e=!0){this.forEach(t=>{t.children&&(t.open=e)}),this.__update()}refreshRoot(e){let t=[];this.forEach(s=>(s.open&&t.push(s.id),!1));let i=this.selection;e&&(this.m_props.root=e),this.forEach(s=>(t.indexOf(s.id)>=0&&(s.open=!0),!1)),this.__update()}_buildBranch(e,t,i,s){let n="@tree-item";e.cls&&(n+=" "+e.cls),!e.open&&e.children&&(n+=" collapsed"),e.children&&(n+=" folder",e.children.length==0&&(n+=" empty"));let r=e.icon;if(r===void 0&&e.children&&(e.open===!0?r="var(--x4-icon-chevron-down)":r="var(--x4-icon-chevron-right)"),t>=0){let a=this._makeNode(e,n,r,t);this.m_selection?.id==e.id&&(this.m_selection.el=a,a.addClass("selected")),i.push(a)}(t==-1||e.open)&&e.children&&(this.m_props.sort&&(e.children=e.children.sort((a,h)=>{let m=(a.children?"0"+a.text:a.text)?.toLocaleLowerCase(),c=(h.children?"0"+h.text:h.text)?.toLocaleLowerCase();return m<c?-1:m>c?1:0})),e.children.forEach(a=>{this._buildBranch(a,t+1,i,e)}))}_renderDef(e){return new I({cls:"tree-label",flex:1,text:e.text})}_makeNode(e,t,i,s){return new w({cls:t,content:[new L({cls:"tree-icon",icon:i}),this.m_props.renderItem?this.m_props.renderItem(e):this._renderDef(e)],data:{node:e,level:s,icon:i},style:{paddingLeft:4+s*this.m_props.indent},attrs:{draggable:this.m_props.canDragItems?!0:void 0}})}forEach(e){let t=null;function i(s){if(e(s)==!0)return!0;if(s.children){for(let n=0;n<s.children.length;n++)if(i(s.children[n]))return!0}}return l(i,"scan"),this.m_props.root&&i(this.m_props.root),t}ensureVisible(e){let{node:t}=this._getNode(e);t&&t.scrollIntoView()}set selection(e){this.select(e,!1)}select(e,t=!0){if(this.m_selection?.el&&this.m_selection.el.removeClass("selected"),this.m_selection=null,e!==void 0){let{node:i}=this._getNode(e);if(i&&(this.m_selection={id:e,el:i},i.addClass("selected"),i.scrollIntoView(),t)){let s=i.getData("node");this.emit("selectionchange",ie(s))}}else t&&this.emit("selectionchange",ie(null))}_getNode(e){let t={node:null,item:null};return this.m_container.enumChilds(i=>{let s=i.getData("node");if(s?.id==e)return t={node:i,item:s},!0}),t}get selection(){return this.m_selection?.id}getNodeWithId(e){return this.forEach(t=>t.id==e)}_click(e){let t=e.target,i=t,s=!1;for(t.tabIndex!==-1&&(s=!0);t!=this.dom;){let n=u.getElement(t),r=n?.getData("node");if(r){if(r.children&&!s){(n.hasClass("selected")||i.classList.contains("tree-icon"))&&(r.open=!r.open),this.m_selection={id:r.id,el:null};let a=this.m_view?.dom?.scrollTop;this.update(),a&&this.m_view.dom.scrollTo(0,a),this.emit("expand",ln(r))}else this.selection=r.id,s||(e.type=="click"?this.emit("click",ne(r)):this.emit("dblclick",ke(r)));this.emit("selectionchange",ie(r));return}t=t.parentElement}e.type=="click"&&(this.m_selection=null,this.update(),this.emit("selectionchange",ie(null)))}_handleCtxMenu(e){e.preventDefault();let t=e.target,i=t;for(;t!=this.dom;){let n=u.getElement(t)?.getData("node");if(n){if(n.children&&i.classList.contains("tree-icon"))return;this.selection=n.id,this.emit("click",ne(n)),this.emit("contextMenu",fe(e,n));return}t=t.parentElement}this.selection=null,this.emit("contextMenu",fe(e,null))}static buildFromStrings(e,t="/"){let i={id:0,text:"<root>",children:[]};function s(n,r){let a=r.indexOf(t),h=r.substr(0,a<0?void 0:a),m;a>=0&&(m=n.find(c=>c.text==h)),m||(m={id:r,text:h},n.push(m)),a>=0&&(m.children||(m.children=[]),s(m.children,r.substr(a+t.length)))}return l(s,"insert"),e.forEach(n=>{s(i.children,n)}),i}static buildFromHierarchy(e,t){let i={id:0,text:"<root>",children:[]},s=[];function n(r){let a,h;r.parent>0?(h=s.find(m=>m.id==r.parent),h||(h={id:r.parent,text:"",children:[]},s.push(h)),h.children||(h.children=[])):h=i,a=s.find(m=>m.id==r.id),a?(a.text=r.name,a.parent=r.parent):(a={id:r.id,text:r.name,parent:r.parent,cls:r.cls,icon:r.icon,data:r.data},r.leaf?a.icon=null:a.children=[]),s.push(a),h.children.push(a)}return l(n,"insert"),e.forEach(n),t&&s.forEach(t),i}};l(Vi,"TreeView");var hn=l((o,e,...t)=>{let i;return o==ws||o==Cs?t:(o instanceof Function?i=new o(e):i=new u({tag:o,...e}),t&&t.length&&i.setContent(t),i)},"createElement"),Cs=Symbol("fragment"),ws=l(()=>null,"createFragment"),zd={createElement:hn,createFragment:ws,Fragment:Cs},Oi=class extends u{render(e){let t=this.renderTSX(e);t&&this.setContent(t)}};l(Oi,"TSXComponent");var Es=Symbol("msg_sent");function Nd(o){let e=window.location.protocol==="https:"?"wss://":"ws://",t=new WebSocket(`${e}${window.location.hostname}:${window.location.port}`,"messaging"),i=Ce.instance();i.on("global",s=>{s[Es]||t.send(JSON.stringify({msg:s.msg,params:s.params}))}),t.onmessage=s=>{if(s.data!="ping"){let n=JSON.parse(s.data);n[Es]=!0,i.signal("global",n)}},t.onclose=s=>{console.log("websocket closed:",s),o()},t.onerror=s=>{console.log("websocket error:",s)}}l(Nd,"setupWSMessaging");var Kd="1.5.20";export{ri as AbsLayout,Ce as Application,_i as AutoComplete,oi as AutoLayout,_t as AutoRecord,ut as BaseButton,oe as BaseComponent,P as BasicEvent,z as Button,nt as CSSParser,Ht as Calendar,xi as Canvas,Le as CardView,Ie as CheckBox,Qt as Clipboard,V as Color,ft as ColorPicker,Re as ColorPickerBox,bi as ColorPickerEditor,qe as ComboBox,u as Component,Ke as ComputedStyle,O as Container,xt as DataProxy,ze as DataStore,Nt as DataView,De as Dialog,_s as EvBtnClick,Vs as EvCancel,M as EvChange,ne as EvClick,fe as EvContextMenu,ke as EvDblClick,Xi as EvDrag,Zi as EvError,ni as EvFocus,nn as EvGridCheck,At as EvLoaded,un as EvMessage,us as EvMove,Bs as EvOverlayResize,ie as EvSelectionChange,Q as EvSize,Yi as EvTimer,Ot as EvViewChange,ce as EventSource,Kt as FileUpload,Fe as Flex,pt as Form,ai as GridLayout,Fi as GridView,w as HLayout,G as HtmlString,L as Icon,Ve as Image,Ei as ImageUpload,j as Input,I as Label,ki as Link,Lt as ListView,mi as Masonry,Me as Md5,ee as Menu,pi as MenuBar,pe as MenuItem,ui as MenuSeparator,di as MenuTitle,Pe as MessageBox,Je as NetworkError,Ii as Panel,ae as Point,q as Popup,dt as PopupCalendar,Be as PopupListView,Ye as PromptDialogBox,Di as PropertyEditor,wt as RadioBtn,Mi as Rating,zd as React,$e as Record,Y as Rect,Pi as Router,Ti as SVGComponent,Yt as SVGPathBuilder,hi as ScrollView,ot as Separator,at as Settings,Si as SideBarView,ge as Size,ve as SizerOverlay,ii as Space,Ct as Spreadsheet,he as Stylesheet,Oi as TSXComponent,Li as TabBar,Hi as TabView,li as TableLayout,Ri as TextArea,U as TextEdit,zi as Toaster,fi as ToggleButton,Ge as Tooltip,Vi as TreeView,H as VLayout,Dn as _date_set_locale,D as _tr,si as _x4_unitless,ts as addTranslation,gs as ajax,kl as ajaxAsJSON,Il as ajaxAsText,Rt as ajaxRequest,ue as asap,Tm as bool_formatter,Tn as calcAge,kn as camelCase,it as clamp,ti as classNames,Hn as crc32,Qi as createLanguage,Js as data,ei as date_calc_weeknum,et as date_clone,Pn as date_diff,Mn as date_format,Pm as date_formatter,Qe as date_hash,An as date_sql_utc,Sn as date_to_sql,ls as deferCall,os as downloadData,sm as dragManager,hm as drawText,Pt as escapeHtml,J as flyWrap,$ as formatIntlDate,zn as generatePassword,Cn as getAvailableLanguages,vn as getCurrentLanguage,re as getMousePos,st as html,Fa as initTooltips,Vn as installHMR,X as isArray,Z as isFunction,le as isHtmlString,es as isLanguage,as as isLiteralObject,tt as isNumber,B as isString,Mt as isTouchDevice,Ln as markdownToHtml,Rn as mix,Sm as money_formatter,Am as money_formatter_nz,ym as openFileDialog,ye as pad,St as parseIntlDate,rs as parseIntlFloat,Ue as pascalCase,In as removeHtmlTags,je as roundTo,Fm as saveFileDialog,ks as selectLanguage,sn as setCurrencySymbol,Nd as setupWSMessaging,Ze as sprintf,Mm as sql_date_formatter,Bn as waitFontLoading,Kd as x4js_version};
10
+ /**
11
+ * ___ ___ __
12
+ * \ \_/ / / _
13
+ * \ / /_| |_
14
+ * / _ \____ _|
15
+ * /__/ \__\ |_|
16
+ *
17
+ * @file md5.ts
18
+ * @author Etienne Cochard
19
+ * @license
20
+ *
21
+ * Copyright (c) 2019-2022 R-libre ingenierie
22
+ *
23
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
24
+ * of this software and associated documentation files (the "Software"), to deal
25
+ * in the Software without restriction, including without limitation the rights
26
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
27
+ * of the Software, and to permit persons to whom the Software is furnished to do so,
28
+ * subject to the following conditions:
29
+ * The above copyright notice and this permission notice shall be included in all copies
30
+ * or substantial portions of the Software.
31
+ *
32
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
33
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
34
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
35
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
37
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
+ **/
39
+ //# sourceMappingURL=index.mjs.map