smart-webcomponents-react 14.2.39 → 14.2.92

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 (399) hide show
  1. package/accordion/accordion.esm.js +2 -2
  2. package/accordion/accordion.umd.js +2 -2
  3. package/alertwindow/alertwindow.esm.js +1 -1
  4. package/alertwindow/alertwindow.umd.js +1 -1
  5. package/array/array.esm.js +1 -1
  6. package/array/array.umd.js +1 -1
  7. package/barcode/barcode.esm.js +1 -1
  8. package/barcode/barcode.umd.js +1 -1
  9. package/breadcrumb/breadcrumb.esm.js +1 -1
  10. package/breadcrumb/breadcrumb.umd.js +1 -1
  11. package/button/button.esm.js +4 -4
  12. package/button/button.umd.js +4 -4
  13. package/buttongroup/buttongroup.esm.js +1 -1
  14. package/buttongroup/buttongroup.umd.js +1 -1
  15. package/calendar/calendar.esm.js +1 -1
  16. package/calendar/calendar.umd.js +1 -1
  17. package/card/card.esm.js +1 -1
  18. package/card/card.umd.js +1 -1
  19. package/cardview/cardview.esm.js +1 -1
  20. package/cardview/cardview.umd.js +1 -1
  21. package/carousel/carousel.esm.js +1 -1
  22. package/carousel/carousel.umd.js +1 -1
  23. package/chart/chart.esm.js +1 -1
  24. package/chart/chart.umd.js +1 -1
  25. package/checkbox/checkbox.esm.js +1 -1
  26. package/checkbox/checkbox.umd.js +1 -1
  27. package/checkinput/checkinput.esm.js +1 -1
  28. package/checkinput/checkinput.umd.js +1 -1
  29. package/chip/chip.esm.js +1 -1
  30. package/chip/chip.umd.js +1 -1
  31. package/colorinput/colorinput.esm.js +1 -1
  32. package/colorinput/colorinput.umd.js +1 -1
  33. package/colorpanel/colorpanel.esm.js +1 -1
  34. package/colorpanel/colorpanel.umd.js +1 -1
  35. package/colorpicker/colorpicker.esm.js +1 -1
  36. package/colorpicker/colorpicker.umd.js +1 -1
  37. package/columnpanel/columnpanel.esm.js +1 -1
  38. package/columnpanel/columnpanel.umd.js +1 -1
  39. package/combobox/combobox.esm.js +3 -3
  40. package/combobox/combobox.umd.js +3 -3
  41. package/countryinput/countryinput.esm.js +1 -1
  42. package/countryinput/countryinput.umd.js +1 -1
  43. package/customizationdialog/customizationdialog.esm.js +1 -1
  44. package/customizationdialog/customizationdialog.umd.js +1 -1
  45. package/dateinput/dateinput.esm.js +1 -1
  46. package/dateinput/dateinput.umd.js +1 -1
  47. package/daterangeinput/daterangeinput.esm.js +1 -1
  48. package/daterangeinput/daterangeinput.umd.js +1 -1
  49. package/datetimepicker/datetimepicker.esm.js +1 -1
  50. package/datetimepicker/datetimepicker.umd.js +1 -1
  51. package/dialogwindow/dialogwindow.esm.js +1 -1
  52. package/dialogwindow/dialogwindow.umd.js +1 -1
  53. package/dockinglayout/dockinglayout.esm.js +1 -1
  54. package/dockinglayout/dockinglayout.umd.js +1 -1
  55. package/dropdownbutton/dropdownbutton.esm.js +1 -1
  56. package/dropdownbutton/dropdownbutton.umd.js +1 -1
  57. package/dropdownlist/dropdownlist.esm.js +3 -3
  58. package/dropdownlist/dropdownlist.umd.js +3 -3
  59. package/editor/editor.esm.js +1 -1
  60. package/editor/editor.umd.js +1 -1
  61. package/element/element.esm.js +1 -1
  62. package/element/element.umd.js +1 -1
  63. package/fileupload/fileupload.esm.js +1 -1
  64. package/fileupload/fileupload.umd.js +1 -1
  65. package/filterbuilder/filterbuilder.esm.js +1 -1
  66. package/filterbuilder/filterbuilder.umd.js +1 -1
  67. package/filterpanel/filterpanel.esm.js +1 -1
  68. package/filterpanel/filterpanel.umd.js +1 -1
  69. package/form/form.esm.js +3 -3
  70. package/form/form.umd.js +3 -3
  71. package/ganttchart/ganttchart.esm.js +1 -1
  72. package/ganttchart/ganttchart.umd.js +1 -1
  73. package/gauge/gauge.esm.js +1 -1
  74. package/gauge/gauge.umd.js +1 -1
  75. package/grid/grid.esm.js +1 -1
  76. package/grid/grid.umd.js +1 -1
  77. package/grouppanel/grouppanel.esm.js +1 -1
  78. package/grouppanel/grouppanel.umd.js +1 -1
  79. package/index.d.ts +12 -0
  80. package/input/input.esm.js +1 -1
  81. package/input/input.umd.js +1 -1
  82. package/kanban/kanban.esm.js +1 -1
  83. package/kanban/kanban.umd.js +1 -1
  84. package/layout/layout.esm.js +5 -5
  85. package/layout/layout.umd.js +5 -5
  86. package/led/led.esm.js +1 -1
  87. package/led/led.umd.js +1 -1
  88. package/listbox/listbox.esm.js +3 -3
  89. package/listbox/listbox.umd.js +3 -3
  90. package/listmenu/listmenu.esm.js +3 -3
  91. package/listmenu/listmenu.umd.js +3 -3
  92. package/map/map.esm.js +1 -1
  93. package/map/map.umd.js +1 -1
  94. package/maskedtextbox/maskedtextbox.esm.js +1 -1
  95. package/maskedtextbox/maskedtextbox.umd.js +1 -1
  96. package/menu/menu.esm.js +3 -3
  97. package/menu/menu.umd.js +3 -3
  98. package/multicolumnfilterpanel/multicolumnfilterpanel.esm.js +1 -1
  99. package/multicolumnfilterpanel/multicolumnfilterpanel.umd.js +1 -1
  100. package/multicomboinput/multicomboinput.esm.js +1 -1
  101. package/multicomboinput/multicomboinput.umd.js +1 -1
  102. package/multiinput/multiinput.esm.js +1 -1
  103. package/multiinput/multiinput.umd.js +1 -1
  104. package/multilinetextbox/multilinetextbox.esm.js +3 -3
  105. package/multilinetextbox/multilinetextbox.umd.js +3 -3
  106. package/multilinewindow/multilinewindow.esm.js +1 -1
  107. package/multilinewindow/multilinewindow.umd.js +1 -1
  108. package/multisplitbutton/multisplitbutton.esm.js +3 -3
  109. package/multisplitbutton/multisplitbutton.umd.js +3 -3
  110. package/numberinput/numberinput.esm.js +1 -1
  111. package/numberinput/numberinput.umd.js +1 -1
  112. package/numerictextbox/numerictextbox.esm.js +1 -1
  113. package/numerictextbox/numerictextbox.umd.js +1 -1
  114. package/package.json +1 -1
  115. package/pager/pager.esm.js +1 -1
  116. package/pager/pager.umd.js +1 -1
  117. package/passwordinput/passwordinput.esm.js +1 -1
  118. package/passwordinput/passwordinput.umd.js +1 -1
  119. package/passwordtextbox/passwordtextbox.esm.js +1 -1
  120. package/passwordtextbox/passwordtextbox.umd.js +1 -1
  121. package/path/path.esm.js +1 -1
  122. package/path/path.umd.js +1 -1
  123. package/phoneinput/phoneinput.esm.js +1 -1
  124. package/phoneinput/phoneinput.umd.js +1 -1
  125. package/pivottable/pivottable.esm.js +1 -1
  126. package/pivottable/pivottable.umd.js +1 -1
  127. package/progressbar/progressbar.esm.js +2 -2
  128. package/progressbar/progressbar.umd.js +2 -2
  129. package/progresswindow/progresswindow.esm.js +1 -1
  130. package/progresswindow/progresswindow.umd.js +1 -1
  131. package/promptwindow/promptwindow.esm.js +1 -1
  132. package/promptwindow/promptwindow.umd.js +1 -1
  133. package/qrcode/qrcode.esm.js +1 -1
  134. package/qrcode/qrcode.umd.js +1 -1
  135. package/querybuilder/querybuilder.d.ts +7 -0
  136. package/querybuilder/querybuilder.esm.js +2 -2
  137. package/querybuilder/querybuilder.umd.js +2 -2
  138. package/radiobutton/radiobutton.esm.js +1 -1
  139. package/radiobutton/radiobutton.umd.js +1 -1
  140. package/rating/rating.esm.js +1 -1
  141. package/rating/rating.umd.js +1 -1
  142. package/scheduler/scheduler.esm.js +1 -1
  143. package/scheduler/scheduler.umd.js +1 -1
  144. package/scrollbar/scrollbar.esm.js +1 -1
  145. package/scrollbar/scrollbar.umd.js +1 -1
  146. package/slider/slider.esm.js +1 -1
  147. package/slider/slider.umd.js +1 -1
  148. package/sortable/sortable.esm.js +1 -1
  149. package/sortable/sortable.umd.js +1 -1
  150. package/sortpanel/sortpanel.esm.js +1 -1
  151. package/sortpanel/sortpanel.umd.js +1 -1
  152. package/source/modules/smart.accordion.js +1 -1
  153. package/source/modules/smart.array.js +1 -1
  154. package/source/modules/smart.barcode.js +1 -1
  155. package/source/modules/smart.breadcrumb.js +1 -1
  156. package/source/modules/smart.button.js +1 -1
  157. package/source/modules/smart.buttongroup.js +1 -1
  158. package/source/modules/smart.calendar.js +2 -2
  159. package/source/modules/smart.card.js +1 -1
  160. package/source/modules/smart.cardview.js +2 -2
  161. package/source/modules/smart.carousel.js +1 -1
  162. package/source/modules/smart.chart.js +1 -1
  163. package/source/modules/smart.checkbox.js +1 -1
  164. package/source/modules/smart.checkinput.js +1 -1
  165. package/source/modules/smart.chip.js +1 -1
  166. package/source/modules/smart.colorinput.js +1 -1
  167. package/source/modules/smart.colorpanel.js +1 -1
  168. package/source/modules/smart.colorpicker.js +1 -1
  169. package/source/modules/smart.combobox.js +1 -1
  170. package/source/modules/smart.common.js +21 -21
  171. package/source/modules/smart.countryinput.js +1 -1
  172. package/source/modules/smart.dateinput.js +3 -3
  173. package/source/modules/smart.daterangeinput.js +3 -3
  174. package/source/modules/smart.datetimepicker.js +2 -2
  175. package/source/modules/smart.dockinglayout.js +1 -1
  176. package/source/modules/smart.dropdownbutton.js +1 -1
  177. package/source/modules/smart.dropdownlist.js +1 -1
  178. package/source/modules/smart.editor.js +1 -1
  179. package/source/modules/smart.element.js +1 -1
  180. package/source/modules/smart.fileupload.js +1 -1
  181. package/source/modules/smart.form.js +1 -1
  182. package/source/modules/smart.formulaparser.js +1 -1
  183. package/source/modules/smart.ganttchart.js +3 -3
  184. package/source/modules/smart.gauge.js +1 -1
  185. package/source/modules/smart.grid.js +16 -16
  186. package/source/modules/smart.gridpanel.js +3 -3
  187. package/source/modules/smart.input.js +1 -1
  188. package/source/modules/smart.kanban.js +4 -4
  189. package/source/modules/smart.layout.js +1 -1
  190. package/source/modules/smart.led.js +1 -1
  191. package/source/modules/smart.listbox.js +1 -1
  192. package/source/modules/smart.listmenu.js +1 -1
  193. package/source/modules/smart.map.js +1 -1
  194. package/source/modules/smart.maskedtextbox.js +1 -1
  195. package/source/modules/smart.menu.js +1 -1
  196. package/source/modules/smart.multicomboinput.js +2 -2
  197. package/source/modules/smart.multiinput.js +1 -1
  198. package/source/modules/smart.multilinetextbox.js +1 -1
  199. package/source/modules/smart.multisplitbutton.js +1 -1
  200. package/source/modules/smart.numberinput.js +1 -1
  201. package/source/modules/smart.numerictextbox.js +1 -1
  202. package/source/modules/smart.pager.js +1 -1
  203. package/source/modules/smart.passwordinput.js +1 -1
  204. package/source/modules/smart.passwordtextbox.js +1 -1
  205. package/source/modules/smart.path.js +1 -1
  206. package/source/modules/smart.phoneinput.js +1 -1
  207. package/source/modules/smart.pivottable.js +3 -3
  208. package/source/modules/smart.progressbar.js +1 -1
  209. package/source/modules/smart.qrcode.js +1 -1
  210. package/source/modules/smart.querybuilder.js +3 -3
  211. package/source/modules/smart.radiobutton.js +1 -1
  212. package/source/modules/smart.rating.js +1 -1
  213. package/source/modules/smart.router.js +1 -1
  214. package/source/modules/smart.scheduler.js +3 -3
  215. package/source/modules/smart.scrollbar.js +1 -1
  216. package/source/modules/smart.slider.js +1 -1
  217. package/source/modules/smart.sortable.js +1 -1
  218. package/source/modules/smart.splitter.js +1 -1
  219. package/source/modules/smart.switchbutton.js +1 -1
  220. package/source/modules/smart.table.js +2 -2
  221. package/source/modules/smart.tabs.js +1 -1
  222. package/source/modules/smart.tank.js +1 -1
  223. package/source/modules/smart.textarea.js +1 -1
  224. package/source/modules/smart.textbox.js +1 -1
  225. package/source/modules/smart.timeinput.js +1 -1
  226. package/source/modules/smart.timepicker.js +1 -1
  227. package/source/modules/smart.toast.js +1 -1
  228. package/source/modules/smart.tooltip.js +1 -1
  229. package/source/modules/smart.tree.js +1 -1
  230. package/source/modules/smart.validator.js +1 -1
  231. package/source/modules/smart.window.js +1 -1
  232. package/source/smart.accordion.js +1 -1
  233. package/source/smart.ajax.js +1 -1
  234. package/source/smart.array.js +1 -1
  235. package/source/smart.barcode.js +1 -1
  236. package/source/smart.bootstrap.js +1 -1
  237. package/source/smart.breadcrumb.js +1 -1
  238. package/source/smart.button.js +1 -1
  239. package/source/smart.buttongroup.js +1 -1
  240. package/source/smart.calendar.js +2 -2
  241. package/source/smart.card.js +1 -1
  242. package/source/smart.cardview.js +1 -1
  243. package/source/smart.carousel.js +1 -1
  244. package/source/smart.chart.annotations.js +1 -1
  245. package/source/smart.chart.api.js +1 -1
  246. package/source/smart.chart.core.js +1 -1
  247. package/source/smart.chart.js +1 -1
  248. package/source/smart.chart.rangeselector.js +1 -1
  249. package/source/smart.chart.waterfall.js +1 -1
  250. package/source/smart.checkbox.js +1 -1
  251. package/source/smart.checkinput.js +1 -1
  252. package/source/smart.chip.js +1 -1
  253. package/source/smart.colorinput.js +1 -1
  254. package/source/smart.colorpanel.js +1 -1
  255. package/source/smart.colorpicker.js +1 -1
  256. package/source/smart.combobox.js +1 -1
  257. package/source/smart.complex.js +1 -1
  258. package/source/smart.core.js +1 -1
  259. package/source/smart.countryinput.js +1 -1
  260. package/source/smart.data.js +1 -1
  261. package/source/smart.date.js +1 -1
  262. package/source/smart.dateformatpanel.js +1 -1
  263. package/source/smart.dateinput.js +2 -2
  264. package/source/smart.daterangeinput.js +1 -1
  265. package/source/smart.datetimepicker.js +1 -1
  266. package/source/smart.dockinglayout.js +1 -1
  267. package/source/smart.draw.js +1 -1
  268. package/source/smart.dropdownbutton.js +1 -1
  269. package/source/smart.dropdownlist.js +1 -1
  270. package/source/smart.editor.js +1 -1
  271. package/source/smart.element.js +1 -1
  272. package/source/smart.elements.js +18 -18
  273. package/source/smart.export.js +1 -1
  274. package/source/smart.fileupload.js +1 -1
  275. package/source/smart.filter.js +1 -1
  276. package/source/smart.filterbuilder.js +2 -2
  277. package/source/smart.filterpanel.js +2 -2
  278. package/source/smart.form.js +1 -1
  279. package/source/smart.format.js +1 -1
  280. package/source/smart.formulaparser.js +1 -1
  281. package/source/smart.ganttchart.js +1 -1
  282. package/source/smart.gauge.js +1 -1
  283. package/source/smart.grid.cell.js +2 -2
  284. package/source/smart.grid.chart.js +1 -1
  285. package/source/smart.grid.column.js +1 -1
  286. package/source/smart.grid.core.js +2 -2
  287. package/source/smart.grid.dialog.js +2 -2
  288. package/source/smart.grid.edit.js +2 -2
  289. package/source/smart.grid.export.js +1 -1
  290. package/source/smart.grid.filter.js +1 -1
  291. package/source/smart.grid.group.js +1 -1
  292. package/source/smart.grid.js +1 -1
  293. package/source/smart.grid.menu.js +2 -2
  294. package/source/smart.grid.pager.js +1 -1
  295. package/source/smart.grid.reorder.js +1 -1
  296. package/source/smart.grid.resize.js +2 -2
  297. package/source/smart.grid.row.js +2 -2
  298. package/source/smart.grid.select.js +2 -2
  299. package/source/smart.grid.sort.js +1 -1
  300. package/source/smart.grid.toolbar.js +2 -2
  301. package/source/smart.grid.tree.js +1 -1
  302. package/source/smart.grid.view.js +2 -2
  303. package/source/smart.gridpanel.js +1 -1
  304. package/source/smart.input.js +1 -1
  305. package/source/smart.kanban.js +2 -2
  306. package/source/smart.layout.js +1 -1
  307. package/source/smart.led.js +1 -1
  308. package/source/smart.listbox.js +1 -1
  309. package/source/smart.listmenu.js +1 -1
  310. package/source/smart.map.js +1 -1
  311. package/source/smart.maskedtextbox.js +1 -1
  312. package/source/smart.math.js +1 -1
  313. package/source/smart.menu.js +1 -1
  314. package/source/smart.multicomboinput.js +2 -2
  315. package/source/smart.multiinput.js +1 -1
  316. package/source/smart.multilinetextbox.js +1 -1
  317. package/source/smart.multisplitbutton.js +1 -1
  318. package/source/smart.numberformatpanel.js +1 -1
  319. package/source/smart.numberinput.js +1 -1
  320. package/source/smart.numeric.js +1 -1
  321. package/source/smart.numerictextbox.js +1 -1
  322. package/source/smart.pager.js +1 -1
  323. package/source/smart.passwordinput.js +1 -1
  324. package/source/smart.passwordtextbox.js +1 -1
  325. package/source/smart.path.js +1 -1
  326. package/source/smart.phoneinput.js +1 -1
  327. package/source/smart.pivottable.js +1 -1
  328. package/source/smart.powerbutton.js +1 -1
  329. package/source/smart.progressbar.js +1 -1
  330. package/source/smart.qrcode.js +1 -1
  331. package/source/smart.radiobutton.js +1 -1
  332. package/source/smart.rating.js +1 -1
  333. package/source/smart.router.js +1 -1
  334. package/source/smart.scheduler.js +2 -2
  335. package/source/smart.scrollbar.js +1 -1
  336. package/source/smart.slider.js +1 -1
  337. package/source/smart.sortable.js +1 -1
  338. package/source/smart.splitter.js +1 -1
  339. package/source/smart.switchbutton.js +1 -1
  340. package/source/smart.table.js +2 -2
  341. package/source/smart.tabs.js +1 -1
  342. package/source/smart.tank.js +1 -1
  343. package/source/smart.textarea.js +1 -1
  344. package/source/smart.textbox.js +1 -1
  345. package/source/smart.tickintervalhandler.js +1 -1
  346. package/source/smart.timeinput.js +1 -1
  347. package/source/smart.timepicker.js +1 -1
  348. package/source/smart.toast.js +1 -1
  349. package/source/smart.tooltip.js +1 -1
  350. package/source/smart.tree.js +1 -1
  351. package/source/smart.validationpanel.js +1 -1
  352. package/source/smart.validator.js +1 -1
  353. package/source/smart.window.js +1 -1
  354. package/source/styles/components/smart.base.css +1 -1
  355. package/source/styles/components/smart.grid.css +1 -1
  356. package/source/styles/default/scss/smart.grid.scss +57 -3
  357. package/source/styles/default/smart.grid.css +41 -3
  358. package/source/styles/default/smart.variables.css +8 -0
  359. package/source/styles/font/smart-icons.eot +0 -0
  360. package/source/styles/font/smart-icons.svg +296 -286
  361. package/source/styles/font/smart-icons.ttf +0 -0
  362. package/source/styles/font/smart-icons.woff +0 -0
  363. package/source/styles/font/smart-icons.woff2 +0 -0
  364. package/source/styles/smart.default.css +2 -2
  365. package/source/typescript/smart.elements.d.ts +12 -0
  366. package/source/typescript/smart.grid.d.ts +5 -0
  367. package/source/typescript/smart.querybuilder.d.ts +7 -0
  368. package/splitter/splitter.esm.js +3 -3
  369. package/splitter/splitter.umd.js +3 -3
  370. package/switchbutton/switchbutton.esm.js +1 -1
  371. package/switchbutton/switchbutton.umd.js +1 -1
  372. package/table/table.esm.js +1 -1
  373. package/table/table.umd.js +1 -1
  374. package/tabs/tabs.esm.js +3 -3
  375. package/tabs/tabs.umd.js +3 -3
  376. package/tabswindow/tabswindow.esm.js +1 -1
  377. package/tabswindow/tabswindow.umd.js +1 -1
  378. package/tank/tank.esm.js +1 -1
  379. package/tank/tank.umd.js +1 -1
  380. package/textarea/textarea.esm.js +1 -1
  381. package/textarea/textarea.umd.js +1 -1
  382. package/textbox/textbox.esm.js +3 -3
  383. package/textbox/textbox.umd.js +3 -3
  384. package/timeinput/timeinput.esm.js +1 -1
  385. package/timeinput/timeinput.umd.js +1 -1
  386. package/timepicker/timepicker.esm.js +1 -1
  387. package/timepicker/timepicker.umd.js +1 -1
  388. package/toast/toast.esm.js +1 -1
  389. package/toast/toast.umd.js +1 -1
  390. package/tooltip/tooltip.esm.js +1 -1
  391. package/tooltip/tooltip.umd.js +1 -1
  392. package/tree/tree.esm.js +3 -3
  393. package/tree/tree.umd.js +3 -3
  394. package/validator/validator.esm.js +1 -1
  395. package/validator/validator.umd.js +1 -1
  396. package/waitwindow/waitwindow.esm.js +1 -1
  397. package/waitwindow/waitwindow.umd.js +1 -1
  398. package/window/window.esm.js +1 -1
  399. package/window/window.umd.js +1 -1
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,6 +1,6 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
6
- Smart("smart-query-builder",class extends Smart.BaseElement{static get properties(){return{allowDrag:{value:!1,type:"boolean"},autoPrompt:{value:!1,type:"boolean"},applyMode:{allowValues:["immediately","change"],value:"change",type:"string"},customOperations:{value:[],type:"array",reflectToAttribute:!1},customOperators:{value:{},type:"object",reflectToAttribute:!1},dropDownWidth:{type:"any",value:"auto"},fields:{value:null,type:"array?",reflectToAttribute:!1},fieldsMode:{value:"dynamic",allowedValues:["dynamic","static"],type:"string"},formatStringDate:{value:"dd-MMM-yy",type:"string"},formatStringDateTime:{value:"dd-MMM-yy HH:mm:ss",type:"string"},getDynamicField:{value:null,type:"function?"},icons:{value:{"=":"equals","<>":"notequals",">":"greaterthan",">=":"greaterthanorequal","<":"lessthan","<=":"lessthanorequal",startswith:"startswith",endswith:"endswith",contains:"contains",notcontains:"notcontains",isblank:"isblank",isnotblank:"isnotblank"},type:"object",reflectToAttribute:!1},messages:{value:{en:{add:"Add",addCondition:"Add Condition",addGroup:"Add Group",and:"And",notand:"Not And",or:"Or",notor:"Not Or","=":"Equals","<>":"Does not equal",">":"Greater than",">=":"Greater than or equal to","<":"Less than","<=":"Less than or equal to",startswith:"Starts with",endswith:"Ends with",contains:"Contains",notcontains:"Does not contain",isblank:"Is blank",isnotblank:"Is not blank",wrongParentGroupIndex:'{{elementType}}: Wrong parent group index in "{{method}}" method.',wrongElementNode:'{{elementType}}: Incorect node / node Id in "{{method}}" method.',invalidDataStructure:"{{elementType}}: Used invalid data structure in updateCondition/updateGroup method.",dateTabLabel:"DATE",timeTabLabel:"TIME",queryLabel:"Query"}},type:"object",extend:!0},operatorPlaceholder:{value:"Operator",type:"string"},propertyPlaceholder:{value:"Property",type:"string"},showIcons:{value:!1,type:"boolean"},showFieldNameArrow:{value:!1,type:"boolean"},validateOnInput:{value:!1,type:"boolean"},validationTimeout:{value:100,type:"number"},value:{value:[],type:"any",reflectToAttribute:!1},valueFormatFunction:{value:null,type:"function?",reflectToAttribute:!1},valuePlaceholder:{value:"Value",type:"string"}}}static get requires(){const e={"Smart.Button":"smart.button.js","Smart.Calendar":"smart.calendar.js","Smart.CheckBox":"smart.checkbox.js","Smart.DateTimePicker":"smart.datetimepicker.js","Smart.DropDownList":"smart.dropdownlist.js","Smart.Input":"smart.input.js","Smart.ListBox":"smart.listbox.js","Smart.Menu":"smart.menu.js","Smart.NumericTextBox":"smart.numerictextbox.js","Smart.ScrollBar":"smart.scrollbar.js","Smart.TimePicker":"smart.timepicker.js","Smart.Tooltip":"smart.tooltip.js","Smart.Utilities.BigNumber":"smart.math.js","Smart.Utilities.DateTime":"smart.date.js","Smart.Utilities.Draw":"smart.draw.js","Smart.Utilities.NumericProcessor":"smart.numeric.js"};return window.NIComplex||(e["Smart.Utilities.Complex"]="smart.complex.js"),e}static get listeners(){return{down:"_downHandler",resize:"_resizeHandler","editorsContainer.keydown":"_editorsContainerKeydownHandler","editorsContainer.keyup":"_editorsContainerKeyUpHandler","conditionsMenu.close":"_menuCloseHandler","conditionsMenu.closing":"_menuClosingHandler","conditionsMenu.itemClick":"_menuItemClickHandler","contentContainer.change":"_contentContainerChangeHandler","contentContainer.itemClick":"_contentContainerChangeHandler","scrollableContainer.touchmove":"_scrollableContainerTouchmoveHandler","document.down":"_documentDownHandler","document.move":"_documentMoveHandler","document.up":"_documentUpHandler"}}static get styleUrls(){return["smart.querybuilder.css"]}template(){return'<div id="container" role="presentation">\n <smart-scroll-viewer id="scrollableContainer" class="smart-scrollable-container" animation="[[animation]]" right-to-left="[[rightToLeft]]">\n <div id="queryLabel" class="smart-query-builder-label smart-unselectable"></div>\n <div id="contentContainer" class="smart-content-container"></div>\n </smart-scroll-viewer>\n <div id="editorsContainer" class="smart-editors-container" role="presentation">\n <div id="customEditor" class="smart-custom-editor smart-hidden"></div>\n </div>\n <smart-menu id="conditionsMenu" mode="dropDown" class="smart-conditions-menu" theme="[[theme]]" animation="[[animation]]" right-to-left="[[rightToLeft]]"></smart-menu>\n </div>'}propertyChangedHandler(e,t,i){super.propertyChangedHandler(e,t,i);const a=this;switch(e){case"animation":case"theme":["textBoxEditor","numericTextBoxEditor","comboBoxEditor","dateTimePickerEditor","checkBoxEditor"].forEach((t=>a.$[t]&&(a.$[t][e]=i)));break;case"formatStringDate":case"formatStringDateTime":case"valueFormatFunction":a._refresh();break;case"operatorPlaceholder":Array.from((a.shadowRoot||a).querySelectorAll(".smart-filter-operation[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=i));break;case"propertyPlaceholder":Array.from((a.shadowRoot||a).querySelectorAll(".smart-filter-field-name[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=i));break;case"showIcons":a._closeEditor(),i?a._filterOperationDescriptions.map((e=>e.icon=a.icons[e.value])):a._filterOperationDescriptions.map((e=>delete e.icon));break;case"customOperations":case"fields":case"value":{const t=JSON.stringify(a._validValue),o=a._queryParser;"customOperations"===e?a._handleCustomOperations():""===e&&a._mapFieldsToMenu(),a._applyValue(),"customOperations"!==e&&"fields"!==e||(o[e]=i),a._oldValueAsString!==t&&(a._oldValueAsString=JSON.stringify(a._validValue),a.$.fireEvent("change",{value:JSON.parse(a._oldValueAsString),linq:o.toLinq(a._validValue)}));break}case"valuePlaceholder":Array.from((a.shadowRoot||a).querySelectorAll(".smart-filter-value[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=i));break;case"locale":case"messages":a._localizeInitialValues(),a._refresh(),a._handleCustomOperations(),a.$.dateTimePickerEditor&&(a.$.dateTimePickerEditor.messages[a.locale]||(a.$.dateTimePickerEditor.messages[a.locale]={}),a.$.dateTimePickerEditor.messages[a.locale].dateTabLabel=a.localize("dateTabLabel"),a.$.dateTimePickerEditor.messages[a.locale].timeTabLabel=a.localize("timeTabLabel"),"locale"===e?a.$.dateTimePickerEditor.locale=a.locale:"messages"===e&&(a.$.dateTimePickerEditor.$.selectDate.innerHTML=a.$.dateTimePickerEditor.messages[a.locale].dateTabLabel,a.$.dateTimePickerEditor.$.selectTime.innerHTML=a.$.dateTimePickerEditor.messages[a.locale].timeTabLabel));break;case"icons":a._closeEditor()}}ready(){super.ready();const e=this;e.$.queryLabel.id||(e.$.queryLabel.id=e.id+"Label"),e.setAttribute("role","dialog"),e.setAttribute("aria-labelledby",e.$.queryLabel.id),-1!==navigator.platform.toLowerCase().lastIndexOf("mac")&&e.$.contentContainer.classList.add("mac"),e._queryParser=new Smart.Utilities.QueryParser,e._setInitialValues(),e._handleCustomOperations(),e._applyValue(),Object.defineProperty(e,"value",{get:function(){return e.context===e?e.properties.value.value:e._validValue},set(t){e.updateProperty(e,e._properties.value,t)}})}getLinq(){const e=this;if(e._validValue)return e._queryParser.customOperations=e.customOperations,e._queryParser.fields=e.fields,e._queryParser.dynamicField="dynamic"===e.fieldsMode?e.getDynamicField:void 0,e._queryParser.toLinq(e._validValue)}get validationStatus(){const e=this;return!e.isReady||void 0===e._validationStatus||e._validationStatus}_setInitialValues(){const e=this;e._autoScrollCoefficient=Smart.Utilities.Core.Browser.Firefox?4:Smart.Utilities.Core.Browser.Edge?8:2,e._isMobile=Smart.Utilities.Core.isMobile,e._manuallyAddedFields=[],e._localizeInitialValues(),e.$.conditionsMenu.dropDownAppendTo=e.$.container,e.$.conditionsMenu.dataSource=e._groupOperationDescriptions,e._valueFlat=[],e._lastProcessedItemInCurrentGroup={parentId:null,id:null,position:null}}_applyValue(){const e=this;e._emptyElementsStructure(!0),e._validateValue(),e._convertValueToFlat(e.value),e._getFieldsFromValue(),e._mapFieldsToMenu(),e._validateValueByType(),e._generateHTMLStructureFromFlatValue(!0),e._restrictNesting(),e._validValue=e._getValidValue(),e._oldValueAsString=JSON.stringify(e._validValue)}_validateValueByType(){const e=this;if(!e._valueFlat||!e._valueFlat.length)return;const t=e._valueFlat;for(let i=0;i<t.length;i++){const a=t[i];if("condition"!==a.type)continue;const o=a.data[0];!o||a.data.length<3||(a.data[2]=e._validateStoredValue(a.data[2],o))}e._generateValue(!0)}_applyValidationOnInput(){const e=this,t=e._editor;if(!t||!e._editorIsOpen)return;const i=t.closest(".filter-builder-item"),a=t.closest(".smart-filter-group-condition");i&&i.classList.contains("smart-filter-value")&&(clearTimeout(e._valueValidationTimeout),e._valueValidationTimeout=setTimeout((()=>{const i=a.getAttribute("node-id"),o=e.value.toString();clearTimeout(e._valueValidationTimeout),e._closeEditor(),o===e.value.toString()&&e._generateValue();const r=e._getItemById(i);r&&(t.setAttribute("focus",""),e._openEditor(r.htmlNode.querySelector(".smart-filter-value"))),delete e._valueValidationTimeout}),e.validationTimeout))}_contentContainerChangeHandler(e){const t=this,i=e.type,a=e.target,o=t._editor,r=t._editorIsOpen,l=t.applyMode;if(e.stopPropagation(),"change"===i&&t.validateOnInput&&r&&a===o&&t._applyValidationOnInput(),"itemClick"===i&&a.value!==e.detail.label||"immediately"!==l||!r||!o||"immediately"===l&&a!==o)return;const n=t._editor.closest(".filter-builder-item");n.classList.contains("smart-filter-value")||(t._closeEditor(),t._handleAutoPrompt(n))}_handleAutoPrompt(e){const t=this;if(e&&t.autoPrompt&&"immediately"===t.applyMode&&!e.classList.contains("smart-filter-value")){const i=e.closest(".smart-filter-group-condition")||e.closest(".smart-filter-nested-operator")||e.closest(".smart-filter-group");if(!i)return;const a=t._getItemById(i.getAttribute("node-id")),o=i.querySelector(".smart-filter-value");if(!a||!o)return;t._clickHandlerFilterButton(e.classList,a.nodeId,o)}}_mapFieldsToMenu(){const e=this;(e.fields||e._valueFields)&&(e._fields=(e.fields||e._valueFields).concat(e._manuallyAddedFields).map((e=>({label:e.label,value:e.dataField,dataType:e.dataType,filterOperations:e.filterOperations,lookup:e.lookup}))))}_localizeInitialValues(){const e=this;e.$.queryLabel.innerHTML=e.localize("queryLabel"),e._addOptions=[{label:e.localize("addCondition"),value:"addCondition"},{label:e.localize("addGroup"),value:"addGroup"}],e._groupOperationDescriptions=[{label:e.localize("and"),value:"and"},{label:e.localize("or"),value:"or"}],e._defaultFilterOperationDescriptions=e._filterOperationDescriptions=[{label:e.localize("="),value:"=",custom:!1},{label:e.localize("<>"),value:"<>",custom:!1},{label:e.localize(">"),value:">",custom:!1},{label:e.localize(">="),value:">=",custom:!1},{label:e.localize("<"),value:"<",custom:!1},{label:e.localize("<="),value:"<=",custom:!1},{label:e.localize("startswith"),value:"startswith",custom:!1},{label:e.localize("endswith"),value:"endswith",custom:!1},{label:e.localize("contains"),value:"contains",custom:!1},{label:e.localize("notcontains"),value:"notcontains",custom:!1},{label:e.localize("isblank"),value:"isblank",custom:!1},{label:e.localize("isnotblank"),value:"isnotblank",custom:!1}];const t=Smart.Utilities.DateTime.getLocalizedNames(e.locale);e._localizedDays=t.days,e._localizedMonths=t.months}_handleCustomOperations(){const e=this;e._filterOperationDescriptions=e._defaultFilterOperationDescriptions.slice(0);for(let t=0;t<e.customOperations.length;t++){let i=e.customOperations[t],a=e._filterOperationDescriptions.findIndex((e=>e.value===i.name)),o={label:i.label,value:i.name,custom:!0,index:t,editorTemplate:i.editorTemplate,valueTemplate:i.valueTemplate,handleValue:i.handleValue,hideValue:i.hideValue,validateValue:i.validateValue};a>-1?e._filterOperationDescriptions[a]=o:e._filterOperationDescriptions.push(o)}}_editorsContainerKeydownHandler(e){const t=this;if(t._editorIsOpen&&("Escape"===e.key||"Enter"===e.key)){t._closeEditor();const e=t._editor.closest(".filter-builder-item");e&&!e.classList.contains("smart-filter-value")&&t._handleAutoPrompt(e)}}_editorsContainerKeyUpHandler(e){const t=this,i=t._editor;i&&i.contains(e.target)&&t._editorIsOpen&&t.validateOnInput&&t._applyValidationOnInput()}_documentDownHandler(e){const t=this,i=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target;if(i.shadowParent&&i.shadowParent.closest(".smart-input-drop-down-menu")||i.closest(".smart-input-drop-down-menu")||t.$.conditionsMenu.contains(i))return;const a=i.closest(".smart-drop-down");if(i.getRootNode().host===t||i.closest("smart-query-builder")===t||a&&t.contains(a.ownerElement))if(t._isMobile){const i=t.$.scrollableContainer.scrollTop,a=t.getBoundingClientRect().top;setTimeout((function(){if(t.$.scrollableContainer.scrollTop===i&&t.getBoundingClientRect().top===a){const i=t.context;t.context=t,t._clickHandler(e.originalEvent),t.context=i}}),250)}else t._clickHandler(e.originalEvent);else t._editorIsOpen&&!t._scrollBarDown&&t._closeEditor(),delete t._scrollBarDown}_emptyElementsStructure(e){const t=this,i=t.$.contentContainer;for(;i.firstChild;)i.removeChild(i.firstChild);t._valueFlat=e?[]:t._valueFlat,t._lastProcessedItemInCurrentGroup={parentId:null,id:null,position:null}}_resizeHandler(){this.$.scrollableContainer.refresh()}_getTotalConditions(){return this.getElementsByClassName("smart-filter-group-condition").length}_parseLinqToValue(){const e=this,t=e._queryParser;t&&(t.customOperations=e.customOperations,t.fields=e.fields,t.dynamicField="dynamic"===e.fieldsMode?e.getDynamicField:void 0,e.set("value",t.toValue(e.value)))}_validateValue(){const e=this;"string"==typeof e.value&&e._parseLinqToValue();const t=e.properties.value.value;if(Array.isArray(t)&&""!==JSON.stringify(t).replace(/[\[\]]/g,"")){for(3===t.length&&"string"==typeof t[0]&&(e.value=[[t]]),Array.isArray(t[0])&&3===t[0].length&&"string"==typeof t[0][0]&&(e.value=[t]);"string"==typeof t[0];)t.shift();for(;"string"==typeof t[t.length-1];)t.pop();e.value.forEach((e=>{Array.isArray(e)&&0===e.length&&e.push([])}))}else e.value=[[[]]]}_convertValueToFlat(e){const t=this,i=["and","or","notAnd","notOr"];if(!e)return;let a=0,o=0;t._valueFlat=[],function e(r,l){let n;for(let s=0;s<r.length;s++){const d=r[s];let c={htmlNode:null};if("string"==typeof d&&(i.indexOf(d)>-1||t.customOperators[d]))n=(t.customOperators[d]||d).trim();else if(n=n||"and",Array.isArray(d)){let i=t._valueFlat.filter((e=>e.parentId+""==l+"")).length;if(d.find((e=>Array.isArray(e))))c.nodeId=(o+=1)+"",c.type="group",c.data=n,t._valueFlat.push(c),e(d,c.nodeId),n="";else{if(t.maxConditions&&a>=t.maxConditions||t.maxConditionsPerGroup&&i>=t.maxConditionsPerGroup)continue;0!==s&&(t._valueFlat.push({nodeId:l+"."+i,type:"operator",data:n,parentId:l+""}),n="",i++),c.nodeId=l+"."+i,c.parentId=l+"",c.type="condition",c.data=d,a++,t._valueFlat.push(c)}}}}(e,0),delete t._totalGroups}_getFieldsFromValue(){const e=this._valueFlat,t=[],i=[];for(let o=0;o<e.length;o++){const r=e[o];if("condition"===r.type){const e=r.data[0];if(e&&-1===t.indexOf(e)){const o={label:e,dataField:e,dataType:(a=r.data[2],"boolean"==typeof a?"boolean":a instanceof Date?a.getHours()>0||a.getMinutes()>0||a.getSeconds()>0?"dateTime":"date":isNaN(a)?"string":"number"),format:null};t.push(e),i.push(o)}}}var a;this._valueFields=i}_addElement(e,t,i,a){const o=this,r=o._valueFlat.filter((e=>e.parentId===t));let l=0,n="";if(i=i||("group"===e?"or":[]),r.length){let e=r.map((e=>{const t=e.nodeId.split(".");return parseInt(t[t.length-1])}));e=0===e.length?[0]:e,l=e.reduce(((e,t)=>Math.max(e,t)))+1}t&&t.length>0&&(n=".");let s=(t||"")+n+("group"===e?o._valueFlat.filter((e=>"group"===e.type)).length+1:l),d=r[0];if(r.length)for(let e=0;e<r.length;e++){const t=r[e],i=t.nodeId.split(".").pop();parseInt(i)>parseInt(d.nodeId.split(".").pop())&&(d=t)}else d=o._valueFlat.find((e=>e.nodeId===t));let c=d?o._valueFlat.indexOf(d)+1:o._valueFlat.length;"condition"===e&&r.length>0&&(o._valueFlat.splice(c,0,{nodeId:s,parentId:t,type:"operator",data:["and"],htmlNode:null}),s=(t||"")+n+(l+1),c++);const u={nodeId:s,parentId:t,type:e,data:i,htmlNode:null},p=o.autoPrompt;if("condition"===e&&p&&o._fields.length){const e=o._fields[0];if(e){const t=o._getFilterOperations(e);i[0]=e.value||e.label||"",t.length&&(i[1]=t[0].value)}}if(o._valueFlat.splice(c,0,u),"group"===e&&o._addElement("condition",s,[],!0),!a&&(o._refresh(),p&&u.htmlNode)){const e=u.htmlNode,t=e.querySelector(".smart-filter-value");t&&o._clickHandlerFilterButton(e.classList,u.nodeId,t)}}_deleteElement(e,t){const i=this,a="string"==typeof e?e:e.getAttribute("node-id");if(a&&1!==a.length&&("group"===t?l(a):r(a),!t||"condition"===t)){let e=a.split(".");if(e.pop(),e=e.join("."),!i._valueFlat.filter((t=>t.parentId===e)).length&&(i._valueFlat.filter((e=>"group"===e.type)).length>1&&l(e),"0"===e)){const e=i._valueFlat.find((e=>"group"===e.type)),t=e.nodeId;e.nodeId="0",e.htmlNode.setAttribute("node-id","0");const a=i._valueFlat.filter((e=>e.parentId===t));for(let e=0;e<a.length;e++){const t=a[e];t.parentId="0",t.nodeId="0."+e,t.htmlNode.setAttribute("node-id",t.nodeId)}}i._generateValue()}function o(e){const t=i._valueFlat[e];if(t&&"operator"===t.type)return i._valueFlat.splice(e,1),t.htmlNode.parentElement.removeChild(t.htmlNode),!0}function r(e){let t,a=0,r=e.split(".");r.pop(),r=r.join(".");for(let o=0;o<i._valueFlat.length;o++){const l=i._valueFlat[o];if("condition"===l.type){if(l.nodeId===e){t=l;break}l.parentId===r&&a++}}const l=i._valueFlat.indexOf(t);i._valueFlat.splice(l,1),t.htmlNode.parentElement.removeChild(t.htmlNode);const n=o(l-1);a||o(l-(n?1:0));const s=i._valueFlat.filter((e=>e.nodeId===r))[0].htmlNode;s.children[1].childElementCount>0&&s.children[2].hasAttribute("limit-selection")&&!s.children[1].lastElementChild.hasAttribute("limit-selection")&&s.children[2].removeAttribute("limit-selection")}function l(e){const t=i._valueFlat.filter((t=>e===t.nodeId&&"group"===t.type))[0];for(let t=0;t<i._valueFlat.length;t++){const a=i._valueFlat[t],o=a.nodeId;a.parentId===e&&("group"===a.type?l(o):r(o))}i._valueFlat.indexOf(t)>-1&&i._valueFlat.splice(i._valueFlat.indexOf(t),1),t.htmlNode.parentElement.removeChild(t.htmlNode)}}_generateHTMLStructureFromFlatValue(e){const t=this,i=document.createDocumentFragment();if(t._valueFlat&&0!==t._valueFlat.length){for(let e=0;e<t._valueFlat.length;e++){const a=t._valueFlat[e],o=!!t.customOperations&&t.customOperations.find((e=>e.name===a.data[1])),r=a.parentId?(t.shadowRoot||t).querySelector('[node-id="'+a.parentId+'"]').querySelector(".smart-filter-group-condition-container"):t.$.contentContainer;if("group"===a.type){const o=document.createElement("div"),r=t.localize(a.data)||"";o.className="smart-filter-group",o.innerHTML='<div class="smart-filter-group-operator" role="button" aria-expanded="false" aria-haspopup="menu">'+r+'</div><div class="smart-filter-group-condition-container" role="group"></div><div class="smart-filter-add-condition-btn" role="button" aria-label="Add condition"><div>'+t.localize("add")+'</div></div><div class="smart-filter-add-btn" role="button" aria-expanded="false" aria-haspopup="menu" aria-label="Add group"></div>',o.firstElementChild.data=r,i.appendChild(o),o.setAttribute("node-id",a.nodeId),t._valueFlat[e].htmlNode=o}else if("condition"===a.type){const r=t._newFilterConditionRow(a.data);if(r.setAttribute("node-id",a.nodeId),i.appendChild(r),t._valueFlat[e].htmlNode=r,void 0!==a.data[0]&&void 0===a.data[1]){const e=t._getFilterOperations(t._fields.find((e=>e.value===a.data[0])));t._handleOnlyOperation(e,a.data,r)}else(-1!==["isblank","isnotblank"].indexOf(a.data[1])||o&&o.hideValue)&&(a.data.splice(2,1),r.children[2].classList.add("smart-visibility-hidden"))}else{const o=document.createElement("div");o.className="smart-filter-nested-operator",o.setAttribute("node-id",a.nodeId),o.setAttribute("role","button"),o.setAttribute("aria-expanded",!1),o.setAttribute("aria-haspopup","menu"),o.innerHTML=t.localize(a.data),i.appendChild(o),t._valueFlat[e].htmlNode=o}r.appendChild(i)}e&&t._validateValueAdvanced(),t.$.scrollableContainer.refresh()}}_validateValueAdvanced(){const e=this,t=e.value;let i=!1,a=!1,o=0;for(let e=0;e<t.length;e++){const r=t[e];if("string"!=typeof r)for(let e=r.length-1;e>=0;e--){let t=r[e];if(Array.isArray(t)&&0===t.length&&e!==r.length-1)r.splice(e,1),0===e&&r.splice(0,1),i=!0;else if("string"==typeof t){t=t.toLowerCase(),o++,(o>1||"and"!==t&&"or"!==t)&&(a=!0);continue}o=0}}i&&(e._emptyElementsStructure(!0),e._convertValueToFlat(e.value),e._generateHTMLStructureFromFlatValue()),a&&e._generateValue(!0)}_restrictNesting(){Array.from(this.getElementsByClassName("smart-filter-add-condition-btn")).forEach((e=>{const t=e.previousElementSibling.lastElementChild;t&&t.hasAttribute("limit-selection")&&e.setAttribute("limit-selection","")}))}_clickHandler(e){const t=this,i=t.shadowRoot||t.isInShadowDOM?e.composedPath()[0]:e.target;if(t.disabled||!i||!i.closest||!t._isMobile&&0!==e.button)return;if(t._scrollBarDown)return void delete t._scrollBarDown;const a=i.closest(".smart-drop-down"),o=t._editor&&t._editor.contains(i)||a&&(t._editor.contains(a.ownerElement)||t._editor===a.ownerElement)||i.closest(".smart-custom-editor");t._editor&&t._editorIsOpen&&!o&&t._closeEditor();const r=i.closest(".smart-filter-group-condition")||i.closest(".smart-filter-nested-operator")||i.closest(".smart-filter-group");if(!r)return;const l=t._getItemById(r.getAttribute("node-id"));if(!l)return;if(t.$.fireEvent("itemClick",{id:l.nodeId,type:l.type,data:l.data}),i.closest(".smart-filter-delete-btn"))return void t._clickHandlerDeleteButton(l.htmlNode);const n=i.closest(".smart-filter-add-btn")||i.closest(".smart-filter-add-condition-btn");if(n){const e=n.closest(".smart-filter-group").getAttribute("node-id");return void(n.classList.contains("smart-filter-add-condition-btn")&&(t.maxConditions&&t._getTotalConditions()<t.maxConditions||!t.maxConditions)?t._addElement("condition",e,[]):t._clickHandlerFilterButton(n.classList,l.nodeId,i))}const s=i.closest(".filter-builder-item")||i.closest(".smart-filter-group-operator")||i.closest(".smart-filter-nested-operator");if(s){const e=s.classList;t._clickHandlerFilterButton(e,l.nodeId,i)}}_downHandler(e){const t=this;if(!e.originalEvent||!t._isMobile&&0!==e.button)return;const i=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target,a=t.rightToLeft?e.pageX>i.getBoundingClientRect().right:e.pageX<i.getBoundingClientRect().left;if(t.allowDrag&&i.classList.contains("smart-filter-group-condition")&&a){const a=t._valueFlat.filter((e=>"condition"===e.type));if(1===a.length||2===a.length&&a[0].parentId===a[1].parentId&&a[1].htmlNode.hasAttribute("limit-selection"))return;return t._dragDetails={coords:{x:e.pageX,y:e.pageY},item:i,originalEvent:e},t.$.scrollableContainer._scrollView.disableSwipeScroll=!0,t._hoveredCondition=i,void window.getSelection().removeAllRanges()}this._scrollBarDown=i.closest("smart-scroll-bar"),e.stopPropagation(),e.preventDefault()}_scrollableContainerTouchmoveHandler(e){this._dragDetails&&e.cancelable&&(e.preventDefault(),e.stopPropagation())}_documentMoveHandler(e){const t=this,i=t._dragDetails;if(!i)return;const a=i.item;if(!i.feedbackShown){if(!(Math.abs(i.coords.x-e.pageX)>5||Math.abs(i.coords.y-e.pageY)>5))return;{const o=t._valueFlat.filter((e=>e.htmlNode===a))[0];if(t.$.fireEvent("dragStart",{data:o.data,item:a,originalEvent:e}).defaultPrevented)return delete t._dragDetails,delete t._hoveredCondition,void(t.$.scrollableContainer._scrollView.disableSwipeScroll=!1);i.allConditions=Array.from((t.shadowRoot||t).querySelectorAll(".smart-filter-group-condition")),i.data=o,i.feedback=t._addDragFeedback(),i.feedbackShown=!0,a.classList.add("dragged")}}const o=e.clientY;let r,l=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target;if(t.$.fireEvent("dragging",{data:i.data,item:a,originalEvent:e}),t.setAttribute("dragging",""),i.feedback.style.left=e.pageX+10+"px",i.feedback.style.top=e.pageY+10+"px",t._isMobile){const i=t._hoveredCondition;i&&(i.classList.remove("drop-target","top","bottom"),delete t._hoveredCondition);const a=document.elementFromPoint(e.clientX,o);a&&(l=a)}let n,s=l.closest(".smart-filter-group-condition");if(s){r=s;const e=r.getBoundingClientRect(),t=Math.abs(o-e.top),i=Math.abs(o-e.bottom);n=t<i?"top":"bottom"}else{let e,t;i.allConditions.forEach((i=>{const a=i.getBoundingClientRect(),r=Math.abs(o-a.top),l=Math.abs(o-a.bottom),s=Math.min(r,l);(void 0===t||s<t)&&(e=i,t=s,n=r<l?"top":"bottom")})),s=e}if(s===a||s.hasAttribute("limit-selection")&&"bottom"===n)s=void 0;else{const e=Array.from(s.parentElement.getElementsByClassName("smart-filter-group-condition")),t=e.indexOf(a);-1!==t&&("top"===n&&s===e[t+1]||"bottom"===n&&s===e[t-1])&&(s=void 0)}if(r=s,i.side=n,clearInterval(t._dragInterval),t._dragInterval=setInterval((function(){const i=t.getBoundingClientRect();t.$.scrollableContainer.scrollHeight>0&&i.left<=e.clientX&&i.left+i.width>=e.clientX?o>=i.top&&o<=i.top+36?t.$.scrollableContainer.scrollTop-=t._autoScrollCoefficient:o>=i.top+i.height-36&&o<=i.top+i.height?t.$.scrollableContainer.scrollTop+=t._autoScrollCoefficient:clearInterval(t._dragInterval):clearInterval(t._dragInterval)}),1),r){t._hoveredCondition&&r!==t._hoveredCondition&&t._hoveredCondition.classList.remove("drop-target","top","bottom");const e=r.closest(".smart-filter-group");if(e&&e.hasAttribute("restricted"))return void(t._hoveredCondition=void 0);t._hoveredCondition=r,r.classList.remove("top","bottom"),r.classList.add(n,"drop-target")}else t._hoveredCondition&&(t._hoveredCondition.classList.remove("drop-target","top","bottom"),delete t._hoveredCondition)}_addDragFeedback(){const e=this,t=document.createElement("div");return e.rightToLeft?t.setAttribute("right-to-left",""):t.removeAttribute("right-to-left"),t.className="smart-query-builder-drag-feedback",e.theme&&t.setAttribute("theme",e.theme),document.body.appendChild(t),t}_documentUpHandler(e){const t=this,i=t._dragDetails;if(!i)return void(t.$.conditionsMenu.opened&&t._selectedElement&&!t._selectedElement.classList.contains("smart-filter-add-btn")&&t.$.conditionsMenu._hoverViaKeyboard(t.$.conditionsMenu.querySelector('smart-menu-item[value="'+t._editedItem.data+'"]')));const a=i.item,o=i.data,r=t._hoveredCondition;if(delete t._dragDetails,delete t._hoveredCondition,t.$.scrollableContainer._scrollView.disableSwipeScroll=!1,!t.hasAttribute("dragging"))return;if(clearInterval(t._dragInterval),window.getSelection().removeAllRanges(),t.removeAttribute("dragging"),a.classList.remove("dragged"),i.feedback.remove(),!r)return void t.$.fireEvent("dragEnd",{data:o.data,item:a,originalEvent:e,target:null,targetData:null,targetSide:null});const l=t._valueFlat.filter((e=>e.htmlNode===r))[0],n=t.$.fireEvent("dragEnd",{data:o.data,item:a,originalEvent:e,target:r,targetData:l.data,targetSide:i.side});if(r.classList.remove("drop-target","top","bottom"),n.defaultPrevented)return;const s=t.value,d=o.nodeId.split(".").map((e=>parseFloat(e))),c=s[2*(d[0]-1)],u=l.nodeId.split(".").map((e=>parseFloat(e))),p=s[2*(u[0]-1)];let m="and";c.length>1&&(0===d[1]?(m=c[1],c[1]="!remove!"):(m=c[d[1]-1],c[d[1]-1]="!remove!")),c[d[1]]="!remove!","top"===i.side?p.splice(u[1],0,o.data,m):p.splice(u[1]+1,0,m,o.data);for(let e=0;e<s.length;e++)Array.isArray(s[e])&&(s[e]=s[e].filter((e=>"!remove!"!==e)));for(let e=s.length-1;e>=0;e--)Array.isArray(s[e])&&0===s[e].length&&(0===e?s.splice(0,2):(s.splice(e-1,2),e--));t._emptyElementsStructure(!0),t._convertValueToFlat(s),t._generateHTMLStructureFromFlatValue(),t._validValue=t._getValidValue();const f=JSON.stringify(t._validValue);t._oldValueAsString!==f&&(t._oldValueAsString=f,t.$.fireEvent("change",{value:JSON.parse(f),linq:t._queryParser.toLinq(t._validValue)}))}_clickHandlerDeleteButton(e,t){const i=this;if(e&&e.classList){if(i._closeEditor(),1===i.getElementsByClassName("smart-filter-group-condition").length){const e=i._valueFlat[1].htmlNode.children;i.value=[[[]]],i._validValue=i._getValidValue(),i._valueFlat[1].data=[],i._valueFlat[1].htmlNode.setAttribute("limit-selection",""),e[0].setAttribute("placeholder",""),e[1].setAttribute("placeholder",""),e[2].setAttribute("placeholder",""),e[2].removeAttribute("invalid-value"),e[0].firstElementChild.innerHTML=i.propertyPlaceholder,e[1].firstElementChild.innerHTML=i.operatorPlaceholder,e[2].firstElementChild.innerHTML=i.valuePlaceholder;const t=JSON.stringify(i._validValue);return i._oldValueAsString!==t&&(i._oldValueAsString=t,i.$.fireEvent("change",{value:JSON.parse(t),linq:i._queryParser.toLinq(i._validValue)})),void i._restrictNesting()}if(e.classList.contains("smart-filter-group")){if(t&&i._valueFlat.filter((t=>t.parentId===e.getAttribute("node-id"))).length>0)return;i._deleteElement(e,"group")}else i._deleteElement(e);i._generateValue(),i.$.scrollableContainer.refresh(),Array.from(i.$.contentContainer.children).forEach(((e,t)=>{const a=(t+1).toString();e.setAttribute("node-id",a),i._valueFlat.filter((t=>t.htmlNode===e))[0].nodeId=a,Array.from(e.children[1].children).forEach(((e,t)=>{const o=i._valueFlat.filter((t=>t.htmlNode===e))[0],r=a+"."+t;e.setAttribute("node-id",r),o.parentId=a,o.nodeId=r}))}))}}_menuCloseHandler(){const e=this.$.conditionsMenu.controlledBy;e.setAttribute("aria-expanded",!1),e.removeAttribute("aria-controls"),delete this.$.conditionsMenu.controlledBy}_menuClosingHandler(e){const t=e.detail;"interaction"===t.trigger&&this._selectedElement===t.target&&e.preventDefault()}_menuItemClickHandler(e){const t=this,i=t._selectedElement.closest(".smart-filter-group-operator, .smart-filter-nested-operator"),a=e.detail,o=a.value;let r;if(i){i.innerHTML=t.localize(o)||a.label,i.value=o,r=i.classList.contains("smart-filter-nested-operator")?i.getAttribute("node-id"):i.parentElement.getAttribute("node-id");for(let e=0;e<t._valueFlat.length;e++)if(t._valueFlat[e].nodeId===r){t._valueFlat[e].data=i.value;break}t._generateValue()}else r=t._selectedElement.parentElement.getAttribute("node-id"),t._addElement("group",null,o);t.$.scrollableContainer.refresh()}_newFilterConditionRow(e=[]){const t=this,i=e[0];let a,o=t._fields.find((e=>e.value===i)),r=o?o.label:void 0;void 0===i||!r&&"static"===t.fieldsMode?e.length=0:(r||(o=t._getDynamicFieldInfo(i),r=o.label,e[0]=o.dataField),a=t._getFilterOperations(o).find((t=>t.value===e[1])),a&&(a=a.label));const l=t._formatValueStringRepresentation(e[2],e),n=t._validateValueField(void 0,e[1],e[2]);let s=document.createElement("div"),d="condition"+Math.floor(65536*(1+Math.random())).toString(16).substring(1),c='<div class="filter-builder-item smart-filter-field-name" id="'+d+'Field" '+(r?'><div class="smart-value-container" role="presentation">'+r:'placeholder><div class="smart-value-container" role="presentation">'+t.propertyPlaceholder)+'</div></div><div class="filter-builder-item smart-filter-operation" id="'+d+'Operation" '+(a?'><div class="smart-value-container" role="presentation">'+a:'placeholder><div class="smart-value-container" role="presentation">'+t.operatorPlaceholder)+'</div></div><div class="filter-builder-item smart-filter-value" id="'+d+'Value" '+(n?"":"invalid-value")+(void 0!==e[2]?'><div class="smart-value-container" role="presentation">'+l:'placeholder><div class="smart-value-container" role="presentation">'+t.valuePlaceholder)+'</div></div><div class="smart-filter-delete-btn" role="button" aria-label="Close"></div>';return s.className="smart-filter-group-condition",s.setAttribute("role","group"),s.innerHTML=c,t._setAriaLabel(s),e.length||s.setAttribute("limit-selection",""),s}_setAriaLabel(e){const t=[];for(let i=0;i<e.children.length-1;i++){const a=e.children[i];a.classList.contains("smart-visibility-hidden")||a.hasAttribute("placeholder")||t.push(e.children[i].innerText)}0!==t.length?e.setAttribute("aria-label",t.join(" ")):e.setAttribute("aria-label","Empty condition row")}_formatValueStringRepresentation(e,t){const i=this,a=t[2],o=t[0],r=i._getFieldByFieldName(o);let l,n=t[1];if(!r||!r.dataType)return e;if(null==e)return i.valuePlaceholder;if(void 0!==n&&i.customOperations&&i.customOperations.length>0&&(n=i.customOperations.find((e=>e.name===n)),n&&n.valueTemplate))return"<span>"+n.valueTemplate(i._editor,e)+"</span>";switch(r.dataType.toLowerCase()){case"date":case"datetime":(e=e instanceof Date||"string"==typeof e||"number"==typeof e&&!isNaN(e)?new Smart.Utilities.DateTime(e):e).calendar.days=i._localizedDays,e.calendar.months=i._localizedMonths,e.calendar.locale=i.locale,l=e.toString("date"===r.dataType?i.formatStringDate:i.formatStringDateTime);break;case"array":l="string"==typeof e?e.split(","):e;break;case"object":l="string"==typeof e?e:JSON.stringify(e);break;case"number":l=e;break;case"boolean":l=!!e;break;default:l=e+""}if(!i.valueFormatFunction)return"<span>"+l+"</span>";const s={label:l,value:a,dataField:o,dataType:r.dataType||"string"};return"<span>"+i.valueFormatFunction(s)+"</span>"}_getFieldByFieldName(e){return Object.assign({},this._fields.find((t=>t.value===e)))}_refresh(){const e=this;e._generateValue(),e._emptyElementsStructure(),e._generateHTMLStructureFromFlatValue(),e._restrictNesting()}_generateValue(e){const t=this;let i=[],a=t._valueFlat.slice(0),o=[];for(let e=0;e<a.length;e++){const t=a[e];let o={};"group"===t.type&&(o.nodeId=t.nodeId,o.parentId=t.parentId,o.data=t.data,o.structure=[],i.push(o))}for(let e=0;e<i.length;e++){const t=i[e];for(let e=0;e<a.length;e++){const i=a[e];if(i.parentId===t.nodeId&&"condition"===i.type){const o=a[e-1];o&&o.parentId===t.nodeId&&"operator"===o.type&&t.structure.push(o.data.toString()),t.structure.push(i.data)}}}i=i.filter((e=>e.structure.length>0)),i.sort((function(e,t){return t.nodeId.split(".").length-e.nodeId.split(".").length}));for(let e=0;e<i.length;e++){const t=i[e],a=i.filter((e=>e.nodeId===t.parentId))[0];a&&a.structure?a.structure.push(t.structure):"0"!==t.nodeId?t.data&&(e>0&&o.push(t.data),o.push(t.structure)):o=o.concat(t.structure)}if(t.set("value",o),t._validateValue(),t._validValue=t._getValidValue(),t._updateValidationStatus(),!e){const e=JSON.stringify(t._validValue);t._oldValueAsString!==e&&(t._oldValueAsString=e,t.$.fireEvent("change",{value:JSON.parse(e),linq:t._queryParser.toLinq(t._validValue)}))}}_updateValidationStatus(){const e=this,t=e.customOperations.filter((e=>"function"==typeof e.validateValue)),i=e._valueFlat,a=!!e._validationStatus;let o=!0;for(let e=0,a=i.length;e<a;e+=1){const a=i[e];if("condition"!==a.type)continue;const r=a.data[1],l=t.find((e=>e.name===r));if(l&&0==!!l.validateValue(a.data[2])){o=!1;break}}if(e._validationStatus!==o){const t=void 0!==e._validationStatus;e._validationStatus=o,t&&e.$.fireEvent("validationChange",{oldValue:a,newValue:o})}}_getItemById(e,t){const i=this._valueFlat.filter((i=>t?i.parentId===e:i.nodeId===e));return i.length>0?i[0]:null}_validateStoredValue(e,t){const i=this;if(!t&&!i._editedItem)return e;if(!t&&!(t=i._editedItem.data[0]))return e;const a=i._getFieldByFieldName(t).dataType;if(void 0===a)return e+"";switch(a.toLowerCase()){case"date":case"datetime":e=new Smart.Utilities.DateTime(e).toDate();break;case"number":"number"!=typeof e&&(e=parseFloat(e));break;case"boolean":"boolean"!=typeof e&&(e=!!e);break;case"object":"object"!=typeof e&&(e={});break;case"array":Array.isArray(e)||(e=[e]);break;default:"string"!=typeof e&&(e+="")}return e}_closeEditor(e){const t=this;let i;if(!t._editedItem||!t._editorIsOpen)return;const a=t._editedItem,o=t._editor.closest(".filter-builder-item"),r=o.querySelector(".smart-value-container"),l=o.parentElement,n=l.children[2];if(t._editor===t.$.dateTimePickerEditor)t._editor._inputChangeHandler(),i=t._editor.value,i&&(i=i.toDate());else if(t._editor===t.$.checkBoxEditor)i=t._editor.checked;else if(t._editor===t.$.customEditor)t._editor&&Array.from(t._editor.getElementsByTagName("smart-numeric-text-box")).forEach((e=>e._inputBlurHandler())),i=t._validateStoredValue(t._selectedCustomCondition.handleValue(t._editor));else if(t._editor===t.$.numericTextBoxEditor)t._editor._inputBlurHandler(),i=t._editor.value;else if(o.classList.contains("smart-filter-value")){const e=t._getFieldByFieldName(t._editedItem.data[0]);if("array"===e.dataType)i=t._editor.value.split(",");else if("object"===e.dataType)i=JSON.parse(t._editor.value);else{const a=t._editor.value;i=e.lookup&&e.lookup.dataSource?{label:a,value:t._editor.dataset.value||a}:a}}else i=t._editor.value;if(o.classList.contains("smart-filter-field-name")){if(""===i.trim())return void t._hideEditor(o,void 0===a.data[0]);l.hasAttribute("limit-selection")&&(l.removeAttribute("limit-selection"),l.parentElement.nextElementSibling.removeAttribute("limit-selection"));const e=t._fields.find((e=>e.label===i)),s=a.data[0];if(e)a.data[0]=e.value;else{if("dynamic"!==t.fieldsMode){const e=t._fields.find((e=>e.value===s));return e&&(r.innerHTML=e.label),void t._hideEditor(o)}{const e=t._getDynamicFieldInfo(i);i=e.label,a.data[0]=e.dataField}}r.innerHTML=i,t._handleFieldChange([s,a.data[0]],[n,a,l])}else if(o.classList.contains("smart-filter-operation"))t._handleOperationChange([a,i,t._editor.$.input.dataValue],[r,n]);else{let e,o;"object"==typeof i&&void 0!==i.value?(e=i.label,o=i.value,void 0===e&&(e=o)):e=o=i,a.data[2]=o,r.innerHTML=t._formatValueStringRepresentation(e,a.data)}t._validateValueField(n,a.data[1],a.data[2]),t._generateValue(e),t._hideEditor(o)}_validateValueField(e,t,i){const a=this.customOperations;let o=!0;if(e&&e.removeAttribute("invalid-value"),a&&a.length>0){const r=a.find((e=>e.name===t));r&&"function"==typeof r.validateValue&&(o=!!r.validateValue(i),!o&&e&&e.setAttribute("invalid-value",""))}return o}_getDynamicFieldInfo(e){const t=this,i={label:e,dataField:e,dataType:"string"};if(t.getDynamicField){const a=t.getDynamicField(e);a.label&&(i.label=a.label),a.dataField&&(i.dataField=a.dataField),a.dataType&&(i.dataType=a.dataType),a.filterOperations&&Array.isArray(a.filterOperations)&&a.filterOperations.length>0&&(i.filterOperations=a.filterOperations),a.lookup&&(i.lookup=a.lookup)}return t._manuallyAddedFields.push(i),t._mapFieldsToMenu(),i}_handleFieldChange(e,t){const i=this,a=e[0],o=t[1],r=t[2],l=t[0],n=i._fields.find((t=>t.value===e[1])),s=i._getFilterOperations(n),d=function(){n.value!==a&&i.$.fireEvent("propertySelected",{label:n.label,value:n.value})};if(!a||void 0===o.data[1])return i._handleOnlyOperation(s,o.data,r),void d();const c=i._fields.find((e=>e.value===a)),u=c.dataType,p=n.dataType;if(n!==c&&(p!==u||"enum"===p||n.filterOperations||c.filterOperations)){if(s.find((e=>e.value===o.data[1]))){if(p===u&&"enum"!==p)return;return"date"===p&&"dateTime"===u||"dateTime"===p&&"date"===u?(l.firstElementChild.innerHTML=i._formatValueStringRepresentation(o.data),void d()):(o.data.splice(2,1),l.setAttribute("placeholder",""),l.firstElementChild.innerHTML=i.valuePlaceholder,void d())}o.data.splice(1,2),r.children[1].setAttribute("placeholder",""),r.children[1].firstElementChild.innerHTML=i.operatorPlaceholder,l.setAttribute("placeholder",""),l.firstElementChild.innerHTML=i.valuePlaceholder,l.classList.remove("smart-visibility-hidden"),i._handleOnlyOperation(s,o.data,r),d()}}_handleOnlyOperation(e,t,i){const a=this.autoPrompt;if(1===e.length||a&&"immediately"===this.applyMode&&e.length>1){const a=e[0];t[1]=a.value,i.children[1].removeAttribute("placeholder",""),i.children[1].firstElementChild.innerHTML=e[0].label,("isblank"===a.value||"isnotblank"===a.value||a.custom&&a.hideValue)&&(t.splice(2,1),i.children[2].classList.add("smart-visibility-hidden"))}}_handleOperationChange(e,t){const i=this,a=e[0],o=e[1],r=e[2],l=t[0],n=t[1],s=void 0!==a.data[1]?i._filterOperationDescriptions.find((e=>e.value===a.data[1])):void 0,d=i._filterOperationDescriptions.find((e=>e.value===r));if(!d||d===s)return;const c=d.value;a.data[1]=c;const u=a.data[0],p=a.data[1],m=a.data[2];if(l.innerHTML=o,"isblank"===c||"isnotblank"===c||d.custom&&d.hideValue)a.data.splice(2,1),n.classList.add("smart-visibility-hidden");else if(n.classList.contains("smart-visibility-hidden"))n.setAttribute("placeholder",""),n.classList.remove("smart-visibility-hidden"),n.firstElementChild.innerHTML=i.valuePlaceholder;else if(d.custom){const e=i._getFieldByFieldName(u);if(d.editorTemplate){const t=d.editorTemplate(e.dataType,p,e);t&&(i.$.customEditor.innerHTML="",i.$.customEditor.appendChild(t))}d.valueTemplate?n.firstElementChild.innerHTML=d.valueTemplate(i.$.customEditor,m):void 0===m?(n.setAttribute("placeholder",""),n.firstElementChild.innerHTML=i.valuePlaceholder):n.firstElementChild.innerHTML=m}else void 0===m?(a.data.splice(2,1),n.setAttribute("placeholder",""),n.firstElementChild.innerHTML=i.valuePlaceholder):d.custom||(n.firstElementChild.innerHTML=i._formatValueStringRepresentation(m,a.data))}_hideEditor(e,t){const i=this;t&&e.setAttribute("placeholder",""),e.removeAttribute("edited"),i.$.editorsContainer.removeAttribute("open"),i._editor.close&&i._editor.close(),i._editor.classList.add("smart-hidden"),i._editorIsOpen=i._enterIsPressedInEditor=!1,i.$.scrollableContainer.refresh(),i._setAriaLabel(e.parentElement)}_clickHandlerFilterButton(e,t,i){const a=this;function o(e,t,i){a._contextMenuOptions=0===t.length?a._defaultFilterOperationDescriptions:t,a._handleContextMenu(e),a.$.conditionsMenu.opened&&(a.$.conditionsMenu._discardKeyboardHover(),a.$.conditionsMenu._hoverViaKeyboard(a.$.conditionsMenu.querySelector('smart-menu-item[value="'+i+'"]')))}i.closest(".smart-editors-container")||(a._closeEditor(),a._editedItem=a._getItemById(t),e.contains("smart-filter-add-btn")?o(i,a._groupOperationDescriptions):(e.contains("smart-filter-field-name")||a._editedItem.data&&a._editedItem.data.length)&&(e.contains("smart-filter-group-operator")||e.contains("smart-filter-nested-operator")?o(i,a._groupOperationDescriptions,a._editedItem.data):(i.closest(".filter-builder-item").removeAttribute("placeholder"),a._openEditor(i))))}_handleContextMenu(e){const t=this;if(t._selectedElement===e&&t.$.conditionsMenu.opened)return void t.$.conditionsMenu.close();if(t._closeEditor(),t.disableContextMenu)return void(t._selectedElement=e);const i=e.getBoundingClientRect(),a=t.getBoundingClientRect(),o=i.left+t.$.contentContainer.scrollLeft-a.left,r=i.top+t.$.contentContainer.scrollTop-a.top+i.height;e.hasAttribute("aria-haspopup")&&(t.$.conditionsMenu.controlledBy&&(t.$.conditionsMenu.controlledBy.setAttribute("aria-expanded",!1),t.$.conditionsMenu.controlledBy.removeAttribute("aria-controls")),e.setAttribute("aria-controls",t.$.conditionsMenu.id),e.setAttribute("aria-expanded",!0),t.$.conditionsMenu.controlledBy=e),t.$.conditionsMenu.dataSource=t._contextMenuOptions,t.$.conditionsMenu.open(o,r+3),t._selectedElement=e,t.$.scrollableContainer.refresh()}_openEditor(e){const t=this,i=e&&e.closest(".smart-filter-group-condition")?e.closest(".smart-filter-group-condition").getAttribute("node-id"):null,a=e.closest(".filter-builder-item"),o=t._getItemById(i);let r="";void 0!==o.data[0]?r=o.data[0]:t._fields.length&&(r=t._fields[0].value);let l,n,s=t._getFieldByFieldName(r),d="";if(a.classList.contains("smart-filter-field-name"))n=0,t._fields||t._mapFieldsToMenu(),s.lookup={dataSource:t._fields.slice(),readonly:!1},d=s.label||"",l=s.value;else if(a.classList.contains("smart-filter-operation")){n=1;let e=t._getFilterOperations(s);s.lookup={dataSource:e,readonly:!0};let i=e.find((e=>e.value===o.data[n]))||e[0];d=i.label,l=i.value}else n=2,d=o.data[n],void 0===d&&(d="");t._editorIsOpen&&t._closeEditor(),a.setAttribute("edited",""),t._editedItem=o;const c=t._fields.filter((e=>e.value===r)),u=t._filterOperationDescriptions.filter((e=>e.value===o.data[1]&&e.custom)),p=c.length>0?c[0]:null,m=s.lookup&&s.lookup.dataSource?"lookup":p?p.dataType:void 0;if(2===n&&0!==u.length&&u[0].editorTemplate?(t._selectedCustomCondition=u[0],t._openCustomEditor(m,d,s)):t._openEditorByFieldType(m,d,s,l),a.appendChild(t.$.editorsContainer),t._editor.classList.remove("smart-hidden"),t._editorIsOpen=!0,t.$.editorsContainer.setAttribute("open",""),t.$.scrollableContainer.refresh(),t._editor.classList.contains("smart-custom-editor")){const e=t.customOperations[t._selectedCustomCondition.index].onEditorOpen;e&&e(t._editor)}else requestAnimationFrame((()=>t._editor.focus()));s.lookup&&!t._valueValidationTimeout&&t._editor.open()}_getFilterOperations(e){const t=this;let i=t._filterOperationDescriptions.slice();if(e.filterOperations)i=t._filterOperationDescriptions.filter((t=>e.filterOperations.indexOf(t.value)>-1));else{let a;switch(e.dataType){case"date":case"dateTime":case"number":a=["=","<>","<",">","<=",">=","isblank","isnotblank"];break;case"boolean":a=["=","<>","isblank","isnotblank"];break;case"object":a=["isblank","isnotblank"];break;case"string":a=["contains","notcontains","startswith","endswith","=","<>","isblank","isnotblank"];break;default:a=["contains","notcontains","startswith","endswith","=","<>","<",">","<=",">=","isblank","isnotblank"]}i=t._filterOperationDescriptions.filter((e=>a.indexOf(e.value)>-1))}return t.showIcons&&i.map((e=>e.icon=t.icons[e.value])),i}_openCustomEditor(e,t,i){const a=this,o=a.customOperations[a._selectedCustomCondition.index].editorTemplate(e,t,i);a.$.customEditor.innerHTML="",o&&a.$.customEditor.appendChild(o),a._editor=a.$.customEditor}_openEditorByFieldType(e,t,i,a){const o=this;if(e)switch(e.toLowerCase()){case"boolean":return o._initializeEditor("checkBox"),void(o._editor.checked=!!t);case"date":case"datetime":return o._initializeEditor("dateTimePicker"),o._editor.formatString="date"===e?o.formatStringDate:o.formatStringDateTime,void(o._editor.value=t);case"number":return o._initializeEditor("numericTextBox"),void(o._editor.value=t||0)}if(o._initializeEditor("input"),o._editor.dropDownWidth=o.dropDownWidth,"lookup"===e){const a=i.lookup.minLength,r=i.lookup.dataSource;if(o._editor.autoCompleteDelay=i.lookup.autoCompleteDelay||100,o._editor.dropDownAppendTo=o.$.container,o._editor.dropDownButtonPosition=o.rightToLeft?"left":"right",o._editor.minLength=isNaN(a)||null===a?1:a,o._editor.readonly=!!i.lookup.readonly,"function"==typeof r?o._editor.dataSource=r:r instanceof Promise?r.then((e=>{if(!(o._editor instanceof Smart.Input))return;const i=o._editor.opened;o._editor.dataSource=e,e.length<12?o._editor.dropDownHeight="auto":o._editor.dropDownHeight=200,i&&(o._editor.open(),""===t&&o._editor.readonly&&e.length&&(o._editor.value=e[0].label||e[0]))})):(o._editor.dataSource=r,r.length<12?o._editor.dropDownHeight="auto":o._editor.dropDownHeight=200),"object"===e)t=JSON.stringify(t||{});else if(""===t&&o._editor.readonly){const e=o._editor.dataSource;if(Array.isArray(e)){const i=e[0];t=i&&(i.value||i.label)||""}else t=""}if(o._editor.isRendered){const e=o._editor.$.input.dataValue;null!=e&&e===t||(o._editor.value=void 0!==t?t+"":"")}else o._editor.value=void 0!==t?t+"":""}else o._editor.dataSource=[],o._editor.dropDownButtonPosition="none",o._editor.readonly=!1,o._editor.value=void 0!==t?t+"":"";a&&"object"!==e&&o._editor.isRendered&&(o._editor.$.input.dataValue=a)}_initializeEditor(e){const t=this;if(t.$[e+"Editor"])return void(t._editor=t.$[e+"Editor"]);const i=document.createElement("smart-"+Smart.Utilities.Core.toDash(e));"numericTextBox"===e?(i.spinButtons=!0,i.inputFormat="floatingPoint"):"dateTimePicker"===e&&(i.dropDownAppendTo=t.$.container,i.calendarButton=!0,i.dropDownDisplayMode="auto",i.enableMouseWheelAction=!0,i.locale=t.locale,i.autoClose=!0,i.messages[t.locale]||(i.messages[t.locale]={}),i.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),i.messages[t.locale].timeTabLabel=t.localize("timeTabLabel")),i.rightToLeft=t.rightToLeft,i.theme=t.theme,i.animation=t.animation,i.$.addClass("smart-hidden underlined"),t.$.editorsContainer.appendChild(i),t._editor=t.$[e+"Editor"]=i}_getValidValue(){const e=this,t=e.properties.value.value,i=[];let a=!1;return t.forEach((t=>{if(Array.isArray(t)){let o=!1,r=!1;const l=[];t.forEach((t=>{if(Array.isArray(t)){const i=t[0],a=t[1],n=t[2];if(void 0===i||void 0===a)return void(r=!0);if(void 0!==n||"isblank"===a||"isnotblank"===a)return o=!0,void l.push(t);const s=e._filterOperationDescriptions.find((e=>e.value===a));s.custom&&s.hideValue?(o=!0,l.push(t)):r=!0}else r?r=!1:l.push(t)})),o?("string"==typeof l[l.length-1]&&l.pop(),i.push(l)):a=!0}else a?a=!1:i.push(t)})),"string"==typeof i[i.length-1]&&i.pop(),i}}),Smart.Utilities.Assign("QueryParser",class{constructor(e,t,i){const a=this;a.customOperations=t||[],a.fields=e||[],a.dynamicField=i}toLinq(e){return Array.isArray(e)&&this._arePropertiesValid()?this._parseQueryToLinq(e):""}toValue(e){return"string"==typeof e&&this._arePropertiesValid()?this._parseLinqToValue(e):[]}_arePropertiesValid(){return Array.isArray(this.customOperations)?!!Array.isArray(this.fields)||(console.log('Invalid "fields" property.'),!1):(console.log('Invalid "customOperations" property.'),!1)}_parseQueryToLinq(e){const t=this,i={and:"&&",or:"||"};let a="";for(let o=0;o<e.length;o++){const r=e[o];if(Array.isArray(r))if(r.indexOf("and")>-1||r.indexOf("or")>-1||1===r.length&&Array.isArray(r[0])){const e=t._parseQueryToLinq(r);e?a+=r.length>1?"("+e+")":e:/\s(&|\|){2}\s$/gm.test(a)&&(a=a.replace(/\s(&|\|){2}\s$/gm,""))}else a+=t._getExpressionFromQuery(r)||"";else a&&(a+=" "+i[r]+" ")}return a}_getExpressionFromQuery(e){const t=e[0],i=e[1];let a=e[2];const o=this.customOperations.find((e=>e.name===i));return o&&o.expressionTemplate?("string"==typeof a&&a.includes('"')&&o.expressionTemplate.includes('"')&&(a=JSON.stringify(a).slice(1,-1)),o.expressionBuilderCallback?o.expressionBuilderCallback(t,i,a):o.expressionTemplate.replace("{0}",t).replace("{1}",a)):""}_parseLinqToValue(e){const t=this;let i,a=0,o=[];for(let t=0;t<e.length;t++)if("("===e[t])a++,void 0===i&&(i=t);else if(")"===e[t]&&a>0&&(a--,0===a)){let a=e.substring(i,t+1).trim();a.length&&(a.includes("&&")||a.includes("||"))&&o.push({expr:a}),i=void 0}let r,l=[];if(o.length)for(let i=0;i<o.length;i++){let a;o[i].query=t._getQueryFromExpression(o[i].expr),a=r?e.substring(e.indexOf(r)+r.length,e.indexOf(o[i].expr)).trim():e.substring(0,e.indexOf(o[i].expr)).trim(),a&&l.push(a),r=o[i].expr}r?l.push(e.substring(e.indexOf(r)+r.length).trim()):l.push(e.trim());for(let e=0;e<l.length;e++){const i=l[e].replace(/^&{2}|^\|{2}|&{2}$|\|{2}$/gm,"").trim();i.length&&o.push({expr:i,query:t._getQueryFromExpression(i),outher:!0})}return t._constructValueFromQueries(e,o)}_getQueryFromExpression(e){const t=this,i=t.fields,a=t.dynamicField;let o=[],r=e;const l=function(e){let r=[];const l=t.customOperations.filter((e=>e.expressionTemplate));l.sort(((e,t)=>t.expressionTemplate.length-e.expressionTemplate.length));for(let t=0;t<l.length;t++){const i=l[t],a=new RegExp(i.expressionTemplate.replace(/\(/gm,"\\(").replace(/\)/gm,"\\)").replace(/\[/gm,"\\[").replace(/\]/gm,"\\]").replace(/"{\d+}"/gm,'\\W*"([^"]*)[^a-zA-Z0-9-\\s\\)]+').replace(/{\d+}/gm,"([@|$]*\\w+[.]*\\w+(?!\\s)*)\\s{0}").replace(/ /gm,"\\s"),"gm");if(a.test(e)){a.lastIndex=0;let t,o,l=a.exec(e);if(l=l.filter(((e,t)=>l.indexOf(e)===t)),i.expressionReaderCallback){let e=i.expressionReaderCallback(l[0],l.slice(1));e&&(t=e.fieldName,o=e.value)}void 0===t&&(t=l[1]||""),void 0===o&&(o=l[2]||""),r.push({operator:i.name,field:t,value:o,query:l[0]})}}let n=r.find((e=>i.find((t=>t.filterOperations.indexOf(e.operator)>-1&&t.dataField===e.field))));if(!n&&a)for(let e=0;e<r.length;e++){const t=r[e],i=a(t.field);if(i&&Array.isArray(i.filterOperations)&&i.filterOperations.indexOf(t.operator)>-1){n=t;break}}if(n)return o.push({expr:n.query,query:[n.field,n.operator,n.value]}),n.query};if(r){for(;r.length;){r&&(r=r.trim(),"("===r[0]&&")"===r[r.length-1]&&(r=r.trim().replace(/^\(|\)$/gm,"")),r=r.replace(/^&{2}|^\|{2}|&{2}$|\|{2}$/gm,"").trim());const e=l(r);if(!e)break;r=r.replace(e,"").trim()}return t._constructValueFromQueries(e,o)}}_constructValueFromQueries(e,t){let i=[];t.sort(((t,i)=>e.indexOf(t.expr)-e.indexOf(i.expr)));for(let a=0;a<t.length;a++){let o=t[a-1];if(o){const r=e.substring(e.indexOf(o.expr)+o.expr.length,e.indexOf(t[a].expr)).trim();i.push("||"===r?"or":"and")}t[a].outher?t[a].query.forEach((e=>i.push(Array.isArray(e)?[e]:e))):i.push(t[a].query)}return i}});
6
+ Smart("smart-query-builder",class extends Smart.BaseElement{static get properties(){return{allowDrag:{value:!1,type:"boolean"},autoPrompt:{value:!1,type:"boolean"},applyMode:{allowValues:["immediately","change"],value:"change",type:"string"},customOperations:{value:[],type:"array",reflectToAttribute:!1},customOperators:{value:{},type:"object",reflectToAttribute:!1},dropDownWidth:{type:"any",value:"auto"},fields:{value:null,type:"array?",reflectToAttribute:!1},fieldsMode:{value:"dynamic",allowedValues:["dynamic","static"],type:"string"},formatStringDate:{value:"dd-MMM-yy",type:"string"},formatStringDateTime:{value:"dd-MMM-yy HH:mm:ss",type:"string"},getDynamicField:{value:null,type:"function?"},icons:{value:{"=":"equals","<>":"notequals",">":"greaterthan",">=":"greaterthanorequal","<":"lessthan","<=":"lessthanorequal",startswith:"startswith",endswith:"endswith",contains:"contains",notcontains:"notcontains",isblank:"isblank",isnotblank:"isnotblank"},type:"object",reflectToAttribute:!1},messages:{value:{en:{add:"Add",addCondition:"Add Condition",addGroup:"Add Group",and:"And",notand:"Not And",or:"Or",notor:"Not Or","=":"Equals","<>":"Does not equal",">":"Greater than",">=":"Greater than or equal to","<":"Less than","<=":"Less than or equal to",startswith:"Starts with",endswith:"Ends with",contains:"Contains",notcontains:"Does not contain",isblank:"Is blank",isnotblank:"Is not blank",wrongParentGroupIndex:'{{elementType}}: Wrong parent group index in "{{method}}" method.',wrongElementNode:'{{elementType}}: Incorect node / node Id in "{{method}}" method.',invalidDataStructure:"{{elementType}}: Used invalid data structure in updateCondition/updateGroup method.",dateTabLabel:"DATE",timeTabLabel:"TIME",queryLabel:"Query"}},type:"object",extend:!0},operatorPlaceholder:{value:"Operator",type:"string"},propertyPlaceholder:{value:"Property",type:"string"},showIcons:{value:!1,type:"boolean"},showFieldNameArrow:{value:!1,type:"boolean"},validateOnInput:{value:!1,type:"boolean"},validationTimeout:{value:100,type:"number"},value:{value:[],type:"any",reflectToAttribute:!1},valueFormatFunction:{value:null,type:"function?",reflectToAttribute:!1},valuePlaceholder:{value:"Value",type:"string"}}}static get requires(){const e={"Smart.Button":"smart.button.js","Smart.Calendar":"smart.calendar.js","Smart.CheckBox":"smart.checkbox.js","Smart.DateTimePicker":"smart.datetimepicker.js","Smart.DropDownList":"smart.dropdownlist.js","Smart.Input":"smart.input.js","Smart.ListBox":"smart.listbox.js","Smart.Menu":"smart.menu.js","Smart.NumericTextBox":"smart.numerictextbox.js","Smart.ScrollBar":"smart.scrollbar.js","Smart.TimePicker":"smart.timepicker.js","Smart.Tooltip":"smart.tooltip.js","Smart.Utilities.BigNumber":"smart.math.js","Smart.Utilities.DateTime":"smart.date.js","Smart.Utilities.Draw":"smart.draw.js","Smart.Utilities.NumericProcessor":"smart.numeric.js"};return window.NIComplex||(e["Smart.Utilities.Complex"]="smart.complex.js"),e}static get listeners(){return{down:"_downHandler",resize:"_resizeHandler","editorsContainer.keydown":"_editorsContainerKeydownHandler","editorsContainer.keyup":"_editorsContainerKeyUpHandler","conditionsMenu.close":"_menuCloseHandler","conditionsMenu.closing":"_menuClosingHandler","conditionsMenu.itemClick":"_menuItemClickHandler","contentContainer.change":"_contentContainerChangeHandler","contentContainer.itemClick":"_contentContainerChangeHandler","scrollableContainer.touchmove":"_scrollableContainerTouchmoveHandler","document.down":"_documentDownHandler","document.move":"_documentMoveHandler","document.up":"_documentUpHandler"}}static get styleUrls(){return["smart.querybuilder.css"]}template(){return'<div id="container" role="presentation">\n <smart-scroll-viewer id="scrollableContainer" class="smart-scrollable-container" animation="[[animation]]" right-to-left="[[rightToLeft]]">\n <div id="queryLabel" class="smart-query-builder-label smart-unselectable"></div>\n <div id="contentContainer" class="smart-content-container"></div>\n </smart-scroll-viewer>\n <div id="editorsContainer" class="smart-editors-container" role="presentation">\n <div id="customEditor" class="smart-custom-editor smart-hidden"></div>\n </div>\n <smart-menu id="conditionsMenu" mode="dropDown" class="smart-conditions-menu" theme="[[theme]]" animation="[[animation]]" right-to-left="[[rightToLeft]]"></smart-menu>\n </div>'}propertyChangedHandler(e,t,a){super.propertyChangedHandler(e,t,a);const i=this;switch(e){case"animation":case"theme":["textBoxEditor","numericTextBoxEditor","comboBoxEditor","dateTimePickerEditor","checkBoxEditor"].forEach((t=>i.$[t]&&(i.$[t][e]=a)));break;case"formatStringDate":case"formatStringDateTime":case"valueFormatFunction":i._refresh();break;case"operatorPlaceholder":Array.from((i.shadowRoot||i).querySelectorAll(".smart-filter-operation[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=a));break;case"propertyPlaceholder":Array.from((i.shadowRoot||i).querySelectorAll(".smart-filter-field-name[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=a));break;case"showIcons":i._closeEditor(),a?i._filterOperationDescriptions.map((e=>e.icon=i.icons[e.value])):i._filterOperationDescriptions.map((e=>delete e.icon));break;case"customOperations":case"fields":case"value":{const t=JSON.stringify(i._validValue),o=i._queryParser;"customOperations"===e?i._handleCustomOperations():""===e&&i._mapFieldsToMenu(),i._applyValue(),"customOperations"!==e&&"fields"!==e||(o[e]=a),i._oldValueAsString!==t&&(i._oldValueAsString=JSON.stringify(i._validValue),i.$.fireEvent("change",{value:JSON.parse(i._oldValueAsString),linq:o.toLinq(i._validValue)}));break}case"valuePlaceholder":Array.from((i.shadowRoot||i).querySelectorAll(".smart-filter-value[placeholder]")).forEach((e=>e.firstElementChild.innerHTML=a));break;case"locale":case"messages":i._localizeInitialValues(),i._refresh(),i._handleCustomOperations(),i.$.dateTimePickerEditor&&(i.$.dateTimePickerEditor.messages[i.locale]||(i.$.dateTimePickerEditor.messages[i.locale]={}),i.$.dateTimePickerEditor.messages[i.locale].dateTabLabel=i.localize("dateTabLabel"),i.$.dateTimePickerEditor.messages[i.locale].timeTabLabel=i.localize("timeTabLabel"),"locale"===e?i.$.dateTimePickerEditor.locale=i.locale:"messages"===e&&(i.$.dateTimePickerEditor.$.selectDate.innerHTML=i.$.dateTimePickerEditor.messages[i.locale].dateTabLabel,i.$.dateTimePickerEditor.$.selectTime.innerHTML=i.$.dateTimePickerEditor.messages[i.locale].timeTabLabel));break;case"icons":i._closeEditor()}}ready(){super.ready();const e=this;e.$.queryLabel.id||(e.$.queryLabel.id=e.id+"Label"),e.setAttribute("role","dialog"),e.setAttribute("aria-labelledby",e.$.queryLabel.id),-1!==navigator.platform.toLowerCase().lastIndexOf("mac")&&e.$.contentContainer.classList.add("mac"),e._queryParser=new Smart.Utilities.QueryParser,e._setInitialValues(),e._handleCustomOperations(),e._applyValue(),Object.defineProperty(e,"value",{get:function(){return e.context===e?e.properties.value.value:e._validValue},set(t){e.updateProperty(e,e._properties.value,t)}})}getLinq(){const e=this;if(e._validValue)return e._queryParser.customOperations=e.customOperations,e._queryParser.fields=e.fields,e._queryParser.dynamicField="dynamic"===e.fieldsMode?e.getDynamicField:void 0,e._queryParser.toLinq(e._validValue)}get validationStatus(){const e=this;return!e.isReady||void 0===e._validationStatus||e._validationStatus}_setInitialValues(){const e=this;e._autoScrollCoefficient=Smart.Utilities.Core.Browser.Firefox?4:Smart.Utilities.Core.Browser.Edge?8:2,e._isMobile=Smart.Utilities.Core.isMobile,e._manuallyAddedFields=[],e._localizeInitialValues(),e.$.conditionsMenu.dropDownAppendTo=e.$.container,e.$.conditionsMenu.dataSource=e._groupOperationDescriptions,e._valueFlat=[],e._lastProcessedItemInCurrentGroup={parentId:null,id:null,position:null}}_applyValue(){const e=this;e._emptyElementsStructure(!0),e._validateValue(),e._convertValueToFlat(e.value),e._getFieldsFromValue(),e._mapFieldsToMenu(),e._validateValueByType(),e._generateHTMLStructureFromFlatValue(!0),e._restrictNesting(),e._validValue=e._getValidValue(),e._oldValueAsString=JSON.stringify(e._validValue)}_validateValueByType(){const e=this;if(!e._valueFlat||!e._valueFlat.length)return;const t=e._valueFlat;for(let a=0;a<t.length;a++){const i=t[a];if("condition"!==i.type)continue;const o=i.data[0];!o||i.data.length<3||(i.data[2]=e._validateStoredValue(i.data[2],o))}e._generateValue(!0)}_applyValidationOnInput(){const e=this,t=e._editor;if(!t||!e._editorIsOpen)return;const a=t.closest(".filter-builder-item"),i=t.closest(".smart-filter-group-condition");a&&a.classList.contains("smart-filter-value")&&(clearTimeout(e._valueValidationTimeout),e._valueValidationTimeout=setTimeout((()=>{const a=i.getAttribute("node-id"),o=e.value.toString();clearTimeout(e._valueValidationTimeout),e._closeEditor(),o===e.value.toString()&&e._generateValue();const l=e._getItemById(a);l&&(t.setAttribute("focus",""),e._openEditor(l.htmlNode.querySelector(".smart-filter-value"))),delete e._valueValidationTimeout}),e.validationTimeout))}_contentContainerChangeHandler(e){const t=this,a=e.type,i=e.target,o=t._editor,l=t._editorIsOpen,r=t.applyMode;if(e.stopPropagation(),"change"===a&&t.validateOnInput&&l&&i===o&&t._applyValidationOnInput(),"itemClick"===a&&i.value!==e.detail.label||"immediately"!==r||!l||!o||"immediately"===r&&i!==o)return;const n=t._editor.closest(".filter-builder-item");n.classList.contains("smart-filter-value")||(t._closeEditor(),t._handleAutoPrompt(n))}_handleAutoPrompt(e){const t=this;if(e&&t.autoPrompt&&"immediately"===t.applyMode&&!e.classList.contains("smart-filter-value")){const a=e.closest(".smart-filter-group-condition")||e.closest(".smart-filter-nested-operator")||e.closest(".smart-filter-group");if(!a)return;const i=t._getItemById(a.getAttribute("node-id")),o=a.querySelector(".smart-filter-value");if(!i||!o)return;t._clickHandlerFilterButton(e.classList,i.nodeId,o)}}_mapFieldsToMenu(){const e=this;(e.fields||e._valueFields)&&(e._fields=(e.fields||e._valueFields).concat(e._manuallyAddedFields).map((e=>({label:e.label,value:e.dataField,dataType:e.dataType,filterOperations:e.filterOperations,lookup:e.lookup}))))}_localizeInitialValues(){const e=this;e.$.queryLabel.innerHTML=e.localize("queryLabel"),e._addOptions=[{label:e.localize("addCondition"),value:"addCondition"},{label:e.localize("addGroup"),value:"addGroup"}],e._groupOperationDescriptions=[{label:e.localize("and"),value:"and"},{label:e.localize("or"),value:"or"}],e._defaultFilterOperationDescriptions=e._filterOperationDescriptions=[{label:e.localize("="),value:"=",custom:!1},{label:e.localize("<>"),value:"<>",custom:!1},{label:e.localize(">"),value:">",custom:!1},{label:e.localize(">="),value:">=",custom:!1},{label:e.localize("<"),value:"<",custom:!1},{label:e.localize("<="),value:"<=",custom:!1},{label:e.localize("startswith"),value:"startswith",custom:!1},{label:e.localize("endswith"),value:"endswith",custom:!1},{label:e.localize("contains"),value:"contains",custom:!1},{label:e.localize("notcontains"),value:"notcontains",custom:!1},{label:e.localize("isblank"),value:"isblank",custom:!1},{label:e.localize("isnotblank"),value:"isnotblank",custom:!1}];const t=Smart.Utilities.DateTime.getLocalizedNames(e.locale);e._localizedDays=t.days,e._localizedMonths=t.months}_handleCustomOperations(){const e=this;e._filterOperationDescriptions=e._defaultFilterOperationDescriptions.slice(0);for(let t=0;t<e.customOperations.length;t++){let a=e.customOperations[t],i=e._filterOperationDescriptions.findIndex((e=>e.value===a.name)),o={label:a.label,value:a.name,custom:!0,index:t,editorTemplate:a.editorTemplate,valueTemplate:a.valueTemplate,handleValue:a.handleValue,hideValue:a.hideValue,validateValue:a.validateValue};i>-1?e._filterOperationDescriptions[i]=o:e._filterOperationDescriptions.push(o)}}_editorsContainerKeydownHandler(e){const t=this;if(t._editorIsOpen&&("Escape"===e.key||"Enter"===e.key)){t._closeEditor();const e=t._editor.closest(".filter-builder-item");e&&!e.classList.contains("smart-filter-value")&&t._handleAutoPrompt(e)}}_editorsContainerKeyUpHandler(e){const t=this,a=t._editor;a&&a.contains(e.target)&&t._editorIsOpen&&t.validateOnInput&&t._applyValidationOnInput()}_documentDownHandler(e){const t=this,a=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target;if(a.shadowParent&&a.shadowParent.closest(".smart-input-drop-down-menu")||a.closest(".smart-input-drop-down-menu")||t.$.conditionsMenu.contains(a))return;const i=a.closest(".smart-drop-down");if(a.getRootNode().host===t||a.closest("smart-query-builder")===t||i&&t.contains(i.ownerElement))if(t._isMobile){const a=t.$.scrollableContainer.scrollTop,i=t.getBoundingClientRect().top;setTimeout((function(){if(t.$.scrollableContainer.scrollTop===a&&t.getBoundingClientRect().top===i){const a=t.context;t.context=t,t._clickHandler(e.originalEvent),t.context=a}}),250)}else t._clickHandler(e.originalEvent);else t._editorIsOpen&&!t._scrollBarDown&&t._closeEditor(),delete t._scrollBarDown}_emptyElementsStructure(e){const t=this,a=t.$.contentContainer;for(;a.firstChild;)a.removeChild(a.firstChild);t._valueFlat=e?[]:t._valueFlat,t._lastProcessedItemInCurrentGroup={parentId:null,id:null,position:null}}_resizeHandler(){this.$.scrollableContainer.refresh()}_getTotalConditions(){return this.getElementsByClassName("smart-filter-group-condition").length}_parseLinqToValue(){const e=this,t=e._queryParser;t&&(t.customOperations=e.customOperations,t.fields=e.fields,t.dynamicField="dynamic"===e.fieldsMode?e.getDynamicField:void 0,e.set("value",t.toValue(e.value)))}_validateValue(){const e=this;"string"==typeof e.value&&e._parseLinqToValue();const t=e.properties.value.value;if(Array.isArray(t)&&""!==JSON.stringify(t).replace(/[\[\]]/g,"")){for(3===t.length&&"string"==typeof t[0]&&(e.value=[[t]]),Array.isArray(t[0])&&3===t[0].length&&"string"==typeof t[0][0]&&(e.value=[t]);"string"==typeof t[0];)t.shift();for(;"string"==typeof t[t.length-1];)t.pop();e.value.forEach((e=>{Array.isArray(e)&&0===e.length&&e.push([])}))}else e.value=[[[]]]}_convertValueToFlat(e){const t=this,a=["and","or","notAnd","notOr"];if(!e)return;let i=0,o=0;t._valueFlat=[],function e(l,r){let n;for(let s=0;s<l.length;s++){const d=l[s];let c={htmlNode:null};if("string"==typeof d&&(a.indexOf(d)>-1||t.customOperators[d]))n=(t.customOperators[d]||d).trim();else if(n=n||"and",Array.isArray(d)){let a=t._valueFlat.filter((e=>e.parentId+""==r+"")).length;if(d.find((e=>Array.isArray(e))))c.nodeId=(o+=1)+"",c.type="group",c.data=n,t._valueFlat.push(c),e(d,c.nodeId),n="";else{if(t.maxConditions&&i>=t.maxConditions||t.maxConditionsPerGroup&&a>=t.maxConditionsPerGroup)continue;0!==s&&(t._valueFlat.push({nodeId:r+"."+a,type:"operator",data:n,parentId:r+""}),n="",a++),c.nodeId=r+"."+a,c.parentId=r+"",c.type="condition",c.data=d,i++,t._valueFlat.push(c)}}}}(e,0),delete t._totalGroups}_getFieldsFromValue(){const e=this._valueFlat,t=[],a=[];for(let o=0;o<e.length;o++){const l=e[o];if("condition"===l.type){const e=l.data[0];if(e&&-1===t.indexOf(e)){const o={label:e,dataField:e,dataType:(i=l.data[2],"boolean"==typeof i?"boolean":i instanceof Date?i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0?"dateTime":"date":isNaN(i)?"string":"number"),format:null};t.push(e),a.push(o)}}}var i;this._valueFields=a}_addElement(e,t,a,i){const o=this,l=o._valueFlat.filter((e=>e.parentId===t));let r=0,n="";if(a=a||("group"===e?"or":[]),l.length){let e=l.map((e=>{const t=e.nodeId.split(".");return parseInt(t[t.length-1])}));e=0===e.length?[0]:e,r=e.reduce(((e,t)=>Math.max(e,t)))+1}t&&t.length>0&&(n=".");let s=(t||"")+n+("group"===e?o._valueFlat.filter((e=>"group"===e.type)).length+1:r),d=l[0];if(l.length)for(let e=0;e<l.length;e++){const t=l[e],a=t.nodeId.split(".").pop();parseInt(a)>parseInt(d.nodeId.split(".").pop())&&(d=t)}else d=o._valueFlat.find((e=>e.nodeId===t));let c=d?o._valueFlat.indexOf(d)+1:o._valueFlat.length;"condition"===e&&l.length>0&&(o._valueFlat.splice(c,0,{nodeId:s,parentId:t,type:"operator",data:["and"],htmlNode:null}),s=(t||"")+n+(r+1),c++);const u={nodeId:s,parentId:t,type:e,data:a,htmlNode:null},p=o.autoPrompt;if("condition"===e&&p&&o._fields.length){const e=o._fields[0];if(e){const t=o._getFilterOperations(e);a[0]=e.value||e.label||"",t.length&&(a[1]=t[0].value)}}if(o._valueFlat.splice(c,0,u),"group"===e&&o._addElement("condition",s,[],!0),!i&&(o._refresh(),p&&u.htmlNode)){const e=u.htmlNode,t=e.querySelector(".smart-filter-value");t&&o._clickHandlerFilterButton(e.classList,u.nodeId,t)}}_deleteElement(e,t){const a=this,i="string"==typeof e?e:e.getAttribute("node-id");if(i&&1!==i.length&&("group"===t?r(i):l(i),!t||"condition"===t)){let e=i.split(".");if(e.pop(),e=e.join("."),!a._valueFlat.filter((t=>t.parentId===e)).length&&(a._valueFlat.filter((e=>"group"===e.type)).length>1&&r(e),"0"===e)){const e=a._valueFlat.find((e=>"group"===e.type)),t=e.nodeId;e.nodeId="0",e.htmlNode.setAttribute("node-id","0");const i=a._valueFlat.filter((e=>e.parentId===t));for(let e=0;e<i.length;e++){const t=i[e];t.parentId="0",t.nodeId="0."+e,t.htmlNode.setAttribute("node-id",t.nodeId)}}a._generateValue()}function o(e){const t=a._valueFlat[e];if(t&&"operator"===t.type)return a._valueFlat.splice(e,1),t.htmlNode.parentElement.removeChild(t.htmlNode),!0}function l(e){let t,i=0,l=e.split(".");l.pop(),l=l.join(".");for(let o=0;o<a._valueFlat.length;o++){const r=a._valueFlat[o];if("condition"===r.type){if(r.nodeId===e){t=r;break}r.parentId===l&&i++}}const r=a._valueFlat.indexOf(t);a._valueFlat.splice(r,1),t.htmlNode.parentElement.removeChild(t.htmlNode);const n=o(r-1);i||o(r-(n?1:0));const s=a._valueFlat.filter((e=>e.nodeId===l))[0].htmlNode;s.children[1].childElementCount>0&&s.children[2].hasAttribute("limit-selection")&&!s.children[1].lastElementChild.hasAttribute("limit-selection")&&s.children[2].removeAttribute("limit-selection")}function r(e){const t=a._valueFlat.filter((t=>e===t.nodeId&&"group"===t.type))[0];for(let t=0;t<a._valueFlat.length;t++){const i=a._valueFlat[t],o=i.nodeId;i.parentId===e&&("group"===i.type?r(o):l(o))}a._valueFlat.indexOf(t)>-1&&a._valueFlat.splice(a._valueFlat.indexOf(t),1),t.htmlNode.parentElement.removeChild(t.htmlNode)}}_generateHTMLStructureFromFlatValue(e){const t=this,a=document.createDocumentFragment();if(t._valueFlat&&0!==t._valueFlat.length){for(let e=0;e<t._valueFlat.length;e++){const i=t._valueFlat[e],o=!!t.customOperations&&t.customOperations.find((e=>e.name===i.data[1])),l=i.parentId?(t.shadowRoot||t).querySelector('[node-id="'+i.parentId+'"]').querySelector(".smart-filter-group-condition-container"):t.$.contentContainer;if("group"===i.type){const o=document.createElement("div"),l=t.localize(i.data)||"";o.className="smart-filter-group",o.innerHTML='<div class="smart-filter-group-operator" role="button" aria-expanded="false" aria-haspopup="menu">'+l+'</div><div class="smart-filter-group-condition-container" role="group"></div><div class="smart-filter-add-condition-btn" role="button" aria-label="Add condition"><div>'+t.localize("add")+'</div></div><div class="smart-filter-add-btn" role="button" aria-expanded="false" aria-haspopup="menu" aria-label="Add group"></div>',o.firstElementChild.data=l,a.appendChild(o),o.setAttribute("node-id",i.nodeId),t._valueFlat[e].htmlNode=o}else if("condition"===i.type){const l=t._newFilterConditionRow(i.data);if(l.setAttribute("node-id",i.nodeId),a.appendChild(l),t._valueFlat[e].htmlNode=l,void 0!==i.data[0]&&void 0===i.data[1]){const e=t._getFilterOperations(t._fields.find((e=>e.value===i.data[0])));t._handleOnlyOperation(e,i.data,l)}else(-1!==["isblank","isnotblank"].indexOf(i.data[1])||o&&o.hideValue)&&(i.data.splice(2,1),l.children[2].classList.add("smart-visibility-hidden"))}else{const o=document.createElement("div");o.className="smart-filter-nested-operator",o.setAttribute("node-id",i.nodeId),o.setAttribute("role","button"),o.setAttribute("aria-expanded",!1),o.setAttribute("aria-haspopup","menu"),o.innerHTML=t.localize(i.data),a.appendChild(o),t._valueFlat[e].htmlNode=o}l.appendChild(a)}e&&t._validateValueAdvanced(),t.$.scrollableContainer.refresh()}}_validateValueAdvanced(){const e=this,t=e.value;let a=!1,i=!1,o=0;for(let e=0;e<t.length;e++){const l=t[e];if("string"!=typeof l)for(let e=l.length-1;e>=0;e--){let t=l[e];if(Array.isArray(t)&&0===t.length&&e!==l.length-1)l.splice(e,1),0===e&&l.splice(0,1),a=!0;else if("string"==typeof t){t=t.toLowerCase(),o++,(o>1||"and"!==t&&"or"!==t)&&(i=!0);continue}o=0}}a&&(e._emptyElementsStructure(!0),e._convertValueToFlat(e.value),e._generateHTMLStructureFromFlatValue()),i&&e._generateValue(!0)}_restrictNesting(){Array.from(this.getElementsByClassName("smart-filter-add-condition-btn")).forEach((e=>{const t=e.previousElementSibling.lastElementChild;t&&t.hasAttribute("limit-selection")&&e.setAttribute("limit-selection","")}))}_clickHandler(e){const t=this,a=t.shadowRoot||t.isInShadowDOM?e.composedPath()[0]:e.target;if(t.disabled||!a||!a.closest||!t._isMobile&&0!==e.button)return;if(t._scrollBarDown)return void delete t._scrollBarDown;const i=a.closest(".smart-drop-down"),o=t._editor&&t._editor.contains(a)||i&&(t._editor.contains(i.ownerElement)||t._editor===i.ownerElement)||a.closest(".smart-custom-editor");t._editor&&t._editorIsOpen&&!o&&t._closeEditor();const l=a.closest(".smart-filter-group-condition")||a.closest(".smart-filter-nested-operator")||a.closest(".smart-filter-group");if(!l)return;const r=t._getItemById(l.getAttribute("node-id"));if(!r)return;if(t.$.fireEvent("itemClick",{id:r.nodeId,type:r.type,data:r.data}),a.closest(".smart-filter-delete-btn"))return void t._clickHandlerDeleteButton(r.htmlNode);const n=a.closest(".smart-filter-add-btn")||a.closest(".smart-filter-add-condition-btn");if(n){const e=n.closest(".smart-filter-group").getAttribute("node-id");return void(n.classList.contains("smart-filter-add-condition-btn")&&(t.maxConditions&&t._getTotalConditions()<t.maxConditions||!t.maxConditions)?t._addElement("condition",e,[]):t._clickHandlerFilterButton(n.classList,r.nodeId,a))}const s=a.closest(".filter-builder-item")||a.closest(".smart-filter-group-operator")||a.closest(".smart-filter-nested-operator");if(s){const e=s.classList;t._clickHandlerFilterButton(e,r.nodeId,a)}}_downHandler(e){const t=this;if(!e.originalEvent||!t._isMobile&&0!==e.button)return;const a=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target,i=t.rightToLeft?e.pageX>a.getBoundingClientRect().right:e.pageX<a.getBoundingClientRect().left;if(t.allowDrag&&a.classList.contains("smart-filter-group-condition")&&i){const i=t._valueFlat.filter((e=>"condition"===e.type));if(1===i.length||2===i.length&&i[0].parentId===i[1].parentId&&i[1].htmlNode.hasAttribute("limit-selection"))return;return t._dragDetails={coords:{x:e.pageX,y:e.pageY},item:a,originalEvent:e},t.$.scrollableContainer._scrollView.disableSwipeScroll=!0,t._hoveredCondition=a,void window.getSelection().removeAllRanges()}this._scrollBarDown=a.closest("smart-scroll-bar"),e.stopPropagation(),e.preventDefault()}_scrollableContainerTouchmoveHandler(e){this._dragDetails&&e.cancelable&&(e.preventDefault(),e.stopPropagation())}_documentMoveHandler(e){const t=this,a=t._dragDetails;if(!a)return;const i=a.item;if(!a.feedbackShown){if(!(Math.abs(a.coords.x-e.pageX)>5||Math.abs(a.coords.y-e.pageY)>5))return;{const o=t._valueFlat.filter((e=>e.htmlNode===i))[0];if(t.$.fireEvent("dragStart",{data:o.data,item:i,originalEvent:e}).defaultPrevented)return delete t._dragDetails,delete t._hoveredCondition,void(t.$.scrollableContainer._scrollView.disableSwipeScroll=!1);a.allConditions=Array.from((t.shadowRoot||t).querySelectorAll(".smart-filter-group-condition")),a.data=o,a.feedback=t._addDragFeedback(),a.feedbackShown=!0,i.classList.add("dragged")}}const o=e.clientY;let l,r=t.shadowRoot||t.isInShadowDOM?e.originalEvent.composedPath()[0]:e.originalEvent.target;if(t.$.fireEvent("dragging",{data:a.data,item:i,originalEvent:e}),t.setAttribute("dragging",""),a.feedback.style.left=e.pageX+10+"px",a.feedback.style.top=e.pageY+10+"px",t._isMobile){const a=t._hoveredCondition;a&&(a.classList.remove("drop-target","top","bottom"),delete t._hoveredCondition);const i=document.elementFromPoint(e.clientX,o);i&&(r=i)}let n,s=r.closest(".smart-filter-group-condition");if(s){l=s;const e=l.getBoundingClientRect(),t=Math.abs(o-e.top),a=Math.abs(o-e.bottom);n=t<a?"top":"bottom"}else{let e,t;a.allConditions.forEach((a=>{const i=a.getBoundingClientRect(),l=Math.abs(o-i.top),r=Math.abs(o-i.bottom),s=Math.min(l,r);(void 0===t||s<t)&&(e=a,t=s,n=l<r?"top":"bottom")})),s=e}if(s===i||s.hasAttribute("limit-selection")&&"bottom"===n)s=void 0;else{const e=Array.from(s.parentElement.getElementsByClassName("smart-filter-group-condition")),t=e.indexOf(i);-1!==t&&("top"===n&&s===e[t+1]||"bottom"===n&&s===e[t-1])&&(s=void 0)}if(l=s,a.side=n,clearInterval(t._dragInterval),t._dragInterval=setInterval((function(){const a=t.getBoundingClientRect();t.$.scrollableContainer.scrollHeight>0&&a.left<=e.clientX&&a.left+a.width>=e.clientX?o>=a.top&&o<=a.top+36?t.$.scrollableContainer.scrollTop-=t._autoScrollCoefficient:o>=a.top+a.height-36&&o<=a.top+a.height?t.$.scrollableContainer.scrollTop+=t._autoScrollCoefficient:clearInterval(t._dragInterval):clearInterval(t._dragInterval)}),1),l){t._hoveredCondition&&l!==t._hoveredCondition&&t._hoveredCondition.classList.remove("drop-target","top","bottom");const e=l.closest(".smart-filter-group");if(e&&e.hasAttribute("restricted"))return void(t._hoveredCondition=void 0);t._hoveredCondition=l,l.classList.remove("top","bottom"),l.classList.add(n,"drop-target")}else t._hoveredCondition&&(t._hoveredCondition.classList.remove("drop-target","top","bottom"),delete t._hoveredCondition)}_addDragFeedback(){const e=this,t=document.createElement("div");return e.rightToLeft?t.setAttribute("right-to-left",""):t.removeAttribute("right-to-left"),t.className="smart-query-builder-drag-feedback",e.theme&&t.setAttribute("theme",e.theme),document.body.appendChild(t),t}_documentUpHandler(e){const t=this,a=t._dragDetails;if(!a)return void(t.$.conditionsMenu.opened&&t._selectedElement&&!t._selectedElement.classList.contains("smart-filter-add-btn")&&t.$.conditionsMenu._hoverViaKeyboard(t.$.conditionsMenu.querySelector('smart-menu-item[value="'+t._editedItem.data+'"]')));const i=a.item,o=a.data,l=t._hoveredCondition;if(delete t._dragDetails,delete t._hoveredCondition,t.$.scrollableContainer._scrollView.disableSwipeScroll=!1,!t.hasAttribute("dragging"))return;if(clearInterval(t._dragInterval),window.getSelection().removeAllRanges(),t.removeAttribute("dragging"),i.classList.remove("dragged"),a.feedback.remove(),!l)return void t.$.fireEvent("dragEnd",{data:o.data,item:i,originalEvent:e,target:null,targetData:null,targetSide:null});const r=t._valueFlat.filter((e=>e.htmlNode===l))[0],n=t.$.fireEvent("dragEnd",{data:o.data,item:i,originalEvent:e,target:l,targetData:r.data,targetSide:a.side});if(l.classList.remove("drop-target","top","bottom"),n.defaultPrevented)return;const s=t.value,d=o.nodeId.split(".").map((e=>parseFloat(e))),c=s[2*(d[0]-1)],u=r.nodeId.split(".").map((e=>parseFloat(e))),p=s[2*(u[0]-1)];let m="and";c.length>1&&(0===d[1]?(m=c[1],c[1]="!remove!"):(m=c[d[1]-1],c[d[1]-1]="!remove!")),c[d[1]]="!remove!","top"===a.side?p.splice(u[1],0,o.data,m):p.splice(u[1]+1,0,m,o.data);for(let e=0;e<s.length;e++)Array.isArray(s[e])&&(s[e]=s[e].filter((e=>"!remove!"!==e)));for(let e=s.length-1;e>=0;e--)Array.isArray(s[e])&&0===s[e].length&&(0===e?s.splice(0,2):(s.splice(e-1,2),e--));t._emptyElementsStructure(!0),t._convertValueToFlat(s),t._generateHTMLStructureFromFlatValue(),t._validValue=t._getValidValue();const f=JSON.stringify(t._validValue);t._oldValueAsString!==f&&(t._oldValueAsString=f,t.$.fireEvent("change",{value:JSON.parse(f),linq:t._queryParser.toLinq(t._validValue)}))}_clickHandlerDeleteButton(e,t){const a=this;if(e&&e.classList){if(a._closeEditor(),1===a.getElementsByClassName("smart-filter-group-condition").length){const e=a._valueFlat[1].htmlNode.children;a.value=[[[]]],a._validValue=a._getValidValue(),a._valueFlat[1].data=[],a._valueFlat[1].htmlNode.setAttribute("limit-selection",""),e[0].setAttribute("placeholder",""),e[1].setAttribute("placeholder",""),e[2].setAttribute("placeholder",""),e[2].removeAttribute("invalid-value"),e[0].firstElementChild.innerHTML=a.propertyPlaceholder,e[1].firstElementChild.innerHTML=a.operatorPlaceholder,e[2].firstElementChild.innerHTML=a.valuePlaceholder;const t=JSON.stringify(a._validValue);return a._oldValueAsString!==t&&(a._oldValueAsString=t,a.$.fireEvent("change",{value:JSON.parse(t),linq:a._queryParser.toLinq(a._validValue)})),void a._restrictNesting()}if(e.classList.contains("smart-filter-group")){if(t&&a._valueFlat.filter((t=>t.parentId===e.getAttribute("node-id"))).length>0)return;a._deleteElement(e,"group")}else a._deleteElement(e);a._generateValue(),a.$.scrollableContainer.refresh(),Array.from(a.$.contentContainer.children).forEach(((e,t)=>{const i=(t+1).toString();e.setAttribute("node-id",i),a._valueFlat.filter((t=>t.htmlNode===e))[0].nodeId=i,Array.from(e.children[1].children).forEach(((e,t)=>{const o=a._valueFlat.filter((t=>t.htmlNode===e))[0],l=i+"."+t;e.setAttribute("node-id",l),o.parentId=i,o.nodeId=l}))}))}}_menuCloseHandler(){const e=this.$.conditionsMenu.controlledBy;e.setAttribute("aria-expanded",!1),e.removeAttribute("aria-controls"),delete this.$.conditionsMenu.controlledBy}_menuClosingHandler(e){const t=e.detail;"interaction"===t.trigger&&this._selectedElement===t.target&&e.preventDefault()}_menuItemClickHandler(e){const t=this,a=t._selectedElement.closest(".smart-filter-group-operator, .smart-filter-nested-operator"),i=e.detail,o=i.value;let l;if(a){a.innerHTML=t.localize(o)||i.label,a.value=o,l=a.classList.contains("smart-filter-nested-operator")?a.getAttribute("node-id"):a.parentElement.getAttribute("node-id");for(let e=0;e<t._valueFlat.length;e++)if(t._valueFlat[e].nodeId===l){t._valueFlat[e].data=a.value;break}t._generateValue()}else l=t._selectedElement.parentElement.getAttribute("node-id"),t._addElement("group",null,o);t.$.scrollableContainer.refresh()}_newFilterConditionRow(e=[]){const t=this,a=e[0];let i,o=t._fields.find((e=>e.value===a)),l=o?o.label:void 0;void 0===a||!l&&"static"===t.fieldsMode?e.length=0:(l||(o=t._getDynamicFieldInfo(a),l=o.label,e[0]=o.dataField),i=t._getFilterOperations(o).find((t=>t.value===e[1])),i&&(i=i.label));const r=t._formatValueStringRepresentation(e[2],e),n=t._validateValueField(void 0,e[1],e[2]);let s=document.createElement("div"),d="condition"+Math.floor(65536*(1+Math.random())).toString(16).substring(1),c='<div class="filter-builder-item smart-filter-field-name" id="'+d+'Field" '+(l?'><div class="smart-value-container" role="presentation">'+l:'placeholder><div class="smart-value-container" role="presentation">'+t.propertyPlaceholder)+'</div></div><div class="filter-builder-item smart-filter-operation" id="'+d+'Operation" '+(i?'><div class="smart-value-container" role="presentation">'+i:'placeholder><div class="smart-value-container" role="presentation">'+t.operatorPlaceholder)+'</div></div><div class="filter-builder-item smart-filter-value" id="'+d+'Value" '+(n?"":"invalid-value")+(void 0!==e[2]?'><div class="smart-value-container" role="presentation">'+r:'placeholder><div class="smart-value-container" role="presentation">'+t.valuePlaceholder)+'</div></div><div class="smart-filter-delete-btn" role="button" aria-label="Close"></div>';return s.className="smart-filter-group-condition",s.setAttribute("role","group"),s.innerHTML=c,t._setAriaLabel(s),e.length||s.setAttribute("limit-selection",""),s}_setAriaLabel(e){const t=[];for(let a=0;a<e.children.length-1;a++){const i=e.children[a];i.classList.contains("smart-visibility-hidden")||i.hasAttribute("placeholder")||t.push(e.children[a].innerText)}0!==t.length?e.setAttribute("aria-label",t.join(" ")):e.setAttribute("aria-label","Empty condition row")}_formatValueStringRepresentation(e,t){const a=this,i=t[2],o=t[0],l=a._getFieldByFieldName(o);let r,n=t[1];if(!l||!l.dataType)return e;if(null==e)return a.valuePlaceholder;if(void 0!==n&&a.customOperations&&a.customOperations.length>0&&(n=a.customOperations.find((e=>e.name===n)),n&&n.valueTemplate))return"<span>"+n.valueTemplate(a._editor,e)+"</span>";switch(l.dataType.toLowerCase()){case"date":case"datetime":(e=e instanceof Date||"string"==typeof e||"number"==typeof e&&!isNaN(e)?new Smart.Utilities.DateTime(e):e).calendar.days=a._localizedDays,e.calendar.months=a._localizedMonths,e.calendar.locale=a.locale,r=e.toString("date"===l.dataType?a.formatStringDate:a.formatStringDateTime);break;case"array":r="string"==typeof e?e.split(","):e;break;case"object":r="string"==typeof e?e:JSON.stringify(e);break;case"number":r=e;break;case"boolean":r=!!e;break;default:r=e+"",r=r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")}if(!a.valueFormatFunction)return"<span>"+r+"</span>";const s={label:r,value:i,dataField:o,dataType:l.dataType||"string"};return"<span>"+a.valueFormatFunction(s)+"</span>"}_getFieldByFieldName(e){return Object.assign({},this._fields.find((t=>t.value===e)))}_refresh(){const e=this;e._generateValue(),e._emptyElementsStructure(),e._generateHTMLStructureFromFlatValue(),e._restrictNesting()}_generateValue(e){const t=this;let a=[],i=t._valueFlat.slice(0),o=[];for(let e=0;e<i.length;e++){const t=i[e];let o={};"group"===t.type&&(o.nodeId=t.nodeId,o.parentId=t.parentId,o.data=t.data,o.structure=[],a.push(o))}for(let e=0;e<a.length;e++){const t=a[e];for(let e=0;e<i.length;e++){const a=i[e];if(a.parentId===t.nodeId&&"condition"===a.type){const o=i[e-1];o&&o.parentId===t.nodeId&&"operator"===o.type&&t.structure.push(o.data.toString()),t.structure.push(a.data)}}}a=a.filter((e=>e.structure.length>0)),a.sort((function(e,t){return t.nodeId.split(".").length-e.nodeId.split(".").length}));for(let e=0;e<a.length;e++){const t=a[e],i=a.filter((e=>e.nodeId===t.parentId))[0];i&&i.structure?i.structure.push(t.structure):"0"!==t.nodeId?t.data&&(e>0&&o.push(t.data),o.push(t.structure)):o=o.concat(t.structure)}if(t.set("value",o),t._validateValue(),t._validValue=t._getValidValue(),t._updateValidationStatus(),!e){const e=JSON.stringify(t._validValue);t._oldValueAsString!==e&&(t._oldValueAsString=e,t.$.fireEvent("change",{value:JSON.parse(e),linq:t._queryParser.toLinq(t._validValue)}))}}_updateValidationStatus(){const e=this,t=e.customOperations.filter((e=>"function"==typeof e.validateValue)),a=e._valueFlat,i=!!e._validationStatus;let o=!0;for(let e=0,i=a.length;e<i;e+=1){const i=a[e];if("condition"!==i.type)continue;const l=i.data[1],r=t.find((e=>e.name===l));if(r&&0==!!r.validateValue(i.data[2])){o=!1;break}}if(e._validationStatus!==o){const t=void 0!==e._validationStatus;e._validationStatus=o,t&&e.$.fireEvent("validationChange",{oldValue:i,newValue:o})}}_getItemById(e,t){const a=this._valueFlat.filter((a=>t?a.parentId===e:a.nodeId===e));return a.length>0?a[0]:null}_validateStoredValue(e,t){const a=this;if(!t&&!a._editedItem)return e;if(!t&&!(t=a._editedItem.data[0]))return e;const i=a._getFieldByFieldName(t).dataType;if(void 0===i)return e+"";switch(i.toLowerCase()){case"date":case"datetime":e=new Smart.Utilities.DateTime(e).toDate();break;case"number":"number"!=typeof e&&(e=parseFloat(e));break;case"boolean":"boolean"!=typeof e&&(e=!!e);break;case"object":"object"!=typeof e&&(e={});break;case"array":Array.isArray(e)||(e=[e]);break;default:"string"!=typeof e&&(e+="")}return e}_closeEditor(e){const t=this;let a;if(!t._editedItem||!t._editorIsOpen)return;const i=t._editedItem,o=t._editor.closest(".filter-builder-item"),l=o.querySelector(".smart-value-container"),r=o.parentElement,n=r.children[2];if(t._editor===t.$.dateTimePickerEditor)t._editor._inputChangeHandler(),a=t._editor.value,a&&(a=a.toDate());else if(t._editor===t.$.checkBoxEditor)a=t._editor.checked;else if(t._editor===t.$.customEditor)t._editor&&Array.from(t._editor.getElementsByTagName("smart-numeric-text-box")).forEach((e=>e._inputBlurHandler())),a=t._validateStoredValue(t._selectedCustomCondition.handleValue(t._editor));else if(t._editor===t.$.numericTextBoxEditor)t._editor._inputBlurHandler(),a=t._editor.value;else if(o.classList.contains("smart-filter-value")){const e=t._getFieldByFieldName(t._editedItem.data[0]);if("array"===e.dataType)a=t._editor.value.split(",");else if("object"===e.dataType)a=JSON.parse(t._editor.value);else{const i=t._editor.value;a=e.lookup&&e.lookup.dataSource?{label:i,value:t._editor.dataset.value||i}:i}}else a=t._editor.value;if(o.classList.contains("smart-filter-field-name")){if(""===a.trim())return void t._hideEditor(o,void 0===i.data[0]);r.hasAttribute("limit-selection")&&(r.removeAttribute("limit-selection"),r.parentElement.nextElementSibling.removeAttribute("limit-selection"));const e=t._fields.find((e=>e.label===a)),s=i.data[0];if(e)i.data[0]=e.value;else{if("dynamic"!==t.fieldsMode){const e=t._fields.find((e=>e.value===s));return e&&(l.innerHTML=e.label),void t._hideEditor(o)}{const e=t._getDynamicFieldInfo(a);a=e.label,i.data[0]=e.dataField}}l.innerHTML=a,t._handleFieldChange([s,i.data[0]],[n,i,r])}else if(o.classList.contains("smart-filter-operation"))t._handleOperationChange([i,a,t._editor.$.input.dataValue],[l,n]);else{let e,o;"object"==typeof a&&void 0!==a.value?(e=a.label,o=a.value,void 0===e&&(e=o)):e=o=a,i.data[2]=o,l.innerHTML=t._formatValueStringRepresentation(e,i.data)}t._validateValueField(n,i.data[1],i.data[2]),t._generateValue(e),t._hideEditor(o)}_validateValueField(e,t,a){const i=this.customOperations;let o=!0;if(e&&e.removeAttribute("invalid-value"),i&&i.length>0){const l=i.find((e=>e.name===t));l&&"function"==typeof l.validateValue&&(o=!!l.validateValue(a),!o&&e&&e.setAttribute("invalid-value",""))}return o}_getDynamicFieldInfo(e){const t=this,a={label:e,dataField:e,dataType:"string"};if(t.getDynamicField){const i=t.getDynamicField(e);i.label&&(a.label=i.label),i.dataField&&(a.dataField=i.dataField),i.dataType&&(a.dataType=i.dataType),i.filterOperations&&Array.isArray(i.filterOperations)&&i.filterOperations.length>0&&(a.filterOperations=i.filterOperations),i.lookup&&(a.lookup=i.lookup)}return t._manuallyAddedFields.push(a),t._mapFieldsToMenu(),a}_handleFieldChange(e,t){const a=this,i=e[0],o=t[1],l=t[2],r=t[0],n=a._fields.find((t=>t.value===e[1])),s=a._getFilterOperations(n),d=function(){n.value!==i&&a.$.fireEvent("propertySelected",{label:n.label,value:n.value})};if(!i||void 0===o.data[1])return a._handleOnlyOperation(s,o.data,l),void d();const c=a._fields.find((e=>e.value===i)),u=c.dataType,p=n.dataType;if(n!==c&&(p!==u||"enum"===p||n.filterOperations||c.filterOperations)){if(s.find((e=>e.value===o.data[1]))){if(p===u&&"enum"!==p)return;return"date"===p&&"dateTime"===u||"dateTime"===p&&"date"===u?(r.firstElementChild.innerHTML=a._formatValueStringRepresentation(o.data),void d()):(o.data.splice(2,1),r.setAttribute("placeholder",""),r.firstElementChild.innerHTML=a.valuePlaceholder,void d())}o.data.splice(1,2),l.children[1].setAttribute("placeholder",""),l.children[1].firstElementChild.innerHTML=a.operatorPlaceholder,r.setAttribute("placeholder",""),r.firstElementChild.innerHTML=a.valuePlaceholder,r.classList.remove("smart-visibility-hidden"),a._handleOnlyOperation(s,o.data,l),d()}}_handleOnlyOperation(e,t,a){const i=this.autoPrompt;if(1===e.length||i&&"immediately"===this.applyMode&&e.length>1){const i=e[0];t[1]=i.value,a.children[1].removeAttribute("placeholder",""),a.children[1].firstElementChild.innerHTML=e[0].label,("isblank"===i.value||"isnotblank"===i.value||i.custom&&i.hideValue)&&(t.splice(2,1),a.children[2].classList.add("smart-visibility-hidden"))}}_handleOperationChange(e,t){const a=this,i=e[0],o=e[1],l=e[2],r=t[0],n=t[1],s=void 0!==i.data[1]?a._filterOperationDescriptions.find((e=>e.value===i.data[1])):void 0,d=a._filterOperationDescriptions.find((e=>e.value===l));if(!d||d===s)return;const c=d.value;i.data[1]=c;const u=i.data[0],p=i.data[1],m=i.data[2];if(r.innerHTML=o,"isblank"===c||"isnotblank"===c||d.custom&&d.hideValue)i.data.splice(2,1),n.classList.add("smart-visibility-hidden");else if(n.classList.contains("smart-visibility-hidden"))n.setAttribute("placeholder",""),n.classList.remove("smart-visibility-hidden"),n.firstElementChild.innerHTML=a.valuePlaceholder;else if(d.custom){const e=a._getFieldByFieldName(u);if(d.editorTemplate){const t=d.editorTemplate(e.dataType,p,e);t&&(a.$.customEditor.innerHTML="",a.$.customEditor.appendChild(t))}d.valueTemplate?n.firstElementChild.innerHTML=d.valueTemplate(a.$.customEditor,m):void 0===m?(n.setAttribute("placeholder",""),n.firstElementChild.innerHTML=a.valuePlaceholder):n.firstElementChild.innerHTML=m}else void 0===m?(i.data.splice(2,1),n.setAttribute("placeholder",""),n.firstElementChild.innerHTML=a.valuePlaceholder):d.custom||(n.firstElementChild.innerHTML=a._formatValueStringRepresentation(m,i.data))}_hideEditor(e,t){const a=this;t&&e.setAttribute("placeholder",""),e.removeAttribute("edited"),a.$.editorsContainer.removeAttribute("open"),a._editor.close&&a._editor.close(),a._editor.classList.add("smart-hidden"),a._editorIsOpen=a._enterIsPressedInEditor=!1,a.$.scrollableContainer.refresh(),a._setAriaLabel(e.parentElement)}_clickHandlerFilterButton(e,t,a){const i=this;function o(e,t,a){i._contextMenuOptions=0===t.length?i._defaultFilterOperationDescriptions:t,i._handleContextMenu(e),i.$.conditionsMenu.opened&&(i.$.conditionsMenu._discardKeyboardHover(),i.$.conditionsMenu._hoverViaKeyboard(i.$.conditionsMenu.querySelector('smart-menu-item[value="'+a+'"]')))}a.closest(".smart-editors-container")||(i._closeEditor(),i._editedItem=i._getItemById(t),e.contains("smart-filter-add-btn")?o(a,i._groupOperationDescriptions):(e.contains("smart-filter-field-name")||i._editedItem.data&&i._editedItem.data.length)&&(e.contains("smart-filter-group-operator")||e.contains("smart-filter-nested-operator")?o(a,i._groupOperationDescriptions,i._editedItem.data):(a.closest(".filter-builder-item").removeAttribute("placeholder"),i._openEditor(a))))}_handleContextMenu(e){const t=this;if(t._selectedElement===e&&t.$.conditionsMenu.opened)return void t.$.conditionsMenu.close();if(t._closeEditor(),t.disableContextMenu)return void(t._selectedElement=e);const a=e.getBoundingClientRect(),i=t.getBoundingClientRect(),o=a.left+t.$.contentContainer.scrollLeft-i.left,l=a.top+t.$.contentContainer.scrollTop-i.top+a.height;e.hasAttribute("aria-haspopup")&&(t.$.conditionsMenu.controlledBy&&(t.$.conditionsMenu.controlledBy.setAttribute("aria-expanded",!1),t.$.conditionsMenu.controlledBy.removeAttribute("aria-controls")),e.setAttribute("aria-controls",t.$.conditionsMenu.id),e.setAttribute("aria-expanded",!0),t.$.conditionsMenu.controlledBy=e),t.$.conditionsMenu.dataSource=t._contextMenuOptions,t.$.conditionsMenu.open(o,l+3),t._selectedElement=e,t.$.scrollableContainer.refresh()}_openEditor(e){const t=this,a=e&&e.closest(".smart-filter-group-condition")?e.closest(".smart-filter-group-condition").getAttribute("node-id"):null,i=e.closest(".filter-builder-item"),o=t._getItemById(a);let l="";void 0!==o.data[0]?l=o.data[0]:t._fields.length&&(l=t._fields[0].value);let r,n,s=t._getFieldByFieldName(l),d="";if(i.classList.contains("smart-filter-field-name"))n=0,t._fields||t._mapFieldsToMenu(),s.lookup={dataSource:t._fields.slice(),readonly:!1},d=s.label||"",r=s.value;else if(i.classList.contains("smart-filter-operation")){n=1;let e=t._getFilterOperations(s);s.lookup={dataSource:e,readonly:!0};let a=e.find((e=>e.value===o.data[n]))||e[0];d=a.label,r=a.value}else n=2,d=o.data[n],void 0===d&&(d="");t._editorIsOpen&&t._closeEditor(),i.setAttribute("edited",""),t._editedItem=o;const c=t._fields.filter((e=>e.value===l)),u=t._filterOperationDescriptions.filter((e=>e.value===o.data[1]&&e.custom)),p=c.length>0?c[0]:null,m=s.lookup&&s.lookup.dataSource?"lookup":p?p.dataType:void 0;if(2===n&&0!==u.length&&u[0].editorTemplate?(t._selectedCustomCondition=u[0],t._openCustomEditor(m,d,s)):t._openEditorByFieldType(m,d,s,r),i.appendChild(t.$.editorsContainer),t._editor.classList.remove("smart-hidden"),t._editorIsOpen=!0,t.$.editorsContainer.setAttribute("open",""),t.$.scrollableContainer.refresh(),t._editor.classList.contains("smart-custom-editor")){const e=t.customOperations[t._selectedCustomCondition.index].onEditorOpen;e&&e(t._editor)}else requestAnimationFrame((()=>t._editor.focus()));s.lookup&&!t._valueValidationTimeout&&t._editor.open()}_getFilterOperations(e){const t=this;let a=t._filterOperationDescriptions.slice();if(e.filterOperations)a=t._filterOperationDescriptions.filter((t=>e.filterOperations.indexOf(t.value)>-1));else{let i;switch(e.dataType){case"date":case"dateTime":case"number":i=["=","<>","<",">","<=",">=","isblank","isnotblank"];break;case"boolean":i=["=","<>","isblank","isnotblank"];break;case"object":i=["isblank","isnotblank"];break;case"string":i=["contains","notcontains","startswith","endswith","=","<>","isblank","isnotblank"];break;default:i=["contains","notcontains","startswith","endswith","=","<>","<",">","<=",">=","isblank","isnotblank"]}a=t._filterOperationDescriptions.filter((e=>i.indexOf(e.value)>-1))}return t.showIcons&&a.map((e=>e.icon=t.icons[e.value])),a}_openCustomEditor(e,t,a){const i=this,o=i.customOperations[i._selectedCustomCondition.index].editorTemplate(e,t,a);i.$.customEditor.innerHTML="",o&&i.$.customEditor.appendChild(o),i._editor=i.$.customEditor}_openEditorByFieldType(e,t,a,i){const o=this;if(e)switch(e.toLowerCase()){case"boolean":return o._initializeEditor("checkBox"),void(o._editor.checked=!!t);case"date":case"datetime":return o._initializeEditor("dateTimePicker"),o._editor.formatString="date"===e?o.formatStringDate:o.formatStringDateTime,void(o._editor.value=t);case"number":return o._initializeEditor("numericTextBox"),void(o._editor.value=t||0)}if(o._initializeEditor("input"),o._editor.dropDownWidth=o.dropDownWidth,"lookup"===e){const i=a.lookup.minLength,l=a.lookup.dataSource;if(o._editor.autoCompleteDelay=a.lookup.autoCompleteDelay||100,o._editor.dropDownAppendTo=o.$.container,o._editor.dropDownButtonPosition=o.rightToLeft?"left":"right",o._editor.minLength=isNaN(i)||null===i?1:i,o._editor.readonly=!!a.lookup.readonly,"function"==typeof l?o._editor.dataSource=l:l instanceof Promise?l.then((e=>{if(!(o._editor instanceof Smart.Input))return;const a=o._editor.opened;o._editor.dataSource=e,e.length<12?o._editor.dropDownHeight="auto":o._editor.dropDownHeight=200,a&&(o._editor.open(),""===t&&o._editor.readonly&&e.length&&(o._editor.value=e[0].label||e[0]))})):(o._editor.dataSource=l,l.length<12?o._editor.dropDownHeight="auto":o._editor.dropDownHeight=200),"object"===e)t=JSON.stringify(t||{});else if(""===t&&o._editor.readonly){const e=o._editor.dataSource;if(Array.isArray(e)){const a=e[0];t=a&&(a.value||a.label)||""}else t=""}if(o._editor.isRendered){const e=o._editor.$.input.dataValue;null!=e&&e===t||(o._editor.value=void 0!==t?t+"":"")}else o._editor.value=void 0!==t?t+"":""}else o._editor.dataSource=[],o._editor.dropDownButtonPosition="none",o._editor.readonly=!1,o._editor.value=void 0!==t?t+"":"";i&&"object"!==e&&o._editor.isRendered&&(o._editor.$.input.dataValue=i)}_initializeEditor(e){const t=this;if(t.$[e+"Editor"])return void(t._editor=t.$[e+"Editor"]);const a=document.createElement("smart-"+Smart.Utilities.Core.toDash(e));"numericTextBox"===e?(a.spinButtons=!0,a.inputFormat="floatingPoint"):"dateTimePicker"===e&&(a.dropDownAppendTo=t.$.container,a.calendarButton=!0,a.dropDownDisplayMode="auto",a.enableMouseWheelAction=!0,a.locale=t.locale,a.autoClose=!0,a.messages[t.locale]||(a.messages[t.locale]={}),a.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),a.messages[t.locale].timeTabLabel=t.localize("timeTabLabel")),a.rightToLeft=t.rightToLeft,a.theme=t.theme,a.animation=t.animation,a.$.addClass("smart-hidden underlined"),t.$.editorsContainer.appendChild(a),t._editor=t.$[e+"Editor"]=a}_getValidValue(){const e=this,t=e.properties.value.value,a=[];let i=!1;return t.forEach((t=>{if(Array.isArray(t)){let o=!1,l=!1;const r=[];t.forEach((t=>{if(Array.isArray(t)){const a=t[0],i=t[1],n=t[2];if(void 0===a||void 0===i)return void(l=!0);if(void 0!==n||"isblank"===i||"isnotblank"===i)return o=!0,void r.push(t);const s=e._filterOperationDescriptions.find((e=>e.value===i));s.custom&&s.hideValue?(o=!0,r.push(t)):l=!0}else l?l=!1:r.push(t)})),o?("string"==typeof r[r.length-1]&&r.pop(),a.push(r)):i=!0}else i?i=!1:a.push(t)})),"string"==typeof a[a.length-1]&&a.pop(),a}}),Smart.Utilities.Assign("QueryParser",class{constructor(e,t,a){const i=this;i.customOperations=t||[],i.fields=e||[],i.dynamicField=a}toLinq(e){return Array.isArray(e)&&this._arePropertiesValid()?this._parseQueryToLinq(e):""}toValue(e){return"string"==typeof e&&this._arePropertiesValid()?this._parseLinqToValue(e):[]}_arePropertiesValid(){return Array.isArray(this.customOperations)?!!Array.isArray(this.fields)||(console.log('Invalid "fields" property.'),!1):(console.log('Invalid "customOperations" property.'),!1)}_parseQueryToLinq(e){const t=this,a={and:"&&",or:"||"};let i="";for(let o=0;o<e.length;o++){const l=e[o];if(Array.isArray(l))if(l.indexOf("and")>-1||l.indexOf("or")>-1||1===l.length&&Array.isArray(l[0])){const e=t._parseQueryToLinq(l);e?i+=l.length>1?"("+e+")":e:/\s(&|\|){2}\s$/gm.test(i)&&(i=i.replace(/\s(&|\|){2}\s$/gm,""))}else i+=t._getExpressionFromQuery(l)||"";else i&&(i+=" "+a[l]+" ")}return i}_getExpressionFromQuery(e){const t=e[0],a=e[1];let i=e[2];const o=this.customOperations.find((e=>e.name===a));return o&&o.expressionTemplate?("string"==typeof i&&i.includes('"')&&o.expressionTemplate.includes('"')&&(i=JSON.stringify(i).slice(1,-1)),o.expressionBuilderCallback?o.expressionBuilderCallback(t,a,i):o.expressionTemplate.replace("{0}",t).replace("{1}",i)):""}_parseLinqToValue(e){const t=this;let a,i=0,o=[];for(let t=0;t<e.length;t++)if("("===e[t])i++,void 0===a&&(a=t);else if(")"===e[t]&&i>0&&(i--,0===i)){let i=e.substring(a,t+1).trim();i.length&&(i.includes("&&")||i.includes("||"))&&o.push({expr:i}),a=void 0}let l,r=[];if(o.length)for(let a=0;a<o.length;a++){let i;o[a].query=t._getQueryFromExpression(o[a].expr),i=l?e.substring(e.indexOf(l)+l.length,e.indexOf(o[a].expr)).trim():e.substring(0,e.indexOf(o[a].expr)).trim(),i&&r.push(i),l=o[a].expr}l?r.push(e.substring(e.indexOf(l)+l.length).trim()):r.push(e.trim());for(let e=0;e<r.length;e++){const a=r[e].replace(/^&{2}|^\|{2}|&{2}$|\|{2}$/gm,"").trim();a.length&&o.push({expr:a,query:t._getQueryFromExpression(a),outher:!0})}return t._constructValueFromQueries(e,o)}_getQueryFromExpression(e){const t=this,a=t.fields,i=t.dynamicField;let o=[],l=e;const r=function(e){let l=[];const r=t.customOperations.filter((e=>e.expressionTemplate));r.sort(((e,t)=>t.expressionTemplate.length-e.expressionTemplate.length));for(let t=0;t<r.length;t++){const a=r[t],i=new RegExp(a.expressionTemplate.replace(/\(/gm,"\\(").replace(/\)/gm,"\\)").replace(/\[/gm,"\\[").replace(/\]/gm,"\\]").replace(/"{\d+}"/gm,'\\W*"([^"]*)[^a-zA-Z0-9-\\s\\)]+').replace(/{\d+}/gm,"([@|$]*\\w+[.]*\\w+(?!\\s)*)\\s{0}").replace(/ /gm,"\\s"),"gm");if(i.test(e)){i.lastIndex=0;let t,o,r=i.exec(e);if(r=r.filter(((e,t)=>r.indexOf(e)===t)),a.expressionReaderCallback){let e=a.expressionReaderCallback(r[0],r.slice(1));e&&(t=e.fieldName,o=e.value)}void 0===t&&(t=r[1]||""),void 0===o&&(o=r[2]||""),l.push({operator:a.name,field:t,value:o,query:r[0]})}}let n=l.find((e=>a.find((t=>t.filterOperations.indexOf(e.operator)>-1&&t.dataField===e.field))));if(!n&&i)for(let e=0;e<l.length;e++){const t=l[e],a=i(t.field);if(a&&Array.isArray(a.filterOperations)&&a.filterOperations.indexOf(t.operator)>-1){n=t;break}}if(n)return o.push({expr:n.query,query:[n.field,n.operator,n.value]}),n.query};if(l){for(;l.length;){l&&(l=l.trim(),"("===l[0]&&")"===l[l.length-1]&&(l=l.trim().replace(/^\(|\)$/gm,"")),l=l.replace(/^&{2}|^\|{2}|&{2}$|\|{2}$/gm,"").trim());const e=r(l);if(!e)break;l=l.replace(e,"").trim()}return t._constructValueFromQueries(e,o)}}_constructValueFromQueries(e,t){let a=[];t.sort(((t,a)=>e.indexOf(t.expr)-e.indexOf(a.expr)));for(let i=0;i<t.length;i++){let o=t[i-1];if(o){const l=e.substring(e.indexOf(o.expr)+o.expr.length,e.indexOf(t[i].expr)).trim();a.push("||"===l?"or":"and")}t[i].outher?t[i].query.forEach((e=>a.push(Array.isArray(e)?[e]:e))):a.push(t[i].query)}return a}});
@@ -1,6 +1,6 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
6
- Smart("smart-filter-panel",class extends Smart.BaseElement{static get properties(){return{buttons:{value:["clear","filter"],type:"array"},data:{value:null,type:"array?",reflectToAttribute:!1},dataField:{value:null,type:"string?"},dataSource:{value:null,type:"any",reflectToAttribute:!1},evaluateFilterExpression:{value:null,type:"function?",reflectToAttribute:!1},filterType:{value:"string",allowedValues:["numeric","string","date","boolean"],type:"string"},formatString:{value:"d",type:"string"},messages:{value:{en:{addCondition:"Add Condition",addGroup:"Add Group",and:"and",blanks:"(Blanks)",cancel:"Cancel",clear:"Clear",contains:"contains",containsCaseSensitive:"contains (case sensitive)",dateTabLabel:"DATE",doesNotContain:"does not contain",doesNotContainCaseSensitive:"does not contain (case sensitive)",empty:"empty",endsWith:"ends with",endsWithCaseSensitive:"ends with (case sensitive)",equal:"equal",equalCaseSensitive:"equal (case sensitive)",filter:"Filter",greaterThan:"greater than",greaterThanOrEqual:"greater than or equal",lessThan:"less than",lessThanOrEqual:"less than or equal",mismatchedProperties:'smartFilterPanel: The "filterType" and the data type of the selected "dataField" are mismatched.',missingProperty:'smartFilterPanel: When mode is \'excel\', either "data" and "dataField" or "dataSource" of type Array have to be set.',notEmpty:"not empty",notEqual:"not equal",notNull:"not null",null:"null ",or:"or",placeholderBoolean:"Select value",placeholderDate:"Enter date",placeholderNumber:"Enter number",placeholderTime:"Enter time",placeholderValue:"Enter value",selectAll:"(Select All)",showRows:"Show rows where:",startsWith:"starts with",startsWithCaseSensitive:"starts with (case sensitive)",matchCase:"Match Case",timeTabLabel:"TIME"}},type:"object",extend:!0},mode:{value:"default",allowedValues:["basic","default","excel"],type:"string"}}}static get listeners(){return{"cancelButton.click":"cancel","clearButton.click":"clear","filterButton.click":"filter"}}template(){return'<div id="container" class="smart-container" role="presentation">\n <div id="label" class="smart-filter-panel-label"></div>\n <div id="mainContainer" role="presentation"></div>\n <div id="buttonContainer" class="smart-filter-panel-button-container" role="presentation">\n <smart-button id="filterButton" class="primary" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="clearButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="cancelButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n </div>\n </div>'}static get styleUrls(){return["smart.grid.css","smart.dropdownlist.css","smart.menu.css","smart.filterpanel.css","smart.textbox.css"]}ready(){super.ready()}render(){const e=this,t=e.filterType;e.$.label.id||(e.$.label.id=e.id+"Label"),e.setAttribute("role","dialog"),e.setAttribute("aria-labelledby",e.$.label.id),e._localize(),e._setButtonsVisibility(),e._filterType=t+"Filter",e._filterHandler=new(Smart.Utilities[t.slice(0,1).toUpperCase()+t.slice(1)+"FilterHandler"])(e),super.render()}cancel(){const e=this;e._filterHandler[e.mode+"Cancel"](),e.$.fireEvent("cancel")}clear(){const e=this;e._filterHandler[e.mode+"Clear"](),e.$.fireEvent("clear")}reset(){const e=this;e.$.clearButton.removeAttribute("hover"),e.$.filterButton.removeAttribute("hover"),e.$.cancelButton.removeAttribute("hover"),e._filterHandler.firstInputMatchCase&&e._filterHandler.firstInputMatchCase.classList.remove("active"),e._filterHandler.secondInputMatchCase&&e._filterHandler.secondInputMatchCase.classList.remove("active"),e._filterHandler[e.mode+"Clear"](),e._filterHandler.filterObject=new Smart.Utilities.FilterGroup}getFilter(){if(this._filterHandler){const e=new Smart.Utilities.FilterGroup;for(let t in this._filterHandler.filterObject)e[t]=this._filterHandler.filterObject[t];return e}return null}evaluate(e){try{return this._filterHandler.evaluate(e)}catch(e){return!1}}filter(){const e=this;e._filterHandler[e.mode+"Filter"](),e.$.fireEvent("filter")}getState(){return this._filterHandler.cachedFilter}loadState(e){try{const t=this;t._filterHandler.cachedFilter=e,t._filterHandler[t.mode+"Cancel"]()}catch(e){}}propertyChangedHandler(e,t,a){super.propertyChangedHandler(e,t,a);const l=this,i=l._filterHandler;function s(){l.$.mainContainer.innerHTML="",function(){const e=["cachedFilter","caseSensitive","customExcelFilterObjects","customItems","dataSource","defaultListSelection","defaultListSource","displayMode","filterBuilder","filterBuilderObject","filterBuilderOperations","filterObject","firstInput","firstList","operationsMapping","operatorList","secondInput","secondList","timeOnly","tree"];e.forEach((function(t){delete i[e[t]]})),delete l._filterHandler}(),l._filterHandler=new(Smart.Utilities[l.filterType.slice(0,1).toUpperCase()+l.filterType.slice(1)+"FilterHandler"])(l)}switch(e){case"animation":case"disabled":case"rightToLeft":case"unfocusable":switch(l.mode){case"default":case"basic":[i.firstList,i.firstInput,i.logicalOperatorList,i.secondList,i.secondInput].forEach((function(t){t[e]=a}));break;case"excel":i.tree[e]=a;break;case"filterBuilder":i.filterBuilder[e]=a,i.caseSensitive&&(i.caseSensitive[e]=a)}break;case"buttons":l._setButtonsVisibility();break;case"data":case"dataField":"excel"!==l.mode||Array.isArray(l.dataSource)||s();break;case"dataSource":"excel"===l.mode&&s();break;case"filterType":l._filterType=a+"Filter",s();break;case"mode":s();break;case"formatString":if("date"!==l.filterType)return;switch(l.mode){case"default":case"basic":i.firstInput.formatString=a,i.secondInput.formatString=a;break;case"excel":s();break;case"filterBuilder":i.filterBuilder.formatStringDate=a,i.filterBuilder.formatStringDateTime=a}break;case"locale":case"messages":switch(l._localize(),l.mode){case"default":case"basic":{const t=i.firstList.selectedIndex,a=i.logicalOperatorList.selectedIndex,s=i.secondList.selectedIndex,r=[i.firstInput,i.secondInput];switch(i.setDefaults(),i.firstList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),i.logicalOperatorList.dataSource=[{value:0,label:l.localize("and")},{value:1,label:l.localize("or")}],i.secondList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),l.filterType){case"date":r.forEach((function(t){t.messages[l.locale]||(t.messages[l.locale]={});const a=l.localize("dateTabLabel");a&&(t.messages[l.locale].dateTabLabel=a);const i=l.localize("timeTabLabel");if(i&&(t.messages[l.locale].timeTabLabel=i),"locale"===e&&(t.locale=l.locale),"timePicker"===t._dropDownDisplayMode){const e=l.localize("placeholderTime");e&&(t.placeholder=e,t.placeholder=e)}else{const e=l.localize("placeholderDate");e&&(t.placeholder=e,t.placeholder=e)}}));break;case"numeric":r[0].placeholder=l.localize("placeholderNumber"),r[1].placeholder=l.localize("placeholderNumber");break;case"string":r[0].placeholder=l.localize("placeholderValue"),r[1].placeholder=l.localize("placeholderValue");break;case"boolean":r[0].placeholder=l.localize("placeholderBoolean"),r[1].placeholder=l.localize("placeholderBoolean")}i.firstList.selectedIndex=t,i.logicalOperatorList.selectedIndex=a,i.secondList.selectedIndex=s;break}case"excel":i.tree.selectAll.label=l.localize("selectAll"),i.tree.blanks&&(i.tree.blanks.label=l.localize("blanks"));break;case"filterBuilder":i.localizeFilterBuilder(),"messages"===e&&(i.filterBuilder._localizeInitialValues(),i.filterBuilder._refresh()),i.filterBuilder.$.scrollableContainer.refresh()}}}_localize(){const e=this;e.localize("showRows")&&(e.$.label.innerHTML=e.localize("showRows")),e.localize("filter")&&(e.$.filterButton.innerHTML=e.localize("filter")),e.localize("clear")&&(e.$.clearButton.innerHTML=e.localize("clear")),e.localize("cancel")&&(e.$.cancelButton.innerHTML=e.localize("cancel"))}_setButtonsVisibility(){const e=this,t=e.buttons;["cancel","clear","filter"].forEach((function(a){-1!==t.indexOf(a)?e["$"+a+"Button"].removeClass("smart-hidden"):e["$"+a+"Button"].addClass("smart-hidden")}))}}),Smart.Utilities.Assign("BaseFilterHandler",class{constructor(e){const t=this;if(t.basicFilter=t.defaultFilter,t.basicClear=t.defaultClear,t.basicCancel=t.defaultCancel,t.context=e,t.filterObject=new Smart.Utilities.FilterGroup,t.setDefaults(),"date"===e.filterType){const a=new Smart.Utilities.DateTime,l=e.formatString,i=a.getParseRegExp(a.calendar,l.replace(/y+/g,"yyyyy"));t.displayMode=Smart.Utilities.DateTime.detectDisplayMode(a,l,i),t.timeOnly="timePicker"===t.displayMode}"default"!==e.mode&&"basic"!==e.mode?(t.operationsMapping={"=":"EQUAL","<>":"NOT_EQUAL","<":"LESS_THAN",">":"GREATER_THAN","<=":"LESS_THAN_OR_EQUAL",">=":"GREATER_THAN_OR_EQUAL",isblank:"EMPTY",isnotblank:"NOT_EMPTY",contains:"CONTAINS",notcontains:"DOES_NOT_CONTAIN",startswith:"STARTS_WITH",endswith:"ENDS_WITH",NULL:"NULL",NOT_NULL:"NOT_NULL"},"excel"===e.mode?t.createExcelHTMLStructure():"filterBuilder"===e.mode&&t.createBuilderHTMLStructure()):t.createDefaultHTMLStructure()}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-less-than"></span>',value:"LESS_THAN",label:t.localize("lessThan")},{prefix:'<span class="smart-icon smart-icon-less-than-equal"></span>',value:"LESS_THAN_OR_EQUAL",label:t.localize("lessThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-greater-than"></span>',value:"GREATER_THAN",label:t.localize("greaterThan")},{prefix:'<span class="smart-icon smart-icon-greater-than-equal"></span>',value:"GREATER_THAN_OR_EQUAL",label:t.localize("greaterThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["<","=","<>","<=",">",">=","NULL","NOT_NULL"],e.defaultListSelection=2}createDefaultHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-input"),l=document.createElement("smart-input"),i=document.createElement("smart-input"),s=document.createDocumentFragment(),r=e=>{e.readonly=!0,e.dropDownButtonPosition="right"};a.classList.add("smart-filter-panel-list"),a.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),a.selectedIndex=e.defaultListSelection,r(a),l.classList.add("smart-filter-panel-operator-list"),l.dataSource=[{value:0,label:t.localize("and")},{value:1,label:t.localize("or")}],r(l),i.classList.add("smart-filter-panel-list"),i.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),i.selectedIndex=e.defaultListSelection,r(i),e.firstList=a,e.logicalOperatorList=l,e.secondList=i;const n=document.createElement("span");n.classList.add("smart-icon","smart-icon-font-size"),n.title=t.localize("matchCase");const c=document.createElement("span");c.classList.add("smart-icon","smart-icon-font-size"),c.title=t.localize("matchCase"),e.firstInputMatchCase=n,e.secondInputMatchCase=c,e.appendInputs(),e.firstInput.classList.add("smart-filter-panel-input"),e.secondInput.classList.add("smart-filter-panel-input"),"basic"===t.mode&&(e.secondList.classList.add("smart-hidden"),e.secondInput.classList.add("smart-hidden"),e.logicalOperatorList.classList.add("smart-hidden"),e.secondInputMatchCase.classList.add("smart-hidden")),l.dropDownHeight="auto",l.selectedIndex=0,[a,e.firstInput,e.firstInputMatchCase,l,i,e.secondInput,e.secondInputMatchCase].forEach((function(e){e.animation=t.animation,e.disabled=t.disabled,e.unfocusable=t.unfocusable,e.dropDownPosition="bottom",e.dropDownAppendTo="body",e.dropDownMaxHeight=200,e.rightToLeft=t.rightToLeft,s.appendChild(e)})),e.context.$.mainContainer.appendChild(s),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}cacheFilter(e,t,a){const l=this;l.cachedFilter={firstFilterComparison:e,firstFilterValue:l.firstInput.value,firstFilterCaseSensitive:l.firstInputMatchCase.classList.contains("active"),logicalOperator:t,secondFilterComparison:a,secondFilterValue:l.secondInput.value,secondFilterCaseSensitive:l.secondInputMatchCase.classList.contains("active")}}defaultFilter(){const e=this,t=e.context,a=e.getFilterInputValue(e.firstInput),l=parseFloat(e.logicalOperatorList.selectedValues[0]),i=e.getFilterInputValue(e.secondInput),s=e.filterObject;let r=e.firstList.selectedValues[0],n=e.secondList.selectedValues[0];s.clear();const c=e=>"CONTAINS"===e?"CONTAINS_CASE_SENSITIVE":"DOES_NOT_CONTAIN"===e?"DOES_NOT_CONTAIN_CASE_SENSITIVE":"STARTS_WITH"===e?"STARTS_WITH_CASE_SENSITIVE":"ENDS_WITH"===e?"ENDS_WITH_CASE_SENSITIVE":"EQUAL"===e?"EQUAL_CASE_SENSITIVE":"NOT_EQUAL"===e?"NOT_EQUAL_CASE_SENSITIVE":void 0;if(e.firstInputMatchCase.classList.contains("active")&&(r=c(r)),e.secondInputMatchCase.classList.contains("active")&&(n=c(n)),""!==a||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(r)){const i=s.createFilter(t._filterType,a,r,void 0,t.formatString,t.locale,"timePicker"===e.firstInput._dropDownDisplayMode);s.addFilter(l,i)}if(""!==i||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(n)){const a=s.createFilter(t._filterType,i,n,void 0,t.formatString,t.locale,"timePicker"===e.secondInput._dropDownDisplayMode);s.addFilter(l,a)}let o=e.firstList.selectedIndexes[0],d=e.secondList.selectedIndexes[0];const u=s.stringConditions;a&&"string"==typeof a&&(o=u.findIndex((e=>e===r))),i&&"string"==typeof i&&(d=u.findIndex((e=>e===n))),e.cacheFilter(o,e.logicalOperatorList.selectedIndexes[0],d)}getFilterInputValue(e){return e.value}excelFilter(){const e=this,t=e.context;if(Array.isArray(t.dataSource))return void e.customExcelFilter();const a=e.tree,l=e.filterObject;if(l.clear(),e.customItems=[],a._menuItems[0].selected)return void e.excelClear();const i=a.selectedIndexes;if(i.forEach((function(i){const s=a._menuItems[i];if(s instanceof Smart.TreeItem){const a=s.value;if(s.hasAttribute("default-item"))if(a instanceof Date){const i=new Smart.FilterGroup,s=new Date(a.getFullYear(),a.getMonth(),1),r=new Date(a.getFullYear(),a.getMonth()+1,0),n=i.createFilter(t._filterType,s,"GREATER_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly),c=i.createFilter(t._filterType,r,"LESS_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly);i.addFilter("and",n),i.addFilter("and",c),l.addFilter("or",i)}else{const i=e.getExcelComparison(a),s=l.createFilter(t._filterType,a,i,void 0,t.formatString,t.locale,e.timeOnly);l.addFilter("or",s)}else e.customItems.push(s)}})),0===i.length){const a=e.getExcelComparison("Empty Filter"),i=l.createFilter(t._filterType,"Empty Filter",a,void 0,t.formatString,t.locale,e.timeOnly);l.addFilter("or",i)}e.cachedFilter=i.slice(0)}customExcelFilter(){const e=this,t=e.tree;if(delete e.customExcelFilterObjects,t._menuItems[0].selected)return;const a=e.context,l=[],i=t.selectedIndexes;i.forEach((function(i){const s=t._menuItems[i];if(s instanceof Smart.TreeItem){let t=s.value;if(!Array.isArray(t))return;Array.isArray(t[0])||(t=[t]);const i=new Smart.Utilities.FilterGroup;for(let l=0;l<t.length;l++){const s=t[l],r=e.operationsMapping[s[1]],n=i.createFilter(a._filterType,s[2],r,void 0,a.formatString,a.locale,e.timeOnly);i.addFilter("and",n)}l.push(i)}})),e.customExcelFilterObjects=l,e.cachedFilter=i.slice(0)}getExcelComparison(e){return""===e?"NULL":"EQUAL"}filterBuilderFilter(){const e=this,t=e.filterBuilder.value,a="string"===e.context.filterType&&e.caseSensitive.checked,l={filters:[]};!function t(l,i){const s=new Smart.Utilities.FilterGroup,r=l[1];i.logicalOperator=r;for(let n=0;n<l.length;n++){if(1===n)continue;const c=l[n];if(Array.isArray(c))if(Array.isArray(c[0])){const e={filters:[]};i.filters.push(e),t(c,e)}else s.addFilter(r,e.createFilterBuilderFilter(s,c,a))}s.filters.length>0&&i.filters.push(s)}(t,l),e.filterBuilderObject=l,e.cachedFilter={filterBuilder:JSON.parse(JSON.stringify(e.filterBuilder.value),(function(e,t){return/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z$/.test(t)?new Date(t):t})),caseSensitive:a}}createFilterBuilderFilter(e,t,a){const l=this.context;let i=this.operationsMapping[t[1]];return a&&-1!==["CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","EQUAL"].indexOf(i)&&(i+="_CASE_SENSITIVE"),e.createFilter(l._filterType,t[2],i,void 0,l.formatString,l.locale,!1)}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value="",e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value="",e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}excelClear(){const e=this;0!==e.tree.offsetHeight&&e.tree.select("0"),e.filterObject.clear(),e.cachedFilter=e.tree.selectedIndexes.slice(0)}filterBuilderClear(){const e=this;e.filterBuilder.value=["and"],"string"===e.context.filterType&&(e.caseSensitive.checked=!1),e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}defaultCancel(){const e=this;let t=null,a=null;if(e.filterObject){const l=e.filterObject.stringConditions,i=e.filterObject.numericConditions,s=e.filterObject.booleanConditions,r=e.filterObject.dateConditions;t=l[e.cachedFilter.firstFilterComparison],a=l[e.cachedFilter.secondFilterComparison],e.cachedFilter.firstFilterValue&&"string"!=typeof e.cachedFilter.firstFilterValue&&(!0===e.cachedFilter.firstFilterValue||!1===e.cachedFilter.firstFilterValue?(t=s[e.cachedFilter.firstFilterComparison],a=s[e.cachedFilter.secondFilterComparison]):e.cachedFilter.firstFilterValue&&e.cachedFilter.firstFilterValue instanceof Date?(t=r[e.cachedFilter.firstFilterComparison],a=r[e.cachedFilter.secondFilterComparison]):(t=i[e.cachedFilter.firstFilterComparison],a=i[e.cachedFilter.secondFilterComparison]))}let l=-1;e.firstList.dataSource.find(((e,a)=>{if(e.value===t)return l=a,e}));let i=-1;e.secondList.dataSource.find(((e,t)=>{if(e.value===a)return i=t,e})),e.firstList.selectedIndexes=[l],e.firstInput.value=e.cachedFilter.firstFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[i],e.secondInput.value=e.cachedFilter.secondFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.cachedFilter.secondFilterCaseSensitive&&e.secondInputMatchCase.classList.add("active")}excelCancel(){const e=this;if(e.cachedFilter&&e.cachedFilter.firstFilterValue){const t=e.cachedFilter.firstFilterValue,a=e.cachedFilter.secondFilterValue,l=e.cachedFilter.firstFilterComparison,i=e.cachedFilter.secondFilterComparison;let s=e.filterObject.stringConditions;if(isNaN(parseFloat(t))||(s=e.filterObject.numericConditions),e.dataSource){let r=[];return e.dataSource.forEach(((e,n)=>{r.push("0."+n),e.label===t||e.label===a?("NOT_EQUAL"!==s[l]&&"DOES_NOT_CONTAIN"!==s[l]||r.pop(),"NOT_EQUAL"!==s[i]&&"DOES_NOT_CONTAIN"!==s[i]||r.pop()):e.label===t&&e.label===a||("EQUAL"!==s[l]&&"EQUAL_CASE_SENSITIVE"!==s[l]&&"CONTAINS"!==s[l]&&"ENDS_WITH"!==s[l]&&"STARTS_WITH"!==s[l]||r.pop(),"EQUAL"!==s[i]&&"EQUAL_CASE_SENSITIVE"!==s[i]&&"CONTAINS"!==s[i]&&"ENDS_WITH"!==s[i]&&"STARTS_WITH"!==s[i]||r.pop())})),void setTimeout((()=>{e.tree.selectedIndexes=r}))}}else if(e.cachedFilter&&e.cachedFilter.filters&&e.dataSource){let t=[];return e.dataSource.forEach(((a,l)=>{t.push("0."+l);let i=!1;e.cachedFilter.filters.forEach((e=>{e.value===a.label&&(i=!0)})),i||t.pop()})),void setTimeout((()=>{e.tree.selectedIndexes=t}))}e.tree.selectedIndexes=e.cachedFilter.slice(0)}filterBuilderCancel(){const e=this;e.filterBuilder.value=e.cachedFilter.filterBuilder,"string"===e.context.filterType&&(e.caseSensitive.checked=e.cachedFilter.caseSensitive)}createExcelHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-tree"),l={data:t.data,dataField:t.dataField,filterType:t._filterType};if(t.dataSource&&Array.isArray(t.dataSource))e.processCustomDataSource(a);else{if(t.data&&t.dataField||t.error(t.localize("missingProperty")),"date"===t.filterType){l.formatString=t.formatString,l.displayMode=e.displayMode,e.dataSource=e.filterObject.getUniqueValues(l,t);try{e.getHierarchicalDataSource(e.displayMode)}catch(e){t.error(t.localize("mismatchedProperties"))}e.timeOnly?a.classList.add("standard-excel"):a.classList.add("date-excel")}else e.dataSource=e.filterObject.getUniqueValues(l,t),a.classList.add("standard-excel");"function"==typeof t.dataSource&&(e.dataSource=t.dataSource(e.dataSource)||e.dataSource)}a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.dataSource=[{label:t.localize("selectAll"),value:"",items:e.dataSource,expanded:!0,selected:!0}],a.selectionMode="checkBox",a.hasThreeStates=!0,a.theme=t.theme,a.animation="none",a.toggleMode="arrow",a.rightToLeft=t.rightToLeft,a.addEventListener("collapsing",(function(e){1===e.detail.item.level&&e.preventDefault()})),a._onCompleted=function(){if(e.cachedFilter=a.selectedIndexes.slice(0),a.classList.contains("date-excel"))for(let e in a._menuItems){if("0"===e)continue;const t=a._menuItems[e];t.firstElementChild.style.paddingLeft=20*(t.level-1)-10+"px"}else a._menuItems[0].firstElementChild.style.paddingLeft=0;a.selectAll=a._menuItems[0],a.blanks=a.querySelector('[label="'+t.localize("blanks")+'"]')},e.tree=a,t.$.mainContainer.appendChild(a)}processCustomDataSource(e){const t=this.context.dataSource;e.classList.add("standard-excel"),this.dataSource=t}createBuilderHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-filter-builder"),l=t.dataField,i="numeric"===t.filterType?"number":t.filterType;if(e.filterBuilder=a,a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.value=["and"],a.fields=[{label:l,dataField:l,dataType:i,filterOperations:e.filterBuilderOperations}],e.localizeFilterBuilder(),t.$.mainContainer.appendChild(a),"string"===i){const a=document.createElement("smart-check-box");a.classList.add("case-sensitive"),a.innerHTML="Case sensitive",a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.checked=!1,e.caseSensitive=a,t.$.mainContainer.appendChild(a)}e.filterBuilderObject={filters:[]},e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}localizeFilterBuilder(){const e=this.context,t=this.filterBuilder;let a=t.messages[e.locale];a||(a={},t.messages[e.locale]=a),t.customOperations=[{name:"NULL",label:e.localize("null"),hideValue:!0},{name:"NOT_NULL",label:e.localize("notNull"),hideValue:!0}],a.addCondition=e.localize("addCondition"),a.addGroup=e.localize("addGroup"),a["<"]=e.localize("lessThan"),a["<="]=e.localize("lessThanOrEqual"),a["<>"]=e.localize("notEqual"),a["="]=e.localize("equal"),a[">"]=e.localize("greaterThan"),a[">="]=e.localize("greaterThanOrEqual"),a.and=e.localize("and"),a.contains=e.localize("contains"),a.endswith=e.localize("endsWith"),a.isblank=e.localize("empty"),a.isnotblank=e.localize("notEmpty"),a.notcontains=e.localize("doesNotContain"),a.or=e.localize("or"),a.startswith=e.localize("startsWith"),a.dateTabLabel=e.localize("dateTabLabel"),a.timeTabLabel=e.localize("timeTabLabel"),t.formatStringDate=e.formatString,t.formatStringDateTime=e.formatString,t.locale=e.locale,t.valuePlaceholder=e.localize("filterBuilderPlaceholder")}evaluate(e){const t=this,a=t.context;if("default"===a.mode||"basic"===a.mode)return t.filterObject.evaluate(e);if("excel"===a.mode){let l=!1;if(Array.isArray(a.dataSource)){if(!t.customExcelFilterObjects||0===t.customExcelFilterObjects.length)return!0;for(let a=0;a<t.customExcelFilterObjects.length;a++)l=l||t.customExcelFilterObjects[a].evaluate(e);return l}if(t.customItems&&t.customItems.length>0){if(t.filterObject.filters.length>0&&(l=t.filterObject.evaluate(e)),t.customItems&&a.evaluateFilterExpression)for(let i=0;i<t.customItems.length;i++){const s=a.evaluateFilterExpression(e,t.customItems[i].value);void 0!==s&&(l=l||s)}}else l=t.filterObject.evaluate(e);return l}return!t.filterBuilderObject.logicalOperator||function t(a){let l="and"===a.logicalOperator;for(let i=0;i<a.filters.length;i++){let s;s=a.filters[i]instanceof Smart.Utilities.FilterGroup?a.filters[i].evaluate(e):t(a.filters[i]),l="and"===a.logicalOperator?l&&s:l||s}return l}(t.filterBuilderObject)}}),Smart.Utilities.Assign("NumericFilterHandler",class extends Smart.Utilities.BaseFilterHandler{appendInputs(){let e=this,t=document.createElement("smart-number-input"),a=document.createElement("smart-number-input");t.placeholder=e.context.localize("placeholderNumber"),a.placeholder=e.context.localize("placeholderNumber"),t.nullable=!0,t.spinButtons=!0,t.value=null,a.nullable=!0,a.spinButtons=!0,a.value=null,e.firstInput=t,e.secondInput=a}getFilterInputValue(e){return null===e.value||""===e.value?"":parseFloat(e.value)}}),Smart.Utilities.Assign("StringFilterHandler",class extends Smart.Utilities.BaseFilterHandler{setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-empty"></span>',value:"EMPTY",label:t.localize("empty")},{prefix:'<span class="smart-icon smart-icon-not-empty"></span>',value:"NOT_EMPTY",label:t.localize("notEmpty")},{prefix:'<span class="smart-icon smart-icon-contains"></span>',value:"CONTAINS",label:t.localize("contains")},{prefix:'<span class="smart-icon smart-icon-does-not-contain"></span>',value:"DOES_NOT_CONTAIN",label:t.localize("doesNotContain")},{prefix:'<span class="smart-icon smart-icon-starts-with"></span>',value:"STARTS_WITH",label:t.localize("startsWith")},{prefix:'<span class="smart-icon smart-icon-ends-with"></span>',value:"ENDS_WITH",label:t.localize("endsWith")},{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["contains","isblank","isnotblank","notcontains","startswith","endswith","=","NULL","NOT_NULL"],e.defaultListSelection=2}appendInputs(){const e=this,t=document.createElement("input"),a=document.createElement("input");t.placeholder=e.context.localize("placeholderValue"),t.setAttribute("aria-label",t.placeholder),a.placeholder=e.context.localize("placeholderValue"),a.setAttribute("aria-label",a.placeholder),t.classList.add("smart-input"),a.classList.add("smart-input"),e.firstInput=t,e.secondInput=a,e.firstInputMatchCase.onclick=()=>{e.firstInputMatchCase.classList.toggle("active")},e.secondInputMatchCase.onclick=()=>{e.secondInputMatchCase.classList.toggle("active")};const l=(e,t,a)=>{if(0===e.selectedValues.length)return t.classList.remove("case-sensitive"),void a.classList.remove("case-sensitive");const l=e.selectedValues[0];t.classList.remove("case-sensitive"),a.classList.remove("case-sensitive"),["EQUAL","NOT_EQUAL","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH"].indexOf(l)>=0&&(t.classList.add("case-sensitive"),a.classList.add("case-sensitive"))};e.firstList.onchange=()=>{l(e.firstList,e.firstInput,e.firstInputMatchCase)},e.secondList.onchange=()=>{l(e.secondList,e.secondInput,e.secondInputMatchCase)},setTimeout((()=>{l(e.firstList,e.firstInput,e.firstInputMatchCase),l(e.secondList,e.secondInput,e.secondInputMatchCase)}),50)}getExcelComparison(e){return""===e?"EMPTY":"EQUAL_CASE_SENSITIVE"}}),Smart.Utilities.Assign("DateFilterHandler",class extends Smart.Utilities.BaseFilterHandler{appendInputs(){let e=this,t=e.context,a=document.createElement("smart-date-input"),l=document.createElement("smart-date-input");t.formatString&&!(t.formatString.indexOf("d")>=0||t.formatString.indexOf("M")>=0||t.formatString.indexOf("y")>=0)&&(a=document.createElement("smart-time-input"),l=document.createElement("smart-time-input")),a.calendarButton=!0,a.editMode="partial",a.formatString=t.formatString,a.dropDownDisplayMode="auto",a.locale=t.locale,a.autoClose=!0,a.messages[t.locale]||(a.messages[t.locale]={}),a.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),a.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),a.nullable=!0,a.value=null,l.autoClose=!0,l.calendarButton=!0,l.formatString=t.formatString,l.dropDownDisplayMode="auto",l.locale=t.locale,l.messages[t.locale]||(l.messages[t.locale]={}),l.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),l.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),l.nullable=!0,l.value=null,e.firstInput=a,e.secondInput=l}getFilterInputValue(e){if(null===e.value)return"";const t=e.getDate();return"calendar"===this.displayMode&&t.setHours(0,0,0),t}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value=null,e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value=null,e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}getHierarchicalDataSource(e){const t=this,a=t.dataSource,l={},i=[];let s;if("timePicker"!==e){""===a[a.length-1].value&&(s=a[a.length-1],a.pop()),a.forEach((function(e){const a=e.value,i=a.getFullYear(),s=new Intl.DateTimeFormat(t.context.locale,{month:"long"}).format(a);l[i]||(l[i]={}),l[i][s]||(l[i][s]=e.value)}));for(let e in l){const t={expanded:!0,label:e,items:[],customAttribute:"default-item"};i.push(t);for(let a in l[e]){const i={value:l[e][a],expanded:!0,label:a,items:[],customAttribute:"default-item"};t.items.push(i)}}s&&i.push(s),t.dataSource=i}}}),Smart.Utilities.Assign("BooleanFilterHandler",class extends Smart.Utilities.BaseFilterHandler{cacheFilter(e,t,a){const l=this;l.cachedFilter={firstFilterComparison:e,firstFilterValue:l.firstInput.selectedIndexes.slice(0),logicalOperator:t,secondFilterComparison:a,secondFilterValue:l.secondInput.selectedIndexes.slice(0)}}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["=","<>","NULL","NOT_NULL"],e.defaultListSelection=0}appendInputs(){const e=this,t=document.createElement("smart-input"),a=document.createElement("smart-input");t.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],t.placeholder=e.context.localize("placeholderBoolean"),t.selectedIndexes=[],t.selectionMode="zeroOrOne",t.readonly=!0,t.dropDownButtonPosition="right",a.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],a.placeholder=e.context.localize("placeholderBoolean"),a.selectedIndexes=[],a.selectionMode="zeroOrOne",a.readonly=!0,a.dropDownButtonPosition="right",e.firstInput=t,e.secondInput=a}getFilterInputValue(e){return 0===e.selectedValues.length?"":!0===e.selectedValues[0]}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.selectedIndexes=[],e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.selectedIndexes=[],e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}defaultCancel(){const e=this;e.firstList.selectedIndexes=[e.cachedFilter.firstFilterComparison],e.firstInput.selectedIndexes=e.cachedFilter.firstFilterValue,e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[e.cachedFilter.secondFilterComparison],e.secondInput.selectedIndexes=e.cachedFilter.secondFilterValue}});
6
+ Smart("smart-filter-panel",class extends Smart.BaseElement{static get properties(){return{buttons:{value:["clear","filter"],type:"array"},data:{value:null,type:"array?",reflectToAttribute:!1},dataField:{value:null,type:"string?"},dataSource:{value:null,type:"any",reflectToAttribute:!1},evaluateFilterExpression:{value:null,type:"function?",reflectToAttribute:!1},filterType:{value:"string",allowedValues:["numeric","string","date","boolean"],type:"string"},formatString:{value:"d",type:"string"},messages:{value:{en:{addCondition:"Add Condition",addGroup:"Add Group",and:"and",blanks:"(Blanks)",cancel:"Cancel",clear:"Clear",contains:"contains",containsCaseSensitive:"contains (case sensitive)",dateTabLabel:"DATE",doesNotContain:"does not contain",doesNotContainCaseSensitive:"does not contain (case sensitive)",empty:"empty",endsWith:"ends with",endsWithCaseSensitive:"ends with (case sensitive)",equal:"equal",equalCaseSensitive:"equal (case sensitive)",filter:"Filter",greaterThan:"greater than",greaterThanOrEqual:"greater than or equal",lessThan:"less than",lessThanOrEqual:"less than or equal",mismatchedProperties:'smartFilterPanel: The "filterType" and the data type of the selected "dataField" are mismatched.',missingProperty:'smartFilterPanel: When mode is \'excel\', either "data" and "dataField" or "dataSource" of type Array have to be set.',notEmpty:"not empty",notEqual:"not equal",notNull:"not null",null:"null ",or:"or",placeholderBoolean:"Select value",placeholderDate:"Enter date",placeholderNumber:"Enter number",placeholderTime:"Enter time",placeholderValue:"Enter value",selectAll:"(Select All)",showRows:"Show rows where:",startsWith:"starts with",startsWithCaseSensitive:"starts with (case sensitive)",matchCase:"Match Case",timeTabLabel:"TIME"}},type:"object",extend:!0},mode:{value:"default",allowedValues:["basic","default","excel"],type:"string"}}}static get listeners(){return{"cancelButton.click":"cancel","clearButton.click":"clear","filterButton.click":"filter"}}template(){return'<div id="container" class="smart-container" role="presentation">\n <div id="label" class="smart-filter-panel-label"></div>\n <div id="mainContainer" role="presentation"></div>\n <div id="buttonContainer" class="smart-filter-panel-button-container" role="presentation">\n <smart-button id="filterButton" class="primary" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="clearButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="cancelButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n </div>\n </div>'}static get styleUrls(){return["smart.grid.css","smart.dropdownlist.css","smart.menu.css","smart.filterpanel.css","smart.textbox.css"]}ready(){super.ready()}render(){const e=this,t=e.filterType;e.$.label.id||(e.$.label.id=e.id+"Label"),e.setAttribute("role","dialog"),e.setAttribute("aria-labelledby",e.$.label.id),e._localize(),e._setButtonsVisibility(),e._filterType=t+"Filter",e._filterHandler=new(Smart.Utilities[t.slice(0,1).toUpperCase()+t.slice(1)+"FilterHandler"])(e),super.render()}cancel(){const e=this;e._filterHandler[e.mode+"Cancel"](),e.$.fireEvent("cancel")}clear(){const e=this;e._filterHandler[e.mode+"Clear"](),e.$.fireEvent("clear")}reset(){const e=this;e.$.clearButton.removeAttribute("hover"),e.$.filterButton.removeAttribute("hover"),e.$.cancelButton.removeAttribute("hover"),e._filterHandler.firstInputMatchCase&&e._filterHandler.firstInputMatchCase.classList.remove("active"),e._filterHandler.secondInputMatchCase&&e._filterHandler.secondInputMatchCase.classList.remove("active"),e._filterHandler[e.mode+"Clear"](),e._filterHandler.filterObject=new Smart.Utilities.FilterGroup}getFilter(){if(this._filterHandler){const e=new Smart.Utilities.FilterGroup;for(let t in this._filterHandler.filterObject)e[t]=this._filterHandler.filterObject[t];return e}return null}evaluate(e){try{return this._filterHandler.evaluate(e)}catch(e){return!1}}filter(){const e=this;e._filterHandler[e.mode+"Filter"](),e.$.fireEvent("filter")}getState(){return this._filterHandler.cachedFilter}loadState(e){try{const t=this;t._filterHandler.cachedFilter=e,t._filterHandler[t.mode+"Cancel"]()}catch(e){}}propertyChangedHandler(e,t,a){super.propertyChangedHandler(e,t,a);const l=this,i=l._filterHandler;function s(){l.$.mainContainer.innerHTML="",function(){const e=["cachedFilter","caseSensitive","customExcelFilterObjects","customItems","dataSource","defaultListSelection","defaultListSource","displayMode","filterBuilder","filterBuilderObject","filterBuilderOperations","filterObject","firstInput","firstList","operationsMapping","operatorList","secondInput","secondList","timeOnly","tree"];e.forEach((function(t){delete i[e[t]]})),delete l._filterHandler}(),l._filterHandler=new(Smart.Utilities[l.filterType.slice(0,1).toUpperCase()+l.filterType.slice(1)+"FilterHandler"])(l)}switch(e){case"animation":case"disabled":case"rightToLeft":case"unfocusable":switch(l.mode){case"default":case"basic":[i.firstList,i.firstInput,i.logicalOperatorList,i.secondList,i.secondInput].forEach((function(t){t[e]=a}));break;case"excel":i.tree[e]=a;break;case"filterBuilder":i.filterBuilder[e]=a,i.caseSensitive&&(i.caseSensitive[e]=a)}break;case"buttons":l._setButtonsVisibility();break;case"data":case"dataField":"excel"!==l.mode||Array.isArray(l.dataSource)||s();break;case"dataSource":"excel"===l.mode&&s();break;case"filterType":l._filterType=a+"Filter",s();break;case"mode":s();break;case"formatString":if("date"!==l.filterType)return;switch(l.mode){case"default":case"basic":i.firstInput.formatString=a,i.secondInput.formatString=a;break;case"excel":s();break;case"filterBuilder":i.filterBuilder.formatStringDate=a,i.filterBuilder.formatStringDateTime=a}break;case"locale":case"messages":switch(l._localize(),l.mode){case"default":case"basic":{const t=i.firstList.selectedIndex,a=i.logicalOperatorList.selectedIndex,s=i.secondList.selectedIndex,r=[i.firstInput,i.secondInput];switch(i.setDefaults(),i.firstList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),i.logicalOperatorList.dataSource=[{value:0,label:l.localize("and")},{value:1,label:l.localize("or")}],i.secondList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),l.filterType){case"date":r.forEach((function(t){t.messages[l.locale]||(t.messages[l.locale]={});const a=l.localize("dateTabLabel");a&&(t.messages[l.locale].dateTabLabel=a);const i=l.localize("timeTabLabel");if(i&&(t.messages[l.locale].timeTabLabel=i),"locale"===e&&(t.locale=l.locale),"timePicker"===t._dropDownDisplayMode){const e=l.localize("placeholderTime");e&&(t.placeholder=e,t.placeholder=e)}else{const e=l.localize("placeholderDate");e&&(t.placeholder=e,t.placeholder=e)}}));break;case"numeric":r[0].placeholder=l.localize("placeholderNumber"),r[1].placeholder=l.localize("placeholderNumber");break;case"string":r[0].placeholder=l.localize("placeholderValue"),r[1].placeholder=l.localize("placeholderValue");break;case"boolean":r[0].placeholder=l.localize("placeholderBoolean"),r[1].placeholder=l.localize("placeholderBoolean")}i.firstList.selectedIndex=t,i.logicalOperatorList.selectedIndex=a,i.secondList.selectedIndex=s;break}case"excel":i.tree.selectAll&&(i.tree.selectAll.label=l.localize("selectAll")),i.tree.blanks&&(i.tree.blanks.label=l.localize("blanks"));break;case"filterBuilder":i.localizeFilterBuilder(),"messages"===e&&(i.filterBuilder._localizeInitialValues(),i.filterBuilder._refresh()),i.filterBuilder.$.scrollableContainer.refresh()}}}_localize(){const e=this;e.localize("showRows")&&(e.$.label.innerHTML=e.localize("showRows")),e.localize("filter")&&(e.$.filterButton.innerHTML=e.localize("filter")),e.localize("clear")&&(e.$.clearButton.innerHTML=e.localize("clear")),e.localize("cancel")&&(e.$.cancelButton.innerHTML=e.localize("cancel"))}_setButtonsVisibility(){const e=this,t=e.buttons;["cancel","clear","filter"].forEach((function(a){-1!==t.indexOf(a)?e["$"+a+"Button"].removeClass("smart-hidden"):e["$"+a+"Button"].addClass("smart-hidden")}))}}),Smart.Utilities.Assign("BaseFilterHandler",class{constructor(e){const t=this;if(t.basicFilter=t.defaultFilter,t.basicClear=t.defaultClear,t.basicCancel=t.defaultCancel,t.context=e,t.filterObject=new Smart.Utilities.FilterGroup,t.setDefaults(),"date"===e.filterType){const a=new Smart.Utilities.DateTime,l=e.formatString,i=a.getParseRegExp(a.calendar,l.replace(/y+/g,"yyyyy"));t.displayMode=Smart.Utilities.DateTime.detectDisplayMode(a,l,i),t.timeOnly="timePicker"===t.displayMode}"default"!==e.mode&&"basic"!==e.mode?(t.operationsMapping={"=":"EQUAL","<>":"NOT_EQUAL","<":"LESS_THAN",">":"GREATER_THAN","<=":"LESS_THAN_OR_EQUAL",">=":"GREATER_THAN_OR_EQUAL",isblank:"EMPTY",isnotblank:"NOT_EMPTY",contains:"CONTAINS",notcontains:"DOES_NOT_CONTAIN",startswith:"STARTS_WITH",endswith:"ENDS_WITH",NULL:"NULL",NOT_NULL:"NOT_NULL"},"excel"===e.mode?t.createExcelHTMLStructure():"filterBuilder"===e.mode&&t.createBuilderHTMLStructure()):t.createDefaultHTMLStructure()}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-less-than"></span>',value:"LESS_THAN",label:t.localize("lessThan")},{prefix:'<span class="smart-icon smart-icon-less-than-equal"></span>',value:"LESS_THAN_OR_EQUAL",label:t.localize("lessThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-greater-than"></span>',value:"GREATER_THAN",label:t.localize("greaterThan")},{prefix:'<span class="smart-icon smart-icon-greater-than-equal"></span>',value:"GREATER_THAN_OR_EQUAL",label:t.localize("greaterThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["<","=","<>","<=",">",">=","NULL","NOT_NULL"],e.defaultListSelection=2}createDefaultHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-input"),l=document.createElement("smart-input"),i=document.createElement("smart-input"),s=document.createDocumentFragment(),r=e=>{e.readonly=!0,e.dropDownButtonPosition="right"};a.classList.add("smart-filter-panel-list"),a.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),a.selectedIndex=e.defaultListSelection,r(a),l.classList.add("smart-filter-panel-operator-list"),l.dataSource=[{value:0,label:t.localize("and")},{value:1,label:t.localize("or")}],r(l),i.classList.add("smart-filter-panel-list"),i.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),i.selectedIndex=e.defaultListSelection,r(i),e.firstList=a,e.logicalOperatorList=l,e.secondList=i;const n=document.createElement("span");n.classList.add("smart-icon","smart-icon-font-size"),n.title=t.localize("matchCase");const c=document.createElement("span");c.classList.add("smart-icon","smart-icon-font-size"),c.title=t.localize("matchCase"),e.firstInputMatchCase=n,e.secondInputMatchCase=c,e.appendInputs(),e.firstInput.classList.add("smart-filter-panel-input"),e.secondInput.classList.add("smart-filter-panel-input"),"basic"===t.mode&&(e.secondList.classList.add("smart-hidden"),e.secondInput.classList.add("smart-hidden"),e.logicalOperatorList.classList.add("smart-hidden"),e.secondInputMatchCase.classList.add("smart-hidden")),l.dropDownHeight="auto",l.selectedIndex=0,[a,e.firstInput,e.firstInputMatchCase,l,i,e.secondInput,e.secondInputMatchCase].forEach((function(e){e.animation=t.animation,e.disabled=t.disabled,e.unfocusable=t.unfocusable,e.dropDownPosition="bottom",e.dropDownAppendTo="body",e.dropDownMaxHeight=200,e.rightToLeft=t.rightToLeft,s.appendChild(e)})),e.context.$.mainContainer.appendChild(s),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}cacheFilter(e,t,a){const l=this;l.cachedFilter={firstFilterComparison:e,firstFilterValue:l.firstInput.value,firstFilterCaseSensitive:l.firstInputMatchCase.classList.contains("active"),logicalOperator:t,secondFilterComparison:a,secondFilterValue:l.secondInput.value,secondFilterCaseSensitive:l.secondInputMatchCase.classList.contains("active")}}defaultFilter(){const e=this,t=e.context,a=e.getFilterInputValue(e.firstInput),l=parseFloat(e.logicalOperatorList.selectedValues[0]),i=e.getFilterInputValue(e.secondInput),s=e.filterObject;let r=e.firstList.selectedValues[0],n=e.secondList.selectedValues[0];s.clear();const c=e=>"CONTAINS"===e?"CONTAINS_CASE_SENSITIVE":"DOES_NOT_CONTAIN"===e?"DOES_NOT_CONTAIN_CASE_SENSITIVE":"STARTS_WITH"===e?"STARTS_WITH_CASE_SENSITIVE":"ENDS_WITH"===e?"ENDS_WITH_CASE_SENSITIVE":"EQUAL"===e?"EQUAL_CASE_SENSITIVE":"NOT_EQUAL"===e?"NOT_EQUAL_CASE_SENSITIVE":void 0;if(e.firstInputMatchCase.classList.contains("active")&&(r=c(r)),e.secondInputMatchCase.classList.contains("active")&&(n=c(n)),""!==a||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(r)){const i=s.createFilter(t._filterType,a,r,void 0,t.formatString,t.locale,"timePicker"===e.firstInput._dropDownDisplayMode);s.addFilter(l,i)}if(""!==i||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(n)){const a=s.createFilter(t._filterType,i,n,void 0,t.formatString,t.locale,"timePicker"===e.secondInput._dropDownDisplayMode);s.addFilter(l,a)}let o=e.firstList.selectedIndexes[0],d=e.secondList.selectedIndexes[0];const u=s.stringConditions;a&&"string"==typeof a&&(o=u.findIndex((e=>e===r))),i&&"string"==typeof i&&(d=u.findIndex((e=>e===n))),e.cacheFilter(o,e.logicalOperatorList.selectedIndexes[0],d)}getFilterInputValue(e){return e.value}excelFilter(){const e=this,t=e.context;if(Array.isArray(t.dataSource))return void e.customExcelFilter();const a=e.tree,l=e.filterObject;if(l.clear(),e.customItems=[],a._menuItems[0].selected)return void e.excelClear();const i=a.selectedIndexes;if(i.forEach((function(i){const s=a._menuItems[i];if(s instanceof Smart.TreeItem){const a=s.value;if(s.hasAttribute("default-item"))if(a instanceof Date){const i=new Smart.FilterGroup,s=new Date(a.getFullYear(),a.getMonth(),1),r=new Date(a.getFullYear(),a.getMonth()+1,0),n=i.createFilter(t._filterType,s,"GREATER_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly),c=i.createFilter(t._filterType,r,"LESS_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly);i.addFilter("and",n),i.addFilter("and",c),l.addFilter("or",i)}else{const i=e.getExcelComparison(a),s=l.createFilter(t._filterType,a,i,void 0,t.formatString,t.locale,e.timeOnly);l.addFilter("or",s)}else e.customItems.push(s)}})),0===i.length){const a=e.getExcelComparison("Empty Filter"),i=l.createFilter(t._filterType,"Empty Filter",a,void 0,t.formatString,t.locale,e.timeOnly);l.addFilter("or",i)}e.cachedFilter=i.slice(0)}customExcelFilter(){const e=this,t=e.tree;if(delete e.customExcelFilterObjects,t._menuItems[0].selected)return;const a=e.context,l=[],i=t.selectedIndexes;i.forEach((function(i){const s=t._menuItems[i];if(s instanceof Smart.TreeItem){let t=s.value;if(!Array.isArray(t))return;Array.isArray(t[0])||(t=[t]);const i=new Smart.Utilities.FilterGroup;for(let l=0;l<t.length;l++){const s=t[l],r=e.operationsMapping[s[1]],n=i.createFilter(a._filterType,s[2],r,void 0,a.formatString,a.locale,e.timeOnly);i.addFilter("and",n)}l.push(i)}})),e.customExcelFilterObjects=l,e.cachedFilter=i.slice(0)}getExcelComparison(e){return""===e?"NULL":"EQUAL"}filterBuilderFilter(){const e=this,t=e.filterBuilder.value,a="string"===e.context.filterType&&e.caseSensitive.checked,l={filters:[]};!function t(l,i){const s=new Smart.Utilities.FilterGroup,r=l[1];i.logicalOperator=r;for(let n=0;n<l.length;n++){if(1===n)continue;const c=l[n];if(Array.isArray(c))if(Array.isArray(c[0])){const e={filters:[]};i.filters.push(e),t(c,e)}else s.addFilter(r,e.createFilterBuilderFilter(s,c,a))}s.filters.length>0&&i.filters.push(s)}(t,l),e.filterBuilderObject=l,e.cachedFilter={filterBuilder:JSON.parse(JSON.stringify(e.filterBuilder.value),(function(e,t){return/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z$/.test(t)?new Date(t):t})),caseSensitive:a}}createFilterBuilderFilter(e,t,a){const l=this.context;let i=this.operationsMapping[t[1]];return a&&-1!==["CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","EQUAL"].indexOf(i)&&(i+="_CASE_SENSITIVE"),e.createFilter(l._filterType,t[2],i,void 0,l.formatString,l.locale,!1)}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value="",e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value="",e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}excelClear(){const e=this;0!==e.tree.offsetHeight&&e.tree.select("0"),e.filterObject.clear(),e.cachedFilter=e.tree.selectedIndexes.slice(0)}filterBuilderClear(){const e=this;e.filterBuilder.value=["and"],"string"===e.context.filterType&&(e.caseSensitive.checked=!1),e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}defaultCancel(){const e=this;let t=null,a=null;if(e.filterObject){const l=e.filterObject.stringConditions,i=e.filterObject.numericConditions,s=e.filterObject.booleanConditions,r=e.filterObject.dateConditions;t=l[e.cachedFilter.firstFilterComparison],a=l[e.cachedFilter.secondFilterComparison],e.cachedFilter.firstFilterValue&&"string"!=typeof e.cachedFilter.firstFilterValue&&(!0===e.cachedFilter.firstFilterValue||!1===e.cachedFilter.firstFilterValue?(t=s[e.cachedFilter.firstFilterComparison],a=s[e.cachedFilter.secondFilterComparison]):e.cachedFilter.firstFilterValue&&e.cachedFilter.firstFilterValue instanceof Date?(t=r[e.cachedFilter.firstFilterComparison],a=r[e.cachedFilter.secondFilterComparison]):(t=i[e.cachedFilter.firstFilterComparison],a=i[e.cachedFilter.secondFilterComparison]))}let l=-1;e.firstList.dataSource.find(((e,a)=>{if(e.value===t)return l=a,e}));let i=-1;e.secondList.dataSource.find(((e,t)=>{if(e.value===a)return i=t,e})),e.firstList.selectedIndexes=[l],e.firstInput.value=e.cachedFilter.firstFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[i],e.secondInput.value=e.cachedFilter.secondFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.cachedFilter.secondFilterCaseSensitive&&e.secondInputMatchCase.classList.add("active")}excelCancel(){const e=this;if(e.cachedFilter&&e.cachedFilter.firstFilterValue){const t=e.cachedFilter.firstFilterValue,a=e.cachedFilter.secondFilterValue,l=e.cachedFilter.firstFilterComparison,i=e.cachedFilter.secondFilterComparison;let s=e.filterObject.stringConditions;if(isNaN(parseFloat(t))||(s=e.filterObject.numericConditions),e.dataSource){let r=[];return e.dataSource.forEach(((e,n)=>{r.push("0."+n),e.label===t||e.label===a?("NOT_EQUAL"!==s[l]&&"DOES_NOT_CONTAIN"!==s[l]||r.pop(),"NOT_EQUAL"!==s[i]&&"DOES_NOT_CONTAIN"!==s[i]||r.pop()):e.label===t&&e.label===a||("EQUAL"!==s[l]&&"EQUAL_CASE_SENSITIVE"!==s[l]&&"CONTAINS"!==s[l]&&"ENDS_WITH"!==s[l]&&"STARTS_WITH"!==s[l]||r.pop(),"EQUAL"!==s[i]&&"EQUAL_CASE_SENSITIVE"!==s[i]&&"CONTAINS"!==s[i]&&"ENDS_WITH"!==s[i]&&"STARTS_WITH"!==s[i]||r.pop())})),void setTimeout((()=>{e.tree.selectedIndexes=r}))}}else if(e.cachedFilter&&e.cachedFilter.filters&&e.dataSource){let t=[];return e.dataSource.forEach(((a,l)=>{t.push("0."+l);let i=!1;e.cachedFilter.filters.forEach((e=>{e.value===a.label&&(i=!0)})),i||t.pop()})),void setTimeout((()=>{e.tree.selectedIndexes=t}))}e.tree.selectedIndexes=e.cachedFilter.slice(0)}filterBuilderCancel(){const e=this;e.filterBuilder.value=e.cachedFilter.filterBuilder,"string"===e.context.filterType&&(e.caseSensitive.checked=e.cachedFilter.caseSensitive)}createExcelHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-tree"),l={data:t.data,dataField:t.dataField,filterType:t._filterType};if(t.dataSource&&Array.isArray(t.dataSource))e.processCustomDataSource(a);else{if(t.data&&t.dataField||t.error(t.localize("missingProperty")),"date"===t.filterType){l.formatString=t.formatString,l.displayMode=e.displayMode,e.dataSource=e.filterObject.getUniqueValues(l,t);try{e.getHierarchicalDataSource(e.displayMode)}catch(e){t.error(t.localize("mismatchedProperties"))}e.timeOnly?a.classList.add("standard-excel"):a.classList.add("date-excel")}else e.dataSource=e.filterObject.getUniqueValues(l,t),a.classList.add("standard-excel");"function"==typeof t.dataSource&&(e.dataSource=t.dataSource(e.dataSource)||e.dataSource)}a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.dataSource=[{label:t.localize("selectAll"),value:"",items:e.dataSource,expanded:!0,selected:!0}],a.selectionMode="checkBox",a.hasThreeStates=!0,a.theme=t.theme,a.animation="none",a.toggleMode="arrow",a.rightToLeft=t.rightToLeft,a.addEventListener("collapsing",(function(e){1===e.detail.item.level&&e.preventDefault()})),a._onCompleted=function(){if(e.cachedFilter=a.selectedIndexes.slice(0),a.classList.contains("date-excel"))for(let e in a._menuItems){if("0"===e)continue;const t=a._menuItems[e];t.firstElementChild.style.paddingLeft=20*(t.level-1)-10+"px"}else a._menuItems[0].firstElementChild.style.paddingLeft=0;a.selectAll=a._menuItems[0],a.blanks=a.querySelector('[label="'+t.localize("blanks")+'"]')},e.tree=a,t.$.mainContainer.appendChild(a)}processCustomDataSource(e){const t=this.context.dataSource;e.classList.add("standard-excel"),this.dataSource=t}createBuilderHTMLStructure(){const e=this,t=e.context,a=document.createElement("smart-filter-builder"),l=t.dataField,i="numeric"===t.filterType?"number":t.filterType;if(e.filterBuilder=a,a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.value=["and"],a.fields=[{label:l,dataField:l,dataType:i,filterOperations:e.filterBuilderOperations}],e.localizeFilterBuilder(),t.$.mainContainer.appendChild(a),"string"===i){const a=document.createElement("smart-check-box");a.classList.add("case-sensitive"),a.innerHTML="Case sensitive",a.animation=t.animation,a.disabled=t.disabled,a.unfocusable=t.unfocusable,a.checked=!1,e.caseSensitive=a,t.$.mainContainer.appendChild(a)}e.filterBuilderObject={filters:[]},e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}localizeFilterBuilder(){const e=this.context,t=this.filterBuilder;let a=t.messages[e.locale];a||(a={},t.messages[e.locale]=a),t.customOperations=[{name:"NULL",label:e.localize("null"),hideValue:!0},{name:"NOT_NULL",label:e.localize("notNull"),hideValue:!0}],a.addCondition=e.localize("addCondition"),a.addGroup=e.localize("addGroup"),a["<"]=e.localize("lessThan"),a["<="]=e.localize("lessThanOrEqual"),a["<>"]=e.localize("notEqual"),a["="]=e.localize("equal"),a[">"]=e.localize("greaterThan"),a[">="]=e.localize("greaterThanOrEqual"),a.and=e.localize("and"),a.contains=e.localize("contains"),a.endswith=e.localize("endsWith"),a.isblank=e.localize("empty"),a.isnotblank=e.localize("notEmpty"),a.notcontains=e.localize("doesNotContain"),a.or=e.localize("or"),a.startswith=e.localize("startsWith"),a.dateTabLabel=e.localize("dateTabLabel"),a.timeTabLabel=e.localize("timeTabLabel"),t.formatStringDate=e.formatString,t.formatStringDateTime=e.formatString,t.locale=e.locale,t.valuePlaceholder=e.localize("filterBuilderPlaceholder")}evaluate(e){const t=this,a=t.context;if("default"===a.mode||"basic"===a.mode)return t.filterObject.evaluate(e);if("excel"===a.mode){let l=!1;if(Array.isArray(a.dataSource)){if(!t.customExcelFilterObjects||0===t.customExcelFilterObjects.length)return!0;for(let a=0;a<t.customExcelFilterObjects.length;a++)l=l||t.customExcelFilterObjects[a].evaluate(e);return l}if(t.customItems&&t.customItems.length>0){if(t.filterObject.filters.length>0&&(l=t.filterObject.evaluate(e)),t.customItems&&a.evaluateFilterExpression)for(let i=0;i<t.customItems.length;i++){const s=a.evaluateFilterExpression(e,t.customItems[i].value);void 0!==s&&(l=l||s)}}else l=t.filterObject.evaluate(e);return l}return!t.filterBuilderObject.logicalOperator||function t(a){let l="and"===a.logicalOperator;for(let i=0;i<a.filters.length;i++){let s;s=a.filters[i]instanceof Smart.Utilities.FilterGroup?a.filters[i].evaluate(e):t(a.filters[i]),l="and"===a.logicalOperator?l&&s:l||s}return l}(t.filterBuilderObject)}}),Smart.Utilities.Assign("NumericFilterHandler",class extends Smart.Utilities.BaseFilterHandler{appendInputs(){let e=this,t=document.createElement("smart-number-input"),a=document.createElement("smart-number-input");t.placeholder=e.context.localize("placeholderNumber"),a.placeholder=e.context.localize("placeholderNumber"),t.nullable=!0,t.spinButtons=!0,t.value=null,a.nullable=!0,a.spinButtons=!0,a.value=null,e.firstInput=t,e.secondInput=a}getFilterInputValue(e){return null===e.value||""===e.value?"":parseFloat(e.value)}}),Smart.Utilities.Assign("StringFilterHandler",class extends Smart.Utilities.BaseFilterHandler{setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-empty"></span>',value:"EMPTY",label:t.localize("empty")},{prefix:'<span class="smart-icon smart-icon-not-empty"></span>',value:"NOT_EMPTY",label:t.localize("notEmpty")},{prefix:'<span class="smart-icon smart-icon-contains"></span>',value:"CONTAINS",label:t.localize("contains")},{prefix:'<span class="smart-icon smart-icon-does-not-contain"></span>',value:"DOES_NOT_CONTAIN",label:t.localize("doesNotContain")},{prefix:'<span class="smart-icon smart-icon-starts-with"></span>',value:"STARTS_WITH",label:t.localize("startsWith")},{prefix:'<span class="smart-icon smart-icon-ends-with"></span>',value:"ENDS_WITH",label:t.localize("endsWith")},{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["contains","isblank","isnotblank","notcontains","startswith","endswith","=","NULL","NOT_NULL"],e.defaultListSelection=2}appendInputs(){const e=this,t=document.createElement("input"),a=document.createElement("input");t.placeholder=e.context.localize("placeholderValue"),t.setAttribute("aria-label",t.placeholder),a.placeholder=e.context.localize("placeholderValue"),a.setAttribute("aria-label",a.placeholder),t.classList.add("smart-input"),a.classList.add("smart-input"),e.firstInput=t,e.secondInput=a,e.firstInputMatchCase.onclick=()=>{e.firstInputMatchCase.classList.toggle("active")},e.secondInputMatchCase.onclick=()=>{e.secondInputMatchCase.classList.toggle("active")};const l=(e,t,a)=>{if(0===e.selectedValues.length)return t.classList.remove("case-sensitive"),void a.classList.remove("case-sensitive");const l=e.selectedValues[0];t.classList.remove("case-sensitive"),a.classList.remove("case-sensitive"),["EQUAL","NOT_EQUAL","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH"].indexOf(l)>=0&&(t.classList.add("case-sensitive"),a.classList.add("case-sensitive"))};e.firstList.onchange=()=>{l(e.firstList,e.firstInput,e.firstInputMatchCase)},e.secondList.onchange=()=>{l(e.secondList,e.secondInput,e.secondInputMatchCase)},setTimeout((()=>{l(e.firstList,e.firstInput,e.firstInputMatchCase),l(e.secondList,e.secondInput,e.secondInputMatchCase)}),50)}getExcelComparison(e){return""===e?"EMPTY":"EQUAL_CASE_SENSITIVE"}}),Smart.Utilities.Assign("DateFilterHandler",class extends Smart.Utilities.BaseFilterHandler{cacheFilter(e,t,a){const l=this;l.cachedFilter={firstFilterComparison:e,firstFilterValue:l.firstInput.getValue(),logicalOperator:t,secondFilterComparison:a,secondFilterValue:l.secondInput.getValue()}}appendInputs(){let e=this,t=e.context,a=document.createElement("smart-date-input"),l=document.createElement("smart-date-input");t.formatString&&!(t.formatString.indexOf("d")>=0||t.formatString.indexOf("M")>=0||t.formatString.indexOf("y")>=0)&&(a=document.createElement("smart-time-input"),l=document.createElement("smart-time-input")),a.calendarButton=!0,a.editMode="partial",a.formatString=t.formatString,a.dropDownDisplayMode="auto",a.locale=t.locale,a.autoClose=!0,a.messages[t.locale]||(a.messages[t.locale]={}),a.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),a.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),a.nullable=!0,a.value=null,l.autoClose=!0,l.calendarButton=!0,l.formatString=t.formatString,l.dropDownDisplayMode="auto",l.locale=t.locale,l.messages[t.locale]||(l.messages[t.locale]={}),l.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),l.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),l.nullable=!0,l.value=null,e.firstInput=a,e.secondInput=l}getFilterInputValue(e){if(null===e.value)return"";const t=e.getDate();return"calendar"===this.displayMode&&t&&t.setHours(0,0,0),t}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value=null,e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value=null,e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}getHierarchicalDataSource(e){const t=this,a=t.dataSource,l={},i=[];let s;if("timePicker"!==e){""===a[a.length-1].value&&(s=a[a.length-1],a.pop()),a.forEach((function(e){const a=e.value,i=a.getFullYear(),s=new Intl.DateTimeFormat(t.context.locale,{month:"long"}).format(a);l[i]||(l[i]={}),l[i][s]||(l[i][s]=e.value)}));for(let e in l){const t={expanded:!0,label:e,items:[],customAttribute:"default-item"};i.push(t);for(let a in l[e]){const i={value:l[e][a],expanded:!0,label:a,items:[],customAttribute:"default-item"};t.items.push(i)}}s&&i.push(s),t.dataSource=i}}}),Smart.Utilities.Assign("BooleanFilterHandler",class extends Smart.Utilities.BaseFilterHandler{cacheFilter(e,t,a){const l=this;l.cachedFilter={firstFilterComparison:e,firstFilterValue:l.firstInput.selectedIndexes.slice(0),logicalOperator:t,secondFilterComparison:a,secondFilterValue:l.secondInput.selectedIndexes.slice(0)}}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["=","<>","NULL","NOT_NULL"],e.defaultListSelection=0}appendInputs(){const e=this,t=document.createElement("smart-input"),a=document.createElement("smart-input");t.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],t.placeholder=e.context.localize("placeholderBoolean"),t.selectedIndexes=[],t.selectionMode="zeroOrOne",t.readonly=!0,t.dropDownButtonPosition="right",a.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],a.placeholder=e.context.localize("placeholderBoolean"),a.selectedIndexes=[],a.selectionMode="zeroOrOne",a.readonly=!0,a.dropDownButtonPosition="right",e.firstInput=t,e.secondInput=a}getFilterInputValue(e){return 0===e.selectedValues.length?"":!0===e.selectedValues[0]}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.selectedIndexes=[],e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.selectedIndexes=[],e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}defaultCancel(){const e=this;e.firstList.selectedIndexes=[e.cachedFilter.firstFilterComparison],e.firstInput.selectedIndexes=e.cachedFilter.firstFilterValue,e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[e.cachedFilter.secondFilterComparison],e.secondInput.selectedIndexes=e.cachedFilter.secondFilterValue}});
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- /* Smart UI v14.2.39 (2022-08-04)
2
+ /* Smart UI v14.2.89 (2022-09-14)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5