smart-webcomponents-react 11.0.55 → 12.0.0

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 (251) hide show
  1. package/index.d.ts +34 -0
  2. package/kanban/kanban.d.ts +16 -0
  3. package/kanban/kanban.esm.js +50 -1
  4. package/kanban/kanban.umd.js +50 -1
  5. package/package.json +1 -1
  6. package/source/modules/smart.accordion.js +1 -1
  7. package/source/modules/smart.array.js +1 -1
  8. package/source/modules/smart.breadcrumb.js +1 -1
  9. package/source/modules/smart.button.js +1 -1
  10. package/source/modules/smart.buttongroup.js +1 -1
  11. package/source/modules/smart.calendar.js +3 -3
  12. package/source/modules/smart.card.js +1 -1
  13. package/source/modules/smart.cardview.js +6 -6
  14. package/source/modules/smart.carousel.js +1 -1
  15. package/source/modules/smart.chart.js +3 -3
  16. package/source/modules/smart.checkbox.js +1 -1
  17. package/source/modules/smart.checkinput.js +2 -2
  18. package/source/modules/smart.chip.js +1 -1
  19. package/source/modules/smart.colorinput.js +2 -2
  20. package/source/modules/smart.colorpanel.js +1 -1
  21. package/source/modules/smart.colorpicker.js +1 -1
  22. package/source/modules/smart.combobox.js +1 -1
  23. package/source/modules/smart.common.js +4 -4
  24. package/source/modules/smart.countryinput.js +2 -2
  25. package/source/modules/smart.dateinput.js +3 -3
  26. package/source/modules/smart.daterangeinput.js +3 -3
  27. package/source/modules/smart.datetimepicker.js +3 -3
  28. package/source/modules/smart.dockinglayout.js +1 -1
  29. package/source/modules/smart.dropdownbutton.js +1 -1
  30. package/source/modules/smart.dropdownlist.js +1 -1
  31. package/source/modules/smart.editor.js +3 -3
  32. package/source/modules/smart.element.js +1 -1
  33. package/source/modules/smart.fileupload.js +1 -1
  34. package/source/modules/smart.form.js +2 -2
  35. package/source/modules/smart.formulaparser.js +1 -1
  36. package/source/modules/smart.ganttchart.js +7 -7
  37. package/source/modules/smart.gauge.js +2 -2
  38. package/source/modules/smart.grid.js +18 -18
  39. package/source/modules/smart.gridpanel.js +6 -6
  40. package/source/modules/smart.input.js +2 -2
  41. package/source/modules/smart.kanban.js +9 -9
  42. package/source/modules/smart.layout.js +1 -1
  43. package/source/modules/smart.led.js +1 -1
  44. package/source/modules/smart.listbox.js +1 -1
  45. package/source/modules/smart.listmenu.js +1 -1
  46. package/source/modules/smart.map.js +1 -1
  47. package/source/modules/smart.maskedtextbox.js +2 -2
  48. package/source/modules/smart.menu.js +1 -1
  49. package/source/modules/smart.multicomboinput.js +3 -3
  50. package/source/modules/smart.multiinput.js +2 -2
  51. package/source/modules/smart.multilinetextbox.js +1 -1
  52. package/source/modules/smart.multisplitbutton.js +1 -1
  53. package/source/modules/smart.numberinput.js +2 -2
  54. package/source/modules/smart.numerictextbox.js +1 -1
  55. package/source/modules/smart.pager.js +2 -2
  56. package/source/modules/smart.passwordinput.js +2 -2
  57. package/source/modules/smart.passwordtextbox.js +2 -2
  58. package/source/modules/smart.path.js +1 -1
  59. package/source/modules/smart.phoneinput.js +2 -2
  60. package/source/modules/smart.pivottable.js +6 -6
  61. package/source/modules/smart.progressbar.js +1 -1
  62. package/source/modules/smart.querybuilder.js +4 -4
  63. package/source/modules/smart.radiobutton.js +1 -1
  64. package/source/modules/smart.rating.js +1 -1
  65. package/source/modules/smart.router.js +2 -2
  66. package/source/modules/smart.scheduler.js +6 -6
  67. package/source/modules/smart.scrollbar.js +1 -1
  68. package/source/modules/smart.slider.js +2 -2
  69. package/source/modules/smart.sortable.js +1 -1
  70. package/source/modules/smart.splitter.js +1 -1
  71. package/source/modules/smart.switchbutton.js +1 -1
  72. package/source/modules/smart.table.js +6 -6
  73. package/source/modules/smart.tabs.js +1 -1
  74. package/source/modules/smart.tank.js +2 -2
  75. package/source/modules/smart.textarea.js +2 -2
  76. package/source/modules/smart.textbox.js +1 -1
  77. package/source/modules/smart.timeinput.js +2 -2
  78. package/source/modules/smart.timepicker.js +1 -1
  79. package/source/modules/smart.toast.js +1 -1
  80. package/source/modules/smart.tooltip.js +1 -1
  81. package/source/modules/smart.tree.js +1 -1
  82. package/source/modules/smart.validator.js +1 -1
  83. package/source/modules/smart.window.js +1 -1
  84. package/source/smart.accordion.js +1 -1
  85. package/source/smart.ajax.js +1 -1
  86. package/source/smart.array.js +1 -1
  87. package/source/smart.bootstrap.js +1 -1
  88. package/source/smart.breadcrumb.js +1 -1
  89. package/source/smart.button.js +1 -1
  90. package/source/smart.buttongroup.js +1 -1
  91. package/source/smart.calendar.js +1 -1
  92. package/source/smart.card.js +1 -1
  93. package/source/smart.cardview.js +1 -1
  94. package/source/smart.carousel.js +1 -1
  95. package/source/smart.chart.annotations.js +1 -1
  96. package/source/smart.chart.api.js +1 -1
  97. package/source/smart.chart.core.js +1 -1
  98. package/source/smart.chart.js +1 -1
  99. package/source/smart.chart.rangeselector.js +1 -1
  100. package/source/smart.chart.waterfall.js +1 -1
  101. package/source/smart.checkbox.js +1 -1
  102. package/source/smart.checkinput.js +1 -1
  103. package/source/smart.chip.js +1 -1
  104. package/source/smart.colorinput.js +1 -1
  105. package/source/smart.colorpanel.js +1 -1
  106. package/source/smart.colorpicker.js +1 -1
  107. package/source/smart.combobox.js +1 -1
  108. package/source/smart.complex.js +1 -1
  109. package/source/smart.core.js +1 -1
  110. package/source/smart.countryinput.js +1 -1
  111. package/source/smart.data.js +2 -2
  112. package/source/smart.date.js +2 -2
  113. package/source/smart.dateformatpanel.js +1 -1
  114. package/source/smart.dateinput.js +1 -1
  115. package/source/smart.daterangeinput.js +1 -1
  116. package/source/smart.datetimepicker.js +2 -2
  117. package/source/smart.dockinglayout.js +1 -1
  118. package/source/smart.draw.js +1 -1
  119. package/source/smart.dropdownbutton.js +1 -1
  120. package/source/smart.dropdownlist.js +1 -1
  121. package/source/smart.editor.js +1 -1
  122. package/source/smart.element.js +1 -1
  123. package/source/smart.elements.js +18 -18
  124. package/source/smart.export.js +2 -2
  125. package/source/smart.fileupload.js +1 -1
  126. package/source/smart.filter.js +1 -1
  127. package/source/smart.filterbuilder.js +1 -1
  128. package/source/smart.filterpanel.js +1 -1
  129. package/source/smart.form.js +1 -1
  130. package/source/smart.format.js +1 -1
  131. package/source/smart.formulaparser.js +1 -1
  132. package/source/smart.ganttchart.js +1 -1
  133. package/source/smart.gauge.js +1 -1
  134. package/source/smart.grid.cell.js +2 -2
  135. package/source/smart.grid.chart.js +1 -1
  136. package/source/smart.grid.column.js +2 -2
  137. package/source/smart.grid.core.js +2 -2
  138. package/source/smart.grid.dialog.js +2 -2
  139. package/source/smart.grid.edit.js +2 -2
  140. package/source/smart.grid.export.js +1 -1
  141. package/source/smart.grid.filter.js +1 -1
  142. package/source/smart.grid.group.js +1 -1
  143. package/source/smart.grid.js +1 -1
  144. package/source/smart.grid.menu.js +1 -1
  145. package/source/smart.grid.pager.js +1 -1
  146. package/source/smart.grid.reorder.js +1 -1
  147. package/source/smart.grid.resize.js +2 -2
  148. package/source/smart.grid.row.js +2 -2
  149. package/source/smart.grid.select.js +2 -2
  150. package/source/smart.grid.sort.js +1 -1
  151. package/source/smart.grid.toolbar.js +2 -2
  152. package/source/smart.grid.tree.js +1 -1
  153. package/source/smart.grid.view.js +2 -2
  154. package/source/smart.gridpanel.js +2 -2
  155. package/source/smart.input.js +2 -2
  156. package/source/smart.kanban.js +2 -2
  157. package/source/smart.layout.js +1 -1
  158. package/source/smart.led.js +1 -1
  159. package/source/smart.listbox.js +1 -1
  160. package/source/smart.listmenu.js +1 -1
  161. package/source/smart.map.js +1 -1
  162. package/source/smart.maskedtextbox.js +1 -1
  163. package/source/smart.math.js +1 -1
  164. package/source/smart.menu.js +1 -1
  165. package/source/smart.multicomboinput.js +2 -2
  166. package/source/smart.multiinput.js +1 -1
  167. package/source/smart.multilinetextbox.js +1 -1
  168. package/source/smart.multisplitbutton.js +1 -1
  169. package/source/smart.numberformatpanel.js +1 -1
  170. package/source/smart.numberinput.js +1 -1
  171. package/source/smart.numeric.js +1 -1
  172. package/source/smart.numerictextbox.js +1 -1
  173. package/source/smart.pager.js +1 -1
  174. package/source/smart.passwordinput.js +1 -1
  175. package/source/smart.passwordtextbox.js +1 -1
  176. package/source/smart.path.js +1 -1
  177. package/source/smart.phoneinput.js +1 -1
  178. package/source/smart.pivottable.js +1 -1
  179. package/source/smart.powerbutton.js +1 -1
  180. package/source/smart.progressbar.js +1 -1
  181. package/source/smart.radiobutton.js +1 -1
  182. package/source/smart.rating.js +1 -1
  183. package/source/smart.router.js +1 -1
  184. package/source/smart.scheduler.js +1 -1
  185. package/source/smart.scrollbar.js +1 -1
  186. package/source/smart.slider.js +1 -1
  187. package/source/smart.sortable.js +1 -1
  188. package/source/smart.splitter.js +1 -1
  189. package/source/smart.switchbutton.js +1 -1
  190. package/source/smart.table.js +1 -1
  191. package/source/smart.tabs.js +1 -1
  192. package/source/smart.tank.js +1 -1
  193. package/source/smart.textarea.js +1 -1
  194. package/source/smart.textbox.js +1 -1
  195. package/source/smart.tickintervalhandler.js +1 -1
  196. package/source/smart.timeinput.js +1 -1
  197. package/source/smart.timepicker.js +1 -1
  198. package/source/smart.toast.js +1 -1
  199. package/source/smart.tooltip.js +1 -1
  200. package/source/smart.tree.js +1 -1
  201. package/source/smart.validationpanel.js +1 -1
  202. package/source/smart.validator.js +1 -1
  203. package/source/smart.window.js +1 -1
  204. package/source/styles/components/smart.array.css +1 -1
  205. package/source/styles/components/smart.calendar.css +1 -1
  206. package/source/styles/components/smart.cardview.css +1 -1
  207. package/source/styles/components/smart.checkinput.css +1 -1
  208. package/source/styles/components/smart.colorinput.css +1 -1
  209. package/source/styles/components/smart.columnpanel.css +1 -1
  210. package/source/styles/components/smart.countryinput.css +1 -1
  211. package/source/styles/components/smart.dateinput.css +1 -1
  212. package/source/styles/components/smart.daterangeinput.css +1 -1
  213. package/source/styles/components/smart.datetimeformatpanel.css +1 -1
  214. package/source/styles/components/smart.editor.css +1 -1
  215. package/source/styles/components/smart.filterbuilder.css +1 -1
  216. package/source/styles/components/smart.filterpanel.css +1 -1
  217. package/source/styles/components/smart.ganttchart.css +1 -1
  218. package/source/styles/components/smart.grid.css +2 -2
  219. package/source/styles/components/smart.gridpanel.css +1 -1
  220. package/source/styles/components/smart.input.css +1 -1
  221. package/source/styles/components/smart.kanban.css +2 -2
  222. package/source/styles/components/smart.maskedtextbox.css +1 -1
  223. package/source/styles/components/smart.multicolumnfilterpanel.css +1 -1
  224. package/source/styles/components/smart.multicomboinput.css +1 -1
  225. package/source/styles/components/smart.multiinput.css +1 -1
  226. package/source/styles/components/smart.multilinetextbox.css +1 -1
  227. package/source/styles/components/smart.numberformatpanel.css +1 -1
  228. package/source/styles/components/smart.numberinput.css +1 -1
  229. package/source/styles/components/smart.pager.css +1 -1
  230. package/source/styles/components/smart.passwordinput.css +1 -1
  231. package/source/styles/components/smart.passwordtextbox.css +1 -1
  232. package/source/styles/components/smart.phoneinput.css +1 -1
  233. package/source/styles/components/smart.pivottable.css +1 -1
  234. package/source/styles/components/smart.querybuilder.css +1 -1
  235. package/source/styles/components/smart.scheduler.css +1 -1
  236. package/source/styles/components/smart.sortpanel.css +1 -1
  237. package/source/styles/components/smart.table.css +1 -1
  238. package/source/styles/components/smart.textarea.css +1 -1
  239. package/source/styles/components/smart.textbox.css +1 -1
  240. package/source/styles/components/smart.timeinput.css +1 -1
  241. package/source/styles/components/smart.validationpanel.css +1 -1
  242. package/source/styles/components/smart.window.css +1 -1
  243. package/source/styles/default/scss/smart.grid.scss +97 -36
  244. package/source/styles/default/scss/smart.kanban.scss +22 -0
  245. package/source/styles/default/scss/textbox/_multi-combo-input.scss +42 -1
  246. package/source/styles/default/smart.grid.css +77 -26
  247. package/source/styles/default/smart.kanban.css +18 -0
  248. package/source/styles/default/smart.textbox.css +28 -1
  249. package/source/styles/smart.default.css +3 -3
  250. package/source/typescript/smart.elements.d.ts +34 -0
  251. package/source/typescript/smart.kanban.d.ts +34 -0
@@ -1,6 +1,6 @@
1
1
 
2
- /* Smart UI v11.0.54 (2022-01-09)
2
+ /* Smart UI v12.0.0 (2022-01-16)
3
3
  Copyright (c) 2011-2021 jQWidgets.
4
4
  License: https://htmlelements.com/license/ */ //
5
5
 
6
- Smart("smart-kanban",class extends Smart.DataView{static get properties(){return{addNewButton:{value:!1,type:"boolean"},addNewButtonDisplayMode:{value:"both",allowedValues:["top","bottom","both"],type:"string"},addNewColumn:{value:!1,type:"boolean"},allowColumnEdit:{value:!1,type:"boolean"},allowColumnRemove:{value:!1,type:"boolean"},allowColumnReorder:{value:!1,type:"boolean"},allowDrag:{value:!0,type:"boolean",defaultReflectToAttribute:!0},allowDrop:{value:!0,type:"boolean",defaultReflectToAttribute:!0},autoLoadState:{value:!1,type:"boolean"},autoSaveState:{value:!1,type:"boolean"},currentUser:{value:null,type:"any"},dataSourceMap:{value:{checklist:"checklist",color:"color",comments:"comments",dueDate:"dueDate",id:"id",priority:"priority",progress:"progress",startDate:"startDate",status:"status",swimlane:"swimlane",tags:"tags",text:"text",description:"description",userId:"userId",history:"history",createdUserId:"createdUserId",createdDate:"createdDate",updatedUserId:"updatedUserId",updatedDate:"updatedDate"},type:"any",reflectToAttribute:!1},columnActions:{value:!1,type:"boolean"},columnColors:{value:!1,type:"boolean"},columnSummary:{value:!1,type:"boolean"},columnEditMode:{value:"headerAndMenu",allowedValues:["header","menu","headerAndMenu"],type:"string"},columnHeaderTemplate:{value:null,type:"any"},dragOffset:{value:"auto",type:"any"},formatStringDate:{value:"d",type:"string"},formatStringTime:{value:"MMM d, HH:mm",type:"string"},hierarchy:{value:"columns",allowedValues:["columns","tabs"],type:"string"},messages:{value:{en:{actionsIcon:"Actions icon",actionsList:"Open actions list",unassignedTask:"Unassigned task",assignedTask:"Assigned to {{userName}}",addNewStatus:"New status",addNewColumn:"Add new status",addNewTask:"Add new task",addSubtask:"Add subtask",assignedTo:"Assigned to",createdBy:"Created by",updatedBy:"Updated by",createdByDate:"Created",updatedByDate:"Updated",checklist:"Checklist",color:"Color",commentsIcon:"Comments icon",copy:"Copy",customize:"Customize tasks",customizeColumn:"Customize column",dueDate:"Due date",days:"days",edit:"Edit",editTask:"ID: {{taskId}} {{text}}",expand:"Expand column",collapse:"Collapse column",high:"High",low:"Low",critical:"Critical",newComment:"New comment",newSubtask:"New subtask",overdue:"Overdue",average:"Average",priority:"Priority",priorityIcon:"Priority icon",progress:"Progress",promptComment:"Are you sure you want to remove this comment?",promptTask:'Are you sure you want to remove the task "{{taskText}}"?',promptColumn:"Are you sure you want to remove this column?",remove:"Remove",removeSubtask:"Remove subtask",removeColumn:"Remove column",removeComment:"Remove comment",removeTask:"Remove task",send:"Send",startDate:"Start date",status:"Status",swimlane:"Swimlane",tags:"Tags",text:"Name",description:"Description",taskProgress:"Task progress: {{value}}%",taskCompleted:"Tasks completed: {{value}}",userId:"User ID",userIcon:"User icon",guestUser:"Guest",detailsTab:"Details",commentsTab:"Comments",fieldsTab:"Fields",historyTab:"History",subtasksTab:"Subtasks",historyEvent:"Event",historyAuthor:"Author",historyDetails:"Details",range:'From "{{oldValue}}" to "{{newValue}}"',nullRange:'Changed to "{{newValue}}"',historyDate:"Date",ok:"ok",cancel:"Cancel",delete:"Delete",taskDeadlineChanged:"Deadline changed",tagsChanged:"Tags changed",taskMoved:"Task moved",taskUpdated:"Task updated",taskCreated:"Task created",taskUserChanged:"Assignee changed",taskDescriptionChanged:"Description changed",taskSubtasksChanged:"Subtasks changed",taskProgressChanged:"Progress changed",taskPriorityChanged:"Priority changed",taskSubtasksCompleted:"Completed {{value}}",taskTagsChanged:"Tags changed",taskNameChanged:"Name changed",taskColorChanged:"Color changed"}}},priority:{value:[],type:"array",reflectToAttribute:!1},priorityList:{value:!0,type:"boolean"},selectionMode:{value:"zeroOrOne",allowedValues:["zeroOrOne","zeroOrManyExtended"],type:"string"},storeHistory:{value:!0,type:"boolean"},storeHistoryItems:{value:20,type:"number"},swimlanes:{value:[],type:"array",reflectToAttribute:!1},swimlanesFrom:{value:0,type:"number"},swimlanesTo:{value:null,type:"number?"},tags:{value:[],type:"array"},taskActions:{value:!1,type:"boolean"},taskComments:{value:!1,type:"boolean"},taskDue:{value:!1,type:"boolean"},taskPosition:{value:"all",allowedValues:["all","leaf"],type:"string"},taskPriority:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskProgress:{value:!1,type:"boolean"},taskTags:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskSubTasks:{allowedValues:["none","onePerRow","onlyUnfinished"],value:"none",type:"string"},taskSubTasksInput:{value:!0,type:"boolean"},taskUserIcon:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskCustomFields:{value:[],type:"array",reflectToAttribute:!1},taskColorEntireSurface:{value:!1,type:"boolean"},textTemplate:{value:null,type:"any"},userList:{value:!1,type:"boolean"},users:{value:[],type:"array",reflectToAttribute:!1}}}static get listeners(){return{"body.focusin":"_bodyFocusinHandler","container.click":"_containerClickHandler","container.down":"_containerDownHandler","container.keydown":"_containerKeydownHandler","container.touchmove":"_scrollViewerTouchmoveHandler"}}template(){const e=this._tabindex;return`<div id="container" role="presentation">\n <div id="header" class="smart-data-view-header" role="toolbar">\n <div id="customizeButton" class="smart-data-view-header-button smart-data-view-customize-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Customize tasks"><div role="presentation"></div></div>\n <div id="filterButton" class="smart-data-view-header-button smart-data-view-filter-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Filter"><div role="presentation"></div></div>\n <div id="sortButton" class="smart-data-view-header-button smart-data-view-sort-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Sort"><div role="presentation"></div></div>\n <div id="searchButton" class="smart-data-view-header-button smart-data-view-search-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Search"></div>\n <div id="headerDropDown" class="smart-data-view-header-drop-down smart-visibility-hidden" role="dialog">\n <div id="customize" class="smart-hidden" role="presentation"></div>\n <div id="filter" class="smart-hidden" role="presentation"></div>\n <div id="sort" class="smart-hidden" role="presentation"></div>\n <div id="search" class="smart-data-view-search-box smart-hidden" role="presentation">\n <input type="text" id="searchInput" spellcheck="false" aria-label="Search" />\n <div id="searchLabel" class="smart-data-view-search-label smart-unselectable"></div>\n <div id="searchPrev" class="smart-data-view-search-prev"${e} role="button" aria-label="Previous"></div>\n <div id="searchNext" class="smart-data-view-search-next"${e} role="button" aria-label="Next"></div>\n <div id="searchClose" class="smart-data-view-search-close"${e} role="button" aria-label="Close search box"></div>\n </div>\n </div>\n </div>\n <div id="body" class="smart-kanban-body" role="presentation"></div>\n </div>`}render(){const e=this;Object.defineProperty(e,"dataSource",{get:function(){return e.context===e?e.properties.dataSource.value:e._getCurrentDataSource()},set(t){e.updateProperty(e,e._properties.dataSource,t)}}),e._render(),super.render()}_getPriority(){const e=this;return(!e.priority||e.priority&&0===e.priority.length)&&(e.priority=[{label:e.localize("low"),value:"low"},{label:e.localize("average"),value:"average"},{label:e.localize("high"),value:"high"},{label:e.localize("critical"),value:"critical"}]),e.priority}_render(){const e=this,t=getComputedStyle(e);e.$.body.innerHTML="",e._autoScrollCoefficient=Smart.Utilities.Core.Browser.Firefox?4:Smart.Utilities.Core.Browser.Edge?8:2,e._kanbanTaskMinWidth=parseFloat(t.getPropertyValue("--smart-kanban-task-min-width")),e._dataViewPadding=parseFloat(t.getPropertyValue("--smart-data-view-padding")),e._allColumns=[],e._customTags=[],e._selectedTasks=[],e._dblclickObject={numberOfClicks:0},e._appliedFiltering={filterGroups:[],filters:[],operator:"and"},e._appliedSorting={dataFields:[],dataTypes:[],orderBy:[]},e._sortPanelDataSource=[{label:e.localize("text"),dataField:"text",dataType:"string"},{label:e.localize("userId"),dataField:"userId",dataType:"string"},{label:e.localize("tags"),dataField:"tags",dataType:"string"},{label:e.localize("priority"),dataField:"priority",dataType:"string"},{label:e.localize("progress"),dataField:"progress",dataType:"number"},{label:e.localize("startDate"),dataField:"startDate",dataType:"date"},{label:e.localize("dueDate"),dataField:"dueDate",dataType:"date"}],e._getPriority(),e._validateDataSourceMap(),e._getInnerElementMessages(),e._localizeHeader(),e._handleHeaderPosition(e.$.body),e._validateSwimlanes(),e._renderColumns(),e._handleSwimlanes();let a=!1;e.autoLoadState&&(a=e.loadState()),e._getCurrentUser(),a||e._processDataSource(),e._setPriorityList(),e._setUserList(),e._setActionsList(),e._setColumnActionsList(),e._setCommentsList(),e._autoSaveState(),e._createAddNewButton()}attached(){const e=this;super.attached(),e.isCompleted&&e._dialog&&(e._addDialogHandlers(),e.getShadowRootOrBody().appendChild(e._dialog))}detached(){const e=this;if(super.detached(),!e._dialog)return;const t=e._dialog;t.removeEventListener("open",e._dialogEventHandler),t.removeEventListener("closing",e._dialogEventHandler),t.removeEventListener("close",e._dialogEventHandler),t.removeEventListener("click",e._dialogClickHandler),t.remove()}addTask(e={}){const t=this,a=t.columns;if("object"!=typeof e||0===a.length||!t._currentUser.allowAdd)return;const s=t.dataSourceMap;void 0===e[s.status]&&(e[s.status]=a[0].dataField),t._currentUser.info&&(void 0===e[s.createdUserId]?(e[s.createdUserId]=t._currentUser.info.id,e[s.createdDate]=new Date):e[s.createdDate]||(e[s.createdDate]=new Date)),t.dataSource&&t.dataSource.virtualDataSource?t._requestVirtualDataSource("add",e,(function(e){return e})):(t.dataSource||(t.dataSource=[]),t.dataSource.push(e),t._createTask(e,!0),t._autoSaveState("dataSource")),t.$.fireEvent("taskAdd",{value:e,id:e.id}),t._refreshButtonsAndSummaries()}addSort(e,t){const a=this,s=a.dataSource;let o;function l(e,s){const l=a._sortPanelDataSource.find((t=>t.dataField===e));if(l){let a=Array.isArray(t)?t[s]:"string"==typeof t?t:"ascending";o.dataFields.push(e),o.dataTypes.push(l.dataType),a=a&&-1!==a.indexOf("desc")?"descending":"ascending",o.orderBy.push(a)}}if(0!==arguments.length&&s&&0!==s.length){if(a.closePanel(),1===arguments.length&&"object"==typeof e)o=e;else if(o={dataFields:[],dataTypes:[],orderBy:[]},Array.isArray(e))e.forEach(l);else{if("string"!=typeof e)return;l(e,0)}super.addSort(o)}}beginEdit(e){const t=this;t._currentUser.allowEdit&&!t.disabled&&(e=t._validateTaskArgument(e))&&t._openDialog(e,"edit")}cancelEdit(){const e=this._dialog;e&&e.opened&&e.classList.contains("edit")&&e.close()}collapse(e){const t=this;if(!t.collapsible)return;if(!(e=t._validateColumnArgument(e))||e.collapsed||!e.collapsible)return;const a=t._columnToElement.get(e),s=a.siblingColumns;let o=0;e.collapsed=!0,a.classList.add("collapsed");const l=e.collapsed?t.localize("expand"):t.localize("collapse");if(a.querySelector(".smart-kanban-column-header-toggle-button").setAttribute("title",l),s.forEach((e=>e.collapsed&&o++)),o===s.length){const a=0!==s.indexOf(e)?0:1,o=s[a],l=t._columnToElement.get(o);o.collapsed=!1,l.classList.remove("collapsed"),t._updateColumnWidths(s,l.parentElement)}else t._updateColumnWidths(s,a.parentElement);t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("collapsed"),t._handleSwimlanes(!0),t._createAddNewButton(),t._doNotFireEvents||t.$.fireEvent("columnCollapse",{column:e})}copyTask(e){const t=this;if(!t._currentUser.allowAdd)return;if(!(e=t._validateTaskArgument(e)))return;const a=Object.assign({},e.data);t.dataSource&&t.dataSource.virtualDataSource?t._requestVirtualDataSource("add",a,(function(e){return t.$.fireEvent("taskAdd",{value:a}),e})):(a[t.dataSourceMap.id]=Math.floor(9e4*Math.random()+1e4),t._createTask(a,!0),t._autoSaveState("dataSource"),t.$.fireEvent("taskAdd",{value:a})),t.dataSource||(t.dataSource=[]),t.dataSource.push(a),t._refreshButtonsAndSummaries()}endEdit(){const e=this._dialog;e&&e.opened&&e.classList.contains("edit")&&(e.ok=!0,e.close())}ensureVisible(e){if(!(e=this._validateTaskArgument(e))||e.filteredOut)return;const t=e.closest("smart-scroll-viewer");if(0===t.scrollHeight)return e;const a=t.scrollTop,s=e.offsetTop;return a<=s&&a+t.offsetHeight>=s+e.offsetHeight||(t.scrollTop=s),e}expand(e){const t=this;if(!(e=t._validateColumnArgument(e))||!e.collapsed)return;const a=t._columnToElement.get(e);e.collapsed=!1,a.classList.remove("collapsed");const s=e.collapsed?t.localize("expand"):t.localize("collapse");a.querySelector(".smart-kanban-column-header-toggle-button").setAttribute("title",s),t._updateColumnWidths(a.siblingColumns,a.parentElement),t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("collapsed"),t._handleSwimlanes(!0),t._createAddNewButton(),t.$.fireEvent("columnExpand",{column:e})}expandAll(){const e=this;e._allColumns.forEach((t=>{t.collapsed=!1,e._columnToElement.get(t).classList.remove("collapsed")})),e._allColumns.forEach((t=>e._refreshScrollViewer(t))),e._columnContainers.forEach((t=>e._updateColumnWidths(t.children,t))),e._autoSaveState("collapsed"),e._handleSwimlanes(!0)}exportData(e,t,a){const s=this,o=getComputedStyle(s),l=o.borderRightColor,r=s.swimlanes,n=new Smart.Utilities.DataExporter,i=s._getCurrentDataSource(),d=s.dataSourceMap,c=[{id:"Task ID",text:"Text",status:"Status",swimlane:"Swimlane",asignee:"Asignee",priority:"Priority",progress:"Progress",startDate:"Start date",dueDate:"Due date",subTasks:"Completed sub-tasks",tags:"Tags"}],u={},m={},p={};n.style={border:"1px solid "+l,borderCollapse:"collapse",backgroundColor:o.backgroundColor,color:o.color,fontFamily:"Helvetica",header:{border:"1px solid "+l,fontWeight:"bold"},columns:{border:"1px solid "+l,progress:{format:"p0"},startDate:{format:s.formatStringDate},dueDate:{format:s.formatStringDate}},rows:{}},0===r.length&&delete c[0].swimlane;for(let e=0;e<i.length;e++){const t=i[e];let a=t[d.status],o=t[d.swimlane],l=t[d.userId],b=t[d.progress];u[a]?a=u[a]:(a=s._allColumns.find((e=>e.dataField===a)).label,u[t[d.status]]=a),null===l?l="":p[l]?l=p[l]:(l=s.users.find((e=>e.id===l)).name,p[t[d.userId]]=l),null===b?b="":b/=100;const h={id:t[d.id],text:t[d.text],description:t[d.description]||"",status:a,asignee:l,priority:t[d.priority],progress:b,startDate:t[d.startDate]||"",dueDate:t[d.dueDate]||"",subTasks:s._getCompletedSubTasks(t[d.checklist]),tags:t[d.tags]};r.length&&(o?m[o]?o=m[o]:(o=r.find((e=>e.dataField===o)).label,m[t[d.swimlane]]=o):o="",h.swimlane=o),c.push(h),t[d.color]&&(n.style.rows[e]={backgroundColor:t[d.color]})}return n.exportData(c,e,t,a)}getState(){const e=this,t=e.dataSourceMap,a={},s={collapsed:a,dataSource:e._getCurrentDataSource(),filtering:e._appliedFiltering,selection:{selected:e._selectedTasks.map((e=>e.data[t.id])),selectionStart:e._selectionStart?e._selectionStart.data[t.id]:null},sorting:e._appliedSorting,tabs:e._selectedTabs,visibility:{taskActions:e.taskActions,taskComments:e.taskComments,taskDue:e.taskDue,taskPriority:e.taskPriority,taskProgress:e.taskProgress,taskTags:e.taskTags,taskUserIcon:e.taskUserIcon}};let o=null,l=null;return e._selectionInView&&(o=e._selectionInView.closest(".smart-kanban-column").column.dataField,l=e._selectionInView.getAttribute("swimlane")),s.selection.selectionInColumn=o,s.selection.swimlane=l,e._allColumns.forEach((e=>a[e.dataField]=e.collapsed)),s}loadState(e){const t=this;if(!e&&!(e=window.localStorage.getItem("smartKanban"+t.id)))return!1;"string"==typeof e&&(e=JSON.parse(e,((e,t)=>t&&-1!==["startDate","dueDate","time"].indexOf(e)?new Date(t):t))),t._doNotFireEvents=!0,t._selectedTasks=[],delete t._selectionStart,delete t._selectionInView,t.expandAll(),Array.from(t.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>e.clearContent())),t._allColumns.forEach((a=>{e.collapsed[a.dataField]&&t.collapse(a)}));for(let a in e.visibility)t[a]=e.visibility[a];if(t.dataSource=e.dataSource,t._processDataSource(),t.addFilter(t._constructFilterGroups(e.filtering),e.filtering.operator),t.addSort(e.sorting),t._autoSaveState(e),e.selection.selected.forEach((e=>{const a=t.$.container.querySelector(`.smart-kanban-task[data-id="${e}"]`);a&&(a.setAttribute("selected",""),t._selectedTasks.push(a))})),e.selection.selectionStart&&(t._selectionStart=t.$.container.querySelector(`.smart-kanban-task[data-id="${e.selection.selectionStart}"]`)),e.selection.selectionInColumn){const a=t._columnToElement.get(t._allColumns.find((t=>t.dataField===e.selection.selectionInColumn)));e.selection.swimlane?t._selectionInView=a.querySelector(`smart-scroll-viewer[swimlane=${e.selection.swimlane}]`):t._selectionInView=a.querySelector("smart-scroll-viewer")}if(e.tabs){const a="tabs"===t.hierarchy;t._allColumns.forEach((s=>{if(void 0!==s.selected){const o=t._columnToElement.get(s),l=-1!==e.tabs.indexOf(s.dataField);s.selected=l,a&&(o.classList.toggle("smart-hidden",!l),o.tab.classList.toggle("selected",l),o.tab.setAttribute("aria-selected",l))}}))}return t._doNotFireEvents=!1,!0}moveTask(e,t){const a=this;if(a.disabled||!t)return;const s=a.dataSourceMap;if(!(e=a._validateTaskArgument(e))||!a._updateTaskInProgress&&e.data[s.status]===t)return;const o=a._allColumns.find((e=>e.dataField===t));function l(){const l=e.closest("smart-scroll-viewer"),r=a._columnToElement.get(o),n=e.data,i=a.getTaskScrollViewer(r,n);n[s.status]=t,i.appendChild(e),a._dialog&&a._dialog.ok||(a.textTemplate&&a._renderTask(e),a._autoSaveState("dataSource")),a._refreshScrollViewer(l,!0),a._refreshScrollViewer(i,!0),e.hasAttribute("selected")&&(e.removeAttribute("selected"),a._selectedTasks=a._selectedTasks.filter((t=>t!==e)),a._autoSaveState("selection")),e.removeAttribute("focus"),(a.shadowRoot||a.getRootNode()).activeElement===l&&a._focusTask(a._getFirstItem(l.$.content))}o&&(a.dataSource&&a.dataSource.virtualDataSource&&!a._ignoreVirtualDataSource?a._requestVirtualDataSource("update",Object.assign({},e.data,{status:t}),(function(e){return e&&l(),e})):l())}openCustomizePanel(){const e=this,t=e.dataSource;if(!t||0===t.length||e.disabled||"none"===e.headerPosition)return;const a=e.$.customize,s=[{label:e.localize("actionsIcon"),dataField:"taskActions",visible:e.taskActions},{label:e.localize("commentsIcon"),dataField:"taskComments",visible:e.taskComments},{label:e.localize("dueDate"),dataField:"taskDue",visible:e.taskDue},{label:e.localize("priorityIcon"),dataField:"taskPriority",visible:e.taskPriority},{label:e.localize("progress"),dataField:"taskProgress",visible:e.taskProgress},{label:e.localize("tags"),dataField:"taskTags",visible:e.taskTags},{label:e.localize("userIcon"),dataField:"taskUserIcon",visible:e.taskUserIcon}];let o;e._closeDialog(),e.$.headerDropDown.classList.add("customize-panel"),e.$.headerDropDown.classList.remove("filter-panel","sort-panel","search-panel"),a.classList.remove("smart-hidden"),e.$.filter.classList.add("smart-hidden"),e.$.sort.classList.add("smart-hidden"),e.$.search.classList.add("smart-hidden"),e._closeSearchPanel(),e._customizePartCreated?(o=a.firstElementChild,o.set("dataSource",s),o.propertyChangedHandler("dataSource",void 0,s),o.rightToLeft=e.rightToLeft):(o=document.createElement("smart-column-panel"),o.animation=e.animation,o.dataSource=s,o.locale=e.locale,o.messages=e._innerElementMessages.columnPanel,o.rightToLeft=e.rightToLeft,o.theme=e.theme,e.$.customize.appendChild(o),o.classList.add("smart-kanban-column-panel"),e._customizePartCreated=!0),e._openHeaderDropDown(e.$.customizeButton)}openFilterPanel(){const e=this,t=[{label:e.localize("text"),dataField:"text",dataType:"string"},{label:e.localize("userId"),dataField:"userId",dataType:"string"},{label:e.localize("tags"),dataField:"tags",dataType:"string"},{label:e.localize("priority"),dataField:"priority",dataType:"enum",options:e._getPriority()},{label:e.localize("progress"),dataField:"progress",dataType:"number"},{label:e.localize("startDate"),dataField:"startDate",dataType:"date"},{label:e.localize("dueDate"),dataField:"dueDate",dataType:"date"}];super.openFilterPanel(t,(function(t,a){"progress"===a.dataField?(t.min=0,t.max=100,t.showUnit=!0,t.unit="%"):"date"===a.dataType&&(t.formatString=e.formatStringDate)}))}openSortPanel(){const e=this,t=e._sortPanelDataSource.map((t=>{const a=e._appliedSorting.dataFields.indexOf(t.dataField);return Object.assign({},t,{sortIndex:a,sortDirection:-1===a?"ascending":e._appliedSorting.orderBy[a]})}));super.openSortPanel(t)}removeTask(e,t){const a=this;function s(){const t=e.closest("smart-scroll-viewer"),s=e.data;if(e.remove(),a._refreshScrollViewer(t,!0),a._autoSaveState("dataSource"),a.$.fireEvent("taskRemove",{value:s,id:e.id}),a.dataSource){const e=a.dataSource.findIndex((e=>e.id===s.id));e>-1&&a.dataSource.splice(e,1)}a._refreshSummaries()}a._currentUser.allowRemove&&(e=a._validateTaskArgument(e))&&(t?a._openDialog(e,"prompt"):a.dataSource&&a.dataSource.virtualDataSource?a._requestVirtualDataSource("remove",e.data,(function(e){return e&&s(),e})):s())}saveState(){const e=this.getState();return window.localStorage.setItem("smartKanban"+this.id,JSON.stringify(e)),e}addHistory(e,t){const a=this;if(!e||!t)return;const s=a.dataSourceMap;a.storeHistory?(void 0===e[s.history]&&(e[s.history]=[]),e[s.history].length===a.storeHistoryItems&&e[s.history].splice(0,1),e[s.history].push(t)):e[s.history]=[]}clearHistory(e){e&&(e.history=[])}updateTask(e,t){const a=this;if(!a._currentUser.allowEdit||!t)return;if(!(e=a._validateTaskArgument(e)))return;const s=a.dataSourceMap,o=e.data;function l(){if(e.data=t,t[s.status]!==o[s.status]&&(a._updateTaskInProgress=!0,a.moveTask(e,t[s.status]),delete a._updateTaskInProgress),t[s.swimlane]!==o[s.swimlane]){const l=e.closest(".smart-kanban-column");a._hasSwimlane(l.index)?(l.querySelector(`smart-scroll-viewer[swimlane=${t[s.swimlane]}]`).appendChild(e),o[s.swimlane]&&a._refreshScrollViewer(l.querySelector(`smart-scroll-viewer[swimlane=${o[s.swimlane]}]`))):delete t[s.swimlane]}const l=()=>{const e=()=>({user:a._currentUser.info.id,date:t[s.updatedDate]});if(t[s.userId]!==o[s.userId]){const l=e();l.action="user",l.details={oldValue:o[s.userId],value:t[s.userId]},a.addHistory(t,l)}if(""+t[s.dueDate]!=""+o[s.dueDate]){const l=e();l.action="deadline",l.details={oldValue:o[s.startDate].toLocaleDateString()+"-"+o[s.dueDate].toLocaleDateString(),value:t[s.startDate].toLocaleDateString()+"-"+t[s.dueDate].toLocaleDateString()},a.addHistory(t,l)}else if(""+t[s.startDate]!=""+o[s.startDate]){const l=e();l.action="deadline",l.details={oldValue:o[s.startDate].toLocaleDateString()+"-"+o[s.dueDate].toLocaleDateString(),value:t[s.startDate].toLocaleDateString()+"-"+t[s.dueDate].toLocaleDateString()},a.addHistory(t,l)}if(t[s.color]!==o[s.color]){const l=e();l.action="color",l.details={oldValue:o[s.color],value:t[s.color]},a.addHistory(t,l)}if(JSON.stringify(t[s.checklist])!==JSON.stringify(o[s.checklist])){const l=e();l.action="subtasks",l.details={oldValue:o[s.checklist],value:t[s.checklist]},a.addHistory(t,l)}if(parseFloat(t[s.progress])!==parseFloat(o[s.progress])){let l=!0;if(null===o[s.progress]&&0===parseFloat(t[s.progress])&&(l=!1),l){const l=e();l.action="progress",l.details={oldValue:o[s.progress]?o[s.progress]+"%":"0%",value:t[s.progress]+"%"},a.addHistory(t,l)}}if(t[s.description]!==o[s.description]){const l=e();l.action="description",l.details={oldValue:o[s.description],value:t[s.description]},a.addHistory(t,l)}if(t[s.priority]!==o[s.priority]){const l=e();l.action="priority",l.details={oldValue:o[s.priority],value:t[s.priority]},a.addHistory(t,l)}if(t[s.tags]!==o[s.tags]){const l=e();l.action="tags",l.details={oldValue:o[s.tags],value:t[s.tags]},a.addHistory(t,l)}if(t[s.text]!==o[s.text]){const l=e();l.action="text",l.details={oldValue:o[s.text],value:t[s.text]},a.addHistory(t,l)}};a.textTemplate||t[s.text]!==o[s.text]||t[s.tags]!==o[s.tags]||t[s.priority]!==o[s.priority]?(a._renderTask(e),l()):(l(),t[s.userId]!==o[s.userId]&&a._updateUserIcon(e),t[s.dueDate]!==o[s.dueDate]&&a._updateTaskDueDate(e),t[s.color]!==o[s.color]&&a._updateTaskColor(e),JSON.stringify(t[s.checklist])!==JSON.stringify(o[s.checklist])?(a._updateTaskChecked(e),a._updateTaskProgress(e)):parseFloat(t[s.progress])!==parseFloat(o[s.progress])&&a._updateTaskProgress(e),a._updateTaskSubtasks(e),a._updateTaskCustomFields(e));const r=a.getColumn(t.status);r&&(t.statusLabel=r.label);const n=a.getColumn(o.status);n&&(o.statusLabel=n.label);const i=JSON.parse(JSON.stringify(t)),d=JSON.parse(JSON.stringify(o));a.$.fireEvent("change",{task:e,id:i.id,value:i,oldValue:d}),a._refreshScrollViewer(e.closest("smart-scroll-viewer"));const c=a.dataSource.findIndex((t=>e.data.id===t.id));c>=0&&(a.dataSource[c]=e.data),a._refreshSummaries(),a._autoSaveState("dataSource"),a.$.fireEvent("taskUpdate",{id:i.id,value:i,oldValue:d})}(t=Object.assign({},o,t))[s.checklist]&&0===t[s.checklist].length&&(t[s.checklist]=null),JSON.stringify(t)!==JSON.stringify(o)&&(a.dataSource&&a.dataSource.virtualDataSource?a._requestVirtualDataSource("update",t,(function(e){return e&&(a._ignoreVirtualDataSource=!0,l(),delete a._ignoreVirtualDataSource),e})):l())}propertyChangedHandler(e,t,a){const s=this,o=s._dialog;function l(){if(s.cancelEdit(),o&&o.close(),s._closeList(s._commentsList,"_commentSelectionFor"),s._getCurrentUser(),s.taskSubTasks){const e=s.querySelectorAll(".smart-kanban-task-input");s._currentUser&&!s._currentUser.allowEdit||s.disabled||!s.taskSubTasksInput?e.forEach((e=>{e.classList.add("smart-hidden")})):e.forEach((e=>{e.classList.remove("smart-hidden")}))}}switch(super.propertyChangedHandler(e,t,a),e){case"addNewButton":case"addNewButtonDisplayMode":s._reset(),s._createAddNewButton();break;case"addNewColumn":s._reset();break;case"allowDrag":s._getCurrentUser();break;case"animation":case"theme":{let t=Array.from(s.$.container.querySelectorAll("smart-column-panel, smart-multi-column-filter-panel, smart-sort-panel"));o&&(t.push(o),t=t.concat(Array.from(o.$.footer.children)),o.editPanelPopulated&&(t=t.concat(Array.from(o.$.container.querySelectorAll(".smart-element.editor"))))),t.forEach((t=>t[e]=a)),Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateTaskColor(e)));break}case"autoSaveState":s._autoSaveState();break;case"collapsible":a||s.expandAll();break;case"columnSummary":s._refreshSummaries();break;case"columns":s._render(),o&&o.editPanelPopulated&&(o.editors.status.dataSource=s._allColumns.map((e=>({label:e.label,value:e.dataField}))));break;case"currentUser":l();break;case"dataSource":case"dataSourceMap":if("dataSourceMap"===e&&s._validateDataSourceMap(),s._customTags=[],s._selectedTasks=[],s.cancelEdit(),s.closePanel(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._closeList(s._userList,"_userSelectionFor"),s._closeList(s._priorityList,"_prioritySelectionFor"),0===s.columns.length)return s._renderColumns(),s._handleSwimlanes(),void s._processDataSource();Array.from(s.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>{e.clearContent(),e.refresh(),s._refreshScrollViewer(e,!0)})),s._processDataSource(),s.dataSource||s._refresh();break;case"disabled":s.cancelEdit(),s.closePanel(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._closeList(s._userList,"_userSelectionFor"),s._closeList(s._priorityList,"_prioritySelectionFor"),s._setFocusable();break;case"formatStringDate":Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateTaskDueDate(e))),o&&(o.editors.startDate.formatString=a,o.editors.dueDate.formatString=a);break;case"formatStringTime":s._closeList(s._commentsList,"_commentSelectionFor");break;case"editable":s.cancelEdit(),s._actionsList.classList.contains("edit-comment")||s._closeList(s._actionsList,"_actionSelectionFor"),s._getCurrentUser();break;case"headerPosition":s._handleHeaderPosition(s.$.body),s._allColumns.forEach((e=>s._refreshScrollViewer(e)));break;case"hierarchy":0===s.swimlanes.length&&s.columns.length!==s._allColumns.length&&s._reset();break;case"locale":case"messages":s.closePanel(),s._localizeHeader(),s._getInnerElementMessages(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._setActionsList(),s._setColumnActionsList(),s._setCommentsList(),o&&(s.cancelEdit(),o.close(),o.$.footer.firstElementChild.innerHTML=s.localize("ok"),o.$.footer.children[1].innerHTML=s.localize("cancel"),o.$.footer.children[2].innerHTML=s.localize("delete"),o.editPanelPopulated&&(o.editors.priority.dataSource=s._getPriority(),o.$.container.querySelector(".new-subtask").placeholder=s.localize("newSubtask"),o.$.container.querySelector("smart-button.add").title=s.localize("addSubtask"),Array.from(o.$.container.getElementsByClassName("editor-label")).forEach((e=>{let t=e.id.slice(s.id.length+5);t=t.slice(0,1).toLowerCase()+t.slice(1),e.innerHTML=s.localize(t)})))),s._customizePartCreated&&(s.$.customize.firstElementChild.messages=s._innerElementMessages.columnPanel,s.$.customize.firstElementChild.locale=s.locale),s._filterPartCreated&&(s.$.filter.firstElementChild.messages=s._innerElementMessages.multiColumnFilterPanel,s.$.filter.firstElementChild.locale=s.locale,s.$.filter.firstElementChild.editorPlaceholder=s.localize("filterValuePlaceholder")),s._sortPartCreated&&(s.$.sort.firstElementChild.messages=s._innerElementMessages.sortPanel,s.$.sort.firstElementChild.locale=s.locale);break;case"rightToLeft":s._reset(!0);break;case"selectionMode":if("zeroOrOne"===a&&s._selectedTasks.length>1){const e=s._selectionStart;s._selectedTasks.forEach((t=>t!==e&&t.removeAttribute("selected"))),s._selectedTasks=[e]}break;case"swimlanes":if(s._validateSwimlanes(),JSON.stringify(s.swimlanes)===JSON.stringify(t))return;s._reset(),o&&o.editPanelPopulated&&(o.editors.swimlane.dataSource=s.swimlanes.map((e=>({label:e.label,value:e.dataField}))));break;case"swimlanesFrom":case"swimlanesTo":{const e=s.swimlanesFrom,t=s.swimlanesTo;e<0&&(s.swimlanesFrom=0),null!==t&&e>t&&(s.swimlanesFrom=t),s.swimlanes.length>0&&s._reset();break}case"tags":case"textTemplate":Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._renderTask(e))),s._allColumns.forEach((e=>s._refreshScrollViewer(e)));break;case"unfocusable":s._setFocusable();break;case"priority":s._closeList(s._priorityList,"_prioritySelectionFor"),s._setPriorityList();break;case"users":s._closeList(s._userList,"_userSelectionFor"),s._setUserList(),Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateUserIcon(e))),o&&o.editPanelPopulated&&(o.editors.userId.dataSource=s.users.map((e=>({label:e.name,value:e.id})))),l()}}_reset(e){const t=this,a=t.getState();t._allColumns=[],t._customTags=[],t._selectedTasks=[],t._dialog&&(t.cancelEdit(),e&&(t._dialog.remove(),delete t._dialog)),t.closePanel(),t._closeList(t._actionsList,"_actionSelectionFor"),t._closeList(t._columnActionsList,"_columnActionSelectionFor"),t._closeList(t._commentsList,"_commentSelectionFor"),t._closeList(t._userList,"_userSelectionFor"),t.$.body.innerHTML="",Array.from(t.$.container.getElementsByClassName("swimlane")).forEach((e=>e.remove())),t._renderColumns(),t._handleSwimlanes(),t.loadState(a)}_refresh(){const e=this;e._allColumns=[],e._customTags=[],e._selectedTasks=[],e.closePanel(),e._closeList(e._actionsList,"_actionSelectionFor"),e._closeList(e._columnActionsList,"_columnActionSelectionFor"),e._closeList(e._commentsList,"_commentSelectionFor"),e._closeList(e._userList,"_userSelectionFor"),e.$.body.innerHTML="",Array.from(e.$.container.getElementsByClassName("swimlane")).forEach((e=>e.remove())),e._renderColumns(),e._handleSwimlanes(),e._createAddNewButton()}_containerClickHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;if(t.$.header.contains(a))return void t._headerClickHandler(a,t.$.body);const s=a.closest(".smart-kanban-column-header");if(s){const e=s.parentElement.column;if(a instanceof HTMLInputElement)return;if(t.columnActions&&a.classList.contains("smart-kanban-column-actions")){if(!t._columnActionsList.parentElement||t._columnActionsList.classList.contains("smart-visibility-hidden")){if(t._columnActionsListDate&&new Date-t._columnActionsListDate<300)return;t._openColumnActionsList(a,e)}return}if(a.closest(".smart-kanban-column-header-add")&&e)return void t._openDialog(e,"add","column");if(t.collapsible&&e&&e.collapsible&&a.closest(".smart-kanban-column-header-toggle-button"))return void t[e.collapsed?"expand":"collapse"](e)}const o=a.closest(".smart-kanban-tab");if(o){if(o.classList.contains("selected"))return;const e=o.parentElement.querySelector(".selected");return e.classList.remove("selected"),e.setAttribute("aria-selected",!1),e.columnElement.classList.add("smart-hidden"),e.columnElement.column.selected=!1,o.classList.add("selected"),o.setAttribute("aria-selected",!0),o.columnElement.classList.remove("smart-hidden"),o.columnElement.column.selected=!0,t._selectedTabs=t._allColumns.filter((e=>e.selected)).map((e=>e.dataField)),t._autoSaveState("tabs"),void t._allColumns.forEach((e=>t._refreshScrollViewer(e)))}if(t.addNewColumn){const e=a.closest(".smart-kanban-add-new-column"),s=a.closest(".smart-color-input"),o=a.closest(".smart-kanban-column-header");if(!s&&e&&!e.querySelector(".pending")&&o)return void t._addNewColumnDynamically()}const l=a.closest(".smart-kanban-list .item");if(l){const e=l.getAttribute("data-id"),a=t._userSelectionFor,s=t._prioritySelectionFor;if(a){const s=t.dataSourceMap,o=a.data[s.userId],l=JSON.parse(JSON.stringify(a.data));if(a.data[s.userId]=e,t._updateUserIcon(a),t._closeList(t._userList,"_userSelectionFor"),a.data[s.userId]!==o){t.dataSource&&t.dataSource.virtualDataSource&&t._requestVirtualDataSource("update",a.data,(function(e){return e||(a.data[s.userId]=o,t._updateUserIcon(a)),e}));const e=a.data;if(t._currentUser.info){a.data[s.updatedUserId]=t._currentUser.info.id,a.data[s.updatedDate]=new Date;const o={user:t._currentUser.info.id,label:e[s.text],date:e[s.updatedDate]};e[s.userId]!==l[s.userId]&&(o.action="user",o.details={oldValue:l[s.userId],value:e[s.userId]},t.addHistory(e,o)),t.addHistory(e,o)}const r=JSON.parse(JSON.stringify(e));t.$.fireEvent("change",{task:a,id:r.id,value:r,oldValue:l}),t.$.fireEvent("taskUpdate",{id:r.id,value:r,oldValue:l}),t._autoSaveState("dataSource")}return}if(s){const e=t.dataSourceMap,a=s.data[e.priority],o=JSON.parse(JSON.stringify(s.data));if(s.data[e.priority]=l.getAttribute("priority"),t._closeList(t._priorityList,"_prioritySelectionFor"),s.data[e.priority]!==a){t._currentUser.info&&(s.data[e.updatedUserId]=t._currentUser.info.id,s.data[e.updatedDate]=new Date);const a=s.data,l=JSON.parse(JSON.stringify(a));if(t._currentUser.info){s.data[e.updatedUserId]=t._currentUser.info.id,s.data[e.updatedDate]=new Date;const l={user:t._currentUser.info.id,date:a[e.updatedDate]};a[e.priority]!==o[e.priority]&&(l.action="priority",l.details={oldValue:o[e.priority],value:a[e.priority]},t.addHistory(a,l))}t.$.fireEvent("change",{task:s,id:l.id,value:l,oldValue:o}),t.$.fireEvent("taskUpdate",{id:l.id,value:l,oldValue:o}),t._updateTaskPriority(s),t._autoSaveState("dataSource")}}const o=t._actionSelectionFor,r=t._columnActionSelectionFor;if(o){switch(parseFloat(e)){case 0:t._actionsList.classList.contains("edit-comment")?(t._commentsList.textarea.value=o.comment.text,t._commentsList.textarea.focus(),t._commentsList.editing=o,o.parentElement.scrollTop=o.offsetTop):t.beginEdit(o);break;case 1:t.copyTask(o);break;case 2:t._actionsList.classList.contains("edit-comment")?t._openDialog(o,"prompt","comment"):t.removeTask(o,!0)}return void t._closeList(t._actionsList,"_actionSelectionFor")}if(r){switch(parseFloat(e)){case 0:t._handleColumnEditing(r.dataField);break;case 1:t._openDialog(r,"add","column");break;case 2:t.collapse(r);break;case 3:t._openDialog(r,"prompt","column")}return void t._closeList(t._columnActionsList,"columnActionSelectionFor")}}if(a.closest(".smart-kanban-list.comments")){const e=a.closest(".send");if(e){if(e.disabled)return;t._createComment(),t._commentsList.textarea.value="",e.disabled=!0}else if(a.classList.contains("remove-button")&&a.classList.contains("enabled")){const e=a.closest(".comment");t._actionSelectionFor&&(t._actionSelectionFor===e||t._actionSelectionFor.classList.contains("smart-kanban-task")||t._actionsList.parentElement&&!t._actionsList.classList.contains("smart-visibility-hidden"))||t._openActionsList(a,void 0,e)}return}const r=a.closest(".smart-kanban-task");r&&(a.classList.contains("smart-kanban-task-user")?!t.userList||!t._currentUser.allowEdit||t._userSelectionFor&&(t._userSelectionFor===r||t._userList.parentElement&&!t._userList.classList.contains("smart-visibility-hidden"))||t._openUserList(a,r):a.classList.contains("priority")&&t.priorityList?!t._priorityList||!t._currentUser.allowEdit||t._prioritySelectionFor&&(t._prioritySelectionFor===r||t._priorityList.parentElement&&!t._priorityList.classList.contains("smart-visibility-hidden"))||t._openPriorityList(a,r):t.taskActions&&a.classList.contains("smart-kanban-task-actions")?t._actionSelectionFor&&(t._actionSelectionFor===r||t._actionSelectionFor.classList.contains("comment")||t._actionsList.parentElement&&!t._actionsList.classList.contains("smart-visibility-hidden"))||t._openActionsList(a,r):t.taskComments&&a.classList.contains("smart-kanban-task-comments")?t.users.length>0&&(!t._commentSelectionFor||t._commentSelectionFor!==r&&(!t._commentsList.parentElement||t._commentsList.classList.contains("smart-visibility-hidden")))&&t._openCommentsList(a,r):(t._preventSelection||t._selectTask(e,r),t._currentUser.allowEdit&&e.type&&(clearTimeout(t._dblclickObject.timeout),t._dblclickObject.numberOfClicks++,2===t._dblclickObject.numberOfClicks?(t._dblclickObject.numberOfClicks=0,r.hasAttribute("selected")||t._selectTask(e,r),t.beginEdit(r)):t._dblclickObject.timeout=setTimeout((function(){t._dblclickObject.numberOfClicks=0}),300))))}_selectTask(e,t){const a=this;function s(){a._selectedTasks.forEach((e=>e!==t&&e.removeAttribute("selected"))),t.hasAttribute("selected")||(t.setAttribute("selected",""),a._selectedTasks=[t]),a._selectionStart=t,a._selectionInView=t.closest("smart-scroll-viewer"),a._autoSaveState("selection"),a._focusTask(t)}if("zeroOrOne"===a.selectionMode)a._selectedTasks.forEach((e=>e!==t&&e.removeAttribute("selected"))),t.hasAttribute("selected")?(a._focusTask(t),t.removeAttribute("selected"),a._selectedTasks=[],delete a._selectionInView):(t.setAttribute("selected",""),a._selectedTasks=[t],a._selectionStart=t,a._selectionInView=t.closest("smart-scroll-viewer"),a._focusTask(t));else{if(!e.ctrlKey&&!e.shiftKey&&!e.metaKey||0===a._selectedTasks.length||t.closest("smart-scroll-viewer")!==a._selectionInView)return void s();if(e.ctrlKey||e.metaKey)t.hasAttribute("selected")?(t.removeAttribute("selected"),a._selectedTasks=a._selectedTasks.filter((e=>e!==t))):(t.setAttribute("selected",""),a._selectedTasks.push(t),a._selectionStart=t);else if(e.shiftKey){if(t===a._selectionStart)return void(a._selectedTasks.length>1&&s());const e=Array.from(t.parentElement.children);let o=e.indexOf(a._selectionStart),l=e.indexOf(t);const r=o;o=Math.min(o,l),l=Math.max(r,l),a._selectedTasks=[],e.forEach(((e,t)=>{t>=o&&t<=l&&!e.filteredOut?(e.setAttribute("selected",""),a._selectedTasks.push(e)):e.removeAttribute("selected")}))}a._focusTask(t)}a._autoSaveState("selection")}_processDataSource(){const e=this;let t=e.dataSource;if(0!==e.columns.length&&null!==t){if(t instanceof Smart.DataAdapter){if(t.virtualDataSource)return void e._requestVirtualDataSource("dataBind");t=t.dataSource}t.forEach((t=>{e._createTask(t)})),e.whenRendered((()=>e._allColumns.forEach((t=>e._refreshScrollViewer(t)))))}}_requestVirtualDataSource(e,t,a){const s=this,o=s.dataSourceMap,l=[],r=[],n={},i=s._appliedFiltering;let d=null;if(i&&i.filterGroups.length>0&&(i.filterGroups.forEach((e=>r[e[0]]=e[1])),r.length=i.filterGroups.length,d=i.operator),s._appliedSorting&&s._appliedSorting.dataFields.length>0&&(s._appliedSorting.dataFields.forEach(((e,t)=>{let a=s._appliedSorting.orderBy[t].replace("ending","");l[e]={sortOrder:a,sortIndex:t}})),l.length=s._appliedSorting.dataFields.length),void 0!==t){const e=Object.assign({},t);e[o.checklist]=JSON.stringify(e[o.checklist]),e[o.comments]=JSON.stringify(e[o.comments],(function(e,t){return"time"===e?new Date(t).toISOString().slice(0,19).replace("T"," "):t})),e[o.dueDate]&&(e[o.dueDate]=e[o.dueDate].toISOString().slice(0,10)),e[o.startDate]&&(e[o.startDate]=e[o.startDate].toISOString().slice(0,10)),n.row=e}s.dataSource.onVirtualDataSourceRequested((function(t){let o=!0;-1!==["add","update","remove"].indexOf(e)&&a&&(o=a(t.result),"add"!==e)||o&&(Array.from(s.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>e.clearContent())),s.dataSource.dataSource.forEach((e=>{s._createTask(e)})),s._allColumns.forEach((e=>s._refreshScrollViewer(e))),s._autoSaveState("dataSource"))}),{first:0,last:0,sorting:l,filtering:r,filterOperator:d,grouping:[],edit:n,action:e})}_setUserList(){const e=this,t=document.createElement("div");t.id=e.id+"UserList",t.className="smart-kanban-list users smart-visibility-hidden",t.setAttribute("role","listbox"),e.disabled||e.unfocusable||(t.tabIndex=0),e.users.forEach((e=>{const a=document.createElement("div");a.className="item",a.innerHTML=`<div class="icon" style="background-image: url('${e.image}')"></div><div class="name">${e.name}</div>`,a.setAttribute("data-id",e.id),a.setAttribute("role","option"),t.appendChild(a)})),e._userList=t}_setPriorityList(){const e=this,t=document.createElement("div");t.id=e.id+"PriorityList",t.className="smart-kanban-list priority smart-visibility-hidden",t.setAttribute("role","listbox"),e.disabled||e.unfocusable||(t.tabIndex=0),e._getPriority().forEach((e=>{const a=document.createElement("div");a.className="item",a.innerHTML=`<div priority="${e.value}" class="smart-kanban-task-text"><span style="margin-left: 0px; margin-right: 5px;" class="priority ${e.value}"></span>${e.label}</div>`,a.setAttribute("priority",e.value),a.setAttribute("role","option"),t.appendChild(a)})),e._priorityList=t}_openList(e,t,a){const s=this,o=s.$.container.getBoundingClientRect(),l=e.getBoundingClientRect();let r,n,i=l.left,d=l.top+e.offsetHeight;a=s.rightToLeft?!a:a,1===window.devicePixelRatio?(r=document.documentElement.clientWidth,n=document.documentElement.clientHeight):(r=window.innerWidth,n=window.innerHeight),s.$.container.appendChild(t),a&&(i=l.right-t.offsetWidth),i+t.offsetWidth>r&&(i=r-t.offsetWidth),d+t.offsetHeight>n&&(d=n-t.offsetHeight),t.style.left=Math.max(0,i)-o.left+"px",t.style.top=d-o.top+"px",t.classList.remove("smart-visibility-hidden"),e.setAttribute("aria-expanded",!0),e.setAttribute("aria-controls",t.id),s.unfocusable||requestAnimationFrame((function e(){0===t.getBoundingClientRect().height?requestAnimationFrame(e):t.focus()})),t.openedFrom=e}_openUserList(e,t){const a=this;if(0===a.users.length)return;const s=t.data[a.dataSourceMap.userId],o=a._userList,l=o.querySelector(".selected");if(l&&(l.classList.remove("selected"),l.removeAttribute("aria-selected")),a._openList(e,o),null!==s){const e=Array.from(o.children).find((e=>e.getAttribute("data-id")===s.toString()));e&&(e.classList.add("selected"),e.setAttribute("aria-selected",!0),o.scrollTop=e.offsetTop)}a._userSelectionFor=t}_openPriorityList(e,t){const a=this,s=t.data[a.dataSourceMap.priority],o=a._priorityList,l=o.querySelector(".selected");if(l&&(l.classList.remove("selected"),l.removeAttribute("aria-selected")),a._openList(e,o),null!==s){const e=Array.from(o.children).find((e=>e.getAttribute("priority")===s.toString()));e&&(e.classList.add("selected"),e.setAttribute("aria-selected",!0),o.scrollTop=e.offsetTop)}a._prioritySelectionFor=t}_closeList(e,t){const a=this;if(!e||!e.parentElement)return;const s=a.$.container.querySelector(`[aria-expanded="true"][aria-controls="${e.id}"]`);e.classList.add("smart-visibility-hidden"),requestAnimationFrame((function s(){e.classList.contains("smart-visibility-hidden")&&(e.getBoundingClientRect().height>0?requestAnimationFrame(s):(e.remove(),delete e.openedFrom,delete a[t]))})),s&&(s.removeAttribute("aria-expanded"),s.removeAttribute("aria-controls"))}_setActionsList(){const e=this,t=document.createElement("div");t.id=e.id+"ActionsList",t.className="smart-kanban-list actions smart-visibility-hidden",t.setAttribute("role","menu"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="item" data-id="0" role="menuitem"><div class="name">${e.localize("edit")}</div></div>\n<div class="item" data-id="1" role="menuitem"><div class="name">${e.localize("copy")}</div></div>\n<div class="item" data-id="2" role="menuitem"><div class="name">${e.localize("remove")}</div></div>`,e._actionsList=t}_setColumnActionsList(){const e=this,t=document.createElement("div");t.id=e.id+"ColumnActionsList",t.className="smart-kanban-list actions smart-visibility-hidden",t.setAttribute("role","menu"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="item" data-id="0" role="menuitem"><div class="name">${e.localize("edit")}</div></div>\n <div class="item" data-id="1" role="menuitem"><div class="name">${e.localize("addNewTask")}</div></div>\n <div class="item" data-id="2" role="menuitem"><div class="name">${e.localize("collapse")}</div></div>\n <div class="item" data-id="3" role="menuitem"><div class="name">${e.localize("remove")}</div></div>`,e._columnActionsList=t}_openActionsList(e,t,a){const s=this,o=s._currentUser,l=s._actionsList;s._openList(e,l,a),l.classList.toggle("edit-comment",!!a),s._actionSelectionFor=t||a,t&&!o.allowEdit?l.children[0].classList.add("smart-hidden"):l.children[0].classList.remove("smart-hidden"),t&&!o.allowAdd?l.children[1].classList.add("smart-hidden"):l.children[1].classList.remove("smart-hidden"),t&&!o.allowRemove?l.children[2].classList.add("smart-hidden"):l.children[2].classList.remove("smart-hidden"),Array.from(l.children).forEach((e=>e.classList.remove("selected")))}_openColumnActionsList(e,t){const a=this,s=a._columnActionsList,o=s.children;a.allowColumnEdit&&t.editable&&"header"!==a.columnEditMode?o[0].classList.remove("smart-hidden"):o[0].classList.add("smart-hidden"),a.addNewButton&&t.addNewButton?o[1].classList.remove("smart-hidden"):o[1].classList.add("smart-hidden"),a.allowColumnRemove&&t.allowRemove?o[2].classList.remove("smart-hidden"):o[2].classList.add("smart-hidden"),a.collapsible&&t.collapsible?o[3].classList.remove("smart-hidden"):o[3].classList.add("smart-hidden"),a._openList(e,s),a._columnActionSelectionFor=t,Array.from(s.children).forEach((e=>e.classList.remove("selected")))}_setCommentsList(){const e=this,t=document.createElement("div");t.id=e.id+"CommentsList",t.className="smart-kanban-list comments smart-visibility-hidden",t.setAttribute("role","dialog"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="smart-kanban-comments" role="list"></div>\n<div class="smart-kanban-new-comment" role="presentation">\n <textarea placeholder="${e.localize("newComment")}"></textarea>\n <smart-button class="send primary" disabled${e._rtlAttr}>${e.localize("send")}</smart-button>\n</div>`;const a=t.querySelector("textarea"),s=t.querySelector("smart-button");s.tabIndex=0,a.onfocus=()=>{t.classList.add("expanded"),s.disabled=""===a.value},a.onblur=e=>{s.contains(e.relatedTarget)||t.classList.remove("expanded")},a.onkeyup=()=>{s.disabled=""===a.value},a.oncut=()=>{s.disabled=""===a.value},a.onpaste=()=>{s.disabled=""===a.value},t.textarea=a,t.button=s,e._commentsList=t}_openCommentsList(e,t){const a=this,s=a._commentsList;s.classList.remove("expanded"),s.firstElementChild.innerHTML="",s.textarea.value="",s.textarea.disabled=!a._currentUser.allowComment,a.unfocusable?s.textarea.tabIndex=-1:s.textarea.removeAttribute("tabindex"),delete s.editing,t.data[a.dataSourceMap.comments].forEach((e=>a._createComment(e))),a._openList(e,s),a._commentSelectionFor=t}_getCommentsList(e){const t=this,a=t._commentsList;return a.classList.remove("expanded"),a.firstElementChild.innerHTML="",a.textarea.value="",a.textarea.disabled=!t._currentUser.allowComment,t.unfocusable?a.textarea.tabIndex=-1:a.textarea.removeAttribute("tabindex"),delete a.editing,e.data[t.dataSourceMap.comments].forEach((e=>t._createComment(e))),t._commentSelectionFor=e,a.classList.remove("smart-visibility-hidden"),a}_createComment(e){const t=this,a=document.createElement("div");let s,o;function l(){const l=t._commentsList.firstElementChild,r=o?o.image:null,n=o?o.name||o.id:t.localize("guestUser"),i=o?o.name:t.localize("guestUser");a.classList="comment",a.setAttribute("role","listitem");const d=r?`background-image: url('${r}');`:"";a.innerHTML=`<div class="comment-indent" role="presentation">\n <div class="user-icon" style="${d}" role="img" aria-label="Icon of user ${n}"></div>\n</div>\n<div class="comment-main" role="presentation">\n <div class="comment-header" role="presentation">\n <div class="user-name" aria-label="User name">${i}</div>\n <div class="time" aria-label="Comment time">${e.time?new Smart.Utilities.DateTime(e.time).toString(t.formatStringTime):""}</div>\n <div class="remove-button${t._currentUser.info&&o.id===t._currentUser.info.id&&t._currentUser.allowComment?" enabled":""}"${t._tabindex} role="button" aria-haspopup="menu" aria-label="Comment settings"></div>\n </div>\n <div class="comment-body" aria-label="Comment text">${e.text||""}</div >\n</div>`,a.comment=e,r||a.querySelector(".user-icon").classList.add("empty"),l.appendChild(a),s&&(l.scrollTop=l.scrollHeight-l.offsetHeight)}if(e)o=t.users.find((t=>t.id===e.userId));else{const a=t.dataSourceMap,r=t.dataSource&&t.dataSource.virtualDataSource,n=t._commentsList.textarea.value,i=t._commentsList.editing,d=t._commentSelectionFor.data;if(i){if(r){const e=Object.assign({},d);e[a.comments]=e[a.comments].slice(0),e[a.comments][e[a.comments].indexOf(i.comment)]=Object.assign({},i.comment,{text:n}),t._requestVirtualDataSource("update",e,(function(a){return a&&(t._commentSelectionFor.data=e,i.querySelector(".comment-body").innerHTML=n),delete t._commentsList.editing,a}))}else i.querySelector(".comment-body").innerHTML=n,i.comment.text=n,delete t._commentsList.editing;return}if(s=!0,e={text:n,userId:t._currentUser.info?t._currentUser.info.id:-1,time:new Date},o=t._currentUser.info,r){const s=Object.assign({},d);s[a.comments]=s[a.comments].slice(0),s[a.comments].push(e),t._requestVirtualDataSource("update",s,(function(e){return e&&(t._commentSelectionFor.data=s,t._commentSelectionFor.querySelector(".smart-kanban-task-comments").setAttribute("num",s[a.comments].length||""),l()),e}))}else d[a.comments].push(e),t._commentSelectionFor.querySelector(".smart-kanban-task-comments").setAttribute("num",d[a.comments].length||"")}e.time instanceof Date==0&&(e.time=new Date(e.time),e.time.setTime(e.time.getTime()-1*e.time.getTimezoneOffset()*60*1e3)),l()}_createTask(e,t){const a=this,s=a.dataSourceMap,o=a._allColumns.find((t=>t.dataField===e[s.status]));if(!o)return;const l=document.createElement("div"),r=a._columnToElement.get(o),n=a.getTaskScrollViewer(r,e);void 0===e[s.id]&&(e[s.id]=Math.floor(9e4*Math.random()+1e4)),l.className="smart-kanban-task smart-unselectable",l.setAttribute("role","listitem"),l.setAttribute("data-id",e[s.id]),a._currentUser.info&&(void 0===e[s.createdUserId]?(e[s.createdUserId]=a._currentUser.info.id,e[s.createdDate]=new Date):e[s.createdDate]||(e[s.createdDate]=new Date),a.addHistory(e,{action:"created",user:a._currentUser.info.id,details:{value:e[s.text]},date:e[s.createdDate]})),l.data=e,l.column=o,a._renderTask(l),e.class&&"string"==typeof e.class&&l.classList.add(e.class),n.appendChild(l),a._updateTaskColor(l),t&&(o.collapsed?n.toRefresh=!0:n.refresh())}getTaskScrollViewer(e,t){const a=this,s=a.dataSourceMap;let o;return a._hasSwimlane(e.index)?void 0!==t[s.swimlane]&&a.swimlanes.find((e=>e.dataField===t[s.swimlane]))?o=e.querySelector(`smart-scroll-viewer[swimlane="${t[s.swimlane]}"]`):(o=e.querySelector("smart-scroll-viewer"),t[s.swimlane]=o.getAttribute("swimlane")):(o=e.querySelector("smart-scroll-viewer"),delete t[s.swimlane]),o}_renderTask(e){const t=this;t._applyTaskTemplate(e),t._updateUserIcon(e),t._updateTaskChecked(e),t._updateTaskProgress(e),t._updateTaskDueDate(e),e.parentElement&&t._updateTaskColor(e),t._updateTaskPriority(e),e.column&&t.columnSummary&&t._updateColumnSummary(e.column)}_refreshSummaries(){const e=this,t=e.querySelectorAll(".smart-kanban-column");for(let a=0;a<t.length;a++){const s=t[a].column;e._updateColumnSummary(s)}}_updateColumnSummary(e){const t=this,a=t._columnToElement.get(e);if(!a||!t.columnSummary)return;const s=t._getColumnSummary(e),o=a.querySelector(".summary");o&&(o.innerHTML=s)}_applyTaskTemplate(e){const t=this,a=t.dataSourceMap,s=t.tags,o=e.data,l=t._tabindex;let r=o[a.text],n=o[a.description],i=o[a.tags],d="";void 0===r&&(r="",o[a.text]=""),void 0===n&&(n="",o[a.description]=""),r=t._applyTextTemplate(r,o,e),i&&"string"==typeof i?(i=i.replace(/\s+/g,"").split(","),s.length>0?(i=i.filter((e=>-1!==s.indexOf(e))),o[a.tags]=i.join(", ")):i.forEach((e=>{-1===t._customTags.indexOf(e)&&t._customTags.push(e)})),d=i.map((e=>`<span class="smart-kanban-task-tag" role="listitem">${e}</span>`)).join("")):o[a.tags]="","string"==typeof o[a.priority]&&(o[a.priority]=o[a.priority].toLowerCase()),"high"!==o[a.priority]&&"low"!==o[a.priority]&&"critical"!==o[a.priority]&&(o[t.dataSourceMap.priority]="average"),o[a.comments]&&Array.isArray(o[a.comments])||(o[a.comments]=[]);const c=t.localize(o[a.priority])+" "+t.localize("priority");e.innerHTML=`<div title="${r}: ${c}" class="smart-kanban-task-content" role="presentation">\n <div class="smart-kanban-task-text">${r}<span class="priority ${o[a.priority]}"></span></div>\n <div class="smart-kanban-task-user"${l} role="button" aria-haspopup="listbox"></div>\n</div>\n<div class="smart-kanban-task-info" role="presentation">\n <div class="smart-kanban-task-progress-container">\n <div class="smart-kanban-task-progress" role="progressbar" aria-label="Task progress" aria-valuemin="0" aria-valuemax="100"></div>\n <div class="smart-kanban-task-checked" aria-label="Completed sub-tasks"></div>\n </div>\n <div class="smart-kanban-task-due" aria-label="Task due date"></div>\n</div>\n<div class="smart-kanban-task-fields"></div>\n<div class="smart-hidden smart-kanban-task-subtasks">\n <div class="smart-kanban-task-subtasks-container"></div>\n <div><input class="smart-kanban-task-input smart-input" placeholder="${t.localize("newSubtask")}"/></div>\n</div>\n<div class="smart-hidden smart-kanban-task-custom-fields"></div>\n<div class="smart-kanban-task-footer" role="toolbar" aria-label="Task footer">\n <div class="smart-kanban-task-tags" role="list" aria-label="Tags list">${d}</div>\n <div title="${t.localize("actionsList")}" class="smart-kanban-task-actions"${l} role="button" aria-haspopup="menu" aria-label="Open actions list"></div>\n <div class="smart-kanban-task-comments"${l} num="${o[a.comments].length||""}" role="button" aria-haspopup="dialog" aria-label="Open comments list"></div>\n</div>`,e.setAttribute("aria-label",o[a.text]),t._updateTaskCustomFields(e),t._updateTaskSubtasks(e)}_updateTaskCustomFields(e){const t=this,a=e.data;if(t.taskCustomFields.length>0){const s=e.querySelector(".smart-kanban-task-custom-fields");s.classList.remove("smart-hidden");for(let o=0;o<t.taskCustomFields.length;o++){const l=t.taskCustomFields[o];let r=a[l.dataField];if(t.dataSourceMap[l.dataField])continue;if(null==r||!1===l.visible)continue;"string"==typeof r&&r.length>50&&(r=r.substring(0,50)+"...");const n=e.querySelector("[data-field="+l.dataField+"]");if(n)n.innerHTML=`<div class="smart-kanban-task-field-label">${l.label}</div><div class="smart-kanban-task-field-value">${r}</div>`;else{const e=document.createElement("div");e.classList.add("smart-kanban-task-field"),e.setAttribute("data-field",l.dataField),e.innerHTML=`<div class="smart-kanban-task-field-label">${l.label}</div><div class="smart-kanban-task-field-value">${r}</div>`,s.appendChild(e)}}}}_updateTaskSubtasks(e){const t=this;if("none"===t.taskSubTasks)return void e.querySelector(".smart-kanban-task-subtasks").classList.add("smart-hidden");const a=e.data,s=t.dataSourceMap,o=[],l=[];(a[s.checklist]||[]).forEach(((e,t)=>{e.completed&&o.push(t),l.push({label:e.text,selected:!0===e.completed})}));const r=e.querySelector(".smart-kanban-task-subtasks"),n=e.querySelector(".smart-kanban-task-subtasks-container");n.innerHTML="",r.classList.remove("smart-hidden");const i=e.querySelector(".smart-kanban-task-input");t._currentUser&&!t._currentUser.allowEdit||t.disabled||!t.taskSubTasksInput?i.classList.add("smart-hidden"):i.classList.remove("smart-hidden"),i.onchange=function(){a[s.checklist]||(a[s.checklist]=[]),a[s.checklist].push({text:i.value,completed:!1}),i.value="",t._updateTaskSubtasks(e)},l.length&&l.forEach(((o,r)=>{const i=document.createElement("div"),d=o.label;i.innerHTML=`<div data-index="${r}" class="smart-kanban-sub-task"><span title="${d}" class="smart-truncate label">${d}</span><span class="remove-subtask" aria-label="Remove subtask" title="${t.localize("removeSubtask")}"></span></div>`,o.selected&&i.firstChild.classList.add("selected"),"onlyUnfinished"===t.taskSubTasks&&o.selected&&i.classList.add("smart-hidden");let c=!0;(t._currentUser&&!t._currentUser.allowEdit||t.disabled)&&(c=!1),i.querySelector(".remove-subtask").style.opacity=c?1:0,i.onclick=o=>{let r=!0;if((t._currentUser&&!t._currentUser.allowEdit||t.disabled)&&(r=!1),!r)return;const n=parseInt(i.firstChild.getAttribute("data-index")),d=l[n];o.target.classList.contains("remove-subtask")?(l.splice(n,1),i.classList.add("smart-hidden"),a[s.checklist].splice(n,1)):(i.firstChild.classList.toggle("selected"),d.selected=!d.selected,a[s.checklist][n].completed=d.selected,"onlyUnfinished"===t.taskSubTasks&&d.selected&&i.classList.add("smart-hidden")),t._updateTaskChecked(e),o.preventDefault(),o.stopPropagation()},n.appendChild(i)}))}_applyTextTemplate(e,t,a){const s=this;let o=this.textTemplate;if(!o)return e;let l="";if("function"==typeof o){const s={data:t,task:a,text:e,template:null};if(o(s),e=s.text,null===s.template)return e;o=s.template}if(o.startsWith("#")){const a=document.querySelector(o);if(a&&a instanceof HTMLTemplateElement){const o=a.content.cloneNode(!0),r=document.createElement("div");return r.appendChild(o),e=(e=(e=e.toString()).replace(/'/gi,"\\'")).replace(/"/gi,'\\"'),l=r.innerHTML.replace(/{{text}}/gi,e).replace(/{{id}}/gi,t[s.dataSourceMap.id]),l.indexOf("{{text=")>=0&&(e?(l=l.substring(0,l.indexOf("{{text="))+e+l.substring(l.indexOf("}")),l=l.replace(/}/gi,""),l=l.replace(/{/gi,"")):(l=l.replace(/{{text=/gi,""),l=l.replace(/}}/gi,""))),l}}return l=o.replace(/{{text}}/gi,e).replace(/{{id}}/gi,t[s.dataSourceMap.id]),l}_updateUserIcon(e){const t=this,a=this.dataSourceMap,s=e.data,o=e.getElementsByClassName("smart-kanban-task-user")[0];if(void 0!==s[a.userId]&&null!==s[a.userId]){const e=this.users.find((e=>e.id.toString()===s[a.userId].toString()));if(e)return s[a.userId]!==e.id&&(s[a.userId]=e.id),o.classList.remove("empty"),o.style.backgroundImage='url("'+e.image+'")',o.setAttribute("title",t.localize("assignedTask",{userName:e.name||e.id})),void o.setAttribute("aria-label","Icon of user "+(e.name||e.id))}s[a.userId]=null,o.classList.add("empty"),o.style.backgroundImage=null,o.setAttribute("aria-label","Empty user icon"),o.setAttribute("title",t.localize("unassignedTask"))}_updateTaskProgress(e){const t=this.dataSourceMap,a=e.data,s=e.querySelector(".smart-kanban-task-progress");let o=a[t.progress];if(void 0===o){a[t.progress]=null,s.setAttribute("aria-valuenow",0);const e=this.localize("taskProgress",{value:0});return void s.parentElement.setAttribute("title",e)}if(o=parseFloat(o),isNaN(o)){a[t.progress]=null,s.setAttribute("aria-valuenow",0);const e=this.localize("taskProgress",{value:0});return void s.parentElement.setAttribute("title",e)}o=Math.max(0,Math.min(parseFloat(o),100)),a[t.progress]=o,s.style.width=o+"%",s.classList.toggle("bottom",null!==a[t.checklist]),s.setAttribute("aria-valuenow",o);const l=this.localize("taskProgress",{value:o});s.parentElement.setAttribute("title",l)}_updateTaskChecked(e){const t=this.dataSourceMap,a=e.data,s=a[t.checklist],o=e.querySelector(".smart-kanban-task-checked");if(s&&Array.isArray(s)&&s.length>0?o.innerHTML=this._getCompletedSubTasks(s):(a[t.checklist]=null,o.innerHTML=""),o.innerHTML.length>0){const e=this.localize("taskCompleted",{value:o.innerHTML});o.setAttribute("title",e)}else o.removeAttribute("title")}_getCompletedSubTasks(e){if(null===e)return"";let t=0;return e.forEach((e=>e.completed&&t++)),t+"/"+e.length}_updateTaskDueDate(e){const t=this.dataSourceMap;let a=e.data,s=a[t.dueDate],o=e.querySelector(".smart-kanban-task-due");if("string"==typeof s&&(s=new Date(s),s.setTime(s.getTime()-1*s.getTimezoneOffset()*60*1e3),a[t.dueDate]=s),s)if(o.innerHTML=new Smart.Utilities.DateTime(s).toString(this.formatStringDate),o.classList.toggle("overdue",s.getTime()<(new Date).getTime()&&100!==a[t.progress]),o.classList.contains("overdue")){const e=Math.abs(new Date-s),t=Math.ceil(e/864e5);o.setAttribute("title",this.localize("overdue")+" "+t+" "+this.localize("days"))}else o.removeAttribute("title");else a[t.dueDate]=null,o.innerHTML="",o.classList.remove("overdue"),o.removeAttribute("title");a[t.startDate]?"string"==typeof a[t.startDate]&&(a[t.startDate]=new Date(a[t.startDate]),a[t.startDate].setTime(a[t.startDate].getTime()-1*a[t.startDate].getTimezoneOffset()*60*1e3)):a[t.startDate]=null}_updateTaskColor(e){const t=this,a=t.dataSourceMap,s=e.data,o=e.querySelector(".smart-kanban-task-progress-container"),l=e.querySelector(".smart-kanban-task-progress"),r=t.rightToLeft?"borderRightColor":"borderLeftColor";function n(e){let t=parseFloat(e).toString(16);return t="0".repeat(2-t.length)+t,t.toUpperCase()}if(e.style.borderLeftColor=null,e.style.borderRightColor=null,s[a.color]){e.style[r]=s[a.color];const d=getComputedStyle(e)[r],c="dark"===t.theme?.4:.1;s[a.color]=(i=(i=d).match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/))?"#"+n(i[1])+n(i[2])+n(i[3]):null,o.style.backgroundColor=`rgba(${d.slice(4,d.length-1)}, ${c})`,l.style.backgroundColor=d,t.taskColorEntireSurface&&(e.style.backgroundColor=`rgba(${d.slice(4,d.length-1)}, ${c})`)}else if(s[a.color]=null,o.style.backgroundColor=null,l.style.backgroundColor=null,t.taskColorEntireSurface){const a=getComputedStyle(e)[r],s="dark"===t.theme?.4:.1;e.style.backgroundColor=`rgba(${a.slice(4,a.length-1)}, ${s})`}var i}_updateTaskPriority(e){const t=this,a=t.dataSourceMap,s=e.data;e.querySelector(".priority").className="priority "+s[a.priority];const o=t.localize(s[a.priority])+" "+t.localize("priority"),l=s[a.text];e.querySelector(".smart-kanban-task-content").setAttribute("title",`${l}: ${o}`)}_validateSwimlanes(){const e=this,t=e.swimlanesFrom,a=e.swimlanesTo,s=[];t<0&&(e.swimlanesFrom=0),null!==a&&t>a&&(e.swimlanesFrom=a),e.swimlanes.forEach((e=>{"string"==typeof e&&(e={dataField:e,label:e}),(e.dataField||e.label)&&(e.label||(e.label=e.dataField),e.dataField||(e.dataField=e.label),s.push(e))})),e.swimlanes=s}_handleSwimlanes(e){const t=this,a=t.swimlanes;if(0===a.length||0===t.columns.length)return;const s=t.columns,o=parseFloat(getComputedStyle(t).getPropertyValue("--smart-kanban-header-size")),l=t.$.container,r=t.$.container.getBoundingClientRect(),n=t.$.container.querySelectorAll(".smart-kanban-column.has-swimlane");let i=n[0],d=n[n.length-1];if(t.rightToLeft){let e=i;i=d,d=e}const c=i.getBoundingClientRect(),u=n.length>1?d.getBoundingClientRect():c,m=Array.from(i.getElementsByTagName("smart-scroll-viewer"));let p,b,h,g,f=!1,v=!0,_=t.swimlanesTo;null===_&&(_=s.length-1),e&&(p=l.getElementsByClassName("swimlane")),i.column.collapsed&&(i.classList.remove("collapsed"),f=!0);for(let e=t.swimlanesFrom;e<=_;e++)v=v&&s[e].collapsed;v||(b=u.right-c.left+"px",h=c.left-r.left+"px",g=m.map((e=>e.getBoundingClientRect().top-r.top-o-t._dataViewPadding+"px"))),a.forEach(((t,a)=>{let s;e?s=p[a]:(s=document.createElement("div"),s.innerHTML=`<div class="swimlane-label">${t.label}</div>`,s.className="swimlane",s.setAttribute("role","heading"),s.setAttribute("aria-level",2),t.color&&(s.style.backgroundColor=t.color)),s.classList.toggle("smart-visibility-hidden",v),v||(s.style.width=b,s.style.left=h,s.style.top=g[a]),e||l.appendChild(s)})),f&&i.classList.add("collapsed")}_renderColumns(){const e=this,t=e.collapsible,a=[],s=e.$.body,o=document.createDocumentFragment();let l=e.columns;const r=e.context;if(e.context=e,e._columnToElement=new Map,e._columnContainers=[],0===l.length){const t=e.dataSource;t&&0!==t.length&&(l=[],t.forEach((t=>{const a=t[e.dataSourceMap.status];a&&-1===l.indexOf(a)&&l.push(a)})))}!function e(a,s,o){const l=[];let r=0;if(a.forEach((a=>{"string"==typeof a&&(a={dataField:a,label:a}),(a.dataField||a.label)&&(a.label||(a.label=a.dataField),a.dataField||(a.dataField=a.label),"horizontal"!==a.orientation&&(a.orientation="vertical"),!1!==a.collapsible&&(a.collapsible=!0),a.collapsed&&t&&a.collapsible?r++:a.collapsed=!1,!1!==a.addNewButton&&(a.addNewButton=!0),!1!==a.allowRemove&&(a.allowRemove=!0),!1!==a.editable&&(a.editable=!0),!1!==a.reorder&&(a.reorder=!0),0===o?delete a.selected:!0===a.selected?l.push(a):a.selected=!1,a.columns&&(a.validColumns=[],e(a.columns,a.validColumns,o+1),a.columns=a.validColumns,delete a.validColumns),s.push(a))})),r&&r===s.length&&(s[0].collapsed=!1),l.length>1)for(let e=l.length-2;e>=0;e--)l[e].selected=!1;else o>0&&0===l.length&&s.length>0&&(s[0].selected=!0)}(l,a,0),e.columns=a,0===e.swimlanes.length?"columns"===e.hierarchy?e._createColumnElements(a,o,s,1):e._createColumnElementsTabs(a,o,s):e._createColumnElementsSwimlanes(a,o,s),s.appendChild(o),e._selectedTabs=e._allColumns.filter((e=>e.selected)).map((e=>e.dataField)),e._autoSaveState("tabs"),e.context=r}_createAddNewButton(){const e=this,t=e.querySelectorAll(".smart-kanban-add-new-button");t.length&&t.forEach((e=>{e.remove()})),(e.addNewButton||"top"===e.addNewButtonDisplayMode)&&(e.addNewButtons=[],e.querySelectorAll(".smart-kanban-column").forEach((t=>{const a=t.querySelector(".smart-scroll-viewer");if(a){const s=(()=>{const e=document.createElement("div");return e.setAttribute("add-new-button",""),e.classList.add("smart-kanban-add-new-button"),e.onclick=()=>{if(e.column){const t=e.column.querySelector(".smart-kanban-column-header-add");t&&t.click()}},e})(),o=t.column;if(!o||o&&o.collapsed||o&&!o.addNewButton)return;t.appendChild(s);const l=()=>{const o=a.getBoundingClientRect(),l=t.querySelectorAll(".smart-kanban-task"),r=e.offset(e);if(0===l.length){const a=t.querySelector(".smart-kanban-column-header"),o=e.offset(a).top-r.top;s.style.top=o+a.offsetHeight+"px"}else{const t=l[l.length-1],n=e.offset(t),i=e.offsetHeight-2*s.offsetHeight,d=n.top-r.top+t.offsetHeight;if(a.computedVerticalScrollBarVisibility){const t=e.getBoundingClientRect();s.style.top=Math.min(o.top-t.top+a.offsetHeight,i)+"px"}else s.style.top=Math.min(d,i)+"px"}s.style.left=o.left+a.offsetWidth/2-s.offsetWidth/2+"px"};s.refresh=l,s.column=t,t.addNewButton=s,s.refresh(),e.addNewButtons.push(s),requestAnimationFrame((()=>{s.classList.add("show")}))}})),e._refreshSummaries())}_offsetTop(e){return e?e.offsetTop+this._offsetTop(e.offsetParent):0}_offsetLeft(e){return e?e.offsetLeft+this._offsetLeft(e.offsetParent):0}offset(e){return{left:this._offsetLeft(e),top:this._offsetTop(e)}}_getColorInput(){const e=document.createElement("smart-color-input");return e.dataSource=["#D50000","#E67C73","#F4511E","#F6BF26","#33B679","#0B8043","#039BE5","#3F51B5","#7986CB","#8E24AA","#616161","#FFFFFF","#000000",""],e.valueDisplayMode="colorBox",e.classList.add("smart-kanban-color-input"),e.style.width="auto",e.style.height="auto",e.readonly=!0,e.onRender=()=>{const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input")},e}_createColumnElements(e,t,a,s){const o=this,l=o.id,r=[],n=[];let i=0;return e.forEach(((a,d)=>{const c=document.createElement("div");let u=`${o._getColumnHeader(a,d<e.length-1,s)}\n <div class="smart-kanban-column-contentAAA" role="presentation">\n <smart-scroll-viewer class="smart-kanban-column-content-tasks"${o._rtlAttr}${o._tabindex} role="list"></smart-scroll-viewer>BBB\n </div>`,m=0;if(a.columns?(u=u.replace("AAA",""),u=u.replace("BBB",'<div class="smart-kanban-column-content-columns" role="presentation"></div>')):(u=u.replace("AAA"," no-sub-columns"),u=u.replace("BBB","")),c.className="smart-kanban-column",c.setAttribute("data-field",a.dataField),c.setAttribute("role","group"),c.setAttribute("aria-labelledby",`${l}ColumnHeaderLabel${a.dataField}`),c.setAttribute("orientation",a.orientation),a.collapsible&&c.setAttribute("collapsible",""),a.addNewButton&&c.setAttribute("add-new-button",""),c.innerHTML=u,c.siblingColumns=e,t.appendChild(c),c.column=a,c.index=d,o._columnToElement.set(a,c),a.columns){const e=c.querySelector(".smart-kanban-column-content-columns");m=o._createColumnElements(a.columns,e,e,s+1),i+=m}else i+=1;const p=(m||1)+"fr";a.collapsed?(c.classList.add("collapsed"),r.push("auto")):r.push(p),n.push(p),o._allColumns.push(a)})),1===s&&o.addNewColumn&&(o._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,o._columnContainers.push(a),i}_createColumnElementsTabs(e,t,a,s){const o=this,l=o.id,r=[],n=[];e.forEach(((a,i)=>{const d=document.createElement("div");let c=`<div class="smart-kanban-column-contentAAA" role="presentation">\n <smart-scroll-viewer class="smart-kanban-column-content-tasks"${o._rtlAttr}${o._tabindex} role="list"></smart-scroll-viewer>BBB\n </div>`;if(a.columns?(c=c.replace("AAA",""),c=c.replace("BBB",'<div class="smart-kanban-column-content-columns has-tabs" role="presentation"></div>')):(c=c.replace("AAA"," no-sub-columns"),c=c.replace("BBB","")),d.className="smart-kanban-column",d.setAttribute("orientation",a.orientation),a.collapsible&&d.setAttribute("collapsible",""),a.addNewButton&&d.setAttribute("add-new-button",""),s){const e=document.createElement("div"),t=`${l}Tab${a.dataField}`,r=`${l}Column${a.dataField}`;e.id=t,e.className="smart-kanban-tab smart-unselectable",o.disabled||o.unfocusable||(e.tabIndex=0),e.setAttribute("role","tab"),e.setAttribute("aria-controls",r),e.innerHTML=`<div class="smart-kanban-tab-label">${a.label}</div>`,e.columnElement=d,d.id=r,d.setAttribute("role","tabpanel"),d.setAttribute("aria-labelledby",t),d.tab=e,s.appendChild(e),a.selected?e.classList.add("selected"):d.classList.add("smart-hidden"),e.setAttribute("aria-selected",a.selected)}else c=o._getColumnHeader(a,i<e.length-1)+c,d.setAttribute("role","group"),d.setAttribute("aria-labelledby",`${l}ColumnHeaderLabel${a.dataField}`);if(d.innerHTML=c,d.siblingColumns=e,t.appendChild(d),d.column=a,d.index=i,o._columnToElement.set(a,d),a.columns){const e=d.querySelector(".smart-kanban-column-content-columns"),t=document.createElement("div");t.className="smart-kanban-tab-strip",t.setAttribute("role","tablist"),e.appendChild(t),o._createColumnElementsTabs(a.columns,e,e,t)}s||(a.collapsed?(d.classList.add("collapsed"),r.push("auto")):r.push("1fr"),n.push("1fr")),o._allColumns.push(a)})),s||(o.addNewColumn&&(o._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,o._columnContainers.push(a))}_createColumnElementsSwimlanes(e,t,a){const s=this,o=s.id,l=s.swimlanes,r=[],n=[];e.forEach(((a,i)=>{const d=document.createElement("div");let c=`${s._getColumnHeader(a,i<e.length-1)}\n <div class="smart-kanban-column-content no-sub-columns" role="presentation"></div>`;d.className="smart-kanban-column",d.setAttribute("role","group"),d.setAttribute("aria-labelledby",`${o}ColumnHeaderLabel${a.dataField}`),d.setAttribute("orientation",a.orientation),a.collapsible&&d.setAttribute("collapsible",""),a.addNewButton&&d.setAttribute("add-new-button",""),d.innerHTML=c,d.siblingColumns=e;const u=d.children[1];let m="";if(s._hasSwimlane(i)){let e=[];for(let t=0;t<l.length;t++)m+=`<smart-scroll-viewer class="smart-kanban-column-content-tasks" swimlane="${l[t].dataField}"${s._rtlAttr}${s._tabindex} role="list"></smart-scroll-viewer>`,e.push("1fr");d.classList.add("has-swimlane"),u.classList.add("has-swimlane"),u.style.gridTemplateRows=e.join(" ")}else m=`<smart-scroll-viewer class="smart-kanban-column-content-tasks"${s._rtlAttr}${s._tabindex} role="list"></smart-scroll-viewer>`;u.innerHTML=m,t.appendChild(d),d.column=a,d.index=i,s._columnToElement.set(a,d),a.collapsed?(d.classList.add("collapsed"),r.push("auto")):r.push("1fr"),n.push("1fr"),s._allColumns.push(a)})),s.addNewColumn&&(s._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,s._columnContainers.push(a)}_getColumnSummary(e){const t=this.getColumnDataItems(e.dataField);return this.columnSummary&&t.length?" ("+t.length+")":""}_getColumnHeaderTemplate(e,t){const a=e.headerTemplate||this.columnHeaderTemplate;if(a){const s=document.createElement("div");let o;if("string"==typeof a&&a.startsWith("#")?o=document.querySelector(a):"string"==typeof a&&(o=a),"function"==typeof a){const s=a(e,t);return s||t}if(o instanceof HTMLTemplateElement){s.appendChild(o.content.cloneNode(!0));const t=/{{\w+}}/g;let a=s.innerHTML;const l=t.exec(a);for(let t=0;t<l.length;t++){const t=e[l[0].replace("{{","").replace("}}","")];a=a.replace(l[0],t)}return a}return o instanceof HTMLElement?s.appendChild(o):s.innerHTML=o,s.innerHTML}return null}_getColumnHeader(e,t,a=1){const s=this,o=s._tabindex,l=e.collapsed?s.localize("expand"):s.localize("collapse"),r=s.localize("addNewTask"),n=s.allowColumnEdit||s.allowColumnRemove?"settings":"",i=s.localize("customizeColumn"),d=e.label,c=s._getColumnSummary(e);let u=`<span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span>`,m="smart-kanban-column-header-label";if(void 0!==e.color){if(e.color){const t=new Smart.Color(e.color).getInvertedColor();u=`<div class="heading" style="background: ${e.color}; color: ${t};"><span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span></div>`}else u=`<div class="heading"><span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span></div>`;m+=" pill"}const p=null!==s.columnHeaderTemplate||e.headerTemplate?s._getColumnHeaderTemplate(e,u):u,b="bottom"===s.addNewButtonDisplayMode?"":"add-new-button";return`<div status="${e.dataField}" ${n} ${b} class="smart-kanban-column-header smart-unselectable"${o} role="heading" aria-level=${a}>\n <div title="${r}" class="smart-kanban-column-header-add ${b}"${o} role="button" aria-label="Add new task"></div>\n <div id="${s.id}ColumnHeaderLabel${e.dataField}" class="${m}">${p}</div>\n <div title="${l}" class="smart-kanban-column-header-toggle-button smart-arrow smart-arrow-${t?"left":"right"}" role="button" aria-hidden="true"></div>\n <div title="${i}" class="smart-kanban-column-actions smart-kanban-column-header-settings-button" role="button" aria-haspopup="menu" aria-label="Open actions list" aria-hidden="true"></div>\n </div>`}_hasSwimlane(e){const t=this;if(0===t.swimlanes.length)return!1;const a=t.swimlanesFrom;let s=t.swimlanesTo;return null===s&&(s=t.columns.length-1),e>=a&&e<=s}_updateColumnWidths(e,t){const a=t.fractions,s=[];for(let t=0;t<e.length;t++)s.push(e[t].collapsed?"auto":a[t]);t===this.$.body&&this.addNewColumn&&s.push("var(--smart-kanban-add-new-column-width)"),t.style.gridTemplateColumns=s.join(" ")}_validateColumnArgument(e){if(!isNaN(e))return this.columns[e];const t=this._allColumns;return"string"==typeof e?t.find((t=>t.dataField===e)):"object"==typeof e?t.find((t=>t===e)):null}_resizeHandler(){this.refresh("resize")}refresh(e){const t=this;"resize"===e?(clearTimeout(t._resizeTimeout),t._resizeTimeout=setTimeout((function(){t._allColumns.forEach((e=>t._refreshScrollViewer(e)))}),50),t._handleSwimlanes(!0)):(t.closePanel(),t._closeList(t._actionsList,"_actionSelectionFor"),t._closeList(t._columnActionsList,"_columnActionSelectionFor"),t._closeList(t._commentsList,"_commentSelectionFor"),t._closeList(t._userList,"_userSelectionFor"),t._closeList(t._priorityList,"_prioritySelectionFor"),t._render())}_refreshScrollViewer(e,t){const a=this,s=e instanceof HTMLElement?e:this._columnToElement.get(e);function o(o,l){(t||""!==o.$.scrollViewerContentContainer.innerHTML.trim())&&(e.collapsed?o.toRefresh=!0:(delete o.toRefresh,requestAnimationFrame((()=>{o.refresh(),0===l&&"horizontal"===e.orientation&&(o.$.content.offsetWidth<=2*a._kanbanTaskMinWidth+a._dataViewPadding?s.setAttribute("orientation","vertical"):"vertical"===s.getAttribute("orientation")&&s.setAttribute("orientation","horizontal"))}))),a._refreshButtonsAndSummaries())}e instanceof Smart.ScrollViewer?o(e):this.swimlanes.length>0?Array.from(s.querySelectorAll("smart-scroll-viewer")).forEach(((e,t)=>o(e,t))):o(s.querySelector("smart-scroll-viewer"),0)}_containerDownHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,s=a.closest(".smart-kanban-task");if(delete t._preventSelection,t.allowColumnReorder){const o=a.closest(".smart-kanban-column-header")&&!a.classList.contains("smart-kanban-column-header-add")&&!a.classList.contains("smart-kanban-column-header-toggle-button");if(!s&&o&&!t._columnEditing){const s=a.closest(".smart-kanban-column");if(s){const a=e.originalEvent.composedPath();let o=0;for(let e=0;e<a.length;e++)a[e].classList&&a[e].classList.contains("smart-kanban-column")&&o++;s.column.reorder&&o<=1&&(t._columnDragDetails={x:e.pageX,y:e.pageY,event:e,kanbanColumn:s})}}}const o=a.closest(".smart-kanban-column"),l=a.closest(".smart-kanban-column-header")&&!a.classList.contains("smart-kanban-column-header-add")&&!a.classList.contains("smart-kanban-column-header-toggle-button"),r=o?o.column:null;if(r){if(l&&t.$.fireEvent("columnClick",{column:r}),new Date-t._clickTime<=300)return!s&&l&&!t._columnEditing&&t.allowColumnEdit&&(t._columnDragDetails=null,!1===r.collapsed&&r.editable&&"menu"!==t.columnEditMode&&t._handleColumnEditing(r.dataField)),void(l&&(r.collapsed?t.expand(r):(!t.allowColumnEdit||t.allowColumnEdit&&"menu"===t.columnEditMode)&&t.collapse(r),t.$.fireEvent("columnDoubleClick",{column:r})));t._clickTime=new Date}s&&(t._focusTask(s),t._startDragging(s,e))}_containerKeydownHandler(e){const t=this;if(t._dragDetails)return;const a=e.key,s=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;function o(a=s){delete t._preventSelection,t._documentUpHandler({originalEvent:{target:a}}),t._containerClickHandler({target:a,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey}),e.preventDefault()}if(s.closest(".smart-kanban-column, .smart-kanban-add-new-column"))return s.classList.contains("smart-kanban-column-content-tasks")?void t._selectViaKeyboard(s.$.content,e,o):void("Enter"!==a&&" "!==a||s instanceof HTMLInputElement!=0||o());if(t.$.headerDropDown.contains(s))"Escape"===a&&(t.closePanel(),t.$[/\s?([a-z]+)-panel/g.exec(t.$.headerDropDown.className)[1]+"Button"].focus());else if(!(s.classList.contains("smart-data-view-header-button")||s.closest(".smart-data-view-search-box")||s.classList.contains("remove-button"))||"Enter"!==a&&" "!==a||o(),s.classList.contains("smart-kanban-list")){const l=s;switch(a){case"ArrowDown":t._selectListItem(t._getNextItem(l));break;case"ArrowUp":t._selectListItem(t._getPrevItem(l));break;case"Home":t._selectListItem(t._getFirstItem(l));break;case"End":t._selectListItem(t._getLastItem(l));break;case"Escape":l.openedFrom.focus(),t._closeList(l,l===t._actionsList?"_actionSelectionFor":l===t._commentsList?"_commentSelectionFor":"_userSelectionFor"),l===t._columnActionsList&&t._closeList(t._columnActionsList,"_columnActionSelectionFor");break;case"Enter":case" ":{const e=t._getSelectedItem(l);e&&o(e);break}default:return}e.preventDefault()}}_selectViaKeyboard(e,t,a){const s=this;let o=t.key;switch(s.rightToLeft&&("ArrowRight"===o?o="ArrowLeft":"ArrowLeft"===o&&(o="ArrowRight")),o){case"ArrowDown":case"ArrowRight":s._focusTask(s._getNextItem(e,!0));break;case"ArrowUp":case"ArrowLeft":s._focusTask(s._getPrevItem(e,!0));break;case"Home":s._focusTask(s._getFirstItem(e));break;case"End":s._focusTask(s._getLastItem(e));break;case"Enter":case" ":case"F2":case"Delete":{const t=s._getSelectedItem(e,!0);t&&("F2"===o?s.beginEdit(t):"Delete"===o?s.removeTask(t,!0):a(t));break}default:return}t.preventDefault()}_getFirstItem(e){const t=e.children;for(let e=0;e<t.length;e++){const a=t[e];if(!a.hasAttribute("disabled")&&"none"!==getComputedStyle(a).display)return a}}_getLastItem(e){const t=e.children;for(let e=t.length-1;e>=0;e--){const a=t[e];if(!a.hasAttribute("disabled")&&"none"!==getComputedStyle(a).display)return a}}_getPrevItem(e,t){const a=this._getSelectedItem(e,t);let s=a?a.previousElementSibling:this._getLastItem(e);for(;s;){if(!s.hasAttribute("disabled")&&"none"!==getComputedStyle(s).display)return s;s=s.previousElementSibling}}_getNextItem(e,t){const a=this._getSelectedItem(e,t);let s=a?a.nextElementSibling:this._getFirstItem(e);for(;s;){if(!s.hasAttribute("disabled")&&"none"!==getComputedStyle(s).display)return s;s=s.nextElementSibling}}_getSelectedItem(e,t){return t?e.querySelector("[focus]"):e.querySelector(".selected")}_selectListItem(e){if(!e)return;const t=e.parentElement,a=t.querySelector(".selected");a&&(a.classList.remove("selected"),a.removeAttribute("aria-selected")),e.classList.add("selected"),e.setAttribute("aria-selected",!0),t.scrollTop=e.offsetTop}_focusTask(e){e&&(Array.from(e.parentElement.querySelectorAll("[focus]")).forEach((e=>e.removeAttribute("focus"))),e.setAttribute("focus",""),this.ensureVisible(e))}_setFocusable(){const e=this,t=e.$.container,a=e.disabled||e.unfocusable;let s=[e.$.customizeButton,e.$.filterButton,e.$.sortButton,e.$.searchButton,e.$.searchPrev,e.$.searchNext,e.$.searchClose,e._actionsList,e._userList];if(s=s.concat(Array.from(t.querySelectorAll(".smart-kanban-column-header, .smart-kanban-column-header-add, .smart-kanban-tab, .smart-kanban-column-content-tasks, .smart-kanban-task-user, .smart-kanban-task-actions, .smart-kanban-task-comments, .smart-kanban-add-new-column"))),s.forEach((e=>{a?e.removeAttribute("tabindex"):(null===e.getAttribute("tabindex")||e.getAttribute("tabindex")<0)&&e.setAttribute("tabindex",0)})),e._dialog&&e._dialog.editPanelPopulated){const t=Array.from(e._dialog.$.container.querySelectorAll(".text-editor, .new-subtask"));a?t.forEach((e=>e.tabIndex=-1)):t.forEach((e=>e.removeAttribute("tabindex"))),Array.from(e._dialog.$.container.querySelectorAll(".smart-element.editor, smart-button.add, smart-button.ok, smart-button.cancel")).forEach((e=>e.unfocusable=a)),e._dialog.unfocusable=a}}_startDragging(e,t){const a=this;if(!a._currentUser.allowDrag)return;const s=e.closest("smart-scroll-viewer"),o=e.getBoundingClientRect();let l=e.hasAttribute("selected")?Array.from(e.parentElement.querySelectorAll("[selected]")):[e];a._dragDetails={StartPosition:{left:t.pageX,top:t.pageY},Items:l,Item:e,FeedbackShown:!1,OriginalEvent:t,Column:e.classList.contains("smart-kanban-column")?e:null,PointerOffset:[o.x-t.clientX,o.y-t.clientY],ScrollViewer:s,StartTime:new Date,Dragging:!0},Smart.Kanban.kanbanTaskDragged=!0,s&&s._scrollView&&(s._scrollView.disableSwipeScroll=!0),a.allowDrop&&(Smart.Kanban.hoveredKanban=a,Smart.Kanban.hoveredItem=e)}_documentMoveHandler(e){const t=this,a=t._dragDetails;function s(){delete t._dragDetails,delete Smart.Kanban.kanbanTaskDragged,delete Smart.Kanban.hoveredKanban,delete Smart.Kanban.hoveredItem,a.ScrollViewer._scrollView.disableSwipeScroll=!1}if(t.allowColumnReorder&&t._columnDragDetails&&(Math.abs(e.pageX-t._columnDragDetails.x)>=3||Math.abs(e.pageY-t._columnDragDetails.y)>=3)&&(t._startDragging(t._columnDragDetails.kanbanColumn,t._columnDragDetails.event),t._columnDragDetails=null),!a)return;if(!a.FeedbackShown){const o=(new Date).getTime()-a.StartTime.getTime()>500,l=Math.abs(a.StartPosition.left-e.pageX)>5||Math.abs(a.StartPosition.top-e.pageY)>5;if(!l||!(!t._isMobile||t._isMobile&&o))return void(t._isMobile&&l&&!o&&s());if(t.$.fireEvent("dragStart",{item:a.Item,items:a.Items,data:a,container:t,previousContainer:t,originalEvent:a.OriginalEvent}).defaultPrevented)return void s();t.closePanel(),t._hideBodyOverflow(),a.Feedback=t._addDragFeedback(),a.FeedbackShown=!0,a.Items.forEach((e=>e.classList.add("dragged")))}let o,l=t.dragOffset;if(l="auto"!==l&&Array.isArray(l)?l:a.PointerOffset,t.$.fireEvent("dragging",{item:a.Item,items:a.Items,data:a,originalEvent:e}),a.Feedback.style.left=e.pageX+(l[0]||0)+"px",a.Feedback.style.top=e.pageY+(l[1]||0)+"px",Smart.Kanban.hoveredKanban&&(clearInterval(Smart.Kanban.hoveredKanban._dragInterval),delete Smart.Kanban.hoveredKanban),Smart.Kanban.hoveredItem&&(Smart.Kanban.hoveredItem.classList.remove("drop-target"),Smart.Kanban.hoveredItem.classList.remove("before","after"),delete Smart.Kanban.hoveredItem),o=t._isMobile?(t.shadowRoot||t.getRootNode()).elementFromPoint(e.clientX,e.clientY):t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,!o)return;const r=(t.shadowRoot?o.getRootNode().host:o).closest("smart-kanban");if(!r||!r.allowDrop)return;const n=o.closest(".smart-kanban-column-content-tasks");if(Smart.Kanban.hoveredKanban=r,a.Column)return void t._handleColumnDragging(e);if(!n)return;const i=n.parentElement.parentElement.getAttribute("orientation"),d=Array.from(n.$.content.children);let c=0;if(d.forEach((e=>e.filteredOut&&c++)),0===d.length||d.length===c)return Smart.Kanban.hoveredItem=n.$.scrollViewerContainer,void Smart.Kanban.hoveredItem.classList.add("drop-target");n.scrollHeight>0&&(r._dragInterval=setInterval((function(){const a=n.getBoundingClientRect();a.left<=e.clientX&&a.left+a.width>=e.clientX?e.clientY>=a.top&&e.clientY<=a.top+20?n.scrollTop-=t._autoScrollCoefficient:e.clientY>=a.top+a.height-20&&e.clientY<=a.top+a.height?n.scrollTop+=t._autoScrollCoefficient:clearInterval(r._dragInterval):clearInterval(r._dragInterval)}),2));let u=o.closest(".smart-kanban-task");if(u&&-1===a.Items.indexOf(u)){const t=u.getBoundingClientRect();"vertical"===i&&e.clientY-t.top<=t.height/2||"horizontal"===i&&e.clientX-t.left<=t.width/2?u.classList.add("before"):u.classList.add("after")}else{if(u&&1===d.length)return;u=u&&1===a.Items.length?t[`_${i}ClosestTaskToHover`]([u.previousElementSibling,u.nextElementSibling],e,!0):t[`_${i}ClosestTaskToHover`](d,e,u||o===n.$.content)}u&&(u.classList.add("drop-target"),Smart.Kanban.hoveredItem=u)}_handleColumnDragging(e){const t=this.querySelectorAll(".smart-kanban-column");let a;for(let s=0;s<t.length;s++){const o=t[s],l=o.getBoundingClientRect();e.clientX>=l.left&&e.clientX<=l.right&&e.clientY>=l.top&&e.clientY<=l.bottom&&(a=o)}if(a){const s=a.getBoundingClientRect();e.clientX-s.left<=s.width&&(a.classList.add("before"),a.classList.add("drop-target")),e.clientX-s.left>=s.width/2&&a===t[t.length-1]&&(a.classList.remove("before"),a.classList.add("after"),a.classList.add("drop-target")),Smart.Kanban.hoveredItem=a}}_hideBodyOverflow(){const e=this,t=(document.scrollingElement||document.documentElement).scrollHeight>document.documentElement.clientHeight,a=(document.scrollingElement||document.documentElement).scrollWidth>document.documentElement.clientWidth,s=e.isInShadowDOM?e.getRootNode().host:document.body;e._originalBodyOverflow={overflowX:s.style.overflowX,overflowY:s.style.overflowY,overflow:s.style.overflow},s.classList.add("smart-dragging"),s.style.overflow=s.style.overflowX=s.style.overflowY="",t&&!a?s.style.overflowX="hidden":a&&!t?s.style.overflowY="hidden":a||t||(s.style.overflow="hidden")}_verticalClosestTaskToHover(e,t,a){const s=this._dragDetails.Items,o=t.clientY;let l,r,n=1/0,i=0,d=e.length-1,c=1;for(a||(i=d,d=0,c=-1);i!==d+c;){const t=e[i];if(i+=c,!t||t.filteredOut||-1!==s.indexOf(t))continue;if(!a){l=t,r="after";break}const d=t.getBoundingClientRect(),u=d.top+d.height/2,m=Math.abs(o-u);if(!(m<n))break;n=m,l=t,r=o<=u?"before":"after"}return l&&l.classList.add(r),l}_horizontalClosestTaskToHover(e,t){const a=this._dragDetails.Items,s=t.clientY,o=t.clientX;let l,r,n;return e.forEach((e=>{if(!e||e.filteredOut||-1!==a.indexOf(e))return;const t=e.getBoundingClientRect(),i=Math.abs(s-t.top),d=Math.abs(s-t.bottom),c=Math.min(i,d),u=Math.abs(o-t.left),m=Math.abs(o-t.right),p=Math.min(u,m),b=Math.sqrt(Math.pow(p,2)+Math.pow(c,2));(void 0===r||b<r)&&(l=e,r=b,n=u<m?"before":"after")})),l&&l.classList.add(n),l}_scrollViewerTouchmoveHandler(e){const t=this;t._dragDetails&&(t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target).closest("smart-scroll-viewer")&&e.cancelable&&(e.preventDefault(),e.stopPropagation())}_documentUpHandler(e){const t=this,a=t._dragDetails;if(t._columnDragDetails=null,t.$.container.hasAttribute("modal"))return;const s=t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,o=t.$.header;if(t._userSelectionFor&&!t._userList.contains(s)&&t._closeList(t._userList,"_userSelectionFor"),t._prioritySelectionFor&&!t._priorityList.contains(s)&&t._closeList(t._priorityList,"_prioritySelectionFor"),t._actionSelectionFor&&!t._actionsList.contains(s)&&t._closeList(t._actionsList,"_actionSelectionFor"),t._columnActionSelectionFor&&!t._columnActionsList.contains(s)&&(t._closeList(t._columnActionsList,"_columnActionSelectionFor"),e.originalEvent.preventDefault(),e.originalEvent.stopPropagation(),t._columnActionsListDate=new Date),t._commentSelectionFor){const e=t._commentsList;(t.shadowRoot||t.getRootNode()).activeElement!==e.textarea&&(t._actionSelectionFor||e.contains(s)?!e.classList.contains("expanded")||s===e.textarea||e.button.contains(s)||s.classList.contains("remove-button")||e.classList.remove("expanded"):t._closeList(e,"_commentSelectionFor"))}if(!("none"===t.headerPosition||t.$.headerDropDown.classList.contains("smart-visibility-hidden")||t.$.headerDropDown.classList.contains("search-panel")||s!==o&&o.contains(s))){const e=s.closest("smart-scroll-viewer"),a=s.closest(".smart-drop-down");e&&o.contains(e.ownerElement)||a&&(!a.ownerElement||o.contains(a.ownerElement))||t.closePanel()}if(!a)return;const l=Smart.Kanban.hoveredKanban,r=Smart.Kanban.hoveredItem;if(delete t._dragDetails,delete Smart.Kanban.kanbanTaskDragged,delete Smart.Kanban.hoveredKanban,delete Smart.Kanban.hoveredItem,a.ScrollViewer&&a.ScrollViewer._scrollView&&(a.ScrollViewer._scrollView.disableSwipeScroll=!1),!a.FeedbackShown)return;const n=l||(t.shadowRoot||t.getRootNode()).elementFromPoint(e.clientX,e.clientY);t._preventSelection=!0;const i=t.isInShadowDOM?t.getRootNode().host:document.body;i.classList.remove("smart-dragging"),i.style.overflow=t._originalBodyOverflow.overflow,i.style.eoverflowX=t._originalBodyOverflow.overflowX,i.style.overflowY=t._originalBodyOverflow.overflowY,delete t._originalBodyOverflow,a.Feedback.remove(),l&&clearInterval(l._dragInterval);const d=a.Item,c=a.Items;if(c.forEach((e=>e.classList.remove("dragged"))),!n)return;if(!r)return void t.$.fireEvent("dragEnd",{item:d,items:c,target:n,data:a,previousContainer:t,container:n,originalEvent:e});if(!l||!l.allowDrop||l.disabled)return;let u=!1;if(r.classList.remove("drop-target"),r.classList.contains("before")?r.classList.remove("before"):r.classList.contains("after")&&(r.classList.remove("after"),u=!0),a.DropDetails={item:r,after:u},t.$.fireEvent("dragEnd",{item:d,items:c,target:r,data:a,previousContainer:t,container:l,originalEvent:e}).defaultPrevented)return;function m(e,s){t._requestVirtualDataSource("update",Object.assign({},e.data,{status:s}),(function(s){return s&&t._moveDraggedItems(Object.assign({},a,{Item:e,Items:[e]})),s}))}const p=r.closest(".smart-kanban-column"),b=p.column.dataField;if(a.Column){const e=()=>Array.from(p.parentElement.querySelectorAll(".smart-kanban-column")).filter((e=>e.parentElement===p.parentElement)),s=e().indexOf(a.Column);a.DropDetails.after?p.parentElement.appendChild(a.Column):p.parentElement.insertBefore(a.Column,p);const o=e().indexOf(a.Column),l=[],r=e();for(let e=0;e<r.length;e++)r[e].column&&!r[e].classList.contains("smart-kanban-add-new-column")&&l.push(r[e].column);return t.columns=l,t.$.fireEvent("columnReorder",{column:a.Column.column,oldIndex:s,index:o}),t._reset(),void t._createAddNewButton()}if(d&&d.data&&b!==d.data.status){const e=Object.assign({},d.data);e.status=b;const a=t.getColumn(b);a&&(e.statusLabel=a.label);const s=t.getColumn(d.data.status);s&&(d.data.statusLabel=s.label);const o=JSON.parse(JSON.stringify(e)),l=JSON.parse(JSON.stringify(d.data));if(t.$.fireEvent("change",{task:d,id:o.id,value:o,oldValue:l}),t.$.fireEvent("taskUpdate",{id:o.id,value:o,oldValue:l}),t._currentUser.info){const e=t.dataSourceMap;d.data[e.updatedUserId]=t._currentUser.info.id,d.data[e.updatedDate]=new Date,t.addHistory(d.data,{action:"moved",user:t._currentUser.info.id,details:{id:d.data[e.id],oldValue:l[e.status],value:o[e.status]},label:d.data[e.text],date:d.data[e.updatedDate]})}}if(t.dataSource&&t.dataSource.virtualDataSource&&b!==d.data[t.dataSourceMap.status])if(u)for(let e=c.length-1;e>=0;e--)m(c[e],b);else for(const e of c)m(e,b);else t._moveDraggedItems(a)}_refreshButtonsAndSummaries(){const e=this;e.addNewButtons&&(e.addNewButtons.forEach((e=>{e.refresh()})),e._refreshSummaries())}_addDragFeedback(){const e=this,t=e._dragDetails.Item,a=e._dragDetails.Items.length,s=document.createElement("div"),o=t.offsetWidth+"px",l=t.offsetHeight+"px";let r=t.cloneNode(!0);if(r.style.width=o,r.style.height=l,t.classList.contains("smart-kanban-column")){r=document.createElement("smart-kanban");const a=Object.assign({},t.column);a.collapsed=!1;const l=[a];r.columns=l,r.dataSource=e.dataSource,r.users=e.users,r.taskActions=e.taskActions,r.taskDue=e.taskDue,r.taskProgress=e.taskProgress,r.style.height="100%",r.style.width=o,r.style.minWidth="250px",s.setAttribute("column-drag","")}if(s.className="smart-kanban-feedback",s.setAttribute("parent-kanban-id",e.id),e.theme&&s.setAttribute("theme",e.theme),["rightToLeft","taskActions","taskComments","taskDue","taskPriority","taskProgress","taskTags","taskUserIcon"].forEach((t=>{e[t]&&s.setAttribute(Smart.Utilities.Core.toDash(t),"")})),s.appendChild(r),a>1){const e=document.createElement("div");e.style.width=o,e.style.height=l,e.className="smart-kanban-feedback-additional",s.insertBefore(e,r),r.setAttribute("num",a),a>2&&e.classList.add("multiple")}return e.getShadowRootOrBody().appendChild(s),s}_moveDraggedItems(e){const t=this,a=t.dataSourceMap;let s,o=e.DropDetails,l=o.item,r=l.closest(".smart-kanban-column"),n=e.Item.closest("smart-scroll-viewer"),i=r.column;if(l.classList.contains("smart-kanban-task")?(s=l.parentElement,o.after&&(l=l.nextElementSibling),e.Items.forEach((e=>{s.insertBefore(e,l),e.data[a.status]=i.dataField}))):(s=l.firstElementChild,e.Items.forEach((e=>{s.appendChild(e),e.data[a.status]=i.dataField}))),s=s.closest("smart-scroll-viewer"),t.swimlanes.length>0){const t=s.getAttribute("swimlane");t?e.Items.forEach((e=>e.data[a.swimlane]=t)):e.Items.forEach((e=>delete e.data[a.swimlane]))}t._focusTask(e.Item),n!==s&&(s.focus(),t.textTemplate&&e.Items.forEach((e=>t._renderTask(e))),e.Item.hasAttribute("selected")&&(e.Items.forEach((e=>e.removeAttribute("selected"))),t._selectedTasks=[],t._autoSaveState("selection")),t._refreshScrollViewer(n,!0),t._refreshScrollViewer(s,!0)),t._refreshSummaries(),t._autoSaveState("dataSource")}_getCurrentDataSource(){const e=Array.from(this.$.container.getElementsByClassName("smart-kanban-task")),t=[];for(let a=0;a<e.length;a++)t.push(e[a].data);return t}_validateTaskArgument(e){const t=this;return e instanceof HTMLElement&&t.$.container.contains(e)&&e.classList.contains("smart-kanban-task")?e:null===e||"number"!=typeof e&&"string"!=typeof e?void 0:t.$.container.querySelector(`.smart-kanban-task[data-id="${e}"]`)}_openDialog(e,t,a="task"){const s=this,o={purpose:t};if(o[a]=e,s.$.fireEvent("opening",o).defaultPrevented)return;s._dialog||s._createDialog();const l=s._dialog,r="prompt"===t;if(l.openedFrom=(s.shadowRoot||s.getRootNode()).activeElement,l.classList.toggle("prompt",r),l.classList.toggle("edit",!r),l.style.top="",l.style.left="",l.style.width="",l.style.height="auto",s.offsetWidth<600&&(l.style.top="0px",l.style.left="0px",l.style.width="100%",l.style.height="100%"),l.taskOrComment=e,"edit"===t?s._currentUser&&s._currentUser.allowRemove&&l.querySelector(".delete").classList.remove("smart-hidden"):l.querySelector(".delete").classList.add("smart-hidden"),l.editPanelPopulated&&(l.selectTab(0),l.editors.historyTab&&l.editors.historyTab.classList.add("smart-hidden")),r){let t="task"===a?s.localize("promptTask",{taskText:e.data[s.dataSourceMap.text]}):s.localize("promptComment"),o="task"===a?s.localize("removeTask",{taskText:e.data[s.dataSourceMap.text]}):s.localize("removeComment");"column"===a&&(t=s.localize("promptColumn"),o=s.localize("removeColumn")),l.label=o,l.setAttribute("aria-label",t),l.$.container.querySelector(".prompt").innerHTML=t}else{let a=!0;l.removeAttribute("aria-label"),l.headerPosition="top",l.editPanelPopulated||(s._initEditPanel(),a=!1),"edit"===t?s._beginEdit(e):"add"===t&&(l.label=s.localize("addNewTask"),delete l.taskOrComment,a&&s._clearEditors(),l.editors.status.value=e.label,l.editors.status.$.input.dataValue=e.dataField,0===s.swimlanes.length?(l.editors.swimlane.classList.add("smart-hidden"),l.editors.swimlaneLabel.classList.add("smart-hidden"),l.editors.swimlane.parentElement.classList.add("single-column")):(l.editors.swimlane.classList.remove("smart-hidden"),l.editors.swimlaneLabel.classList.remove("smart-hidden"),l.editors.swimlane.parentElement.classList.remove("single-column")),l.editors.created.parentElement.classList.add("smart-hidden"),l.editors.updated.parentElement.classList.add("smart-hidden"))}s.$.container.setAttribute("modal","");const n=s.offset(s);l.offsetHeight>s.offsetHeight?l.style.top=s.getBoundingClientRect().top+"px":l.style.top=n.top+s.offsetHeight/2-l.offsetHeight/2+"px",l.open()}_createDialog(){const e=this,t=document.createElement("smart-window"),a=document.createElement("template"),s=` animation="${e.animation}"${e._rtlAttr} theme="${e.theme}"${e.unfocusable?" unfocusable":""}`;a.innerHTML=`<smart-button class="ok primary"${s}><span class="smart-icon"></span>${e.localize("ok")}</smart-button>\n<smart-button class="cancel"${s}><span class="smart-icon"></span>${e.localize("cancel")}</smart-button><smart-button class="smart-hidden delete secondary"${s}><span class="smart-icon"></span>${e.localize("delete")}</smart-button>`,t.animation=e.animation,t.footerTemplate=a,t.headerButtons=["close"],t.rightToLeft=e.rightToLeft,t.resizeMode="both",t.liveResize=!0,t.theme=e.theme,t.className="smart-kanban-window",t.innerHTML='<div class="prompt"></div>\n<div class="edit"></div>',t.ownerElement=e,e._dialog=t,e._addDialogHandlers(),e.getShadowRootOrBody().appendChild(t)}_addDialogHandlers(){const e=this,t=e._dialog;t.addEventListener("open",e._dialogEventHandler),t.addEventListener("closing",e._dialogEventHandler),t.addEventListener("close",e._dialogEventHandler),t.addEventListener("click",e._dialogClickHandler)}_dialogEventHandler(e){const t=this,a=t.ownerElement,s=e.type,o=a.context;(t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target)===t&&(a.context=a,"open"===s?(a.$.fireEvent("open"),t.classList.contains("edit")&&(a.hasAnimation?t.addEventListener("transitionend",(function(){requestAnimationFrame((()=>t.editors.text.focus()))}),{once:!0}):requestAnimationFrame((()=>t.editors.text.focus())))):"closing"===s?a.$.fireEvent("closing").defaultPrevented&&(e.preventDefault(),delete t.ok):"close"===s&&(a.$.fireEvent("close"),a._dialogCloseHandler(e)),a.context=o)}_dialogClickHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;if(a.closest(".ok"))t.ok=!0,t.close();else if(a.closest(".cancel"))t.close();else if(a.closest(".delete"))t.ownerElement.removeTask(t.taskOrComment),t.close();else if(a.closest(".add")){const e=t.editors.newSubtask,a=e.value;if(""===a)return;const s=t.editors.checklist;s.insert(s.items.length,{label:a}),e.value="",t.$.content.scrollTop=t.$.content.scrollHeight-t.$.content.offsetHeight,t.refreshTabs()}else if(a.classList.contains("remove-subtask"))t.editors.checklist.removeChild(a.closest("smart-list-item")),t.refreshTabs();else if(a.classList.contains("remove-button")){const e=t.ownerElement.dataSourceMap,s=t.taskOrComment.data[e.comments],o=a.closest(".comment").comment;t.taskOrComment.comment=o,t.taskOrComment.data[e.comments]=s.filter((e=>e!==t.taskOrComment.comment)),t.refreshComments()}}_dialogCloseHandler(){const e=this,t=e.dataSourceMap,a=e._dialog;function s(s){a.taskOrComment.remove(),s.querySelector(".smart-kanban-task-comments").setAttribute("num",s.data[t.comments].length||""),e._commentsList.editing&&(e._commentsList.textarea.value="",delete e._commentsList.editing)}if(e.$.container.removeAttribute("modal"),a.ok){if(a.classList.contains("prompt")){const o=e._commentSelectionFor;if(o){const l=o.data;if(e.dataSource&&e.dataSource.virtualDataSource){const r=Object.assign({},l);r[t.comments]=r[t.comments].filter((e=>e!==a.taskOrComment.comment)),e._requestVirtualDataSource("update",r,(function(e){return e&&(o.data=r,s(o)),e}))}else l[t.comments]=l[t.comments].filter((e=>e!==a.taskOrComment.comment)),s(o)}else e._columnActionSelectionFor&&a.taskOrComment.dataField?e.removeColumn(a.taskOrComment.dataField):e.removeTask(a.taskOrComment)}else e._endEdit();delete a.ok}a.openedFrom&&requestAnimationFrame((()=>{e.getRootNode().contains(a.openedFrom)&&a.openedFrom.focus&&a.openedFrom.focus(),delete a.openedFrom})),delete a.taskOrComment}_closeDialog(){const e=this;e._dialog&&e._dialog.close()}_initEditPanel(){const e=this,t=e.id,a=e._dialog,s=a.$.container.querySelector(".edit"),o=e.users.map((e=>({label:e.name,value:e.id,color:e.color,image:e.image}))),l=e._allColumns.map((e=>({label:e.label,value:e.dataField}))),r=e._getPriority(),n=e.swimlanes.map((e=>({label:e.label,value:e.dataField}))),i=document.createElement("template"),d=` animation="${e.animation}"${e._rtlAttr} theme="${e.theme}"${e.unfocusable?" unfocusable":""}`;i.innerHTML=`<div class="smart-kanban-sub-task"><span class="label">{{label}}</span><span class="remove-subtask" aria-label="Remove subtask" title="${e.localize("removeSubtask")}"></span></div>`,i.id=e.id+"ChecklistTemplate",a.$.container.appendChild(i),s.innerHTML=`\n <div class="smart-kanban-tab-strip">\n <div view="details" class="selected smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("detailsTab")}</div></div>\n <div view="subtasks" class="smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("subtasksTab")}</div></div>\n <div view="comments" class="smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("commentsTab")}</div></div>\n <div view="history" class="smart-kanban-tab smart-hidden"><div class="smart-kanban-tab-label">${e.localize("historyTab")}</div></div>\n <div view="fields" class="smart-kanban-tab smart-hidden"><div class="smart-kanban-tab-label">${e.localize("fieldsTab")}</div></div>\n </div>\n <div class="smart-kanban-tab-content details">\n <div class="layout">\n <div class="column">\n <div id="${t}LabelText" class="editor-label">${e.localize("text")}</div>\n <smart-input class="editor text-editor" aria-labelledby="${t}LabelText"></smart-input>\n <div id="${t}LabelDescription" class="editor-label">${e.localize("description")}</div>\n <textarea class="editor description-editor" aria-labelledby="${t}LabelDescription"></textarea> \n <div id="${t}LabelStatus" class="editor-label">${e.localize("status")}</div>\n <smart-input class="editor status-editor" data-source='${JSON.stringify(l)}' drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelStatus"></smart-input>\n <div id="${t}LabelSwimlane" class="editor-label swimlane-label">${e.localize("swimlane")}</div>\n <smart-input class="editor swimlane-editor" data-source='${JSON.stringify(n)}'${0===n.length?" disabled":""} drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelSwimlane"></smart-input>\n </div>\n <div class="column">\n <div class="editor-container">\n <div id="${t}LabelAssignedTo" class="editor-label">${e.localize("assignedTo")}</div>\n <div id="${t}LabelProgress" class="editor-label">${e.localize("progress")}</div>\n <smart-multi-combo-input readonly pills class="editor asignee-editor" single-select data-source='${JSON.stringify(o)}'${0===o.length?" disabled":""} drop-down-button-position="right"${d} aria-labelledby="${t}LabelAssignedTo"></smart-multi-combo-input>\n <smart-numeric-text-box class="editor progress-editor" input-format="floatingPoint" min="0" max="100" show-unit unit="%"${d} aria-labelledby="${t}LabelProgress"></smart-numeric-text-box>\n </div>\n <div class="editor-container">\n <div id="${t}LabelStartDate" class="editor-label">${e.localize("startDate")}</div>\n <div id="${t}LabelDueDate" class="editor-label">${e.localize("dueDate")}</div>\n <smart-date-time-picker auto-close auto-open class="editor start-date-editor" calendar-button drop-down-append-to="body" drop-down-display-mode="calendar" format-string="${e.formatStringDate}" nullable${d} value="null" aria-labelledby="${t}LabelStartDate"></smart-date-time-picker>\n <smart-date-time-picker auto-close auto-open class="editor due-date-editor" calendar-button drop-down-append-to="body" drop-down-display-mode="calendar" format-string="${e.formatStringDate}" nullable${d} value="null" aria-labelledby="${t}LabelDueDate"></smart-date-time-picker>\n </div>\n <div class="editor-container">\n <div id="${t}LabelPriority" class="editor-label">${e.localize("priority")}</div>\n <div id="${t}LabelColor" class="editor-label">${e.localize("color")}</div>\n <smart-input class="editor priority-editor" data-source='${JSON.stringify(r)}' drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelPriority"></smart-input>\n <smart-color-input value-display-mode="colorBox" class="editor color-editor" drop-down-button-position="right"${d} aria-labelledby="${t}LabelColor"></smart-color-input>\n </div>\n <div id="${t}LabelTags" class="editor-label">${e.localize("tags")}</div>\n <smart-multi-combo-input class="editor tags-editor" select-all drop-down-button-position="right" ${d} aria-labelledby="${t}LabelTags"></smart-multi-combo-input>\n </div>\n </div>\n </div>\n <div class="smart-kanban-tab-content smart-hidden subtasks">\n <div id="${t}LabelChecklist" class="editor-label">${e.localize("checklist")}</div>\n <div class="new-container">\n <input type="text" class="new-subtask" placeholder="${e.localize("newSubtask")}" />\n <smart-button class="add primary" title="${e.localize("addSubtask")}" aria-label="Add subtask"${d}>+</smart-button>\n </div>\n <smart-list-box class="editor checklist-editor" item-template="${i.id}" selection-mode="checkBox"${d} aria-labelledby="${t}LabelChecklist"></smart-list-box>\n <br/>\n </div>\n <div class="smart-kanban-tab-content comments">\n </div>\n <div class="smart-kanban-tab-content history">\n <div class="editor-container">\n <div id="${t}LabelCreatedBy" class="editor-label">${e.localize("createdBy")}</div>\n <div id="${t}LabelCreatedByDate" class="editor-label">${e.localize("createdByDate")}</div>\n <div class="editor created" aria-labelledby="${t}LabelCreatedBy"></div>\n <div class="editor created-date" aria-labelledby="${t}LabelCreatedByDate"></div>\n </div>\n <div class="editor-container">\n <div id="${t}LabelUpdatedBy" class="editor-label">${e.localize("updatedBy")}</div>\n <div id="${t}LabelUpdatedBy" class="editor-label">${e.localize("updatedByDate")}</div>\n <div class="editor updated" aria-labelledby="${t}LabelUpdatedBy"></div>\n <div class="editor updated-date" aria-labelledby="${t}LabelUpdatedByDate"></div>\n </div>\n <div class="history-table smart-hidden editor-container">\n </div>\n </div>\n <div class="smart-kanban-tab-content fields">\n </div> \n<div class="template-container">\n</div>\n`,a.editors={text:s.querySelector(".text-editor"),description:s.querySelector(".description-editor"),tags:s.querySelector(".tags-editor"),userId:s.querySelector(".asignee-editor"),status:s.querySelector(".status-editor"),swimlane:s.querySelector(".swimlane-editor"),swimlaneLabel:s.querySelector(".swimlane-label"),startDate:s.querySelector(".start-date-editor"),dueDate:s.querySelector(".due-date-editor"),progress:s.querySelector(".progress-editor"),priority:s.querySelector(".priority-editor"),color:s.querySelector(".color-editor"),newSubtask:s.querySelector(".new-subtask"),checklist:s.querySelector(".checklist-editor"),template:s.querySelector(".template-container"),created:s.querySelector(".created"),createdDate:s.querySelector(".created-date"),updated:s.querySelector(".updated"),updatedDate:s.querySelector(".updated-date"),tabs:s.querySelector(".smart-kanban-tab-strip"),detailsTab:s.querySelector('[view="details"]'),commentsTab:s.querySelector('[view="comments"]'),subtasksTab:s.querySelector('[view="subtasks"]'),historyTab:s.querySelector('[view="history"]'),fieldsTab:s.querySelector('[view="fields"]')};const c=a.editors.tabs.querySelectorAll(".smart-kanban-tab");a.selectTab=e=>{c[e]&&c[e].click()},a.refreshTabs=t=>{const s=a.taskOrComment.data[e.dataSourceMap.comments],o=s&&s.length?'<span class="summary"> ('+s.length+")</span>":"";let l=a.taskOrComment.data[e.dataSourceMap.checklist],r=l&&l.length?'<span class="summary"> ('+l.length+")</span>":"";t||(l=a.editors.checklist.items.length,l&&(r=l?'<span class="summary"> ('+l+")</span>":"")),a.editors.commentsTab.innerHTML=`${e.localize("commentsTab")}${o}`,a.editors.subtasksTab.innerHTML=`${e.localize("subtasksTab")}${r}`,e.taskCustomFields.length>0?a.editors.fieldsTab.classList.remove("smart-hidden"):a.editors.fieldsTab.classList.add("smart-hidden"),a.taskOrComment.data[e.dataSourceMap.updatedDate]||a.taskOrComment.data[e.dataSourceMap.createdDate]?a.editors.historyTab.classList.remove("smart-hidden"):a.editors.historyTab.classList.add("smart-hidden")},a.refreshFields=()=>{const t=a.querySelector(".fields"),s=a.taskOrComment.data;if(t.firstElementChild)for(let t=0;t<e.taskCustomFields.length;t++){const o=e.taskCustomFields[t],l=s[o.dataField],r=a.querySelector("[container-for="+o.dataField+"]");null==l||e.dataSourceMap[o.dataField]?r.classList.add("smart-hidden"):r.classList.remove("smart-hidden");const n=r.lastElementChild.firstElementChild;n.removeAttribute("dirty"),n.value=l}else{const a=document.createDocumentFragment(),o=(e,t,a)=>{const s=document.createElement("div"),o=document.createElement("div"),l=document.createElement("div");o.innerHTML=e,o.classList.add("editor-label"),l.classList.add("editor");let r=document.createElement("input");return r.classList.add("smart-input"),r.setAttribute("data-field",a.dataField),"date"===a.dataType?r=document.createElement("smart-date-input"):"boolean"===a.dataType?r=document.createElement("smart-check-box"):"number"===a.dataType?r=document.createElement("smart-number-input"):"string"===a.dataType&&a.options&&(r=document.createElement("smart-input"),r.readonly=!0,r.dropDownButtonPosition="right",r.dataSource=a.options),r.classList.add("smart-kanban-task-field-editor"),r.value=t,r.onchange=()=>{r.setAttribute("dirty","")},l.appendChild(r),s.appendChild(o),s.appendChild(l),s.setAttribute("container-for",a.dataField),s},l=document.createElement("div");l.classList.add("editor-container"),a.appendChild(l);for(let t=0;t<e.taskCustomFields.length;t++){const a=e.taskCustomFields[t],r=a.label,n=s[a.dataField],i=o(r,n,a);l.appendChild(i),(null==n||e.dataSourceMap[a.dataField])&&i.classList.add("smart-hidden")}t.appendChild(a)}},a.refreshHistory=()=>{const t=a.querySelector(".history-table");if(!e.storeHistory)return void t.classList.add("smart-hidden");t.classList.remove("smart-hidden");const s=a.taskOrComment.data.history;let o=`<table><tr>\n <th>${e.localize("historyEvent")}</th>\n <th>${e.localize("historyAuthor")}</th>\n <th>${e.localize("historyDetails")}</th>\n <th>${e.localize("historyDate")}</th>\n </tr>\n `;for(let t=s.length-1;t>=0;t--){const a=s[t];let l="";switch(a.action){case"created":l=e.localize("taskCreated");break;case"tags":l=e.localize("taskTagsChanged");break;case"description":l=e.localize("taskDescriptionChanged");break;case"progress":l=e.localize("taskProgressChanged");break;case"text":l=e.localize("taskNameChanged");break;case"color":l=e.localize("taskColorChanged");break;case"priority":l=e.localize("taskPriorityChanged");break;case"deadline":l=e.localize("taskDeadlineChanged");break;case"subtasks":l=e.localize("taskSubtasksChanged");break;case"user":l=e.localize("taskUserChanged");break;case"moved":l=e.localize("taskMoved")}if(o+=`<tr>\n <td>${l}</td>`,void 0!==a.user){const t=(t=>{const a=t?t.image:null;return{image:a?`background-image: url('${a}');`:"",label:t?t.name||t.id:e.localize("guestUser")}})(e.users.find((e=>e.id===a.user)));o+=`<td><div class="smart-kanban-task-user-history"><div class="icon smart-kanban-task-user" style="${t.image}"></div><div class="name">${t.label}</div></div></td>`}else o+="<td></td>";if("created"!==a.action){let t=a.details.oldValue,s=a.details.value;if("user"===a.action){const a=e.users.find((e=>e.id===t)),o=e.users.find((e=>e.id===s));t=a.name,s=o.name}if("subtasks"===a.action){const t=a.details.value.filter((e=>e.completed));o+=`<td><span class="smart-truncate">${e.localize("taskSubtasksCompleted",{value:t.length})}</span></td>`}else o+=t?`<td><span class="smart-truncate">${e.localize("range",{oldValue:t,newValue:s})}</span></td>`:`<td><span class="smart-truncate">${e.localize("nullRange",{oldValue:t,newValue:s})}</span></td>`}else o+=`<td>${a.details.value}</td>`;o+=`\n <td>${a.date.toLocaleString()}</td>\n </tr>`}o+="</table>",t.innerHTML=o,a.refreshTabs()},a.refreshComments=()=>{if(!a.taskOrComment)return;const t=a.querySelector(".comments");t.classList.remove("smart-hidden");const s=e._getCommentsList(a.taskOrComment),o=s.querySelector(".send");o&&(o.onclick=()=>{if(o.disabled)return;const t=JSON.parse(JSON.stringify(e._commentSelectionFor.data));e._createComment(),e._commentsList.textarea.value="",o.disabled=!0,a.refreshTabs();const s=JSON.parse(JSON.stringify(e._commentSelectionFor.data));e.$.fireEvent("change",{task:e._commentSelectionFor,id:s.id,value:s,oldValue:t}),e.$.fireEvent("taskUpdate",{id:s.id,value:s,oldValue:t})}),t.innerHTML="",t.appendChild(s),a.refreshTabs()},c.forEach((e=>{e.onclick=e=>{const t=e.target.closest(".smart-kanban-tab"),s=t.getAttribute("view");switch(c.forEach((e=>{e.classList.remove("selected")})),t.classList.add("selected"),a.querySelectorAll(".smart-kanban-tab-content").forEach((e=>{e.classList.add("smart-hidden")})),s){case"details":a.querySelector(".details").classList.remove("smart-hidden");break;case"subtasks":a.querySelector(".subtasks").classList.remove("smart-hidden");break;case"comments":a.refreshComments();break;case"history":a.querySelector(".history").classList.remove("smart-hidden"),a.refreshHistory();break;case"fields":a.querySelector(".fields").classList.remove("smart-hidden"),a.refreshFields()}}})),(()=>{const e=a.editors.color;e.dataSource=["#D50000","#E67C73","#F4511E","#F6BF26","#33B679","#0B8043","#039BE5","#3F51B5","#7986CB","#8E24AA","#616161","#FFFFFF","#000000",""],e.valueDisplayMode="colorBox",e.classList.add("smart-kanban-color-input"),e.style.width="auto",e.style.height="auto",e.readonly=!0,e.dropDownWidth=50;const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input"),e.onRender=()=>{const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input")}})(),a.editors.newSubtask.onchange=()=>{a.editors.newSubtask.nextElementSibling.click()},a.editPanelPopulated=!0}_beginEdit(e){const t=this,a=t.dataSourceMap,s=e.data,o=t._dialog,l=o.editors,r=t.tags.length>0?t.tags:t._customTags,n=t._allColumns.find((e=>e.dataField===s[a.status]));o.label=t.localize("editTask",{taskId:s[a.id],text:s[a.text]}),l.text.value=s[a.text],l.description.value=s[a.description],l.tags.dataSource=r,s[a.tags]?l.tags.selectedValues=s[a.tags].replace(/\s+/g,"").split(","):l.tags.selectedValues=[],o.editors.created.parentElement.classList.add("smart-hidden"),o.editors.updated.parentElement.classList.add("smart-hidden");const i=void 0!==s[a.createdUserId]?t.users.find((e=>e.id===s[a.createdUserId])):"",d=s[a.createdDate],c=void 0!==s[a.updatedUserId]?t.users.find((e=>e.id===s[a.updatedUserId])):"",u=s[a.updatedDate],m=e=>{const a=e?e.image:null;return{image:a?`background-image: url('${a}');`:"",label:e?e.name||e.id:t.localize("guestUser")}};if(i){const e=m(i);o.editors.created.parentElement.classList.remove("smart-hidden"),o.editors.created.innerHTML=`<div class="icon smart-kanban-task-user" style="${e.image}"></div><div class="name">${e.label}</div>`,d&&(o.editors.createdDate.innerHTML=d.toLocaleString())}if(c){const e=m(c);o.editors.updated.parentElement.classList.remove("smart-hidden"),o.editors.updated.innerHTML=`<div class="icon smart-kanban-task-user" style="${e.image}"></div><div class="name">${e.label}</div>`,u&&(o.editors.updatedDate.innerHTML=u.toLocaleString())}const p=null!==s[a.userId]?t.users.find((e=>e.id===s[a.userId])):"";p?l.userId.selectedItems=[{label:p.name,value:p.id,image:p.image?p.image:null}]:l.userId.value="",delete l.userId.$.input.dataValue,l.status.value=n.label,delete l.status.$.input.dataValue,t._hasSwimlane(t.columns.indexOf(n))?l.swimlane.value=t.swimlanes.find((e=>e.dataField===s[a.swimlane])).label:l.swimlane.value="",delete l.swimlane.$.input.dataValue,l.startDate.value=s[a.startDate]||null,l.dueDate.value=s[a.dueDate]||null,l.progress.value=parseFloat(s[a.progress])||0,l.priority.value=t.localize(s[a.priority]),delete l.priority.$.input.dataValue,l.color.value=s[a.color]||"";const b=[],h=[];(s[a.checklist]||[]).forEach(((e,t)=>{e.completed&&b.push(t),h.push({label:e.text,selected:!0===e.completed})})),0===t.swimlanes.length?(o.editors.swimlane.classList.add("smart-hidden"),o.editors.swimlaneLabel.classList.add("smart-hidden"),o.editors.swimlane.parentElement.classList.add("single-column")):(o.editors.swimlane.classList.remove("smart-hidden"),o.editors.swimlaneLabel.classList.remove("smart-hidden"),o.editors.swimlane.parentElement.classList.remove("single-column")),l.newSubtask.value="",l.checklist.dataSource=h,l.checklist.selectedIndexes=b,o.refreshTabs(!0)}_endEdit(){const e=this,t=e.dataSourceMap,a=e._dialog,s=a.editors,o=a.taskOrComment,l=o?o.data:void 0,r=Object.assign({},l);let n=s.startDate.value,i=s.dueDate.value;if(r[t.text]=s.text.value,r[t.description]=s.description.value,r[t.tags]=s.tags.selectedValues.join(", "),r[t.progress]=parseFloat(s.progress.value),r[t.color]=s.color.value,e._currentUser.info&&(r[t.updatedUserId]=e._currentUser.info.id,r[t.updatedDate]=new Date),r[t.color]||delete r[t.color],void 0!==s.userId.$.input.dataValue&&(r[t.userId]=parseFloat(s.userId.$.input.dataValue)),s.status.$.input.dataValue&&(r[t.status]=s.status.$.input.dataValue),s.swimlane.$.input.dataValue&&(r[t.swimlane]=s.swimlane.$.input.dataValue),n&&(n=n.toDate()),i&&(i=i.toDate()),r[t.startDate]=n,r[t.dueDate]=i,s.priority.$.input.dataValue&&(r[t.priority]=s.priority.$.input.dataValue),r[t.checklist]=s.checklist.items.map((e=>({text:e.label,completed:e.selected}))),e.taskCustomFields&&e.taskCustomFields.length>0)for(let t=0;t<e.taskCustomFields.length;t++){const s=e.taskCustomFields[t],o=a.querySelector("[data-field="+s.dataField+"]");if(o){const e=o.value;o.hasAttribute("dirty")&&(r[s.dataField]=e)}}o?e.updateTask(o,r):e.addTask(r)}_clearEditors(){const e=this,t=e._dialog.editors,a=e.tags.length>0?e.tags:e._customTags;t.text.value="",t.description.value="",t.tags.dataSource=a,t.tags.selectedValues=[],t.status.value="",delete t.status.$.input.dataValue,t.swimlane.value="",delete t.swimlane.$.input.dataValue,t.userId.value="",delete t.userId.$.input.dataValue,t.progress.value=0,t.startDate.value=null,t.dueDate.value=null,t.priority.value=e.localize("average"),t.priority.$.input.dataValue="average",t.color.value="",t.newSubtask.value="",t.created.innerHTML="",t.updated.innerHTML="",t.createdDate.innerHTML="",t.updatedDate.innerHTML="",t.checklist.dataSource=[],t.checklist.selectedIndexes=[]}_getCurrentUser(){const e=this,t=e.users;let a=e.currentUser,s=!0,o=!0,l=e.allowDrag,r=e.editable,n=!0;t&&null!==a&&(a=t.find((e=>e.id===a)),a&&(s=!1!==a.allowAdd,o=!1!==a.allowComment,l=l&&!1!==a.allowDrag,r=r&&!1!==a.allowEdit,n=!1!==a.allowRemove)),e._currentUser={allowAdd:s,allowComment:o,allowDrag:l,allowEdit:r,allowRemove:n,info:a}}_autoSaveState(e){const t=this;if(t.autoSaveState)if("object"!=typeof e)if(e&&t._autoSavedState){switch(e){case"collapsed":t._allColumns.forEach((e=>t._autoSavedState.collapsed[e.dataField]=e.collapsed));break;case"dataSource":t._autoSavedState.dataSource=t._getCurrentDataSource();break;case"filtering":t._autoSavedState.filtering=t._appliedFiltering;break;case"selection":{const e=t.dataSourceMap;let a=null,s=null;t._selectionInView&&(a=t._selectionInView.closest(".smart-kanban-column").column.dataField,s=t._selectionInView.getAttribute("swimlane")),t._autoSavedState.selection={selected:t._selectedTasks.map((t=>t.data[e.id])),selectionStart:t._selectionStart?t._selectionStart.data[e.id]:null,selectionInColumn:a,swimlane:s};break}case"sorting":t._autoSaveState.sorting=t._appliedSorting;break;case"tabs":t._autoSaveState.tabs=t._selectedTabs;break;case"visibility":t._autoSavedState.visibility={taskActions:t.taskActions,taskComments:t.taskComments,taskDue:t.taskDue,taskPriority:t.taskPriority,taskProgress:t.taskProgress,taskTags:t.taskTags,taskUserIcon:t.taskUserIcon}}window.localStorage.setItem("smartKanban"+t.id,JSON.stringify(t._autoSavedState))}else t._autoSavedState=t.saveState();else t._autoSavedState=e}_applyFilter(e,t){const a=this;if(a.dataSource&&a.dataSource.virtualDataSource)return a._requestVirtualDataSource("filter"),void a._autoSaveState("filtering");const s=new Smart.DataAdapter({dataSource:a._getCurrentDataSource(),dataFields:["text: string","tags: string","priority: string","progress: number","startDate: date","dueDate: date","userId: string"],id:"id"});try{s._filter(e,t)}catch(e){return}const o=Array.from(a.$.container.getElementsByClassName("smart-kanban-task"));for(let e=0;e<s.length;e++){const t=o[e],a=!s[e].$.filtered;t.classList.toggle("smart-hidden",a),t.filteredOut=a}a._allColumns.forEach((e=>a._refreshScrollViewer(e))),a._autoSaveState("filtering")}_applyHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target,s=e.detail;t.$.customize.contains(a)?(s.value.forEach((e=>t[e.dataField]=e.visible)),t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("visibility")):t.$.filter.contains(a)?t.addFilter(s.filters,s.operator,s.value):t.$.sort.contains(a)&&t.addSort(s.sortByInfo),t.closePanel()}_applySort(){const e=this,t=e._appliedSorting;e._autoSaveState("sorting"),e.dataSource&&e.dataSource.virtualDataSource?e._requestVirtualDataSource("sort"):0!==t.dataFields.length&&e._allColumns.forEach((a=>{const s=e._columnToElement.get(a).querySelector(".smart-scroll-viewer-content-container"),o=Array.from(s.children),l=[];if(o.length<2)return;o.forEach(((t,a)=>{const s=e.dataSourceMap,o=Object.assign({taskIndex:a},t.data);"low"===o[s.priority]&&(o[s.priority]="z"),l.push(o)}));const r=new Smart.DataAdapter({dataSource:l,dataFields:["taskIndex: number","text: string","tags: string","priority: string","progress: number","startDate: date","dueDate: date","userId: string"],id:"id"});r.sortBy(t.dataFields,t.dataTypes,t.orderBy);for(let e=0;e<r.length;e++)s.appendChild(o[r[e].taskIndex])}))}_closeSearchPanel(){const e=this;e._searchInfo&&(Array.from(e.$.container.querySelectorAll(".smart-kanban-task.smart-data-view-found, .smart-kanban-task.smart-data-view-highlighted")).forEach((e=>e.classList.remove("smart-data-view-found","smart-data-view-highlighted"))),delete e._searchInfo)}_constructFilterGroups(e){const t={text:"string",tags:"string",priority:"string",progress:"number",startDate:"date",dueDate:"date"},a={},s=[];e.filters.forEach((s=>{const o=s[0],l=t[o];let r=s[2],n=a[o];void 0===n&&(n=new Smart.Utilities.FilterGroup,a[o]=n),"date"===l&&"string"==typeof r&&(r=new Date(r));const i=n.createFilter(l,r,s[1]);n.addFilter(e.operator,i)}));for(let e in a)s.push([e,a[e]]);return s}_openSearchPanel(){const e=this;e.$.headerDropDown.classList.add("search-panel"),e.$.headerDropDown.classList.remove("customize-panel","filter-panel","sort-panel"),e.$.search.classList.remove("smart-hidden"),e.$.customize.classList.add("smart-hidden"),e.$.filter.classList.add("smart-hidden"),e.$.sort.classList.add("smart-hidden"),e._openHeaderDropDown(e.$.searchButton),e._searchInfo={source:e._getCurrentDataSource(),stringDataFields:["text","tags"]},""!==e.$.searchInput.value&&e._search(e.$.searchInput.value,!1)}_search(e,t=!0){const a=this;if(a._searchInfo.query=e,Array.from(a.$.container.querySelectorAll(".smart-kanban-task.smart-data-view-found, .smart-kanban-task.smart-data-view-highlighted")).forEach((e=>e.classList.remove("smart-data-view-found","smart-data-view-highlighted"))),""===e)return a.$.search.classList.remove("matches","no-matches"),delete a._searchInfo.foundIdsArray,delete a._searchInfo.foundIdsObject,void delete a._searchInfo.highlighted;const s=new Smart.DataAdapter({dataSource:a._searchInfo.source,dataFields:["text: string","tags: string"],id:"id"}),o=[],l=[],r={};a._searchInfo.stringDataFields.forEach((t=>{const a=new Smart.Utilities.FilterGroup,s=a.createFilter("string",e,"CONTAINS");a.addFilter("or",s),o.push([t,a])})),s._filter(o,"or");for(let e=0;e<s.length;e++){const t=s[e];!1!==t.$.filtered&&(l.push(t.$.id),r[t.$.id]=!0)}if(a._searchInfo.foundIdsArray=l,a._searchInfo.foundIdsObject=r,Array.from(a.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>{const s=e.data[a.dataSourceMap.id];if(r[s]){if(e.filteredOut)return l.splice(l.indexOf(s),1),void delete r[s];t&&l[0]===s&&e.classList.add("smart-data-view-highlighted"),e.classList.add("smart-data-view-found")}})),l.length>0){if(t){let e=l[0];a._searchInfo.highlighted=e,a.ensureVisible(e)}return a.$.search.classList.remove("no-matches"),a.$.search.classList.add("matches"),void(a.$.searchLabel.innerHTML=a.localize("found",{nth:t?1:0,n:l.length}))}a.$.search.classList.remove("matches"),a.$.search.classList.add("no-matches"),a.$.searchLabel.innerHTML=a.localize("found",{nth:0,n:0})}_bodyFocusinHandler(e){const t=this;let a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;a.classList.contains("smart-kanban-column-content-tasks")&&(a=a.$.content,t._getSelectedItem(a,!0)||t._focusTask(t._getFirstItem(a)))}get _rtlAttr(){return this.rightToLeft?" right-to-left":""}get _tabindex(){return this.disabled||this.unfocusable?"":' tabindex="0"'}_appendAddNewColumn(e){const t=document.createElement("div");t.classList.add("smart-kanban-column","smart-kanban-add-new-column","smart-unselectable"),t.innerHTML=`<div class="smart-kanban-column-header smart-unselectable" > <div title="${this.localize("addNewColumn")}" class="smart-kanban-add-new-column-label smart-kanban-column-header-label"><span>+ ${this.localize("addNewStatus")}</span></div></div >\n <div class="smart-kanban-column-content no-sub-columns"><smart-scroll-viewer></smart-scroll-viewer></div>\n `,this.disabled||this.unfocusable||t.setAttribute("tabindex",0),t.column={dataField:"newStatus",label:"New Status"},e.appendChild(t)}getColumn(e){const t=this;let a=null;for(let s=0;s<t.columns.length;s++)if(t.columns[s].dataField===e){a=t.columns[s];break}return a}getColumnDataItems(e){const t=this;let a=[];if(!t.getColumn(e)||!t.dataSource)return[];for(let s=0;s<t.dataSource.length;s++){const o=t.dataSource[s];o[t.dataSourceMap.status]===e&&a.push(o)}return a}updateColumn(e,t){const a=this;let s=null;for(let t=0;t<a.columns.length;t++)if(a.columns[t].dataField===e){s=a.columns[t];break}if(s){const e=s.label;void 0!==t.label&&(s.label=t.label),void 0!==t.collapsed&&(s.collapsed=t.collapsed),void 0!==t.collapsible&&(s.collapsible=t.collapsible),void 0!==t.orientation&&(s.orientation=t.orientation),a._reset(),a.$.fireEvent("columnUpdate",{columnData:t,oldValue:e,value:s.label})}}addColumn(e){const t=this;e?(t.columns.push(e),t._reset(),t._createAddNewButton(),t.$.fireEvent("columnAdd",{columnData:e})):t._addNewColumnDynamically()}removeColumn(e){const t=this;let a=null,s=-1;for(let o=0;o<t.columns.length;o++)if(t.columns[o].dataField===e){a=t.columns[o],s=o;break}a&&t.columns.splice(s,1),t._reset(),t._createAddNewButton(),t.$.fireEvent("columnRemove",{column:a})}_addNewColumnDynamically(){const e=this,t=e._dialog,a=Math.floor(9e4*Math.random()+1e4),s={label:e.localize("addNewStatus")+" "+a,dataField:"newStatus"+a,addNewButton:!0,collapsed:!1,collapsible:!0,orientation:"vertical"},o=e.$.body.querySelector(".smart-kanban-add-new-column").querySelector(".smart-kanban-add-new-column-label"),l=document.createElement("input");if(o.classList.add("pending"),o.appendChild(l),l.classList.add("smart-kanban-column-header-input"),e.columnColors){o.classList.add("colors");const t=e._getColorInput();o.appendChild(t)}function r(a){let r=l.value,n=o.querySelector("smart-color-input");n&&n.opened?e._columnAddTimer&&clearTimeout(e._columnAddTimer):(!1===/^\s*$/.test(r)&&(r=r.trim(),s.label=r,s.dataField="dataField"+Math.floor(65536*(1+Math.random())).toString(16).substring(1)),o.classList.contains("pending")&&(e._columnAddTimer&&clearTimeout(e._columnAddTimer),e._columnAddTimer=setTimeout((()=>{if(o.classList.remove("pending"),l.parentNode&&l.parentNode.removeChild(l),n){s.color=n.value;const e=o.querySelector(".heading");if(e){const t=new Smart.Color(s.color).getInvertedColor();e.style.backgroundColor=s.color,e.style.color=t}n.remove()}t&&t.editPanelPopulated&&(t.editors.status.dataSource=e._allColumns.map((e=>({label:e.label,value:e.dataField})))),e.columns.push(s),e._reset(),e._createAddNewButton(),e.$.fireEvent("columnAdd",{newColumn:s}),delete e._columnAddTimer}),50),a.stopPropagation()))}l.focus(),l.onkeydown=e=>{"Escape"===e.key?(o.classList.remove("pending"),l&&l.parentElement&&(l.parentElement.removeChild(l),e.stopPropagation(),e.preventDefault())):"Enter"===e.key&&r(e)},l.addEventListener("blur",r),l.addEventListener("change",r)}_handleColumnEditing(e){const t=this,a=t.columns.find((t=>t.dataField===e));if(t._columnEditing)return;const s=Array.from(t.$.body.getElementsByClassName("smart-kanban-column")).find((t=>t.column.dataField===e)).querySelector(".smart-kanban-column-header-label"),o=document.createElement("input");s.classList.add("pending"),s.appendChild(o);const l=a.label;if(o.value=a.label,o.classList.add("smart-kanban-column-header-input"),t.columnColors){s.classList.add("colors");const e=t._getColorInput();e.value=a.color||"transparent",s.appendChild(e)}function r(e){let r=o.value,n=s.querySelector("smart-color-input");if(!n||!n.opened){if(!1===/^\s*$/.test(r)&&(r=r.trim(),a.label=r,s.querySelector(".smart-kanban-title").innerHTML=r),n){a.color=n.value;const e=s.querySelector(".heading");if(e){const t=new Smart.Color(a.color).getInvertedColor();e.style.backgroundColor=a.color,e.style.color=t}n.remove()}s.classList.remove("pending");try{o.parentNode&&o.parentNode.removeChild(o)}catch(e){t._error=e}t._columnEditTimer&&clearTimeout(t._columnEditTimer),t._columnEditing=!1,t._columnEditTimer=setTimeout((()=>{l!==a.label&&t.$.fireEvent("columnUpdate",{column:a,oldValue:l,value:a.label}),delete t._columnEditTimer}),50),e.stopPropagation()}}t._columnEditing=!0,setTimeout((()=>{o.focus()}),50),o.onkeydown=e=>{"Escape"===e.key?(s.classList.remove("pending"),o.value=l,o.parentNode&&o.parentNode.removeChild(o),t._columnEditing=!1):"Enter"===e.key&&r(e)},o.addEventListener("blur",r),o.addEventListener("change",r)}_validateDataSourceMap(){this.dataSourceMap=Object.assign({},{checklist:"checklist",color:"color",comments:"comments",dueDate:"dueDate",id:"id",priority:"priority",progress:"progress",startDate:"startDate",status:"status",swimlane:"swimlane",tags:"tags",text:"text",userId:"userId"},this.dataSourceMap)}});
6
+ Smart("smart-kanban",class extends Smart.DataView{static get properties(){return{addNewButton:{value:!1,type:"boolean"},addNewButtonDisplayMode:{value:"top",allowedValues:["top","bottom","both"],type:"string"},addNewColumn:{value:!1,type:"boolean"},allowColumnEdit:{value:!1,type:"boolean"},allowColumnHide:{value:!0,type:"boolean"},allowColumnRemove:{value:!1,type:"boolean"},allowColumnReorder:{value:!1,type:"boolean"},allowDrag:{value:!0,type:"boolean",defaultReflectToAttribute:!0},allowDrop:{value:!0,type:"boolean",defaultReflectToAttribute:!0},autoLoadState:{value:!1,type:"boolean"},autoSaveState:{value:!1,type:"boolean"},currentUser:{value:null,type:"any"},dataSourceMap:{value:{checklist:"checklist",color:"color",comments:"comments",dueDate:"dueDate",id:"id",priority:"priority",progress:"progress",startDate:"startDate",status:"status",swimlane:"swimlane",tags:"tags",text:"text",description:"description",userId:"userId",history:"history",createdUserId:"createdUserId",createdDate:"createdDate",updatedUserId:"updatedUserId",updatedDate:"updatedDate"},type:"any",reflectToAttribute:!1},columnActions:{value:!1,type:"boolean"},columnColors:{value:!1,type:"boolean"},columnSummary:{value:!1,type:"boolean"},columnEditMode:{value:"headerAndMenu",allowedValues:["header","menu","headerAndMenu"],type:"string"},columnHeaderTemplate:{value:null,type:"any"},dragOffset:{value:"auto",type:"any"},formatStringDate:{value:"d",type:"string"},formatStringTime:{value:"MMM d, HH:mm",type:"string"},hierarchy:{value:"columns",allowedValues:["columns","tabs"],type:"string"},messages:{value:{en:{actionsIcon:"Actions icon",actionsList:"Open actions list",unassignedTask:"Unassigned task",unassigned:"unassigned",assignedTask:"Assigned to {{userName}}",addNewStatus:"New status",addNewColumn:"Add new status",addNewTask:"Add new task",addSubtask:"Add subtask",assignedTo:"Assigned to",createdBy:"Created by",updatedBy:"Updated by",createdByDate:"Created",updatedByDate:"Updated",checklist:"Sub tasks",color:"Color",commentsIcon:"Comments icon",copy:"Copy",customize:"Customize tasks",customizeColumn:"Customize column",dueDate:"Due date",days:"days",edit:"Edit",editTask:"ID: {{taskId}} {{text}}",expand:"Expand column",collapse:"Collapse column",high:"High",low:"Low",critical:"Critical",newComment:"New comment",newSubtask:"New subtask",overdue:"Overdue",average:"Average",priority:"Priority",priorityIcon:"Priority icon",progress:"Progress",promptComment:"Are you sure you want to remove this comment?",promptTask:'Are you sure you want to remove the task "{{taskText}}"?',promptColumn:"Are you sure you want to remove this column?",remove:"Remove",removeSubtask:"Remove subtask",removeColumn:"Remove column",hideColumn:"Hide column",removeComment:"Remove comment",removeTask:"Remove task",showAllColumns:"Show all columns",send:"Send",startDate:"Start date",status:"Status",swimlane:"Swimlane",tags:"Tags",text:"Name",description:"Description",taskProgress:"Task progress: {{value}}%",taskCompleted:"Tasks completed: {{value}}/{{count}}",userId:"User ID",userIcon:"User icon",guestUser:"Guest",detailsTab:"Details",commentsTab:"Comments",fieldsTab:"Fields",historyTab:"History",subtasksTab:"Subtasks",historyEvent:"Event",historyAuthor:"Author",historyDetails:"Details",range:'From "{{oldValue}}" to "{{newValue}}"',nullRange:'Changed to "{{newValue}}"',invalidRange:'"{{start}}" should be less than "{{end}}"',historyDate:"Date",ok:"ok",cancel:"Cancel",delete:"Delete",taskDeadlineChanged:"Deadline changed",tagsChanged:"Tags changed",taskMoved:"Task moved",taskUpdated:"Task updated",taskCreated:"Task created",taskUserChanged:"Assignee changed",taskUserRemoved:"Assignee removed",taskDescriptionChanged:"Description changed",taskSubtasksChanged:"Subtasks changed",taskProgressChanged:"Progress changed",taskPriorityChanged:"Priority changed",taskSubtasksCompleted:"Completed {{value}}",taskStatusChanged:"Status changed",taskTagsChanged:"Tags changed",taskNameChanged:"Name changed",taskColorChanged:"Color changed"}}},onColumnHeaderRender:{value:null,type:"any",reflectToAttribute:!1},onTaskRender:{value:null,type:"any",reflectToAttribute:!1},priority:{value:[],type:"array",reflectToAttribute:!1},priorityList:{value:!0,type:"boolean"},selectionMode:{value:"zeroOrOne",allowedValues:["zeroOrOne","zeroOrManyExtended"],type:"string"},storeHistory:{value:!0,type:"boolean"},storeHistoryItems:{value:20,type:"number"},swimlanes:{value:[],type:"array",reflectToAttribute:!1},swimlanesFrom:{value:0,type:"number"},swimlanesTo:{value:null,type:"number?"},tags:{value:[],type:"array"},taskActions:{value:!1,type:"boolean"},taskComments:{value:!1,type:"boolean"},taskDue:{value:!1,type:"boolean"},taskPosition:{value:"all",allowedValues:["all","leaf"],type:"string"},taskPriority:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskProgress:{value:!1,type:"boolean"},taskTags:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskSubTasks:{allowedValues:["none","onePerRow","onlyUnfinished"],value:"none",type:"string"},taskSubTasksInput:{value:!0,type:"boolean"},taskUserIcon:{value:!0,type:"boolean",defaultReflectToAttribute:!0},taskCustomFields:{value:[],type:"array",reflectToAttribute:!1},taskColorEntireSurface:{value:!1,type:"boolean"},textTemplate:{value:null,type:"any"},userList:{value:!1,type:"boolean"},users:{value:[],type:"array",reflectToAttribute:!1}}}static get listeners(){return{"body.focusin":"_bodyFocusinHandler","container.click":"_containerClickHandler","container.down":"_containerDownHandler","container.keydown":"_containerKeydownHandler","container.touchmove":"_scrollViewerTouchmoveHandler"}}template(){const e=this._tabindex;return`<div id="container" role="presentation">\n <div id="header" class="smart-data-view-header" role="toolbar">\n <div id="customizeButton" class="smart-data-view-header-button smart-data-view-customize-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Customize tasks"><div role="presentation"></div></div>\n <div id="filterButton" class="smart-data-view-header-button smart-data-view-filter-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Filter"><div role="presentation"></div></div>\n <div id="sortButton" class="smart-data-view-header-button smart-data-view-sort-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Sort"><div role="presentation"></div></div>\n <div id="searchButton" class="smart-data-view-header-button smart-data-view-search-button smart-unselectable"${e} role="button" aria-expanded="false" aria-haspopup="dialog" aria-label="Search"></div>\n <div id="headerDropDown" class="smart-data-view-header-drop-down smart-visibility-hidden" role="dialog">\n <div id="customize" class="smart-hidden" role="presentation"></div>\n <div id="filter" class="smart-hidden" role="presentation"></div>\n <div id="sort" class="smart-hidden" role="presentation"></div>\n <div id="search" class="smart-data-view-search-box smart-hidden" role="presentation">\n <input type="text" id="searchInput" spellcheck="false" aria-label="Search" />\n <div id="searchLabel" class="smart-data-view-search-label smart-unselectable"></div>\n <div id="searchPrev" class="smart-data-view-search-prev"${e} role="button" aria-label="Previous"></div>\n <div id="searchNext" class="smart-data-view-search-next"${e} role="button" aria-label="Next"></div>\n <div id="searchClose" class="smart-data-view-search-close"${e} role="button" aria-label="Close search box"></div>\n </div>\n </div>\n </div>\n <div id="body" class="smart-kanban-body" role="presentation"></div>\n </div>`}render(){const e=this;Object.defineProperty(e,"dataSource",{get:function(){return e.context===e?e.properties.dataSource.value:e._getCurrentDataSource()},set(t){e.updateProperty(e,e._properties.dataSource,t)}}),e._render(),super.render()}_getPriority(){const e=this;return(!e.priority||e.priority&&0===e.priority.length)&&(e.priority=[{label:e.localize("low"),value:"low"},{label:e.localize("average"),value:"average"},{label:e.localize("high"),value:"high"},{label:e.localize("critical"),value:"critical"}]),e.priority}_render(){const e=this,t=getComputedStyle(e);e.$.body.innerHTML="",e._autoScrollCoefficient=Smart.Utilities.Core.Browser.Firefox?4:Smart.Utilities.Core.Browser.Edge?8:2,e._kanbanTaskMinWidth=parseFloat(t.getPropertyValue("--smart-kanban-task-min-width")),e._dataViewPadding=parseFloat(t.getPropertyValue("--smart-data-view-padding")),e._allColumns=[],e._customTags=[],e._selectedTasks=[],e._dblclickObject={numberOfClicks:0},e._appliedFiltering={filterGroups:[],filters:[],operator:"and"},e._appliedSorting={dataFields:[],dataTypes:[],orderBy:[]},e._sortPanelDataSource=[{label:e.localize("text"),dataField:"text",dataType:"string"},{label:e.localize("userId"),dataField:"userId",dataType:"string"},{label:e.localize("tags"),dataField:"tags",dataType:"string"},{label:e.localize("priority"),dataField:"priority",dataType:"string"},{label:e.localize("progress"),dataField:"progress",dataType:"number"},{label:e.localize("startDate"),dataField:"startDate",dataType:"date"},{label:e.localize("dueDate"),dataField:"dueDate",dataType:"date"}],e._getPriority(),e._validateDataSourceMap(),e._getInnerElementMessages(),e._localizeHeader(),e._handleHeaderPosition(e.$.body),e._validateSwimlanes(),e._renderColumns(),e._handleSwimlanes();let a=!1;e.autoLoadState&&(a=e.loadState()),e._getCurrentUser(),a||e._processDataSource(),e._setPriorityList(),e._setUserList(),e._setActionsList(),e._setColumnActionsList(),e._setCommentsList(),e._autoSaveState(),e._createAddNewButton()}attached(){const e=this;super.attached(),e.isCompleted&&e._dialog&&(e._addDialogHandlers(),e.getShadowRootOrBody().appendChild(e._dialog))}detached(){const e=this;if(super.detached(),!e._dialog)return;const t=e._dialog;t.removeEventListener("open",e._dialogEventHandler),t.removeEventListener("closing",e._dialogEventHandler),t.removeEventListener("close",e._dialogEventHandler),t.removeEventListener("click",e._dialogClickHandler),t.remove()}addTask(e={}){const t=this,a=t.columns;if("object"!=typeof e||0===a.length||!t._currentUser.allowAdd)return;const s=t.dataSourceMap;void 0===e[s.status]&&(e[s.status]=a[0].dataField),t._currentUser.info&&(void 0===e[s.createdUserId]?(e[s.createdUserId]=t._currentUser.info.id,e[s.createdDate]=new Date):e[s.createdDate]||(e[s.createdDate]=new Date)),t.dataSource&&t.dataSource.virtualDataSource?t._requestVirtualDataSource("add",e,(function(e){return e})):(t.dataSource||(t.dataSource=[]),t.dataSource.push(e),t._createTask(e,!0),t._autoSaveState("dataSource")),t.$.fireEvent("taskAdd",{value:e,id:e.id}),t._refreshButtonsAndSummaries()}addSort(e,t){const a=this,s=a.dataSource;let l;function o(e,s){const o=a._sortPanelDataSource.find((t=>t.dataField===e));if(o){let a=Array.isArray(t)?t[s]:"string"==typeof t?t:"ascending";l.dataFields.push(e),l.dataTypes.push(o.dataType),a=a&&-1!==a.indexOf("desc")?"descending":"ascending",l.orderBy.push(a)}}if(0!==arguments.length&&s&&0!==s.length){if(a.closePanel(),1===arguments.length&&"object"==typeof e)l=e;else if(l={dataFields:[],dataTypes:[],orderBy:[]},Array.isArray(e))e.forEach(o);else{if("string"!=typeof e)return;o(e,0)}super.addSort(l)}}beginEdit(e){const t=this;t._currentUser.allowEdit&&!t.disabled&&(e=t._validateTaskArgument(e))&&t._openDialog(e,"edit")}cancelEdit(){const e=this._dialog;e&&e.opened&&e.classList.contains("edit")&&e.close()}hide(e){const t=this;void 0!==e&&"number"==typeof e&&(e=t.columns[e]),e&&!1!==e.visible&&(e.visible=!1,t.$.fireEvent("columnHide",{column:e}),t.refresh())}show(e){const t=this;void 0!==e&&"number"==typeof e&&(e=t.columns[e]),e&&!0!==e.visible&&(e.visible=!0,t.$.fireEvent("columnShow",{column:e}),t.refresh())}showAllColumns(){const e=this;for(let t=0;t<e.columns.length;t++)e.columns[t].visible=!0;e.refresh()}collapse(e){const t=this;if(!t.collapsible)return;if(!(e=t._validateColumnArgument(e))||e.collapsed||!e.collapsible)return;const a=t._columnToElement.get(e),s=a.siblingColumns;let l=0;e.collapsed=!0,a.classList.add("collapsed");const o=e.collapsed?t.localize("expand"):t.localize("collapse"),r=a.querySelector(".smart-kanban-column-header-toggle-button");if(r&&r.setAttribute("title",o),s.forEach((e=>e.collapsed&&l++)),l===s.length){const a=0!==s.indexOf(e)?0:1,l=s[a],o=t._columnToElement.get(l);l.collapsed=!1,o.classList.remove("collapsed"),t._updateColumnWidths(s,o.parentElement)}else t._updateColumnWidths(s,a.parentElement);t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("collapsed"),t._handleSwimlanes(!0),t._createAddNewButton(),t._doNotFireEvents||t.$.fireEvent("columnCollapse",{column:e})}copyTask(e){const t=this;if(!t._currentUser.allowAdd)return;if(!(e=t._validateTaskArgument(e)))return;const a=JSON.parse(JSON.stringify(e.data));a.history=[],t.dataSource&&t.dataSource.virtualDataSource?t._requestVirtualDataSource("add",a,(function(e){return t.$.fireEvent("taskAdd",{value:a}),e})):(a[t.dataSourceMap.id]=Math.floor(9e4*Math.random()+1e4),t._createTask(a,!0),t._autoSaveState("dataSource"),t.$.fireEvent("taskAdd",{value:a})),t.dataSource||(t.dataSource=[]),t.dataSource.push(a),t._refreshButtonsAndSummaries()}endEdit(){const e=this._dialog;e&&e.opened&&e.classList.contains("edit")&&(e.ok=!0,e.close())}ensureVisible(e){if(!(e=this._validateTaskArgument(e))||e.filteredOut)return;const t=e.closest("smart-scroll-viewer");if(0===t.scrollHeight)return e;const a=t.scrollTop,s=e.offsetTop;return a<=s&&a+t.offsetHeight>=s+e.offsetHeight||(t.scrollTop=s),e}expand(e){const t=this;if(!(e=t._validateColumnArgument(e))||!e.collapsed)return;const a=t._columnToElement.get(e);e.collapsed=!1,a.classList.remove("collapsed");const s=e.collapsed?t.localize("expand"):t.localize("collapse"),l=a.querySelector(".smart-kanban-column-header-toggle-button");l&&l.setAttribute("title",s),t._updateColumnWidths(a.siblingColumns,a.parentElement),t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("collapsed"),t._handleSwimlanes(!0),t._createAddNewButton(),t.$.fireEvent("columnExpand",{column:e})}expandAll(){const e=this;e._allColumns.forEach((t=>{t.collapsed=!1,e._columnToElement.get(t).classList.remove("collapsed")})),e._allColumns.forEach((t=>e._refreshScrollViewer(t))),e._columnContainers.forEach((t=>e._updateColumnWidths(t.children,t))),e._autoSaveState("collapsed"),e._handleSwimlanes(!0)}exportData(e,t,a){const s=this,l=getComputedStyle(s),o=l.borderRightColor,r=s.swimlanes,n=new Smart.Utilities.DataExporter,i=s._getCurrentDataSource(),d=s.dataSourceMap,c=[{id:"Task ID",text:"Text",status:"Status",swimlane:"Swimlane",asignee:"Asignee",priority:"Priority",progress:"Progress",startDate:"Start date",dueDate:"Due date",subTasks:"Completed sub-tasks",tags:"Tags"}],u={},m={},p={};n.style={border:"1px solid "+o,borderCollapse:"collapse",backgroundColor:l.backgroundColor,color:l.color,fontFamily:"Helvetica",header:{border:"1px solid "+o,fontWeight:"bold"},columns:{border:"1px solid "+o,progress:{format:"p0"},startDate:{format:s.formatStringDate},dueDate:{format:s.formatStringDate}},rows:{}},0===r.length&&delete c[0].swimlane;for(let e=0;e<i.length;e++){const t=i[e];let a=t[d.status],l=t[d.swimlane],o=t[d.userId],b=t[d.progress];u[a]?a=u[a]:(a=s._allColumns.find((e=>e.dataField===a)).label,u[t[d.status]]=a),null===o?o="":p[o]?o=p[o]:(o=s.users.find((e=>e.id===o)).name,p[t[d.userId]]=o),null===b?b="":b/=100;const h={id:t[d.id],text:t[d.text],description:t[d.description]||"",status:a,asignee:o,priority:t[d.priority],progress:b,startDate:t[d.startDate]||"",dueDate:t[d.dueDate]||"",subTasks:s._getCompletedSubTasks(t[d.checklist]),tags:t[d.tags]};r.length&&(l?m[l]?l=m[l]:(l=r.find((e=>e.dataField===l)).label,m[t[d.swimlane]]=l):l="",h.swimlane=l),c.push(h),t[d.color]&&(n.style.rows[e]={backgroundColor:t[d.color]})}return n.exportData(c,e,t,a)}getState(){const e=this,t=e.dataSourceMap,a={},s={collapsed:a,dataSource:e._getCurrentDataSource(),filtering:e._appliedFiltering,selection:{selected:e._selectedTasks.map((e=>e.data[t.id])),selectionStart:e._selectionStart?e._selectionStart.data[t.id]:null},sorting:e._appliedSorting,tabs:e._selectedTabs,visibility:{taskActions:e.taskActions,taskComments:e.taskComments,taskDue:e.taskDue,taskPriority:e.taskPriority,taskProgress:e.taskProgress,taskTags:e.taskTags,taskUserIcon:e.taskUserIcon}};let l=null,o=null;return e._selectionInView&&(l=e._selectionInView.closest(".smart-kanban-column").column.dataField,o=e._selectionInView.getAttribute("swimlane")),s.selection.selectionInColumn=l,s.selection.swimlane=o,e._allColumns.forEach((e=>a[e.dataField]=e.collapsed)),s}loadState(e){const t=this;if(!e&&!(e=window.localStorage.getItem("smartKanban"+t.id)))return!1;"string"==typeof e&&(e=JSON.parse(e,((e,t)=>t&&-1!==["startDate","dueDate","time"].indexOf(e)?new Date(t):t))),t._doNotFireEvents=!0,t._selectedTasks=[],delete t._selectionStart,delete t._selectionInView,t.expandAll(),Array.from(t.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>e.clearContent())),t._allColumns.forEach((a=>{e.collapsed[a.dataField]&&t.collapse(a)}));for(let a in e.visibility)t[a]=e.visibility[a];if(t.dataSource=e.dataSource,t._processDataSource(),t.addFilter(t._constructFilterGroups(e.filtering),e.filtering.operator),t.addSort(e.sorting),t._autoSaveState(e),e.selection.selected.forEach((e=>{const a=t.$.container.querySelector(`.smart-kanban-task[data-id="${e}"]`);a&&(a.setAttribute("selected",""),t._selectedTasks.push(a))})),e.selection.selectionStart&&(t._selectionStart=t.$.container.querySelector(`.smart-kanban-task[data-id="${e.selection.selectionStart}"]`)),e.selection.selectionInColumn){const a=t._columnToElement.get(t._allColumns.find((t=>t.dataField===e.selection.selectionInColumn)));e.selection.swimlane?t._selectionInView=a.querySelector(`smart-scroll-viewer[swimlane=${e.selection.swimlane}]`):t._selectionInView=a.querySelector("smart-scroll-viewer")}if(e.tabs){const a="tabs"===t.hierarchy;t._allColumns.forEach((s=>{if(void 0!==s.selected){const l=t._columnToElement.get(s),o=-1!==e.tabs.indexOf(s.dataField);s.selected=o,a&&(l.classList.toggle("smart-hidden",!o),l.tab.classList.toggle("selected",o),l.tab.setAttribute("aria-selected",o))}}))}return t._doNotFireEvents=!1,!0}moveTask(e,t){const a=this;if(a.disabled||!t)return;const s=a.dataSourceMap;if(!(e=a._validateTaskArgument(e))||!a._updateTaskInProgress&&e.data[s.status]===t)return;const l=a._allColumns.find((e=>e.dataField===t));function o(){const o=e.closest("smart-scroll-viewer"),r=a._columnToElement.get(l),n=e.data,i=a.getTaskScrollViewer(r,n);n[s.status]=t,i.appendChild(e),a._dialog&&a._dialog.ok||(a.textTemplate&&a._renderTask(e),a._autoSaveState("dataSource")),a._refreshScrollViewer(o,!0),a._refreshScrollViewer(i,!0),e.hasAttribute("selected")&&(e.removeAttribute("selected"),a._selectedTasks=a._selectedTasks.filter((t=>t!==e)),a._autoSaveState("selection")),e.removeAttribute("focus"),(a.shadowRoot||a.getRootNode()).activeElement===o&&a._focusTask(a._getFirstItem(o.$.content))}l&&(a.dataSource&&a.dataSource.virtualDataSource&&!a._ignoreVirtualDataSource?a._requestVirtualDataSource("update",Object.assign({},e.data,{status:t}),(function(e){return e&&o(),e})):o())}openCustomizePanel(){const e=this,t=e.dataSource;if(!t||0===t.length||e.disabled||"none"===e.headerPosition)return;const a=e.$.customize,s=[{label:e.localize("actionsIcon"),dataField:"taskActions",visible:e.taskActions},{label:e.localize("commentsIcon"),dataField:"taskComments",visible:e.taskComments},{label:e.localize("dueDate"),dataField:"taskDue",visible:e.taskDue},{label:e.localize("priorityIcon"),dataField:"taskPriority",visible:e.taskPriority},{label:e.localize("progress"),dataField:"taskProgress",visible:e.taskProgress},{label:e.localize("tags"),dataField:"taskTags",visible:e.taskTags},{label:e.localize("userIcon"),dataField:"taskUserIcon",visible:e.taskUserIcon}];let l;e._closeDialog(),e.$.headerDropDown.classList.add("customize-panel"),e.$.headerDropDown.classList.remove("filter-panel","sort-panel","search-panel"),a.classList.remove("smart-hidden"),e.$.filter.classList.add("smart-hidden"),e.$.sort.classList.add("smart-hidden"),e.$.search.classList.add("smart-hidden"),e._closeSearchPanel(),e._customizePartCreated?(l=a.firstElementChild,l.set("dataSource",s),l.propertyChangedHandler("dataSource",void 0,s),l.rightToLeft=e.rightToLeft):(l=document.createElement("smart-column-panel"),l.animation=e.animation,l.dataSource=s,l.locale=e.locale,l.messages=e._innerElementMessages.columnPanel,l.rightToLeft=e.rightToLeft,l.theme=e.theme,e.$.customize.appendChild(l),l.classList.add("smart-kanban-column-panel"),e._customizePartCreated=!0),e._openHeaderDropDown(e.$.customizeButton)}openFilterPanel(){const e=this,t=[{label:e.localize("text"),dataField:"text",dataType:"string"},{label:e.localize("userId"),dataField:"userId",dataType:"string"},{label:e.localize("tags"),dataField:"tags",dataType:"string"},{label:e.localize("priority"),dataField:"priority",dataType:"enum",options:e._getPriority()},{label:e.localize("progress"),dataField:"progress",dataType:"number"},{label:e.localize("startDate"),dataField:"startDate",dataType:"date"},{label:e.localize("dueDate"),dataField:"dueDate",dataType:"date"}];super.openFilterPanel(t,(function(t,a){"progress"===a.dataField?(t.min=0,t.max=100,t.showUnit=!0,t.unit="%"):"date"===a.dataType&&(t.formatString=e.formatStringDate)}))}openSortPanel(){const e=this,t=e._sortPanelDataSource.map((t=>{const a=e._appliedSorting.dataFields.indexOf(t.dataField);return Object.assign({},t,{sortIndex:a,sortDirection:-1===a?"ascending":e._appliedSorting.orderBy[a]})}));super.openSortPanel(t)}removeTask(e,t){const a=this;function s(){const t=e.closest("smart-scroll-viewer"),s=e.data;if(e.remove(),a._refreshScrollViewer(t,!0),a._autoSaveState("dataSource"),a.$.fireEvent("taskRemove",{value:s,id:e.id}),a.dataSource){const e=a.dataSource.findIndex((e=>e.id===s.id));e>-1&&a.dataSource.splice(e,1)}a._refreshSummaries()}a._currentUser.allowRemove&&(e=a._validateTaskArgument(e))&&(t?a._openDialog(e,"prompt"):a.dataSource&&a.dataSource.virtualDataSource?a._requestVirtualDataSource("remove",e.data,(function(e){return e&&s(),e})):s())}saveState(){const e=this.getState();return window.localStorage.setItem("smartKanban"+this.id,JSON.stringify(e)),e}addHistory(e,t){const a=this;if(!e||!t)return;const s=a.dataSourceMap;a.storeHistory?(void 0===e[s.history]&&(e[s.history]=[]),e[s.history].length===a.storeHistoryItems&&e[s.history].splice(0,1),e[s.history].push(t)):e[s.history]=[]}clearHistory(e){e&&(e.history=[])}updateTask(e,t){const a=this;if(!a._currentUser.allowEdit||!t)return;if(!(e=a._validateTaskArgument(e)))return;const s=a.dataSourceMap,l=e.data;function o(){if(e.data=t,t[s.status]!==l[s.status]&&(a._updateTaskInProgress=!0,a.moveTask(e,t[s.status]),delete a._updateTaskInProgress),t[s.swimlane]!==l[s.swimlane]){const o=e.closest(".smart-kanban-column");a._hasSwimlane(o.index)?(o.querySelector(`smart-scroll-viewer[swimlane=${t[s.swimlane]}]`).appendChild(e),l[s.swimlane]&&a._refreshScrollViewer(o.querySelector(`smart-scroll-viewer[swimlane=${l[s.swimlane]}]`))):delete t[s.swimlane]}const o=()=>{const e=()=>({user:a._currentUser.info.id,date:t[s.updatedDate]});if(t[s.userId]!==l[s.userId]){const o=e();o.action="user",o.details={oldValue:l[s.userId],value:t[s.userId]},a.addHistory(t,o)}if(""+t[s.dueDate]!=""+l[s.dueDate]){const o=e();o.action="deadline",o.details={oldValue:l[s.dueDate]?l[s.dueDate].toLocaleDateString():"",value:t[s.dueDate]?t[s.dueDate].toLocaleDateString():""},a.addHistory(t,o)}if(""+t[s.startDate]!=""+l[s.startDate]){const o=e();o.action="deadline",o.details={oldValue:l[s.startDate]?l[s.startDate].toLocaleDateString():"",value:t[s.startDate]?t[s.startDate].toLocaleDateString():""},a.addHistory(t,o)}if(t[s.color]!==l[s.color]){const o=e();o.action="color",o.details={oldValue:l[s.color],value:t[s.color]},a.addHistory(t,o)}if(t[s.status]!==l[s.status]){const o=e();o.action="status",o.details={oldValue:l[s.status],value:t[s.status]},a.addHistory(t,o)}if(JSON.stringify(t[s.checklist])!==JSON.stringify(l[s.checklist])){const o=e();o.action="subtasks",o.details={oldValue:l[s.checklist],value:t[s.checklist]},a.addHistory(t,o)}if(parseFloat(t[s.progress])!==parseFloat(l[s.progress])){let o=!0;if(null===l[s.progress]&&0===parseFloat(t[s.progress])&&(o=!1),o){const o=e();o.action="progress",o.details={oldValue:l[s.progress]?l[s.progress]+"%":"0%",value:t[s.progress]+"%"},a.addHistory(t,o)}}if(t[s.description]!==l[s.description]){const o=e();o.action="description",o.details={oldValue:l[s.description],value:t[s.description]},a.addHistory(t,o)}if(t[s.priority]!==l[s.priority]){const o=e();o.action="priority",o.details={oldValue:l[s.priority],value:t[s.priority]},a.addHistory(t,o)}if(t[s.tags]!==l[s.tags]){const o=e();o.action="tags",o.details={oldValue:l[s.tags],value:t[s.tags]},a.addHistory(t,o)}if(t[s.text]!==l[s.text]){const o=e();o.action="text",o.details={oldValue:l[s.text],value:t[s.text]},a.addHistory(t,o)}for(let s=0;s<a.taskCustomFields.length;s++){const o=a.taskCustomFields[s],r=l[o.dataField],n=t[o.dataField];if(r!==n){const s=e();s.action=o.name,s.details={oldValue:r,value:n},a.addHistory(t,s)}}};a.textTemplate||t[s.text]!==l[s.text]||t[s.tags]!==l[s.tags]||t[s.priority]!==l[s.priority]?(a._renderTask(e),o()):(o(),t[s.userId]!==l[s.userId]&&a._updateUserIcon(e),t[s.dueDate]!==l[s.dueDate]&&a._updateTaskDueDate(e),t[s.color]!==l[s.color]&&a._updateTaskColor(e),JSON.stringify(t[s.checklist])!==JSON.stringify(l[s.checklist])?(a._updateTaskChecked(e),a._updateTaskProgress(e)):parseFloat(t[s.progress])!==parseFloat(l[s.progress])&&a._updateTaskProgress(e),a._updateTaskSubtasks(e),a._updateTaskCustomFields(e));const r=a.getColumn(t.status);r&&(t.statusLabel=r.label);const n=a.getColumn(l.status);n&&(l.statusLabel=n.label);const i=JSON.parse(JSON.stringify(t)),d=JSON.parse(JSON.stringify(l));a.$.fireEvent("change",{task:e,id:i.id,value:i,oldValue:d}),a._refreshScrollViewer(e.closest("smart-scroll-viewer"));const c=a.dataSource.findIndex((t=>e.data.id===t.id));c>=0&&(a.dataSource[c]=e.data),a._refreshSummaries(),a._autoSaveState("dataSource"),a.$.fireEvent("taskUpdate",{id:i.id,value:i,oldValue:d})}(t=Object.assign({},l,t))[s.checklist]&&0===t[s.checklist].length&&(t[s.checklist]=null),JSON.stringify(t)!==JSON.stringify(l)&&(a.dataSource&&a.dataSource.virtualDataSource?a._requestVirtualDataSource("update",t,(function(e){return e&&(a._ignoreVirtualDataSource=!0,o(),delete a._ignoreVirtualDataSource),e})):o())}propertyChangedHandler(e,t,a){const s=this,l=s._dialog;function o(){if(s.cancelEdit(),l&&l.close(),s._closeList(s._commentsList,"_commentSelectionFor"),s._getCurrentUser(),s.taskSubTasks){const e=s.querySelectorAll(".smart-kanban-task-input");s._currentUser&&!s._currentUser.allowEdit||s.disabled||!s.taskSubTasksInput?e.forEach((e=>{e.classList.add("smart-hidden")})):e.forEach((e=>{e.classList.remove("smart-hidden")}))}}switch(super.propertyChangedHandler(e,t,a),e){case"addNewButton":case"addNewButtonDisplayMode":s._reset(),s._createAddNewButton();break;case"taskCustomFields":case"addNewColumn":s._reset();break;case"allowDrag":s._getCurrentUser();break;case"animation":case"theme":{let t=Array.from(s.$.container.querySelectorAll("smart-column-panel, smart-multi-column-filter-panel, smart-sort-panel"));l&&(t.push(l),t=t.concat(Array.from(l.$.footer.children)),l.editPanelPopulated&&(t=t.concat(Array.from(l.$.container.querySelectorAll(".smart-element.editor"))))),t.forEach((t=>t[e]=a)),Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateTaskColor(e)));break}case"autoSaveState":s._autoSaveState();break;case"collapsible":a||s.expandAll();break;case"columnSummary":s._refreshSummaries();break;case"columns":s._render(),l&&l.editPanelPopulated&&(l.editors.status.dataSource=s._allColumns.map((e=>({label:e.label,value:e.dataField}))));break;case"currentUser":o();break;case"dataSource":case"dataSourceMap":if("dataSourceMap"===e&&s._validateDataSourceMap(),s._customTags=[],s._selectedTasks=[],s.cancelEdit(),s.closePanel(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._closeList(s._userList,"_userSelectionFor"),s._closeList(s._priorityList,"_prioritySelectionFor"),0===s.columns.length)return s._renderColumns(),s._handleSwimlanes(),void s._processDataSource();Array.from(s.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>{e.clearContent(),e.refresh(),s._refreshScrollViewer(e,!0)})),s._processDataSource(),s.dataSource||s._refresh();break;case"disabled":s.cancelEdit(),s.closePanel(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._closeList(s._userList,"_userSelectionFor"),s._closeList(s._priorityList,"_prioritySelectionFor"),s._setFocusable();break;case"formatStringDate":Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateTaskDueDate(e))),l&&(l.editors.startDate.formatString=a,l.editors.dueDate.formatString=a);break;case"formatStringTime":s._closeList(s._commentsList,"_commentSelectionFor");break;case"editable":s.cancelEdit(),s._actionsList.classList.contains("edit-comment")||s._closeList(s._actionsList,"_actionSelectionFor"),s._getCurrentUser();break;case"headerPosition":s._handleHeaderPosition(s.$.body),s._allColumns.forEach((e=>s._refreshScrollViewer(e)));break;case"hierarchy":0===s.swimlanes.length&&s.columns.length!==s._allColumns.length&&s._reset();break;case"locale":case"messages":s.closePanel(),s._localizeHeader(),s._getInnerElementMessages(),s._closeList(s._actionsList,"_actionSelectionFor"),s._closeList(s._columnActionsList,"_columnActionSelectionFor"),s._closeList(s._commentsList,"_commentSelectionFor"),s._setActionsList(),s._setColumnActionsList(),s._setCommentsList(),l&&(s.cancelEdit(),l.close(),l.$.footer.firstElementChild.innerHTML=s.localize("ok"),l.$.footer.children[1].innerHTML=s.localize("cancel"),l.$.footer.children[2].innerHTML=s.localize("delete"),l.editPanelPopulated&&(l.editors.priority.dataSource=s._getPriority(),l.$.container.querySelector(".new-subtask").placeholder=s.localize("newSubtask"),l.$.container.querySelector("smart-button.add").title=s.localize("addSubtask"),Array.from(l.$.container.getElementsByClassName("editor-label")).forEach((e=>{let t=e.id.slice(s.id.length+5);t=t.slice(0,1).toLowerCase()+t.slice(1),e.innerHTML=s.localize(t)})))),s._customizePartCreated&&(s.$.customize.firstElementChild.messages=s._innerElementMessages.columnPanel,s.$.customize.firstElementChild.locale=s.locale),s._filterPartCreated&&(s.$.filter.firstElementChild.messages=s._innerElementMessages.multiColumnFilterPanel,s.$.filter.firstElementChild.locale=s.locale,s.$.filter.firstElementChild.editorPlaceholder=s.localize("filterValuePlaceholder")),s._sortPartCreated&&(s.$.sort.firstElementChild.messages=s._innerElementMessages.sortPanel,s.$.sort.firstElementChild.locale=s.locale);break;case"rightToLeft":s._reset(!0);break;case"selectionMode":if("zeroOrOne"===a&&s._selectedTasks.length>1){const e=s._selectionStart;s._selectedTasks.forEach((t=>t!==e&&t.removeAttribute("selected"))),s._selectedTasks=[e]}break;case"swimlanes":if(s._validateSwimlanes(),JSON.stringify(s.swimlanes)===JSON.stringify(t))return;s._reset(),l&&l.editPanelPopulated&&(l.editors.swimlane.dataSource=s.swimlanes.map((e=>({label:e.label,value:e.dataField}))));break;case"swimlanesFrom":case"swimlanesTo":{const e=s.swimlanesFrom,t=s.swimlanesTo;e<0&&(s.swimlanesFrom=0),null!==t&&e>t&&(s.swimlanesFrom=t),s.swimlanes.length>0&&s._reset();break}case"tags":case"textTemplate":Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._renderTask(e))),s._allColumns.forEach((e=>s._refreshScrollViewer(e)));break;case"unfocusable":s._setFocusable();break;case"priority":s._closeList(s._priorityList,"_prioritySelectionFor"),s._setPriorityList();break;case"users":s._closeList(s._userList,"_userSelectionFor"),s._setUserList(),Array.from(s.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>s._updateUserIcon(e))),l&&l.editPanelPopulated&&(l.editors.userId.dataSource=s.users.map((e=>({label:e.name,value:e.id})))),o()}}_reset(e){const t=this,a=t.getState();t._allColumns=[],t._customTags=[],t._selectedTasks=[],t._dialog&&(t.cancelEdit(),e&&(t._dialog.remove(),delete t._dialog)),t.closePanel(),t._closeList(t._actionsList,"_actionSelectionFor"),t._closeList(t._columnActionsList,"_columnActionSelectionFor"),t._closeList(t._commentsList,"_commentSelectionFor"),t._closeList(t._userList,"_userSelectionFor"),t.$.body.innerHTML="",Array.from(t.$.container.getElementsByClassName("swimlane")).forEach((e=>e.remove())),t._renderColumns(),t._handleSwimlanes(),t._createAddNewButton(),t.loadState(a)}_refresh(){const e=this;e._allColumns=[],e._customTags=[],e._selectedTasks=[],e.closePanel(),e._closeList(e._actionsList,"_actionSelectionFor"),e._closeList(e._columnActionsList,"_columnActionSelectionFor"),e._closeList(e._commentsList,"_commentSelectionFor"),e._closeList(e._userList,"_userSelectionFor"),e.$.body.innerHTML="",Array.from(e.$.container.getElementsByClassName("swimlane")).forEach((e=>e.remove())),e._renderColumns(),e._handleSwimlanes(),e._createAddNewButton()}_containerClickHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;if(t.$.header.contains(a))return void t._headerClickHandler(a,t.$.body);const s=a.closest(".smart-kanban-column-header");if(s){const e=s.parentElement.column;if(a instanceof HTMLInputElement)return;if(t.columnActions&&a.classList.contains("smart-kanban-column-actions")){if(!t._columnActionsList.parentElement||t._columnActionsList.classList.contains("smart-visibility-hidden")){if(t._columnActionsListDate&&new Date-t._columnActionsListDate<300)return;t._openColumnActionsList(a,e)}return}if(a.closest(".smart-kanban-column-header-add")&&e)return void t._openDialog(e,"add","column");if(t.collapsible&&e&&e.collapsible&&a.closest(".smart-kanban-column-header-toggle-button"))return void t[e.collapsed?"expand":"collapse"](e)}const l=a.closest(".smart-kanban-tab");if(l){if(l.classList.contains("selected"))return;const e=l.parentElement.querySelector(".selected");return e.classList.remove("selected"),e.setAttribute("aria-selected",!1),e.columnElement.classList.add("smart-hidden"),e.columnElement.column.selected=!1,l.classList.add("selected"),l.setAttribute("aria-selected",!0),l.columnElement.classList.remove("smart-hidden"),l.columnElement.column.selected=!0,t._selectedTabs=t._allColumns.filter((e=>e.selected)).map((e=>e.dataField)),t._autoSaveState("tabs"),void t._allColumns.forEach((e=>t._refreshScrollViewer(e)))}if(t.addNewColumn){const e=a.closest(".smart-kanban-add-new-column"),s=a.closest(".smart-color-input"),l=a.closest(".smart-kanban-column-header");if(!s&&e&&!e.querySelector(".pending")&&l)return void t._addNewColumnDynamically()}const o=a.closest(".smart-kanban-list .item");if(o){const e=o.getAttribute("data-id"),a=t._userSelectionFor,s=t._prioritySelectionFor;if(a){const s=t.dataSourceMap,l=a.data[s.userId],o=JSON.parse(JSON.stringify(a.data));if(a.data[s.userId]=e,t._updateUserIcon(a),t._closeList(t._userList,"_userSelectionFor"),a.data[s.userId]!==l){t.dataSource&&t.dataSource.virtualDataSource&&t._requestVirtualDataSource("update",a.data,(function(e){return e||(a.data[s.userId]=l,t._updateUserIcon(a)),e}));const e=a.data;if(t._currentUser.info){a.data[s.updatedUserId]=t._currentUser.info.id,a.data[s.updatedDate]=new Date;const l={user:t._currentUser.info.id,label:e[s.text],date:e[s.updatedDate]};e[s.userId]!==o[s.userId]&&(l.action="user",l.details={oldValue:o[s.userId],value:e[s.userId]},t.addHistory(e,l)),t.addHistory(e,l)}const r=JSON.parse(JSON.stringify(e));t.$.fireEvent("change",{task:a,id:r.id,value:r,oldValue:o}),t.$.fireEvent("taskUpdate",{id:r.id,value:r,oldValue:o}),t._autoSaveState("dataSource")}return}if(s){const e=t.dataSourceMap,a=s.data[e.priority],l=JSON.parse(JSON.stringify(s.data));if(s.data[e.priority]=o.getAttribute("priority"),t._closeList(t._priorityList,"_prioritySelectionFor"),s.data[e.priority]!==a){t._currentUser.info&&(s.data[e.updatedUserId]=t._currentUser.info.id,s.data[e.updatedDate]=new Date);const a=s.data,o=JSON.parse(JSON.stringify(a));if(t._currentUser.info){s.data[e.updatedUserId]=t._currentUser.info.id,s.data[e.updatedDate]=new Date;const o={user:t._currentUser.info.id,date:a[e.updatedDate]};a[e.priority]!==l[e.priority]&&(o.action="priority",o.details={oldValue:l[e.priority],value:a[e.priority]},t.addHistory(a,o))}t.$.fireEvent("change",{task:s,id:o.id,value:o,oldValue:l}),t.$.fireEvent("taskUpdate",{id:o.id,value:o,oldValue:l}),t._updateTaskPriority(s),t._autoSaveState("dataSource")}}const l=t._actionSelectionFor,r=t._columnActionSelectionFor;if(l){switch(parseFloat(e)){case 0:t._actionsList.classList.contains("edit-comment")?(t._commentsList.textarea.value=l.comment.text,t._commentsList.textarea.focus(),t._commentsList.editing=l,l.parentElement.scrollTop=l.offsetTop):t.beginEdit(l);break;case 1:t.copyTask(l);break;case 2:t._actionsList.classList.contains("edit-comment")?t._openDialog(l,"prompt","comment"):t.removeTask(l,!0)}return void t._closeList(t._actionsList,"_actionSelectionFor")}if(r){switch(parseFloat(e)){case 0:t._handleColumnEditing(r.dataField);break;case 1:t._openDialog(r,"add","column");break;case 2:t.collapse(r);break;case 3:t._openDialog(r,"prompt","column");break;case 4:t.hide(r);break;case 5:t.showAllColumns()}return void t._closeList(t._columnActionsList,"columnActionSelectionFor")}}if(a.closest(".smart-kanban-list.comments")){const e=a.closest(".send");if(e){if(e.disabled)return;t._createComment(),t._commentsList.textarea.value="",e.disabled=!0}else if(a.classList.contains("remove-button")&&a.classList.contains("enabled")){const e=a.closest(".comment");t._actionSelectionFor&&(t._actionSelectionFor===e||t._actionSelectionFor.classList.contains("smart-kanban-task")||t._actionsList.parentElement&&!t._actionsList.classList.contains("smart-visibility-hidden"))||t._openActionsList(a,void 0,e)}return}const r=a.closest(".smart-kanban-task");r&&(a.classList.contains("smart-kanban-task-user")?!t.userList||!t._currentUser.allowEdit||t._userSelectionFor&&(t._userSelectionFor===r||t._userList.parentElement&&!t._userList.classList.contains("smart-visibility-hidden"))||t._openUserList(a,r):a.classList.contains("priority")&&t.priorityList?!t._priorityList||!t._currentUser.allowEdit||t._prioritySelectionFor&&(t._prioritySelectionFor===r||t._priorityList.parentElement&&!t._priorityList.classList.contains("smart-visibility-hidden"))||t._openPriorityList(a,r):t.taskActions&&a.classList.contains("smart-kanban-task-actions")?t._actionSelectionFor&&(t._actionSelectionFor===r||t._actionSelectionFor.classList.contains("comment")||t._actionsList.parentElement&&!t._actionsList.classList.contains("smart-visibility-hidden"))||t._openActionsList(a,r):t.taskComments&&a.classList.contains("smart-kanban-task-comments")?t.users.length>0&&(!t._commentSelectionFor||t._commentSelectionFor!==r&&(!t._commentsList.parentElement||t._commentsList.classList.contains("smart-visibility-hidden")))&&t._openCommentsList(a,r):(t._preventSelection||t._selectTask(e,r),t._currentUser.allowEdit&&e.type&&(clearTimeout(t._dblclickObject.timeout),t._dblclickObject.numberOfClicks++,2===t._dblclickObject.numberOfClicks?(t._dblclickObject.numberOfClicks=0,r.hasAttribute("selected")||t._selectTask(e,r),t.beginEdit(r)):t._dblclickObject.timeout=setTimeout((function(){t._dblclickObject.numberOfClicks=0}),300))))}_selectTask(e,t){const a=this;function s(){a._selectedTasks.forEach((e=>e!==t&&e.removeAttribute("selected"))),t.hasAttribute("selected")||(t.setAttribute("selected",""),a._selectedTasks=[t]),a._selectionStart=t,a._selectionInView=t.closest("smart-scroll-viewer"),a._autoSaveState("selection"),a._focusTask(t)}if("zeroOrOne"===a.selectionMode)a._selectedTasks.forEach((e=>e!==t&&e.removeAttribute("selected"))),t.hasAttribute("selected")?(a._focusTask(t),t.removeAttribute("selected"),a._selectedTasks=[],delete a._selectionInView):(t.setAttribute("selected",""),a._selectedTasks=[t],a._selectionStart=t,a._selectionInView=t.closest("smart-scroll-viewer"),a._focusTask(t));else{if(!e.ctrlKey&&!e.shiftKey&&!e.metaKey||0===a._selectedTasks.length||t.closest("smart-scroll-viewer")!==a._selectionInView)return void s();if(e.ctrlKey||e.metaKey)t.hasAttribute("selected")?(t.removeAttribute("selected"),a._selectedTasks=a._selectedTasks.filter((e=>e!==t))):(t.setAttribute("selected",""),a._selectedTasks.push(t),a._selectionStart=t);else if(e.shiftKey){if(t===a._selectionStart)return void(a._selectedTasks.length>1&&s());const e=Array.from(t.parentElement.children);let l=e.indexOf(a._selectionStart),o=e.indexOf(t);const r=l;l=Math.min(l,o),o=Math.max(r,o),a._selectedTasks=[],e.forEach(((e,t)=>{t>=l&&t<=o&&!e.filteredOut?(e.setAttribute("selected",""),a._selectedTasks.push(e)):e.removeAttribute("selected")}))}a._focusTask(t)}a._autoSaveState("selection")}_processDataSource(){const e=this;let t=e.dataSource;if(0!==e.columns.length&&null!==t){if(t instanceof Smart.DataAdapter){if(t.virtualDataSource)return void e._requestVirtualDataSource("dataBind");t=t.dataSource}t.forEach((t=>{e._createTask(t)})),e.whenRendered((()=>e._allColumns.forEach((t=>e._refreshScrollViewer(t)))))}}_requestVirtualDataSource(e,t,a){const s=this,l=s.dataSourceMap,o=[],r=[],n={},i=s._appliedFiltering;let d=null;if(i&&i.filterGroups.length>0&&(i.filterGroups.forEach((e=>r[e[0]]=e[1])),r.length=i.filterGroups.length,d=i.operator),s._appliedSorting&&s._appliedSorting.dataFields.length>0&&(s._appliedSorting.dataFields.forEach(((e,t)=>{let a=s._appliedSorting.orderBy[t].replace("ending","");o[e]={sortOrder:a,sortIndex:t}})),o.length=s._appliedSorting.dataFields.length),void 0!==t){const e=Object.assign({},t);e[l.checklist]=JSON.stringify(e[l.checklist]),e[l.history]=JSON.stringify(e[l.history],(function(e,t){return"date"===e?new Date(t).toISOString().slice(0,19).replace("T"," "):t})),e[l.comments]=JSON.stringify(e[l.comments],(function(e,t){return"time"===e?new Date(t).toISOString().slice(0,19).replace("T"," "):t})),e[l.updatedDate]&&(e[l.updatedDate]=e[l.updatedDate].toISOString().slice(0,10)),e[l.createdDate]&&(e[l.createdDate]=e[l.createdDate].toISOString().slice(0,10)),e[l.dueDate]&&(e[l.dueDate]=e[l.dueDate].toISOString().slice(0,10)),e[l.startDate]&&(e[l.startDate]=e[l.startDate].toISOString().slice(0,10)),n.row=e}s.dataSource.onVirtualDataSourceRequested((function(t){let l=!0;-1!==["add","update","remove"].indexOf(e)&&a&&(l=a(t.result),"add"!==e)||l&&(Array.from(s.$.container.querySelectorAll("smart-scroll-viewer.smart-kanban-column-content-tasks")).forEach((e=>e.clearContent())),s.dataSource.dataSource.forEach((e=>{s._createTask(e)})),s._allColumns.forEach((e=>s._refreshScrollViewer(e))),s._autoSaveState("dataSource"))}),{first:0,last:0,sorting:o,filtering:r,filterOperator:d,grouping:[],edit:n,action:e})}_setUserList(){const e=this,t=document.createElement("div");t.id=e.id+"UserList",t.className="smart-kanban-list users smart-visibility-hidden",t.setAttribute("role","listbox"),e.disabled||e.unfocusable||(t.tabIndex=0),e.users.forEach((e=>{const a=document.createElement("div");a.className="item",a.innerHTML=`<div class="icon" style="background-image: url('${e.image}')"></div><div class="name">${e.name}</div>`,a.setAttribute("data-id",e.id),a.setAttribute("role","option"),t.appendChild(a)})),e._userList=t}_setPriorityList(){const e=this,t=document.createElement("div");t.id=e.id+"PriorityList",t.className="smart-kanban-list priority smart-visibility-hidden",t.setAttribute("role","listbox"),e.disabled||e.unfocusable||(t.tabIndex=0),e._getPriority().forEach((e=>{const a=document.createElement("div");a.className="item",a.innerHTML=`<div priority="${e.value}" class="smart-kanban-task-text"><span style="margin-left: 0px; margin-right: 5px;" class="priority ${e.value}"></span>${e.label}</div>`,a.setAttribute("priority",e.value),a.setAttribute("role","option"),t.appendChild(a)})),e._priorityList=t}_openList(e,t,a){const s=this,l=s.$.container.getBoundingClientRect(),o=e.getBoundingClientRect();let r,n,i=o.left,d=o.top+e.offsetHeight;a=s.rightToLeft?!a:a,1===window.devicePixelRatio?(r=document.documentElement.clientWidth,n=document.documentElement.clientHeight):(r=window.innerWidth,n=window.innerHeight),s.$.container.appendChild(t),a&&(i=o.right-t.offsetWidth),i+t.offsetWidth>r&&(i=r-t.offsetWidth),d+t.offsetHeight>n&&(d=n-t.offsetHeight),t.style.left=Math.max(0,i)-l.left+"px",t.style.top=d-l.top+"px",t.classList.remove("smart-visibility-hidden"),e.setAttribute("aria-expanded",!0),e.setAttribute("aria-controls",t.id),s.unfocusable||requestAnimationFrame((function e(){0===t.getBoundingClientRect().height?requestAnimationFrame(e):t.focus()})),t.openedFrom=e}_openUserList(e,t){const a=this;if(0===a.users.length)return;const s=t.data[a.dataSourceMap.userId],l=a._userList,o=l.querySelector(".selected");if(o&&(o.classList.remove("selected"),o.removeAttribute("aria-selected")),a._openList(e,l),null!==s){const e=Array.from(l.children).find((e=>e.getAttribute("data-id")===s.toString()));e&&(e.classList.add("selected"),e.setAttribute("aria-selected",!0),l.scrollTop=e.offsetTop)}a._userSelectionFor=t}_openPriorityList(e,t){const a=this,s=t.data[a.dataSourceMap.priority],l=a._priorityList,o=l.querySelector(".selected");if(o&&(o.classList.remove("selected"),o.removeAttribute("aria-selected")),a._openList(e,l),null!==s){const e=Array.from(l.children).find((e=>e.getAttribute("priority")===s.toString()));e&&(e.classList.add("selected"),e.setAttribute("aria-selected",!0),l.scrollTop=e.offsetTop)}a._prioritySelectionFor=t}_closeList(e,t){const a=this;if(!e||!e.parentElement)return;const s=a.$.container.querySelector(`[aria-expanded="true"][aria-controls="${e.id}"]`);e.classList.add("smart-visibility-hidden"),requestAnimationFrame((function s(){e.classList.contains("smart-visibility-hidden")&&(e.getBoundingClientRect().height>0?requestAnimationFrame(s):(e.remove(),delete e.openedFrom,delete a[t]))})),s&&(s.removeAttribute("aria-expanded"),s.removeAttribute("aria-controls"))}_setActionsList(){const e=this,t=document.createElement("div");t.id=e.id+"ActionsList",t.className="smart-kanban-list actions smart-visibility-hidden",t.setAttribute("role","menu"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="item" data-id="0" role="menuitem"><div class="name">${e.localize("edit")}</div></div>\n<div class="item" data-id="1" role="menuitem"><div class="name">${e.localize("copy")}</div></div>\n<div class="item" data-id="2" role="menuitem"><div class="name">${e.localize("remove")}</div></div>`,e._actionsList=t}_setColumnActionsList(){const e=this,t=document.createElement("div");t.id=e.id+"ColumnActionsList",t.className="smart-kanban-list actions smart-visibility-hidden",t.setAttribute("role","menu"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="item" data-id="0" role="menuitem"><div class="name">${e.localize("edit")}</div></div>\n <div class="item" data-id="1" role="menuitem"><div class="name">${e.localize("addNewTask")}</div></div>\n <div class="item" data-id="2" role="menuitem"><div class="name">${e.localize("collapse")}</div></div>\n <div class="item" data-id="3" role="menuitem"><div class="name">${e.localize("removeColumn")}</div></div>\n <div class="item" data-id="4" role="menuitem"><div class="name">${e.localize("hideColumn")}</div></div>\n <div class="item" data-id="5" role="menuitem"><div class="name">${e.localize("showAllColumns")}</div></div>`,e._columnActionsList=t}_openActionsList(e,t,a){const s=this,l=s._currentUser,o=s._actionsList;s._openList(e,o,a),o.classList.toggle("edit-comment",!!a),s._actionSelectionFor=t||a,t&&!l.allowEdit?o.children[0].classList.add("smart-hidden"):o.children[0].classList.remove("smart-hidden"),t&&!l.allowAdd?o.children[1].classList.add("smart-hidden"):o.children[1].classList.remove("smart-hidden"),t&&!l.allowRemove?o.children[2].classList.add("smart-hidden"):o.children[2].classList.remove("smart-hidden"),Array.from(o.children).forEach((e=>e.classList.remove("selected")))}_openColumnActionsList(e,t){const a=this,s=a._columnActionsList,l=s.children;a.allowColumnEdit&&t.editable&&"header"!==a.columnEditMode?l[0].classList.remove("smart-hidden"):l[0].classList.add("smart-hidden"),a.addNewButton&&t.addNewButton?l[1].classList.remove("smart-hidden"):l[1].classList.add("smart-hidden"),a.allowColumnRemove&&t.allowRemove?l[2].classList.remove("smart-hidden"):l[2].classList.add("smart-hidden"),a.collapsible&&t.collapsible?l[3].classList.remove("smart-hidden"):l[3].classList.add("smart-hidden"),a.allowColumnHide&&t.allowHide?(l[4].classList.remove("smart-hidden"),l[5].classList.remove("smart-hidden")):(l[4].classList.add("smart-hidden"),l[5].classList.add("smart-hidden")),a._openList(e,s),a._columnActionSelectionFor=t,Array.from(s.children).forEach((e=>e.classList.remove("selected")))}_setCommentsList(){const e=this,t=document.createElement("div");t.id=e.id+"CommentsList",t.className="smart-kanban-list comments smart-visibility-hidden",t.setAttribute("role","dialog"),e.disabled||e.unfocusable||(t.tabIndex=0),t.innerHTML=`<div class="smart-kanban-comments" role="list"></div>\n<div class="smart-kanban-new-comment" role="presentation">\n <textarea placeholder="${e.localize("newComment")}"></textarea>\n <smart-button class="send primary" disabled${e._rtlAttr}>${e.localize("send")}</smart-button>\n</div>`;const a=t.querySelector("textarea"),s=t.querySelector("smart-button");s.tabIndex=0,a.onfocus=()=>{t.classList.add("expanded"),s.disabled=""===a.value},a.onblur=e=>{s.contains(e.relatedTarget)||t.classList.remove("expanded")},a.onkeyup=()=>{s.disabled=""===a.value},a.oncut=()=>{s.disabled=""===a.value},a.onpaste=()=>{s.disabled=""===a.value},t.textarea=a,t.button=s,e._commentsList=t}_openCommentsList(e,t){const a=this,s=a._commentsList;s.classList.remove("expanded"),s.firstElementChild.innerHTML="",s.textarea.value="",s.textarea.disabled=!a._currentUser.allowComment,a.unfocusable?s.textarea.tabIndex=-1:s.textarea.removeAttribute("tabindex"),delete s.editing,t.data[a.dataSourceMap.comments].forEach((e=>a._createComment(e))),a._openList(e,s),a._commentSelectionFor=t}_getCommentsList(e){const t=this,a=t._commentsList;return a.classList.remove("expanded"),a.firstElementChild.innerHTML="",a.textarea.value="",a.textarea.disabled=!t._currentUser.allowComment,t.unfocusable?a.textarea.tabIndex=-1:a.textarea.removeAttribute("tabindex"),delete a.editing,e.data[t.dataSourceMap.comments].forEach((e=>t._createComment(e))),t._commentSelectionFor=e,a.classList.remove("smart-visibility-hidden"),a}_createComment(e){const t=this,a=document.createElement("div");let s,l;function o(){const o=t._commentsList.firstElementChild,r=l?l.image:null,n=l?l.name||l.id:t.localize("guestUser"),i=l?l.name:t.localize("guestUser");a.classList="comment",a.setAttribute("role","listitem");const d=r?`background-image: url('${r}');`:"";a.innerHTML=`<div class="comment-indent" role="presentation">\n <div class="user-icon" style="${d}" role="img" aria-label="Icon of user ${n}"></div>\n</div>\n<div class="comment-main" role="presentation">\n <div class="comment-header" role="presentation">\n <div class="user-name" aria-label="User name">${i}</div>\n <div class="time" aria-label="Comment time">${e.time?new Smart.Utilities.DateTime(e.time).toString(t.formatStringTime):""}</div>\n <div class="remove-button${t._currentUser.info&&l.id===t._currentUser.info.id&&t._currentUser.allowComment?" enabled":""}"${t._tabindex} role="button" aria-haspopup="menu" aria-label="Comment settings"></div>\n </div>\n <div class="comment-body" aria-label="Comment text">${e.text||""}</div >\n</div>`,a.comment=e,r||a.querySelector(".user-icon").classList.add("empty"),o.appendChild(a),s&&(o.scrollTop=o.scrollHeight-o.offsetHeight)}if(e)l=t.users.find((t=>t.id===e.userId));else{const a=t.dataSourceMap,r=t.dataSource&&t.dataSource.virtualDataSource,n=t._commentsList.textarea.value,i=t._commentsList.editing,d=t._commentSelectionFor.data;if(i){if(r){const e=Object.assign({},d);e[a.comments]=e[a.comments].slice(0),e[a.comments][e[a.comments].indexOf(i.comment)]=Object.assign({},i.comment,{text:n}),t._requestVirtualDataSource("update",e,(function(a){return a&&(t._commentSelectionFor.data=e,i.querySelector(".comment-body").innerHTML=n),delete t._commentsList.editing,a}))}else i.querySelector(".comment-body").innerHTML=n,i.comment.text=n,delete t._commentsList.editing;return}if(s=!0,e={text:n,userId:t._currentUser.info?t._currentUser.info.id:-1,time:new Date},l=t._currentUser.info,r){const s=Object.assign({},d);s[a.comments]=s[a.comments].slice(0),s[a.comments].push(e),t._requestVirtualDataSource("update",s,(function(e){return e&&(t._commentSelectionFor.data=s,t._commentSelectionFor.querySelector(".smart-kanban-task-comments").setAttribute("num",s[a.comments].length||""),o()),e}))}else d[a.comments].push(e),t._commentSelectionFor.querySelector(".smart-kanban-task-comments").setAttribute("num",d[a.comments].length||"")}e.time instanceof Date==0&&(e.time=new Date(e.time),e.time.setTime(e.time.getTime()-1*e.time.getTimezoneOffset()*60*1e3)),o()}_createTask(e,t){const a=this,s=a.dataSourceMap,l=a._allColumns.find((t=>t.dataField===e[s.status]));if(!l)return;const o=document.createElement("div"),r=a._columnToElement.get(l),n=a.getTaskScrollViewer(r,e);void 0===e[s.id]&&(e[s.id]=Math.floor(9e4*Math.random()+1e4)),o.className="smart-kanban-task smart-unselectable",o.setAttribute("role","listitem"),o.setAttribute("data-id",e[s.id]),a._currentUser.info&&(void 0===e[s.createdUserId]?(e[s.createdUserId]=a._currentUser.info.id,e[s.createdDate]=new Date):e[s.createdDate]||(e[s.createdDate]=new Date),e[s.history]=[],a.addHistory(e,{action:"created",user:a._currentUser.info.id,details:{value:e[s.text]},date:e[s.createdDate]})),o.data=e,o.column=l,a._renderTask(o),e.class&&"string"==typeof e.class&&o.classList.add(e.class),n.appendChild(o),a._updateTaskColor(o),t&&(l.collapsed?n.toRefresh=!0:n.refresh())}getTaskScrollViewer(e,t){const a=this,s=a.dataSourceMap;let l;return a._hasSwimlane(e.index)?void 0!==t[s.swimlane]&&a.swimlanes.find((e=>e.dataField===t[s.swimlane]))?l=e.querySelector(`smart-scroll-viewer[swimlane="${t[s.swimlane]}"]`):(l=e.querySelector("smart-scroll-viewer"),t[s.swimlane]=l.getAttribute("swimlane")):(l=e.querySelector("smart-scroll-viewer"),delete t[s.swimlane]),l}_renderTask(e){const t=this;t._applyTaskTemplate(e),t._updateUserIcon(e),t._updateTaskChecked(e),t._updateTaskProgress(e),t._updateTaskDueDate(e),e.parentElement&&t._updateTaskColor(e),t._updateTaskPriority(e),e.column&&t.columnSummary&&t._updateColumnSummary(e.column),t.onTaskRender&&t.onTaskRender(e,e.data)}_refreshSummaries(){const e=this,t=e.querySelectorAll(".smart-kanban-column");for(let a=0;a<t.length;a++){const s=t[a].column;e._updateColumnSummary(s)}}_updateColumnSummary(e){const t=this,a=t._columnToElement.get(e);if(!a||!t.columnSummary)return;const s=t._getColumnSummary(e),l=a.querySelector(".summary");l&&(l.innerHTML=s)}_applyTaskTemplate(e){const t=this,a=t.dataSourceMap,s=t.tags,l=e.data,o=t._tabindex;let r=l[a.text],n=l[a.description],i=l[a.tags],d="",c=r;void 0===r&&(r="",l[a.text]="",c=r),void 0===n&&(n="",l[a.description]=""),r=t._applyTextTemplate(r,l,e),i&&"string"==typeof i?(i=i.replace(/\s+/g,"").split(","),s.length>0?(i=i.filter((e=>-1!==s.indexOf(e))),l[a.tags]=i.join(", ")):i.forEach((e=>{-1===t._customTags.indexOf(e)&&t._customTags.push(e)})),d=i.map((e=>`<span class="smart-kanban-task-tag" role="listitem">${e}</span>`)).join("")):l[a.tags]="","string"==typeof l[a.priority]&&(l[a.priority]=l[a.priority].toLowerCase()),"high"!==l[a.priority]&&"low"!==l[a.priority]&&"critical"!==l[a.priority]&&(l[t.dataSourceMap.priority]="average"),l[a.comments]&&Array.isArray(l[a.comments])||(l[a.comments]=[]);const u=t.localize(l[a.priority])+" "+t.localize("priority"),m=c?`${c}: ${u}`:`${u}`;e.innerHTML=`<div title="${m}" class="smart-kanban-task-content" role="presentation">\n <div class="smart-kanban-task-text">${r}<span class="priority ${l[a.priority]}"></span></div>\n <div class="smart-kanban-task-user"${o} role="button" aria-haspopup="listbox"></div>\n</div>\n<div class="smart-kanban-task-info" role="presentation">\n <div class="smart-kanban-task-progress-container">\n <div class="smart-kanban-task-progress" role="progressbar" aria-label="Task progress" aria-valuemin="0" aria-valuemax="100"></div>\n <div class="smart-kanban-task-checked" aria-label="Completed sub-tasks"></div>\n </div>\n <div class="smart-kanban-task-due" aria-label="Task due date"></div>\n</div>\n<div class="smart-kanban-task-fields"></div>\n<div class="smart-hidden smart-kanban-task-subtasks">\n <div class="smart-kanban-task-subtasks-container"></div>\n <div><input class="smart-kanban-task-input smart-input" placeholder="${t.localize("newSubtask")}"/></div>\n</div>\n<div class="smart-hidden smart-kanban-task-custom-fields"></div>\n<div class="smart-kanban-task-footer" role="toolbar" aria-label="Task footer">\n <div class="smart-kanban-task-tags" role="list" aria-label="Tags list">${d}</div>\n <div title="${t.localize("actionsList")}" class="smart-kanban-task-actions"${o} role="button" aria-haspopup="menu" aria-label="Open actions list"></div>\n <div class="smart-kanban-task-comments"${o} num="${l[a.comments].length||""}" role="button" aria-haspopup="dialog" aria-label="Open comments list"></div>\n</div>`,e.setAttribute("aria-label",l[a.text]),t._updateTaskCustomFields(e),t._updateTaskSubtasks(e)}_updateTaskCustomFields(e){const t=this,a=e.data;if(t.taskCustomFields.length>0){const s=e.querySelector(".smart-kanban-task-custom-fields");s.classList.remove("smart-hidden");for(let l=0;l<t.taskCustomFields.length;l++){const o=t.taskCustomFields[l];let r=a[o.dataField];if(t.dataSourceMap[o.dataField])continue;if(null==r||!1===o.visible){const t=e.querySelector("[data-field="+o.dataField+"]");t&&t.classList.add("smart-hidden");continue}void 0===o.visible&&(o.visible=!0),void 0===o.allowHide&&(o.allowHide=!0),"string"==typeof r&&r.length>50&&(r=r.substring(0,50)+"...");const n=e.querySelector("[data-field="+o.dataField+"]");if(n)n.innerHTML=`<div class="smart-kanban-task-field-label">${o.label}</div><div class="smart-kanban-task-field-value">${r}</div>`,n.classList.remove("smart-hidden");else{const e=document.createElement("div");e.classList.add("smart-kanban-task-field"),e.setAttribute("data-field",o.dataField),e.innerHTML=`<div class="smart-kanban-task-field-label">${o.label}</div><div class="smart-kanban-task-field-value">${r}</div>`,s.appendChild(e)}}}}_updateTaskSubtasks(e){const t=this;if("none"===t.taskSubTasks)return void e.querySelector(".smart-kanban-task-subtasks").classList.add("smart-hidden");const a=e.data,s=t.dataSourceMap,l=[],o=[];(a[s.checklist]||[]).forEach(((e,t)=>{e.completed&&l.push(t),o.push({label:e.text,selected:!0===e.completed})}));const r=e.querySelector(".smart-kanban-task-subtasks"),n=e.querySelector(".smart-kanban-task-subtasks-container");n.innerHTML="",r.classList.remove("smart-hidden");const i=e.querySelector(".smart-kanban-task-input");t._currentUser&&!t._currentUser.allowEdit||t.disabled||!t.taskSubTasksInput?i.classList.add("smart-hidden"):i.classList.remove("smart-hidden"),i.onchange=function(){a[s.checklist]||(a[s.checklist]=[]),a[s.checklist].push({text:i.value,completed:!1}),i.value="",t._updateTaskSubtasks(e)},o.length&&o.forEach(((l,r)=>{const i=document.createElement("div"),d=l.label;i.innerHTML=`<div data-index="${r}" class="smart-kanban-sub-task"><span title="${d}" class="smart-truncate label">${d}</span><span class="remove-subtask" aria-label="Remove subtask" title="${t.localize("removeSubtask")}"></span></div>`,l.selected&&i.firstChild.classList.add("selected"),"onlyUnfinished"===t.taskSubTasks&&l.selected&&i.classList.add("smart-hidden");let c=!0;(t._currentUser&&!t._currentUser.allowEdit||t.disabled)&&(c=!1),i.querySelector(".remove-subtask").style.opacity=c?1:0,i.onclick=l=>{let r=!0;if((t._currentUser&&!t._currentUser.allowEdit||t.disabled)&&(r=!1),!r)return;const n=parseInt(i.firstChild.getAttribute("data-index")),d=o[n];l.target.classList.contains("remove-subtask")?(o.splice(n,1),i.classList.add("smart-hidden"),a[s.checklist].splice(n,1)):(i.firstChild.classList.toggle("selected"),d.selected=!d.selected,a[s.checklist][n].completed=d.selected,"onlyUnfinished"===t.taskSubTasks&&d.selected&&i.classList.add("smart-hidden")),t._updateTaskChecked(e),l.preventDefault(),l.stopPropagation()},n.appendChild(i)}))}_applyTextTemplate(e,t,a){const s=this;let l=this.textTemplate;if(!l)return e;let o="";if("function"==typeof l){const s={data:t,task:a,text:e,template:null};if(l(s),e=s.text,null===s.template)return e;l=s.template}if(l.startsWith("#")){const a=document.querySelector(l);if(a&&a instanceof HTMLTemplateElement){const l=a.content.cloneNode(!0),r=document.createElement("div");return r.appendChild(l),e=(e=(e=e.toString()).replace(/'/gi,"\\'")).replace(/"/gi,'\\"'),o=r.innerHTML.replace(/{{text}}/gi,e).replace(/{{id}}/gi,t[s.dataSourceMap.id]),o.indexOf("{{text=")>=0&&(e?(o=o.substring(0,o.indexOf("{{text="))+e+o.substring(o.indexOf("}")),o=o.replace(/}/gi,""),o=o.replace(/{/gi,"")):(o=o.replace(/{{text=/gi,""),o=o.replace(/}}/gi,""))),o}}return o=l.replace(/{{text}}/gi,e).replace(/{{id}}/gi,t[s.dataSourceMap.id]),o}_updateUserIcon(e){const t=this,a=this.dataSourceMap,s=e.data,l=e.getElementsByClassName("smart-kanban-task-user")[0];if(void 0!==s[a.userId]&&null!==s[a.userId]){const e=this.users.find((e=>e.id.toString()===s[a.userId].toString()));if(e)return s[a.userId]!==e.id&&(s[a.userId]=e.id),l.classList.remove("empty"),l.style.backgroundImage='url("'+e.image+'")',l.setAttribute("title",t.localize("assignedTask",{userName:e.name||e.id})),void l.setAttribute("aria-label","Icon of user "+(e.name||e.id))}s[a.userId]=null,l.classList.add("empty"),l.style.backgroundImage=null,l.setAttribute("aria-label","Empty user icon"),l.setAttribute("title",t.localize("unassignedTask"))}_updateTaskProgress(e){const t=this.dataSourceMap,a=e.data,s=e.querySelector(".smart-kanban-task-progress");let l=a[t.progress];if(void 0===l){a[t.progress]=null,s.setAttribute("aria-valuenow",0);const e=this.localize("taskProgress",{value:0});return void s.parentElement.setAttribute("title",e)}if(l=parseFloat(l),isNaN(l)){a[t.progress]=null,s.setAttribute("aria-valuenow",0);const e=this.localize("taskProgress",{value:0});return void s.parentElement.setAttribute("title",e)}l=Math.max(0,Math.min(parseFloat(l),100)),a[t.progress]=l,s.style.width=l+"%",s.classList.toggle("bottom",null!==a[t.checklist]),s.setAttribute("aria-valuenow",l);const o=this.localize("taskProgress",{value:l});s.parentElement.setAttribute("title",o)}_updateTaskChecked(e){const t=this.dataSourceMap,a=e.data,s=a[t.checklist],l=e.querySelector(".smart-kanban-task-checked");if(s&&Array.isArray(s)&&s.length>0?l.innerHTML=this._getCompletedSubTasks(s):(a[t.checklist]=null,l.innerHTML=""),l.innerHTML.length>0){let e=0;s.forEach((t=>t.completed&&e++));const t=e,a=s.length,o=this.localize("taskCompleted",{value:t,count:a});l.setAttribute("title",o)}else l.removeAttribute("title")}_getCompletedSubTasks(e){if(null===e)return"";let t=0;return e.forEach((e=>e.completed&&t++)),t+"/"+e.length}_updateTaskDueDate(e){const t=this.dataSourceMap;let a=e.data,s=a[t.dueDate],l=e.querySelector(".smart-kanban-task-due");if("string"==typeof s&&(s=new Date(s),s.setTime(s.getTime()-1*s.getTimezoneOffset()*60*1e3),a[t.dueDate]=s),s)if(l.innerHTML=new Smart.Utilities.DateTime(s).toString(this.formatStringDate),l.classList.toggle("overdue",s.getTime()<(new Date).getTime()&&100!==a[t.progress]),l.classList.contains("overdue")){const e=Math.abs(new Date-s),t=Math.ceil(e/864e5);l.setAttribute("title",this.localize("overdue")+" "+t+" "+this.localize("days"))}else l.removeAttribute("title");else a[t.dueDate]=null,l.innerHTML="",l.classList.remove("overdue"),l.removeAttribute("title");a[t.startDate]?"string"==typeof a[t.startDate]&&(a[t.startDate]=new Date(a[t.startDate]),a[t.startDate].setTime(a[t.startDate].getTime()-1*a[t.startDate].getTimezoneOffset()*60*1e3)):a[t.startDate]=null}_updateTaskColor(e){const t=this,a=t.dataSourceMap,s=e.data,l=e.querySelector(".smart-kanban-task-progress-container"),o=e.querySelector(".smart-kanban-task-progress"),r=t.rightToLeft?"borderRightColor":"borderLeftColor";function n(e){let t=parseFloat(e).toString(16);return t="0".repeat(2-t.length)+t,t.toUpperCase()}if(e.style.borderLeftColor=null,e.style.borderRightColor=null,s[a.color]){e.style[r]=s[a.color];const d=getComputedStyle(e)[r],c="dark"===t.theme?.4:.1;s[a.color]=(i=(i=d).match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/))?"#"+n(i[1])+n(i[2])+n(i[3]):null,l&&(l.style.backgroundColor=`rgba(${d.slice(4,d.length-1)}, ${c})`,o.style.backgroundColor=d),t.taskColorEntireSurface&&(e.style.backgroundColor=`rgba(${d.slice(4,d.length-1)}, ${c})`)}else if(s[a.color]=null,l&&(l.style.backgroundColor=null,o.style.backgroundColor=null),t.taskColorEntireSurface){const a=getComputedStyle(e)[r],s="dark"===t.theme?.4:.1;e.style.backgroundColor=`rgba(${a.slice(4,a.length-1)}, ${s})`}var i}_updateTaskPriority(e){const t=this,a=t.dataSourceMap,s=e.data;e.querySelector(".priority").className="priority "+s[a.priority];const l=t.localize(s[a.priority])+" "+t.localize("priority"),o=s[a.text],r=e.querySelector(".smart-kanban-task-content");r&&r.setAttribute("title",`${o}: ${l}`)}_validateSwimlanes(){const e=this,t=e.swimlanesFrom,a=e.swimlanesTo,s=[];t<0&&(e.swimlanesFrom=0),null!==a&&t>a&&(e.swimlanesFrom=a),e.swimlanes.forEach((e=>{"string"==typeof e&&(e={dataField:e,label:e}),(e.dataField||e.label)&&(e.label||(e.label=e.dataField),e.dataField||(e.dataField=e.label),s.push(e))})),e.swimlanes=s}_handleSwimlanes(e){const t=this,a=t.swimlanes;if(0===a.length||0===t.columns.length)return;const s=t.columns,l=parseFloat(getComputedStyle(t).getPropertyValue("--smart-kanban-header-size")),o=t.$.container,r=t.$.container.getBoundingClientRect(),n=t.$.container.querySelectorAll(".smart-kanban-column.has-swimlane");let i=n[0],d=n[n.length-1];if(t.rightToLeft){let e=i;i=d,d=e}const c=i.getBoundingClientRect(),u=n.length>1?d.getBoundingClientRect():c,m=Array.from(i.getElementsByTagName("smart-scroll-viewer"));let p,b,h,g,v=!1,f=!0,_=t.swimlanesTo;null===_&&(_=s.length-1),e&&(p=o.getElementsByClassName("swimlane")),i.column.collapsed&&(i.classList.remove("collapsed"),v=!0);for(let e=t.swimlanesFrom;e<=_;e++)f=f&&s[e].collapsed;f||(b=u.right-c.left+"px",h=c.left-r.left+"px",g=m.map((e=>e.getBoundingClientRect().top-r.top-l-t._dataViewPadding+"px"))),a.forEach(((t,a)=>{let s;e?s=p[a]:(s=document.createElement("div"),s.innerHTML=`<div class="swimlane-label">${t.label}</div>`,s.className="swimlane",s.setAttribute("role","heading"),s.setAttribute("aria-level",2),t.color&&(s.style.backgroundColor=t.color)),s.classList.toggle("smart-visibility-hidden",f),f||(s.style.width=b,s.style.left=h,s.style.top=g[a]),e||o.appendChild(s)})),v&&i.classList.add("collapsed")}_renderColumns(){const e=this,t=e.collapsible,a=[],s=e.$.body,l=document.createDocumentFragment();let o=e.columns;const r=e.context;if(e.context=e,e._columnToElement=new Map,e._columnContainers=[],0===o.length){const t=e.dataSource;t&&0!==t.length&&(o=[],t.forEach((t=>{const a=t[e.dataSourceMap.status];a&&-1===o.indexOf(a)&&o.push(a)})))}!function e(a,s,l){const o=[];let r=0;if(a.forEach((a=>{"string"==typeof a&&(a={dataField:a,label:a}),(a.dataField||a.label)&&(void 0===a.label&&(a.label=a.dataField),void 0===a.dataField&&(a.dataField=a.label),"horizontal"!==a.orientation&&(a.orientation="vertical"),!1!==a.collapsible&&(a.collapsible=!0),a.collapsed&&t&&a.collapsible?r++:a.collapsed=!1,!1!==a.addNewButton&&(a.addNewButton=!0),!1!==a.allowRemove&&(a.allowRemove=!0),!1!==a.allowHide&&(a.allowHide=!0),!1!==a.editable&&(a.editable=!0),!1!==a.reorder&&(a.reorder=!0),0===l?delete a.selected:!0===a.selected?o.push(a):a.selected=!1,a.columns&&(a.validColumns=[],e(a.columns,a.validColumns,l+1),a.columns=a.validColumns,delete a.validColumns),s.push(a))})),r&&r===s.length&&(s[0].collapsed=!1),o.length>1)for(let e=o.length-2;e>=0;e--)o[e].selected=!1;else l>0&&0===o.length&&s.length>0&&(s[0].selected=!0)}(o,a,0),0===e.swimlanes.length?"columns"===e.hierarchy?e._createColumnElements(a,l,s,1):e._createColumnElementsTabs(a,l,s):e._createColumnElementsSwimlanes(a,l,s),s.appendChild(l),e._selectedTabs=e._allColumns.filter((e=>e.selected)).map((e=>e.dataField)),e._autoSaveState("tabs"),e.context=r}_createAddNewButton(){const e=this,t=e.querySelectorAll(".smart-kanban-add-new-button");t.length&&t.forEach((e=>{e.remove()})),e.addNewButton&&"top"!==e.addNewButtonDisplayMode&&(e.addNewButtons=[],e.querySelectorAll(".smart-kanban-column").forEach((t=>{const a=t.querySelector(".smart-scroll-viewer");if(a){const s=(()=>{const e=document.createElement("div");return e.setAttribute("add-new-button",""),e.classList.add("smart-kanban-add-new-button"),e.onclick=()=>{if(e.column){const t=e.column.querySelector(".smart-kanban-column-header-add");t&&t.click()}},e})(),l=t.column;if(!l||l&&l.collapsed||l&&!l.addNewButton)return;t.appendChild(s);const o=()=>{const l=a.getBoundingClientRect(),o=t.querySelectorAll(".smart-kanban-task"),r=e.offset(e);if(0===o.length){const a=t.querySelector(".smart-kanban-column-header"),l=e.offset(a).top-r.top;s.style.top=l+a.offsetHeight+"px"}else{const t=o[o.length-1],n=e.offset(t),i=e.offsetHeight-2*s.offsetHeight,d=n.top-r.top+t.offsetHeight;if(a.computedVerticalScrollBarVisibility){const t=e.getBoundingClientRect();s.style.top=Math.min(l.top-t.top+a.offsetHeight,i)+"px"}else s.style.top=Math.min(d,i)+"px"}s.style.left=l.left+a.offsetWidth/2-s.offsetWidth/2+"px"};s.refresh=o,s.column=t,t.addNewButton=s,s.refresh(),e.addNewButtons.push(s),requestAnimationFrame((()=>{s.classList.add("show")}))}})),e._refreshSummaries())}_offsetTop(e){return e?e.offsetTop+this._offsetTop(e.offsetParent):0}_offsetLeft(e){return e?e.offsetLeft+this._offsetLeft(e.offsetParent):0}offset(e){return{left:this._offsetLeft(e),top:this._offsetTop(e)}}_getColorInput(){const e=document.createElement("smart-color-input");return e.dataSource=["#D50000","#E67C73","#F4511E","#F6BF26","#33B679","#0B8043","#039BE5","#3F51B5","#7986CB","#8E24AA","#616161","#FFFFFF","#000000",""],e.valueDisplayMode="colorBox",e.classList.add("smart-kanban-color-input"),e.style.width="auto",e.style.height="auto",e.readonly=!0,e.onRender=()=>{const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input")},e}_createColumnElements(e,t,a,s){const l=this,o=l.id,r=[],n=[];let i=0;return e.forEach(((a,d)=>{const c=document.createElement("div");let u=`${l._getColumnHeader(a,d<e.length-1,s)}\n <div class="smart-kanban-column-contentAAA" role="presentation">\n <smart-scroll-viewer class="smart-kanban-column-content-tasks"${l._rtlAttr}${l._tabindex} role="list"></smart-scroll-viewer>BBB\n </div>`,m=0;if(a.columns?(u=u.replace("AAA",""),u=u.replace("BBB",'<div class="smart-kanban-column-content-columns" role="presentation"></div>')):(u=u.replace("AAA"," no-sub-columns"),u=u.replace("BBB","")),c.className="smart-kanban-column",c.setAttribute("data-field",a.dataField),c.setAttribute("role","group"),c.setAttribute("aria-labelledby",`${o}ColumnHeaderLabel${a.dataField}`),c.setAttribute("orientation",a.orientation),a.collapsible&&c.setAttribute("collapsible",""),a.addNewButton&&c.setAttribute("add-new-button",""),c.innerHTML=u,c.siblingColumns=e,t.appendChild(c),c.column=a,c.index=d,l.onColumnHeaderRender&&l.onColumnHeaderRender(c.querySelector(".smart-kanban-column-header"),a),l._columnToElement.set(a,c),a.columns){const e=c.querySelector(".smart-kanban-column-content-columns");m=l._createColumnElements(a.columns,e,e,s+1),i+=m}else i+=1;const p=(m||1)+"fr";!1!==a.visible?(a.collapsed?(c.classList.add("collapsed"),r.push("auto")):r.push(p),n.push(p)):c.classList.add("smart-hidden"),l._allColumns.push(a)})),1===s&&l.addNewColumn&&(l._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,l._columnContainers.push(a),i}_createColumnElementsTabs(e,t,a,s){const l=this,o=l.id,r=[],n=[];e.forEach(((a,i)=>{const d=document.createElement("div");let c=`<div class="smart-kanban-column-contentAAA" role="presentation">\n <smart-scroll-viewer class="smart-kanban-column-content-tasks"${l._rtlAttr}${l._tabindex} role="list"></smart-scroll-viewer>BBB\n </div>`;if(a.columns?(c=c.replace("AAA",""),c=c.replace("BBB",'<div class="smart-kanban-column-content-columns has-tabs" role="presentation"></div>')):(c=c.replace("AAA"," no-sub-columns"),c=c.replace("BBB","")),d.className="smart-kanban-column",d.setAttribute("orientation",a.orientation),a.collapsible&&d.setAttribute("collapsible",""),a.addNewButton&&d.setAttribute("add-new-button",""),s){const e=document.createElement("div"),t=`${o}Tab${a.dataField}`,r=`${o}Column${a.dataField}`;e.id=t,e.className="smart-kanban-tab smart-unselectable",l.disabled||l.unfocusable||(e.tabIndex=0),e.setAttribute("role","tab"),e.setAttribute("aria-controls",r),e.innerHTML=`<div class="smart-kanban-tab-label">${a.label}</div>`,e.columnElement=d,d.id=r,d.setAttribute("role","tabpanel"),d.setAttribute("aria-labelledby",t),d.tab=e,s.appendChild(e),a.selected?e.classList.add("selected"):d.classList.add("smart-hidden"),e.setAttribute("aria-selected",a.selected)}else c=l._getColumnHeader(a,i<e.length-1)+c,d.setAttribute("role","group"),d.setAttribute("aria-labelledby",`${o}ColumnHeaderLabel${a.dataField}`);if(d.innerHTML=c,d.siblingColumns=e,t.appendChild(d),d.column=a,d.index=i,l._columnToElement.set(a,d),a.columns){const e=d.querySelector(".smart-kanban-column-content-columns"),t=document.createElement("div");t.className="smart-kanban-tab-strip",t.setAttribute("role","tablist"),e.appendChild(t),l._createColumnElementsTabs(a.columns,e,e,t)}s||(a.collapsed?(d.classList.add("collapsed"),r.push("auto")):r.push("1fr"),n.push("1fr")),l._allColumns.push(a)})),s||(l.addNewColumn&&(l._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,l._columnContainers.push(a))}_createColumnElementsSwimlanes(e,t,a){const s=this,l=s.id,o=s.swimlanes,r=[],n=[];e.forEach(((a,i)=>{const d=document.createElement("div");let c=`${s._getColumnHeader(a,i<e.length-1)}\n <div class="smart-kanban-column-content no-sub-columns" role="presentation"></div>`;d.className="smart-kanban-column",d.setAttribute("role","group"),d.setAttribute("aria-labelledby",`${l}ColumnHeaderLabel${a.dataField}`),d.setAttribute("orientation",a.orientation),a.collapsible&&d.setAttribute("collapsible",""),a.addNewButton&&d.setAttribute("add-new-button",""),d.innerHTML=c,d.siblingColumns=e;const u=d.children[1];let m="";if(s._hasSwimlane(i)){let e=[];for(let t=0;t<o.length;t++)m+=`<smart-scroll-viewer class="smart-kanban-column-content-tasks" swimlane="${o[t].dataField}"${s._rtlAttr}${s._tabindex} role="list"></smart-scroll-viewer>`,e.push("1fr");d.classList.add("has-swimlane"),u.classList.add("has-swimlane"),u.style.gridTemplateRows=e.join(" ")}else m=`<smart-scroll-viewer class="smart-kanban-column-content-tasks"${s._rtlAttr}${s._tabindex} role="list"></smart-scroll-viewer>`;u.innerHTML=m,t.appendChild(d),d.column=a,d.index=i,s._columnToElement.set(a,d),a.collapsed?(d.classList.add("collapsed"),r.push("auto")):r.push("1fr"),n.push("1fr"),s._allColumns.push(a)})),s.addNewColumn&&(s._appendAddNewColumn(t),r.push("var(--smart-kanban-add-new-column-width)")),a.style.gridTemplateColumns=r.join(" "),a.fractions=n,s._columnContainers.push(a)}_getColumnSummary(e){const t=this.getColumnDataItems(e.dataField);return this.columnSummary&&t.length?" ("+t.length+")":""}_getColumnHeaderTemplate(e,t){const a=e.headerTemplate||this.columnHeaderTemplate;if(a){const s=document.createElement("div");let l;if("string"==typeof a&&a.startsWith("#")?l=document.querySelector(a):"string"==typeof a&&(l=a),"function"==typeof a){const s=a(e,t);return s||t}if(l instanceof HTMLTemplateElement){s.appendChild(l.content.cloneNode(!0));const t=/{{\w+}}/g;let a=s.innerHTML;const o=t.exec(a);for(let t=0;t<o.length;t++){const t=e[o[0].replace("{{","").replace("}}","")];a=a.replace(o[0],t)}return a}return l instanceof HTMLElement?s.appendChild(l):s.innerHTML=l,s.innerHTML}return null}_getColumnHeader(e,t,a=1){const s=this,l=s._tabindex,o=e.collapsed?s.localize("expand"):s.localize("collapse"),r=s.localize("addNewTask"),n=s.allowColumnEdit||s.allowColumnRemove||s.allowColumnHide?"settings":"",i=s.localize("customizeColumn"),d=e.label,c=s._getColumnSummary(e);let u=`<span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span>`,m="smart-kanban-column-header-label";if(void 0!==e.color){if(e.color){const t=new Smart.Color(e.color).getInvertedColor();u=`<div class="heading" style="background: ${e.color}; color: ${t};"><span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span></div>`}else u=`<div class="heading"><span class="smart-kanban-title">${d}</span><span class='summary'>${c}</span></div>`;m+=" pill"}const p=null!==s.columnHeaderTemplate||e.headerTemplate?s._getColumnHeaderTemplate(e,u):u,b="bottom"===s.addNewButtonDisplayMode?"":"add-new-button";return`<div status="${e.dataField}" ${n} ${b} class="smart-kanban-column-header smart-unselectable"${l} role="heading" aria-level=${a}>\n <div title="${r}" class="smart-kanban-column-header-add ${b}"${l} role="button" aria-label="Add new task"></div>\n <div id="${s.id}ColumnHeaderLabel${e.dataField}" class="${m}">${p}</div>\n <div title="${o}" class="smart-kanban-column-header-toggle-button smart-arrow smart-arrow-${t?"left":"right"}" role="button" aria-hidden="true"></div>\n <div title="${i}" class="smart-kanban-column-actions smart-kanban-column-header-settings-button" role="button" aria-haspopup="menu" aria-label="Open actions list" aria-hidden="true"></div>\n </div>`}_hasSwimlane(e){const t=this;if(0===t.swimlanes.length)return!1;const a=t.swimlanesFrom;let s=t.swimlanesTo;return null===s&&(s=t.columns.length-1),e>=a&&e<=s}_updateColumnWidths(e,t){const a=t.fractions,s=[];let l=0;for(let t=0;t<e.length;t++)!1!==e[t].visible&&s.push(e[t].collapsed?"auto":a[l++]);t===this.$.body&&this.addNewColumn&&s.push("var(--smart-kanban-add-new-column-width)"),t.style.gridTemplateColumns=s.join(" ")}_validateColumnArgument(e){if(!isNaN(e))return this.columns[e];const t=this._allColumns;return"string"==typeof e?t.find((t=>t.dataField===e)):"object"==typeof e?t.find((t=>t===e)):null}_resizeHandler(){this.refresh("resize")}refresh(e){const t=this;"resize"===e?(clearTimeout(t._resizeTimeout),t._resizeTimeout=setTimeout((function(){t._allColumns.forEach((e=>t._refreshScrollViewer(e)))}),50),t._handleSwimlanes(!0)):(t.closePanel(),t._closeList(t._actionsList,"_actionSelectionFor"),t._closeList(t._columnActionsList,"_columnActionSelectionFor"),t._closeList(t._commentsList,"_commentSelectionFor"),t._closeList(t._userList,"_userSelectionFor"),t._closeList(t._priorityList,"_prioritySelectionFor"),t._render())}_refreshScrollViewer(e,t){const a=this,s=e instanceof HTMLElement?e:this._columnToElement.get(e);function l(l,o){(t||""!==l.$.scrollViewerContentContainer.innerHTML.trim())&&(e.collapsed?l.toRefresh=!0:(delete l.toRefresh,requestAnimationFrame((()=>{l.refresh(),0===o&&"horizontal"===e.orientation&&(l.$.content.offsetWidth<=2*a._kanbanTaskMinWidth+a._dataViewPadding?s.setAttribute("orientation","vertical"):"vertical"===s.getAttribute("orientation")&&s.setAttribute("orientation","horizontal"))}))),a._refreshButtonsAndSummaries())}e instanceof Smart.ScrollViewer?l(e):this.swimlanes.length>0?Array.from(s.querySelectorAll("smart-scroll-viewer")).forEach(((e,t)=>l(e,t))):l(s.querySelector("smart-scroll-viewer"),0)}_containerDownHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,s=a.closest(".smart-kanban-task");if(delete t._preventSelection,t.allowColumnReorder){const l=a.closest(".smart-kanban-column-header")&&!a.classList.contains("smart-kanban-column-header-add")&&!a.classList.contains("smart-kanban-column-header-toggle-button");if(!s&&l&&!t._columnEditing){const s=a.closest(".smart-kanban-column");if(s){const a=e.originalEvent.composedPath();let l=0;for(let e=0;e<a.length;e++)a[e].classList&&a[e].classList.contains("smart-kanban-column")&&l++;s.column.reorder&&l<=1&&(t._columnDragDetails={x:e.pageX,y:e.pageY,event:e,kanbanColumn:s})}}}const l=a.closest(".smart-kanban-column"),o=a.closest(".smart-kanban-column-header")&&!a.classList.contains("smart-kanban-column-header-add")&&!a.classList.contains("smart-kanban-column-header-toggle-button"),r=l?l.column:null;if(r){if(o&&t.$.fireEvent("columnClick",{column:r}),new Date-t._clickTime<=300)return!s&&o&&!t._columnEditing&&t.allowColumnEdit&&(t._columnDragDetails=null,!1===r.collapsed&&r.editable&&"menu"!==t.columnEditMode&&t._handleColumnEditing(r.dataField)),void(o&&(r.collapsed?t.expand(r):(!t.allowColumnEdit||t.allowColumnEdit&&"menu"===t.columnEditMode)&&t.collapse(r),t.$.fireEvent("columnDoubleClick",{column:r})));t._clickTime=new Date}s&&(t._focusTask(s),t._startDragging(s,e))}_containerKeydownHandler(e){const t=this;if(t._dragDetails)return;const a=e.key,s=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;function l(a=s){delete t._preventSelection,t._documentUpHandler({originalEvent:{target:a}}),t._containerClickHandler({target:a,ctrlKey:e.ctrlKey||e.metaKey,shiftKey:e.shiftKey}),e.preventDefault()}if(s.closest(".smart-kanban-column, .smart-kanban-add-new-column"))return s.classList.contains("smart-kanban-column-content-tasks")?void t._selectViaKeyboard(s.$.content,e,l):void("Enter"!==a&&" "!==a||s instanceof HTMLInputElement!=0||l());if(t.$.headerDropDown.contains(s))"Escape"===a&&(t.closePanel(),t.$[/\s?([a-z]+)-panel/g.exec(t.$.headerDropDown.className)[1]+"Button"].focus());else if(!(s.classList.contains("smart-data-view-header-button")||s.closest(".smart-data-view-search-box")||s.classList.contains("remove-button"))||"Enter"!==a&&" "!==a||l(),s.classList.contains("smart-kanban-list")){const o=s;switch(a){case"ArrowDown":t._selectListItem(t._getNextItem(o));break;case"ArrowUp":t._selectListItem(t._getPrevItem(o));break;case"Home":t._selectListItem(t._getFirstItem(o));break;case"End":t._selectListItem(t._getLastItem(o));break;case"Escape":o.openedFrom.focus(),t._closeList(o,o===t._actionsList?"_actionSelectionFor":o===t._commentsList?"_commentSelectionFor":"_userSelectionFor"),o===t._columnActionsList&&t._closeList(t._columnActionsList,"_columnActionSelectionFor");break;case"Enter":case" ":{const e=t._getSelectedItem(o);e&&l(e);break}default:return}e.preventDefault()}}_selectViaKeyboard(e,t,a){const s=this;let l=t.key;switch(s.rightToLeft&&("ArrowRight"===l?l="ArrowLeft":"ArrowLeft"===l&&(l="ArrowRight")),l){case"ArrowDown":case"ArrowRight":s._focusTask(s._getNextItem(e,!0));break;case"ArrowUp":case"ArrowLeft":s._focusTask(s._getPrevItem(e,!0));break;case"Home":s._focusTask(s._getFirstItem(e));break;case"End":s._focusTask(s._getLastItem(e));break;case"Enter":case" ":case"F2":case"Delete":{const t=s._getSelectedItem(e,!0);t&&("F2"===l?s.beginEdit(t):"Delete"===l?s.removeTask(t,!0):a(t));break}default:return}t.preventDefault()}_getFirstItem(e){const t=e.children;for(let e=0;e<t.length;e++){const a=t[e];if(!a.hasAttribute("disabled")&&"none"!==getComputedStyle(a).display)return a}}_getLastItem(e){const t=e.children;for(let e=t.length-1;e>=0;e--){const a=t[e];if(!a.hasAttribute("disabled")&&"none"!==getComputedStyle(a).display)return a}}_getPrevItem(e,t){const a=this._getSelectedItem(e,t);let s=a?a.previousElementSibling:this._getLastItem(e);for(;s;){if(!s.hasAttribute("disabled")&&"none"!==getComputedStyle(s).display)return s;s=s.previousElementSibling}}_getNextItem(e,t){const a=this._getSelectedItem(e,t);let s=a?a.nextElementSibling:this._getFirstItem(e);for(;s;){if(!s.hasAttribute("disabled")&&"none"!==getComputedStyle(s).display)return s;s=s.nextElementSibling}}_getSelectedItem(e,t){return t?e.querySelector("[focus]"):e.querySelector(".selected")}_selectListItem(e){if(!e)return;const t=e.parentElement,a=t.querySelector(".selected");a&&(a.classList.remove("selected"),a.removeAttribute("aria-selected")),e.classList.add("selected"),e.setAttribute("aria-selected",!0),t.scrollTop=e.offsetTop}_focusTask(e){e&&(Array.from(e.parentElement.querySelectorAll("[focus]")).forEach((e=>e.removeAttribute("focus"))),e.setAttribute("focus",""),this.ensureVisible(e))}_setFocusable(){const e=this,t=e.$.container,a=e.disabled||e.unfocusable;let s=[e.$.customizeButton,e.$.filterButton,e.$.sortButton,e.$.searchButton,e.$.searchPrev,e.$.searchNext,e.$.searchClose,e._actionsList,e._userList];if(s=s.concat(Array.from(t.querySelectorAll(".smart-kanban-column-header, .smart-kanban-column-header-add, .smart-kanban-tab, .smart-kanban-column-content-tasks, .smart-kanban-task-user, .smart-kanban-task-actions, .smart-kanban-task-comments, .smart-kanban-add-new-column"))),s.forEach((e=>{a?e.removeAttribute("tabindex"):(null===e.getAttribute("tabindex")||e.getAttribute("tabindex")<0)&&e.setAttribute("tabindex",0)})),e._dialog&&e._dialog.editPanelPopulated){const t=Array.from(e._dialog.$.container.querySelectorAll(".text-editor, .new-subtask"));a?t.forEach((e=>e.tabIndex=-1)):t.forEach((e=>e.removeAttribute("tabindex"))),Array.from(e._dialog.$.container.querySelectorAll(".smart-element.editor, smart-button.add, smart-button.ok, smart-button.cancel")).forEach((e=>e.unfocusable=a)),e._dialog.unfocusable=a}}_startDragging(e,t){const a=this;if(!a._currentUser.allowDrag)return;const s=e.closest("smart-scroll-viewer"),l=e.getBoundingClientRect();let o=e.hasAttribute("selected")?Array.from(e.parentElement.querySelectorAll("[selected]")):[e];a._dragDetails={StartPosition:{left:t.pageX,top:t.pageY},Items:o,Item:e,FeedbackShown:!1,OriginalEvent:t,Column:e.classList.contains("smart-kanban-column")?e:null,PointerOffset:[l.x-t.clientX,l.y-t.clientY],ScrollViewer:s,StartTime:new Date,Dragging:!0},Smart.Kanban.kanbanTaskDragged=!0,s&&s._scrollView&&(s._scrollView.disableSwipeScroll=!0),a.allowDrop&&(Smart.Kanban.hoveredKanban=a,Smart.Kanban.hoveredItem=e)}_documentMoveHandler(e){const t=this,a=t._dragDetails;function s(){delete t._dragDetails,delete Smart.Kanban.kanbanTaskDragged,delete Smart.Kanban.hoveredKanban,delete Smart.Kanban.hoveredItem,a.ScrollViewer._scrollView.disableSwipeScroll=!1}if(t.allowColumnReorder&&t._columnDragDetails&&(Math.abs(e.pageX-t._columnDragDetails.x)>=3||Math.abs(e.pageY-t._columnDragDetails.y)>=3)&&(t._startDragging(t._columnDragDetails.kanbanColumn,t._columnDragDetails.event),t._columnDragDetails=null),!a)return;if(!a.FeedbackShown){const l=(new Date).getTime()-a.StartTime.getTime()>500,o=Math.abs(a.StartPosition.left-e.pageX)>5||Math.abs(a.StartPosition.top-e.pageY)>5;if(!o||!(!t._isMobile||t._isMobile&&l))return void(t._isMobile&&o&&!l&&s());if(t.$.fireEvent("dragStart",{item:a.Item,items:a.Items,data:a,container:t,previousContainer:t,originalEvent:a.OriginalEvent}).defaultPrevented)return void s();t.closePanel(),t._hideBodyOverflow(),a.Feedback=t._addDragFeedback(),a.FeedbackShown=!0,a.Items.forEach((e=>e.classList.add("dragged")))}let l,o=t.dragOffset;if(o="auto"!==o&&Array.isArray(o)?o:a.PointerOffset,t.$.fireEvent("dragging",{item:a.Item,items:a.Items,data:a,originalEvent:e}),a.Feedback.style.left=e.pageX+(o[0]||0)+"px",a.Feedback.style.top=e.pageY+(o[1]||0)+"px",Smart.Kanban.hoveredKanban&&(clearInterval(Smart.Kanban.hoveredKanban._dragInterval),delete Smart.Kanban.hoveredKanban),Smart.Kanban.hoveredItem&&(Smart.Kanban.hoveredItem.classList.remove("drop-target"),Smart.Kanban.hoveredItem.classList.remove("before","after"),delete Smart.Kanban.hoveredItem),l=t._isMobile?(t.shadowRoot||t.getRootNode()).elementFromPoint(e.clientX,e.clientY):t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,!l)return;const r=(t.shadowRoot?l.getRootNode().host:l).closest("smart-kanban");if(!r||!r.allowDrop)return;const n=l.closest(".smart-kanban-column-content-tasks");if(Smart.Kanban.hoveredKanban=r,a.Column)return void t._handleColumnDragging(e);if(!n)return;const i=n.parentElement.parentElement.getAttribute("orientation"),d=Array.from(n.$.content.children);let c=0;if(d.forEach((e=>e.filteredOut&&c++)),0===d.length||d.length===c)return Smart.Kanban.hoveredItem=n.$.scrollViewerContainer,void Smart.Kanban.hoveredItem.classList.add("drop-target");n.scrollHeight>0&&(r._dragInterval=setInterval((function(){const a=n.getBoundingClientRect();a.left<=e.clientX&&a.left+a.width>=e.clientX?e.clientY>=a.top&&e.clientY<=a.top+20?n.scrollTop-=t._autoScrollCoefficient:e.clientY>=a.top+a.height-20&&e.clientY<=a.top+a.height?n.scrollTop+=t._autoScrollCoefficient:clearInterval(r._dragInterval):clearInterval(r._dragInterval)}),2));let u=l.closest(".smart-kanban-task");if(u&&-1===a.Items.indexOf(u)){const t=u.getBoundingClientRect();"vertical"===i&&e.clientY-t.top<=t.height/2||"horizontal"===i&&e.clientX-t.left<=t.width/2?u.classList.add("before"):u.classList.add("after")}else{if(u&&1===d.length)return;u=u&&1===a.Items.length?t[`_${i}ClosestTaskToHover`]([u.previousElementSibling,u.nextElementSibling],e,!0):t[`_${i}ClosestTaskToHover`](d,e,u||l===n.$.content)}u&&(u.classList.add("drop-target"),Smart.Kanban.hoveredItem=u)}_handleColumnDragging(e){const t=this.querySelectorAll(".smart-kanban-column");let a;for(let s=0;s<t.length;s++){const l=t[s],o=l.getBoundingClientRect();e.clientX>=o.left&&e.clientX<=o.right&&e.clientY>=o.top&&e.clientY<=o.bottom&&(a=l)}if(a){const s=a.getBoundingClientRect();e.clientX-s.left<=s.width&&(a.classList.add("before"),a.classList.add("drop-target")),e.clientX-s.left>=s.width/2&&a===t[t.length-1]&&(a.classList.remove("before"),a.classList.add("after"),a.classList.add("drop-target")),Smart.Kanban.hoveredItem=a}}_hideBodyOverflow(){const e=this,t=(document.scrollingElement||document.documentElement).scrollHeight>document.documentElement.clientHeight,a=(document.scrollingElement||document.documentElement).scrollWidth>document.documentElement.clientWidth,s=e.isInShadowDOM?e.getRootNode().host:document.body;e._originalBodyOverflow={overflowX:s.style.overflowX,overflowY:s.style.overflowY,overflow:s.style.overflow},s.classList.add("smart-dragging"),s.style.overflow=s.style.overflowX=s.style.overflowY="",t&&!a?s.style.overflowX="hidden":a&&!t?s.style.overflowY="hidden":a||t||(s.style.overflow="hidden")}_verticalClosestTaskToHover(e,t,a){const s=this._dragDetails.Items,l=t.clientY;let o,r,n=1/0,i=0,d=e.length-1,c=1;for(a||(i=d,d=0,c=-1);i!==d+c;){const t=e[i];if(i+=c,!t||t.filteredOut||-1!==s.indexOf(t))continue;if(!a){o=t,r="after";break}const d=t.getBoundingClientRect(),u=d.top+d.height/2,m=Math.abs(l-u);if(!(m<n))break;n=m,o=t,r=l<=u?"before":"after"}return o&&o.classList.add(r),o}_horizontalClosestTaskToHover(e,t){const a=this._dragDetails.Items,s=t.clientY,l=t.clientX;let o,r,n;return e.forEach((e=>{if(!e||e.filteredOut||-1!==a.indexOf(e))return;const t=e.getBoundingClientRect(),i=Math.abs(s-t.top),d=Math.abs(s-t.bottom),c=Math.min(i,d),u=Math.abs(l-t.left),m=Math.abs(l-t.right),p=Math.min(u,m),b=Math.sqrt(Math.pow(p,2)+Math.pow(c,2));(void 0===r||b<r)&&(o=e,r=b,n=u<m?"before":"after")})),o&&o.classList.add(n),o}_scrollViewerTouchmoveHandler(e){const t=this;t._dragDetails&&(t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target).closest("smart-scroll-viewer")&&e.cancelable&&(e.preventDefault(),e.stopPropagation())}_documentUpHandler(e){const t=this,a=t._dragDetails;if(t._columnDragDetails=null,t.$.container.hasAttribute("modal"))return;const s=t.isInShadowDOM||t.shadowRoot?e.originalEvent.composedPath()[0]:e.originalEvent.target,l=t.$.header;if(t._userSelectionFor&&!t._userList.contains(s)&&t._closeList(t._userList,"_userSelectionFor"),t._prioritySelectionFor&&!t._priorityList.contains(s)&&t._closeList(t._priorityList,"_prioritySelectionFor"),t._actionSelectionFor&&!t._actionsList.contains(s)&&t._closeList(t._actionsList,"_actionSelectionFor"),t._columnActionSelectionFor&&!t._columnActionsList.contains(s)&&(t._columnActionsList.classList.contains("smart-visibility-hidden")||(t._closeList(t._columnActionsList,"_columnActionSelectionFor"),e.originalEvent.preventDefault(),e.originalEvent.stopPropagation(),t._columnActionsListDate=new Date)),t._commentSelectionFor){const e=t._commentsList;(t.shadowRoot||t.getRootNode()).activeElement!==e.textarea&&(t._actionSelectionFor||e.contains(s)?!e.classList.contains("expanded")||s===e.textarea||e.button.contains(s)||s.classList.contains("remove-button")||e.classList.remove("expanded"):t._closeList(e,"_commentSelectionFor"))}if(!("none"===t.headerPosition||t.$.headerDropDown.classList.contains("smart-visibility-hidden")||t.$.headerDropDown.classList.contains("search-panel")||s!==l&&l.contains(s))){const e=s.closest("smart-scroll-viewer"),a=s.closest(".smart-drop-down");e&&l.contains(e.ownerElement)||a&&(!a.ownerElement||l.contains(a.ownerElement))||t.closePanel()}if(!a)return;const o=Smart.Kanban.hoveredKanban,r=Smart.Kanban.hoveredItem;if(delete t._dragDetails,delete Smart.Kanban.kanbanTaskDragged,delete Smart.Kanban.hoveredKanban,delete Smart.Kanban.hoveredItem,a.ScrollViewer&&a.ScrollViewer._scrollView&&(a.ScrollViewer._scrollView.disableSwipeScroll=!1),!a.FeedbackShown)return;const n=o||(t.shadowRoot||t.getRootNode()).elementFromPoint(e.clientX,e.clientY);t._preventSelection=!0;const i=t.isInShadowDOM?t.getRootNode().host:document.body;i.classList.remove("smart-dragging"),i.style.overflow=t._originalBodyOverflow.overflow,i.style.eoverflowX=t._originalBodyOverflow.overflowX,i.style.overflowY=t._originalBodyOverflow.overflowY,delete t._originalBodyOverflow,a.Feedback.remove(),o&&clearInterval(o._dragInterval);const d=a.Item,c=a.Items;if(c.forEach((e=>e.classList.remove("dragged"))),!n)return;if(!r)return void t.$.fireEvent("dragEnd",{item:d,items:c,target:n,data:a,previousContainer:t,container:n,originalEvent:e});if(!o||!o.allowDrop||o.disabled)return;let u=!1;if(r.classList.remove("drop-target"),r.classList.contains("before")?r.classList.remove("before"):r.classList.contains("after")&&(r.classList.remove("after"),u=!0),a.DropDetails={item:r,after:u},t.$.fireEvent("dragEnd",{item:d,items:c,target:r,data:a,previousContainer:t,container:o,originalEvent:e}).defaultPrevented)return;function m(e,s){t._requestVirtualDataSource("update",Object.assign({},e.data,{status:s}),(function(s){return s&&t._moveDraggedItems(Object.assign({},a,{Item:e,Items:[e]})),s}))}const p=r.closest(".smart-kanban-column"),b=p.column.dataField;if(a.Column){const e=()=>Array.from(p.parentElement.querySelectorAll(".smart-kanban-column")).filter((e=>e.parentElement===p.parentElement)),s=e().indexOf(a.Column);a.DropDetails.after?p.parentElement.appendChild(a.Column):p.parentElement.insertBefore(a.Column,p);const l=e().indexOf(a.Column),o=[],r=e();for(let e=0;e<r.length;e++)r[e].column&&!r[e].classList.contains("smart-kanban-add-new-column")&&o.push(r[e].column);return t.columns=o,t.$.fireEvent("columnReorder",{column:a.Column.column,oldIndex:s,index:l}),t._reset(),void t._createAddNewButton()}if(d&&d.data&&b!==d.data.status){const e=Object.assign({},d.data);e.status=b;const a=t.getColumn(b);a&&(e.statusLabel=a.label);const s=t.getColumn(d.data.status);s&&(d.data.statusLabel=s.label);const l=JSON.parse(JSON.stringify(e)),o=JSON.parse(JSON.stringify(d.data));if(t.$.fireEvent("change",{task:d,id:l.id,value:l,oldValue:o}),t.$.fireEvent("taskUpdate",{id:l.id,value:l,oldValue:o}),t._currentUser.info){const e=t.dataSourceMap;d.data[e.updatedUserId]=t._currentUser.info.id,d.data[e.updatedDate]=new Date,t.addHistory(d.data,{action:"moved",user:t._currentUser.info.id,details:{id:d.data[e.id],oldValue:o[e.status],value:l[e.status]},label:d.data[e.text],date:d.data[e.updatedDate]})}}if(t.dataSource&&t.dataSource.virtualDataSource&&b!==d.data[t.dataSourceMap.status])if(u)for(let e=c.length-1;e>=0;e--)m(c[e],b);else for(const e of c)m(e,b);else t._moveDraggedItems(a)}_refreshButtonsAndSummaries(){const e=this;e.addNewButtons&&(e.addNewButtons.forEach((e=>{e.refresh()})),e._refreshSummaries())}_addDragFeedback(){const e=this,t=e._dragDetails.Item,a=e._dragDetails.Items.length,s=document.createElement("div"),l=t.offsetWidth+"px",o=t.offsetHeight+"px";let r=t.cloneNode(!0);if(r.style.width=l,r.style.height=o,t.classList.contains("smart-kanban-column")){r=document.createElement("smart-kanban");const a=Object.assign({},t.column);a.collapsed=!1;const o=[a];r.columns=o,r.dataSource=e.dataSource,r.users=e.users,r.taskActions=e.taskActions,r.taskDue=e.taskDue,r.taskProgress=e.taskProgress,r.style.height="100%",r.style.width=l,r.style.minWidth="250px",s.setAttribute("column-drag","")}if(s.className="smart-kanban-feedback",s.setAttribute("parent-kanban-id",e.id),e.theme&&s.setAttribute("theme",e.theme),["rightToLeft","taskActions","taskComments","taskDue","taskPriority","taskProgress","taskTags","taskUserIcon"].forEach((t=>{e[t]&&s.setAttribute(Smart.Utilities.Core.toDash(t),"")})),s.appendChild(r),a>1){const e=document.createElement("div");e.style.width=l,e.style.height=o,e.className="smart-kanban-feedback-additional",s.insertBefore(e,r),r.setAttribute("num",a),a>2&&e.classList.add("multiple")}return e.getShadowRootOrBody().appendChild(s),s}_moveDraggedItems(e){const t=this,a=t.dataSourceMap;let s,l=e.DropDetails,o=l.item,r=o.closest(".smart-kanban-column"),n=e.Item.closest("smart-scroll-viewer"),i=r.column;if(o.classList.contains("smart-kanban-task")?(s=o.parentElement,l.after&&(o=o.nextElementSibling),e.Items.forEach((e=>{s.insertBefore(e,o),e.data[a.status]=i.dataField}))):(s=o.firstElementChild,e.Items.forEach((e=>{s.appendChild(e),e.data[a.status]=i.dataField}))),s=s.closest("smart-scroll-viewer"),t.swimlanes.length>0){const t=s.getAttribute("swimlane");t?e.Items.forEach((e=>e.data[a.swimlane]=t)):e.Items.forEach((e=>delete e.data[a.swimlane]))}t._focusTask(e.Item),n!==s&&(s.focus(),t.textTemplate&&e.Items.forEach((e=>t._renderTask(e))),e.Item.hasAttribute("selected")&&(e.Items.forEach((e=>e.removeAttribute("selected"))),t._selectedTasks=[],t._autoSaveState("selection")),t._refreshScrollViewer(n,!0),t._refreshScrollViewer(s,!0)),t._refreshSummaries(),t._autoSaveState("dataSource")}_getCurrentDataSource(){const e=Array.from(this.$.container.getElementsByClassName("smart-kanban-task")),t=[];for(let a=0;a<e.length;a++)t.push(e[a].data);return t}_validateTaskArgument(e){const t=this;return e instanceof HTMLElement&&t.$.container.contains(e)&&e.classList.contains("smart-kanban-task")?e:null===e||"number"!=typeof e&&"string"!=typeof e?void 0:t.$.container.querySelector(`.smart-kanban-task[data-id="${e}"]`)}_openDialog(e,t,a="task"){const s=this,l={purpose:t};if(l[a]=e,s.$.fireEvent("opening",l).defaultPrevented)return;s._dialog||s._createDialog();const o=s._dialog,r="prompt"===t;if(o.refreshFieldsDirty=!0,o.openedFrom=(s.shadowRoot||s.getRootNode()).activeElement,o.classList.toggle("prompt",r),o.classList.toggle("edit",!r),o.style.top="",o.style.left="",o.style.width="",o.style.height="auto",s.offsetWidth<600&&(o.style.top="0px",o.style.left="0px",o.style.width="100%",o.style.height="100%"),o.taskOrComment=e,"edit"===t?s._currentUser&&s._currentUser.allowRemove&&o.querySelector(".delete").classList.remove("smart-hidden"):o.querySelector(".delete").classList.add("smart-hidden"),o.editPanelPopulated&&(o.selectTab(0),o.editors.historyTab&&o.editors.historyTab.classList.add("smart-hidden")),r){let t="task"===a?s.localize("promptTask",{taskText:e.data[s.dataSourceMap.text]}):s.localize("promptComment"),l="task"===a?s.localize("removeTask",{taskText:e.data[s.dataSourceMap.text]}):s.localize("removeComment");"column"===a&&(t=s.localize("promptColumn"),l=s.localize("removeColumn")),o.label=l,o.setAttribute("aria-label",t),o.$.container.querySelector(".prompt").innerHTML=t}else{let a=!0;o.removeAttribute("aria-label"),o.headerPosition="top",o.editPanelPopulated||(s._initEditPanel(),a=!1),"edit"===t?s._beginEdit(e):"add"===t&&(o.label=s.localize("addNewTask"),delete o.taskOrComment,a&&s._clearEditors(),o.editors.status.value=e.label,o.editors.status.$.input.dataValue=e.dataField,0===s.swimlanes.length?(o.editors.swimlane.classList.add("smart-hidden"),o.editors.swimlaneLabel.classList.add("smart-hidden"),o.editors.swimlane.parentElement.classList.add("single-column")):(o.editors.swimlane.classList.remove("smart-hidden"),o.editors.swimlaneLabel.classList.remove("smart-hidden"),o.editors.swimlane.parentElement.classList.remove("single-column")),o.editors.created.parentElement.classList.add("smart-hidden"),o.editors.updated.parentElement.classList.add("smart-hidden"))}s.$.container.setAttribute("modal","");const n=s.offset(s);o.offsetHeight>s.offsetHeight?o.style.top=s.getBoundingClientRect().top+"px":o.style.top=n.top+s.offsetHeight/2-o.offsetHeight/2+"px",o.open()}_createDialog(){const e=this,t=document.createElement("smart-window"),a=document.createElement("template"),s=` animation="${e.animation}"${e._rtlAttr} theme="${e.theme}"${e.unfocusable?" unfocusable":""}`;a.innerHTML=`<smart-button class="ok primary"${s}><span class="smart-icon"></span>${e.localize("ok")}</smart-button>\n<smart-button class="cancel"${s}><span class="smart-icon"></span>${e.localize("cancel")}</smart-button><smart-button class="smart-hidden delete secondary"${s}><span class="smart-icon"></span>${e.localize("delete")}</smart-button>`,t.animation=e.animation,t.footerTemplate=a,t.headerButtons=["close"],t.rightToLeft=e.rightToLeft,t.resizeMode="both",t.liveResize=!0,t.theme=e.theme,t.className="smart-kanban-window",t.innerHTML='<div class="prompt"></div>\n<div class="edit"></div>',t.ownerElement=e,e._dialog=t,e._addDialogHandlers(),e.getShadowRootOrBody().appendChild(t)}_addDialogHandlers(){const e=this,t=e._dialog;t.addEventListener("open",e._dialogEventHandler),t.addEventListener("closing",e._dialogEventHandler),t.addEventListener("close",e._dialogEventHandler),t.addEventListener("click",e._dialogClickHandler)}_dialogEventHandler(e){const t=this,a=t.ownerElement,s=e.type,l=a.context;(t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target)===t&&(a.context=a,"open"===s?(a.$.fireEvent("open"),t.classList.contains("edit")&&(a.hasAnimation?t.addEventListener("transitionend",(function(){requestAnimationFrame((()=>t.editors.text.focus()))}),{once:!0}):requestAnimationFrame((()=>t.editors.text.focus())))):"closing"===s?a.$.fireEvent("closing").defaultPrevented&&(e.preventDefault(),delete t.ok):"close"===s&&(a.$.fireEvent("close"),a._dialogCloseHandler(e)),a.context=l)}_dialogClickHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;if(a.closest(".ok"))t.ok=!0,t.close();else if(a.closest(".cancel"))t.close();else if(a.closest(".delete"))t.ownerElement.removeTask(t.taskOrComment),t.close();else if(a.closest(".add")){const e=t.editors.newSubtask,a=e.value;if(""===a)return;const s=t.editors.checklist;s.insert(s.items.length,{label:a}),e.value="",t.$.content.scrollTop=t.$.content.scrollHeight-t.$.content.offsetHeight,t.refreshTabs()}else if(a.classList.contains("remove-subtask"))t.editors.checklist.removeChild(a.closest("smart-list-item")),t.refreshTabs();else if(a.classList.contains("remove-button")){const e=t.ownerElement.dataSourceMap,s=t.taskOrComment.data[e.comments],l=a.closest(".comment").comment;t.taskOrComment.comment=l,t.taskOrComment.data[e.comments]=s.filter((e=>e!==t.taskOrComment.comment)),t.refreshComments()}}_dialogCloseHandler(){const e=this,t=e.dataSourceMap,a=e._dialog;function s(s){a.taskOrComment.remove(),s.querySelector(".smart-kanban-task-comments").setAttribute("num",s.data[t.comments].length||""),e._commentsList.editing&&(e._commentsList.textarea.value="",delete e._commentsList.editing)}if(e.$.container.removeAttribute("modal"),a.ok){if(a.classList.contains("prompt")){const l=e._commentSelectionFor;if(l){const o=l.data;if(e.dataSource&&e.dataSource.virtualDataSource){const r=Object.assign({},o);r[t.comments]=r[t.comments].filter((e=>e!==a.taskOrComment.comment)),e._requestVirtualDataSource("update",r,(function(e){return e&&(l.data=r,s(l)),e}))}else o[t.comments]=o[t.comments].filter((e=>e!==a.taskOrComment.comment)),s(l)}else e._columnActionSelectionFor&&a.taskOrComment.dataField?e.removeColumn(a.taskOrComment.dataField):e.removeTask(a.taskOrComment)}else e._endEdit();delete a.ok}a.openedFrom&&requestAnimationFrame((()=>{e.getRootNode().contains(a.openedFrom)&&a.openedFrom.focus&&a.openedFrom.focus(),delete a.openedFrom})),delete a.taskOrComment}_closeDialog(){const e=this;e._dialog&&e._dialog.close()}_getHistoryItemLabel(e){const t=this;let a;switch(e.action){case"created":a=t.localize("taskCreated");break;case"tags":a=t.localize("taskTagsChanged");break;case"description":a=t.localize("taskDescriptionChanged");break;case"progress":a=t.localize("taskProgressChanged");break;case"text":a=t.localize("taskNameChanged");break;case"color":a=t.localize("taskColorChanged");break;case"priority":a=t.localize("taskPriorityChanged");break;case"deadline":a=t.localize("taskDeadlineChanged");break;case"subtasks":a=t.localize("taskSubtasksChanged");break;case"user":a=e.details.value?t.localize("taskUserChanged"):t.localize("taskUserRemoved");break;case"moved":a=t.localize("taskMoved");break;case"status":a=t.localize("taskStatusChanged");break;default:a=t.localize("taskUpdated")}return a}_initEditPanel(){const e=this,t=e.id,a=e._dialog,s=a.$.container.querySelector(".edit"),l=[""].concat(e.users.map((e=>({label:e.name,value:e.id,color:e.color,image:e.image})))),o=e._allColumns.map((e=>({label:e.label,value:e.dataField}))),r=e._getPriority(),n=e.swimlanes.map((e=>({label:e.label,value:e.dataField}))),i=document.createElement("template"),d=` animation="${e.animation}"${e._rtlAttr} theme="${e.theme}"${e.unfocusable?" unfocusable":""}`;i.innerHTML=`<div class="smart-kanban-sub-task"><span class="label">{{label}}</span><span class="remove-subtask" aria-label="Remove subtask" title="${e.localize("removeSubtask")}"></span></div>`,i.id=e.id+"ChecklistTemplate",a.$.container.appendChild(i),s.innerHTML=`\n <div class="smart-kanban-tab-strip">\n <div view="details" class="selected smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("detailsTab")}</div></div>\n <div view="subtasks" class="smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("subtasksTab")}</div></div>\n <div view="comments" class="smart-kanban-tab"><div class="smart-kanban-tab-label">${e.localize("commentsTab")}</div></div>\n <div view="history" class="smart-kanban-tab smart-hidden"><div class="smart-kanban-tab-label">${e.localize("historyTab")}</div></div>\n <div view="fields" class="smart-kanban-tab smart-hidden"><div class="smart-kanban-tab-label">${e.localize("fieldsTab")}</div></div>\n </div>\n <div class="smart-kanban-tab-content details">\n <div class="layout">\n <div class="column">\n <div id="${t}LabelText" class="editor-label">${e.localize("text")}</div>\n <smart-input class="editor text-editor" aria-labelledby="${t}LabelText"></smart-input>\n <div id="${t}LabelDescription" class="editor-label">${e.localize("description")}</div>\n <textarea class="editor description-editor" aria-labelledby="${t}LabelDescription"></textarea> \n <div id="${t}LabelStatus" class="editor-label">${e.localize("status")}</div>\n <smart-input class="editor status-editor" data-source='${JSON.stringify(o)}' drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelStatus"></smart-input>\n <div id="${t}LabelSwimlane" class="editor-label swimlane-label">${e.localize("swimlane")}</div>\n <smart-input class="editor swimlane-editor" data-source='${JSON.stringify(n)}'${0===n.length?" disabled":""} drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelSwimlane"></smart-input>\n </div>\n <div class="column">\n <div class="editor-container">\n <div id="${t}LabelAssignedTo" class="editor-label">${e.localize("assignedTo")}</div>\n <div id="${t}LabelProgress" class="editor-label">${e.localize("progress")}</div>\n <smart-multi-combo-input readonly pills class="editor asignee-editor" single-select data-source='${JSON.stringify(l)}'${0===l.length?" disabled":""} drop-down-button-position="right"${d} aria-labelledby="${t}LabelAssignedTo"></smart-multi-combo-input>\n <smart-numeric-text-box class="editor progress-editor" input-format="floatingPoint" min="0" max="100" show-unit unit="%"${d} aria-labelledby="${t}LabelProgress"></smart-numeric-text-box>\n </div>\n <div class="editor-container">\n <div id="${t}LabelStartDate" class="editor-label">${e.localize("startDate")}</div>\n <div id="${t}LabelDueDate" class="editor-label">${e.localize("dueDate")}</div>\n <smart-date-time-picker auto-close auto-open class="editor start-date-editor" calendar-button drop-down-append-to="body" drop-down-display-mode="calendar" format-string="${e.formatStringDate}" nullable${d} value="null" aria-labelledby="${t}LabelStartDate"></smart-date-time-picker>\n <smart-date-time-picker auto-close auto-open class="editor due-date-editor" calendar-button drop-down-append-to="body" drop-down-display-mode="calendar" format-string="${e.formatStringDate}" nullable${d} value="null" aria-labelledby="${t}LabelDueDate"></smart-date-time-picker>\n </div>\n <div class="editor-error-container smart-hidden" style="color: var(--smart-error);">\n <label id="${t}LabelRange">${e.localize("invalidRange",{start:e.localize("startDate"),end:e.localize("dueDate")})}</label>\n <br/> <br/>\n </div>\n <div class="editor-container">\n <div id="${t}LabelPriority" class="editor-label">${e.localize("priority")}</div>\n <div id="${t}LabelColor" class="editor-label">${e.localize("color")}</div>\n <smart-input class="editor priority-editor" data-source='${JSON.stringify(r)}' drop-down-button-position="right" readonly${d} aria-labelledby="${t}LabelPriority"></smart-input>\n <smart-color-input value-display-mode="colorBox" class="editor color-editor" drop-down-button-position="right"${d} aria-labelledby="${t}LabelColor"></smart-color-input>\n </div>\n <div id="${t}LabelTags" class="editor-label">${e.localize("tags")}</div>\n <smart-multi-combo-input class="editor tags-editor" select-all drop-down-button-position="right" ${d} aria-labelledby="${t}LabelTags"></smart-multi-combo-input>\n </div>\n </div>\n </div>\n <div class="smart-kanban-tab-content smart-hidden subtasks">\n <div id="${t}LabelChecklist" class="editor-label">${e.localize("checklist")}</div>\n <div class="new-container">\n <input type="text" class="new-subtask" placeholder="${e.localize("newSubtask")}" />\n <smart-button class="add primary" title="${e.localize("addSubtask")}" aria-label="Add subtask"${d}>+</smart-button>\n </div>\n <smart-list-box class="editor checklist-editor" item-template="${i.id}" selection-mode="checkBox"${d} aria-labelledby="${t}LabelChecklist"></smart-list-box>\n <br/>\n </div>\n <div class="smart-kanban-tab-content comments">\n </div>\n <div class="smart-kanban-tab-content smart-hidden history">\n <div class="editor-container">\n <div id="${t}LabelCreatedBy" class="editor-label">${e.localize("createdBy")}</div>\n <div id="${t}LabelCreatedByDate" class="editor-label">${e.localize("createdByDate")}</div>\n <div class="editor created" aria-labelledby="${t}LabelCreatedBy"></div>\n <div class="editor created-date" aria-labelledby="${t}LabelCreatedByDate"></div>\n </div>\n <div class="editor-container">\n <div id="${t}LabelUpdatedBy" class="editor-label">${e.localize("updatedBy")}</div>\n <div id="${t}LabelUpdatedBy" class="editor-label">${e.localize("updatedByDate")}</div>\n <div class="editor updated" aria-labelledby="${t}LabelUpdatedBy"></div>\n <div class="editor updated-date" aria-labelledby="${t}LabelUpdatedByDate"></div>\n </div>\n <div class="history-table smart-hidden editor-container">\n </div>\n </div>\n <div class="smart-kanban-tab-content fields">\n </div> \n<div class="template-container">\n</div>\n`,a.editors={text:s.querySelector(".text-editor"),description:s.querySelector(".description-editor"),tags:s.querySelector(".tags-editor"),userId:s.querySelector(".asignee-editor"),status:s.querySelector(".status-editor"),swimlane:s.querySelector(".swimlane-editor"),swimlaneLabel:s.querySelector(".swimlane-label"),startDate:s.querySelector(".start-date-editor"),dueDate:s.querySelector(".due-date-editor"),progress:s.querySelector(".progress-editor"),priority:s.querySelector(".priority-editor"),color:s.querySelector(".color-editor"),newSubtask:s.querySelector(".new-subtask"),checklist:s.querySelector(".checklist-editor"),template:s.querySelector(".template-container"),created:s.querySelector(".created"),createdDate:s.querySelector(".created-date"),updated:s.querySelector(".updated"),updatedDate:s.querySelector(".updated-date"),tabs:s.querySelector(".smart-kanban-tab-strip"),detailsTab:s.querySelector('[view="details"]'),commentsTab:s.querySelector('[view="comments"]'),subtasksTab:s.querySelector('[view="subtasks"]'),historyTab:s.querySelector('[view="history"]'),fieldsTab:s.querySelector('[view="fields"]')};const c=a.editors.tabs.querySelectorAll(".smart-kanban-tab");a.selectTab=e=>{c[e]&&c[e].click()},a.refreshTabs=t=>{if(!a.taskOrComment)return;const s=a.taskOrComment.data[e.dataSourceMap.comments],l=s&&s.length?'<span class="summary"> ('+s.length+")</span>":"";let o=a.taskOrComment.data[e.dataSourceMap.checklist],r=o&&o.length?'<span class="summary"> ('+o.length+")</span>":"";t||(o=a.editors.checklist.items.length,o&&(r=o?'<span class="summary"> ('+o+")</span>":"")),a.editors.commentsTab.innerHTML=`${e.localize("commentsTab")}${l}`,a.editors.subtasksTab.innerHTML=`${e.localize("subtasksTab")}${r}`,e.taskCustomFields.length>0?a.editors.fieldsTab.classList.remove("smart-hidden"):a.editors.fieldsTab.classList.add("smart-hidden"),a.taskOrComment.data[e.dataSourceMap.updatedDate]||a.taskOrComment.data[e.dataSourceMap.createdDate]?a.editors.historyTab.classList.remove("smart-hidden"):a.editors.historyTab.classList.add("smart-hidden")},a.refreshFields=()=>{const t=a.querySelector(".fields"),s=a.taskOrComment.data;if(!0===a.refreshFieldsDirty)if(a.refreshFieldsDirty=!1,t.firstElementChild)for(let t=0;t<e.taskCustomFields.length;t++){const l=e.taskCustomFields[t],o=s[l.dataField],r=a.querySelector("[container-for="+l.dataField+"]");null==o||e.dataSourceMap[l.dataField]?r.classList.add("smart-hidden"):r.classList.remove("smart-hidden");const n=r.lastElementChild.firstElementChild;n.removeAttribute("dirty"),n.value=o}else{const a=document.createDocumentFragment(),l=(e,t,a)=>{const s=document.createElement("div"),l=document.createElement("div"),o=document.createElement("div");a.allowHide?l.innerHTML=e+'<span class="icon"></span>':l.innerHTML=e,l.classList.add("editor-label"),a.allowHide&&(!1===a.visible&&l.lastElementChild.classList.add("hide"),l.lastElementChild.onpointerdown=()=>{a.visible=!a.visible,l.lastElementChild.classList.toggle("hide")}),o.classList.add("editor");let r=document.createElement("input");return r.classList.add("smart-input"),r.setAttribute("data-field",a.dataField),"date"===a.dataType?r=document.createElement("smart-date-input"):"boolean"===a.dataType?r=document.createElement("smart-check-box"):"number"===a.dataType?r=document.createElement("smart-number-input"):"string"===a.dataType&&a.options&&(r=document.createElement("smart-input"),r.readonly=!0,r.dropDownButtonPosition="right",r.dataSource=a.options),r.classList.add("smart-kanban-task-field-editor"),r.value=t,r.onchange=()=>{r.setAttribute("dirty","")},o.appendChild(r),s.appendChild(l),s.appendChild(o),s.setAttribute("container-for",a.dataField),s},o=document.createElement("div");o.classList.add("editor-container"),a.appendChild(o);for(let t=0;t<e.taskCustomFields.length;t++){const a=e.taskCustomFields[t],r=a.label,n=s[a.dataField],i=l(r,n,a);o.appendChild(i),(null==n||e.dataSourceMap[a.dataField])&&i.classList.add("smart-hidden")}t.appendChild(a)}},a.refreshHistory=()=>{const t=a.querySelector(".history-table");if(!e.storeHistory)return void t.classList.add("smart-hidden");t.classList.remove("smart-hidden");const s=a.taskOrComment.data.history;let l=`<table><tr>\n <th>${e.localize("historyEvent")}</th>\n <th>${e.localize("historyAuthor")}</th>\n <th>${e.localize("historyDetails")}</th>\n <th>${e.localize("historyDate")}</th>\n </tr>\n `;for(let t=s.length-1;t>=0;t--){const a=s[t];if(l+=`<tr>\n <td>${e._getHistoryItemLabel(a)}</td>`,void 0!==a.user){const t=(t=>{const a=t?t.image:null;return{image:a?`background-image: url('${a}');`:"",label:t?t.name||t.id:e.localize("guestUser")}})(e.users.find((e=>e.id===a.user)));l+=`<td><div class="smart-kanban-task-user-history"><div class="icon smart-kanban-task-user" style="${t.image}"></div><div class="name">${t.label}</div></div></td>`}else l+="<td></td>";if("created"!==a.action){let t=a.details.oldValue,s=a.details.value;if("user"===a.action){const a=e.users.find((e=>e.id===t)),l=e.users.find((e=>e.id===s));t=a?a.name:e.localize("unassigned"),s=l?l.name:e.localize("unassigned")}if("subtasks"===a.action){const t=a.details.value.filter((e=>e.completed));l+=`<td><span class="smart-truncate">${e.localize("taskSubtasksCompleted",{value:t.length+"/"+a.details.value.length})}</span></td>`}else l+=t?`<td><span class="smart-truncate">${e.localize("range",{oldValue:t,newValue:s})}</span></td>`:`<td><span class="smart-truncate">${e.localize("nullRange",{oldValue:t,newValue:s})}</span></td>`}else l+=`<td>${a.details.value}</td>`;l+=`\n <td>${a.date.toLocaleString()}</td>\n </tr>`}l+="</table>",t.innerHTML=l,a.refreshTabs()},a.refreshComments=()=>{if(!a.taskOrComment)return;const t=a.querySelector(".comments");t.classList.remove("smart-hidden");const s=e._getCommentsList(a.taskOrComment),l=s.querySelector(".send");l&&(l.onclick=()=>{if(l.disabled)return;const t=JSON.parse(JSON.stringify(e._commentSelectionFor.data));e._createComment(),e._commentsList.textarea.value="",l.disabled=!0,a.refreshTabs();const s=JSON.parse(JSON.stringify(e._commentSelectionFor.data));e.$.fireEvent("change",{task:e._commentSelectionFor,id:s.id,value:s,oldValue:t}),e.$.fireEvent("taskUpdate",{id:s.id,value:s,oldValue:t})}),t.innerHTML="",t.appendChild(s),a.refreshTabs()},c.forEach((e=>{e.onclick=e=>{const t=e.target.closest(".smart-kanban-tab"),s=t.getAttribute("view");switch(c.forEach((e=>{e.classList.remove("selected")})),t.classList.add("selected"),a.querySelectorAll(".smart-kanban-tab-content").forEach((e=>{e.classList.add("smart-hidden")})),s){case"details":a.querySelector(".details").classList.remove("smart-hidden");break;case"subtasks":a.querySelector(".subtasks").classList.remove("smart-hidden");break;case"comments":a.refreshComments();break;case"history":a.querySelector(".history").classList.remove("smart-hidden"),a.refreshHistory();break;case"fields":a.querySelector(".fields").classList.remove("smart-hidden"),a.refreshFields()}}})),(()=>{const e=a.editors.color;e.dataSource=["#D50000","#E67C73","#F4511E","#F6BF26","#33B679","#0B8043","#039BE5","#3F51B5","#7986CB","#8E24AA","#616161","#FFFFFF","#000000",""],e.valueDisplayMode="colorBox",e.classList.add("smart-kanban-color-input"),e.style.width="auto",e.style.height="auto",e.readonly=!0,e.dropDownWidth=50;const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input"),e.onRender=()=>{const t=e.$.scrollView;t&&t.classList.add("smart-kanban-color-input")}})(),a.editors.newSubtask.onchange=()=>{a.editors.newSubtask.nextElementSibling.click()},a.editPanelPopulated=!0}_beginEdit(e){const t=this,a=t.dataSourceMap,s=e.data,l=t._dialog,o=l.editors,r=t.tags.length>0?t.tags:t._customTags,n=t._allColumns.find((e=>e.dataField===s[a.status]));l.label=t.localize("editTask",{taskId:s[a.id],text:s[a.text]}),o.text.value=s[a.text],o.description.value=s[a.description],o.tags.dataSource=r,s[a.tags]?o.tags.selectedValues=s[a.tags].replace(/\s+/g,"").split(","):o.tags.selectedValues=[],l.editors.created.parentElement.classList.add("smart-hidden"),l.editors.updated.parentElement.classList.add("smart-hidden");const i=void 0!==s[a.createdUserId]?t.users.find((e=>e.id===s[a.createdUserId])):"",d=s[a.createdDate],c=void 0!==s[a.updatedUserId]?t.users.find((e=>e.id===s[a.updatedUserId])):"",u=s[a.updatedDate],m=e=>{const a=e?e.image:null;return{image:a?`background-image: url('${a}');`:"",label:e?e.name||e.id:t.localize("guestUser")}};if(i){const e=m(i);l.editors.created.parentElement.classList.remove("smart-hidden"),l.editors.created.innerHTML=`<div class="icon smart-kanban-task-user" style="${e.image}"></div><div class="name">${e.label}</div>`,d&&(l.editors.createdDate.innerHTML=d.toLocaleString())}if(c){const e=m(c);l.editors.updated.parentElement.classList.remove("smart-hidden"),l.editors.updated.innerHTML=`<div class="icon smart-kanban-task-user" style="${e.image}"></div><div class="name">${e.label}</div>`,u&&(l.editors.updatedDate.innerHTML=u.toLocaleString())}const p=null!==s[a.userId]?t.users.find((e=>e.id===s[a.userId])):"";p?o.userId.selectedItems=[{label:p.name,value:p.id,image:p.image?p.image:null}]:o.userId.value="",delete o.userId.$.input.dataValue,o.status.value=n.label,delete o.status.$.input.dataValue,t._hasSwimlane(t.columns.indexOf(n))?o.swimlane.value=t.swimlanes.find((e=>e.dataField===s[a.swimlane])).label:o.swimlane.value="",delete o.swimlane.$.input.dataValue,o.startDate.value=s[a.startDate]||null,o.dueDate.value=s[a.dueDate]||null,o.progress.value=parseFloat(s[a.progress])||0,o.priority.value=t.localize(s[a.priority]),delete o.priority.$.input.dataValue,o.color.value=s[a.color]||"";const b=[],h=[];(s[a.checklist]||[]).forEach(((e,t)=>{e.completed&&b.push(t),h.push({label:e.text,selected:!0===e.completed})})),0===t.swimlanes.length?(l.editors.swimlane.classList.add("smart-hidden"),l.editors.swimlaneLabel.classList.add("smart-hidden"),l.editors.swimlane.parentElement.classList.add("single-column")):(l.editors.swimlane.classList.remove("smart-hidden"),l.editors.swimlaneLabel.classList.remove("smart-hidden"),l.editors.swimlane.parentElement.classList.remove("single-column")),o.dueDate.onchange=o.startDate.onchange=()=>{o.startDate.value>=o.dueDate.value&&o.dueDate.value?(l.$.footer.firstElementChild.disabled=!0,l.querySelector(".editor-error-container").classList.remove("smart-hidden")):(l.$.footer.firstElementChild.disabled=!1,l.querySelector(".editor-error-container").classList.add("smart-hidden"))},o.startDate.value&&o.startDate.value>=o.dueDate.value&&o.dueDate.value&&(l.$.footer.firstElementChild.disabled=!0,l.querySelector(".editor-error-container").classList.remove("smart-hidden")),o.newSubtask.value="",o.checklist.dataSource=h,o.checklist.selectedIndexes=b,l.refreshTabs(!0)}_endEdit(){const e=this,t=e.dataSourceMap,a=e._dialog,s=a.editors,l=a.taskOrComment,o=l?l.data:void 0,r=Object.assign({},o);let n=s.startDate.value,i=s.dueDate.value;if(r[t.text]=s.text.value,r[t.description]=s.description.value,r[t.tags]=s.tags.selectedValues.join(", "),r[t.progress]=parseFloat(s.progress.value),r[t.color]=s.color.value,e._currentUser.info&&(r[t.updatedUserId]=e._currentUser.info.id,r[t.updatedDate]=new Date),r[t.color]||delete r[t.color],void 0!==s.userId.$.input.dataValue&&(r[t.userId]=parseFloat(s.userId.$.input.dataValue)),s.status.$.input.dataValue&&(r[t.status]=s.status.$.input.dataValue),s.swimlane.$.input.dataValue&&(r[t.swimlane]=s.swimlane.$.input.dataValue),n&&(n=n.toDate()),i&&(i=i.toDate()),r[t.startDate]=n,r[t.dueDate]=i,s.priority.$.input.dataValue&&(r[t.priority]=s.priority.$.input.dataValue),r[t.checklist]=s.checklist.items.map((e=>({text:e.label,completed:e.selected}))),e.taskCustomFields&&e.taskCustomFields.length>0)for(let t=0;t<e.taskCustomFields.length;t++){const s=e.taskCustomFields[t],l=a.querySelector("[data-field="+s.dataField+"]");if(l){const e=l.value;l.hasAttribute("dirty")&&(r[s.dataField]=e)}}l?e.updateTask(l,r):e.addTask(r)}_clearEditors(){const e=this,t=e._dialog.editors,a=e.tags.length>0?e.tags:e._customTags;t.text.value="",t.description.value="",t.tags.dataSource=a,t.tags.selectedValues=[],t.status.value="",delete t.status.$.input.dataValue,t.swimlane.value="",delete t.swimlane.$.input.dataValue,t.userId.value="",delete t.userId.$.input.dataValue,t.progress.value=0,t.startDate.value=null,t.dueDate.value=null,t.priority.value=e.localize("average"),t.priority.$.input.dataValue="average",t.color.value="",t.newSubtask.value="",t.created.innerHTML="",t.updated.innerHTML="",t.createdDate.innerHTML="",t.updatedDate.innerHTML="",t.checklist.dataSource=[],t.checklist.selectedIndexes=[]}_getCurrentUser(){const e=this,t=e.users;let a=e.currentUser,s=!0,l=!0,o=e.allowDrag,r=e.editable,n=!0;t&&null!==a&&(a=t.find((e=>e.id===a)),a&&(s=!1!==a.allowAdd,l=!1!==a.allowComment,o=o&&!1!==a.allowDrag,r=r&&!1!==a.allowEdit,n=!1!==a.allowRemove)),e._currentUser={allowAdd:s,allowComment:l,allowDrag:o,allowEdit:r,allowRemove:n,info:a}}_autoSaveState(e){const t=this;if(t.autoSaveState)if("object"!=typeof e)if(e&&t._autoSavedState){switch(e){case"collapsed":t._allColumns.forEach((e=>t._autoSavedState.collapsed[e.dataField]=e.collapsed));break;case"dataSource":t._autoSavedState.dataSource=t._getCurrentDataSource();break;case"filtering":t._autoSavedState.filtering=t._appliedFiltering;break;case"selection":{const e=t.dataSourceMap;let a=null,s=null;t._selectionInView&&(a=t._selectionInView.closest(".smart-kanban-column").column.dataField,s=t._selectionInView.getAttribute("swimlane")),t._autoSavedState.selection={selected:t._selectedTasks.map((t=>t.data[e.id])),selectionStart:t._selectionStart?t._selectionStart.data[e.id]:null,selectionInColumn:a,swimlane:s};break}case"sorting":t._autoSaveState.sorting=t._appliedSorting;break;case"tabs":t._autoSaveState.tabs=t._selectedTabs;break;case"visibility":t._autoSavedState.visibility={taskActions:t.taskActions,taskComments:t.taskComments,taskDue:t.taskDue,taskPriority:t.taskPriority,taskProgress:t.taskProgress,taskTags:t.taskTags,taskUserIcon:t.taskUserIcon}}window.localStorage.setItem("smartKanban"+t.id,JSON.stringify(t._autoSavedState))}else t._autoSavedState=t.saveState();else t._autoSavedState=e}_applyFilter(e,t){const a=this;if(a.dataSource&&a.dataSource.virtualDataSource)return a._requestVirtualDataSource("filter"),void a._autoSaveState("filtering");const s=new Smart.DataAdapter({dataSource:a._getCurrentDataSource(),dataFields:["text: string","tags: string","priority: string","progress: number","startDate: date","dueDate: date","userId: string"],id:"id"});try{s._filter(e,t)}catch(e){return}const l=Array.from(a.$.container.getElementsByClassName("smart-kanban-task"));for(let e=0;e<s.length;e++){const t=l[e],a=!s[e].$.filtered;t.classList.toggle("smart-hidden",a),t.filteredOut=a}a._allColumns.forEach((e=>a._refreshScrollViewer(e))),a._autoSaveState("filtering")}_applyHandler(e){const t=this,a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target,s=e.detail;t.$.customize.contains(a)?(s.value.forEach((e=>t[e.dataField]=e.visible)),t._allColumns.forEach((e=>t._refreshScrollViewer(e))),t._autoSaveState("visibility")):t.$.filter.contains(a)?t.addFilter(s.filters,s.operator,s.value):t.$.sort.contains(a)&&t.addSort(s.sortByInfo),t.closePanel()}_applySort(){const e=this,t=e._appliedSorting;e._autoSaveState("sorting"),e.dataSource&&e.dataSource.virtualDataSource?e._requestVirtualDataSource("sort"):0!==t.dataFields.length&&e._allColumns.forEach((a=>{const s=e._columnToElement.get(a).querySelector(".smart-scroll-viewer-content-container"),l=Array.from(s.children),o=[];if(l.length<2)return;l.forEach(((t,a)=>{const s=e.dataSourceMap,l=Object.assign({taskIndex:a},t.data);"low"===l[s.priority]&&(l[s.priority]="z"),o.push(l)}));const r=new Smart.DataAdapter({dataSource:o,dataFields:["taskIndex: number","text: string","tags: string","priority: string","progress: number","startDate: date","dueDate: date","userId: string"],id:"id"});r.sortBy(t.dataFields,t.dataTypes,t.orderBy);for(let e=0;e<r.length;e++)s.appendChild(l[r[e].taskIndex])}))}_closeSearchPanel(){const e=this;e._searchInfo&&(Array.from(e.$.container.querySelectorAll(".smart-kanban-task.smart-data-view-found, .smart-kanban-task.smart-data-view-highlighted")).forEach((e=>e.classList.remove("smart-data-view-found","smart-data-view-highlighted"))),delete e._searchInfo)}_constructFilterGroups(e){const t={text:"string",tags:"string",priority:"string",progress:"number",startDate:"date",dueDate:"date"},a={},s=[];e.filters.forEach((s=>{const l=s[0],o=t[l];let r=s[2],n=a[l];void 0===n&&(n=new Smart.Utilities.FilterGroup,a[l]=n),"date"===o&&"string"==typeof r&&(r=new Date(r));const i=n.createFilter(o,r,s[1]);n.addFilter(e.operator,i)}));for(let e in a)s.push([e,a[e]]);return s}_openSearchPanel(){const e=this;e.$.headerDropDown.classList.add("search-panel"),e.$.headerDropDown.classList.remove("customize-panel","filter-panel","sort-panel"),e.$.search.classList.remove("smart-hidden"),e.$.customize.classList.add("smart-hidden"),e.$.filter.classList.add("smart-hidden"),e.$.sort.classList.add("smart-hidden"),e._openHeaderDropDown(e.$.searchButton),e._searchInfo={source:e._getCurrentDataSource(),stringDataFields:["text","tags"]},""!==e.$.searchInput.value&&e._search(e.$.searchInput.value,!1)}_search(e,t=!0){const a=this;if(a._searchInfo.query=e,Array.from(a.$.container.querySelectorAll(".smart-kanban-task.smart-data-view-found, .smart-kanban-task.smart-data-view-highlighted")).forEach((e=>e.classList.remove("smart-data-view-found","smart-data-view-highlighted"))),""===e)return a.$.search.classList.remove("matches","no-matches"),delete a._searchInfo.foundIdsArray,delete a._searchInfo.foundIdsObject,void delete a._searchInfo.highlighted;const s=new Smart.DataAdapter({dataSource:a._searchInfo.source,dataFields:["text: string","tags: string"],id:"id"}),l=[],o=[],r={};a._searchInfo.stringDataFields.forEach((t=>{const a=new Smart.Utilities.FilterGroup,s=a.createFilter("string",e,"CONTAINS");a.addFilter("or",s),l.push([t,a])})),s._filter(l,"or");for(let e=0;e<s.length;e++){const t=s[e];!1!==t.$.filtered&&(o.push(t.$.id),r[t.$.id]=!0)}if(a._searchInfo.foundIdsArray=o,a._searchInfo.foundIdsObject=r,Array.from(a.$.container.getElementsByClassName("smart-kanban-task")).forEach((e=>{const s=e.data[a.dataSourceMap.id];if(r[s]){if(e.filteredOut)return o.splice(o.indexOf(s),1),void delete r[s];t&&o[0]===s&&e.classList.add("smart-data-view-highlighted"),e.classList.add("smart-data-view-found")}})),o.length>0){if(t){let e=o[0];a._searchInfo.highlighted=e,a.ensureVisible(e)}return a.$.search.classList.remove("no-matches"),a.$.search.classList.add("matches"),void(a.$.searchLabel.innerHTML=a.localize("found",{nth:t?1:0,n:o.length}))}a.$.search.classList.remove("matches"),a.$.search.classList.add("no-matches"),a.$.searchLabel.innerHTML=a.localize("found",{nth:0,n:0})}_bodyFocusinHandler(e){const t=this;let a=t.isInShadowDOM||t.shadowRoot?e.composedPath()[0]:e.target;a.classList.contains("smart-kanban-column-content-tasks")&&(a=a.$.content,t._getSelectedItem(a,!0)||t._focusTask(t._getFirstItem(a)))}get _rtlAttr(){return this.rightToLeft?" right-to-left":""}get _tabindex(){return this.disabled||this.unfocusable?"":' tabindex="0"'}_appendAddNewColumn(e){const t=document.createElement("div");t.classList.add("smart-kanban-column","smart-kanban-add-new-column","smart-unselectable"),t.innerHTML=`<div class="smart-kanban-column-header smart-unselectable" > <div title="${this.localize("addNewColumn")}" class="smart-kanban-add-new-column-label smart-kanban-column-header-label"><span>+ ${this.localize("addNewStatus")}</span></div></div >\n <div class="smart-kanban-column-content no-sub-columns"><smart-scroll-viewer></smart-scroll-viewer></div>\n `,this.disabled||this.unfocusable||t.setAttribute("tabindex",0),t.column={dataField:"newStatus",label:"New Status"},e.appendChild(t)}getColumn(e){const t=this;let a=null;for(let s=0;s<t.columns.length;s++)if(t.columns[s].dataField===e){a=t.columns[s];break}return a}getColumnDataItems(e){const t=this;let a=[];if(!t.getColumn(e)||!t.dataSource)return[];for(let s=0;s<t.dataSource.length;s++){const l=t.dataSource[s];l[t.dataSourceMap.status]===e&&a.push(l)}return a}updateColumn(e,t){const a=this;let s=null;for(let t=0;t<a.columns.length;t++)if(a.columns[t].dataField===e){s=a.columns[t];break}if(s){const e=s.label;void 0!==t.label&&(s.label=t.label),void 0!==t.collapsed&&(s.collapsed=t.collapsed),void 0!==t.collapsible&&(s.collapsible=t.collapsible),void 0!==t.orientation&&(s.orientation=t.orientation),a._reset(),a.$.fireEvent("columnUpdate",{columnData:t,oldValue:e,value:s.label})}}addColumn(e){const t=this;e?(t.columns.push(e),t._reset(),t._createAddNewButton(),t.$.fireEvent("columnAdd",{columnData:e})):t._addNewColumnDynamically()}removeColumn(e){const t=this;let a=null,s=-1;for(let l=0;l<t.columns.length;l++)if(t.columns[l].dataField===e){a=t.columns[l],s=l;break}a&&t.columns.splice(s,1),t._reset(),t._createAddNewButton(),t.$.fireEvent("columnRemove",{column:a})}_addNewColumnDynamically(){const e=this,t=e._dialog,a=Math.floor(9e4*Math.random()+1e4),s={label:e.localize("addNewStatus")+" "+a,dataField:"newStatus"+a,addNewButton:!0,collapsed:!1,collapsible:!0,orientation:"vertical"},l=e.$.body.querySelector(".smart-kanban-add-new-column").querySelector(".smart-kanban-add-new-column-label"),o=document.createElement("input");if(l.classList.add("pending"),l.appendChild(o),o.classList.add("smart-kanban-column-header-input"),e.columnColors){l.classList.add("colors");const t=e._getColorInput();l.appendChild(t)}function r(a){let r=o.value,n=l.querySelector("smart-color-input");n&&n.opened?e._columnAddTimer&&clearTimeout(e._columnAddTimer):(!1===/^\s*$/.test(r)&&(r=r.trim(),s.label=r,s.dataField="dataField"+Math.floor(65536*(1+Math.random())).toString(16).substring(1)),l.classList.contains("pending")&&(e._columnAddTimer&&clearTimeout(e._columnAddTimer),e._columnAddTimer=setTimeout((()=>{if(l.classList.remove("pending"),o.parentNode&&o.parentNode.removeChild(o),n){s.color=n.value;const e=l.querySelector(".heading");if(e){const t=new Smart.Color(s.color).getInvertedColor();e.style.backgroundColor=s.color,e.style.color=t}n.remove()}t&&t.editPanelPopulated&&(t.editors.status.dataSource=e._allColumns.map((e=>({label:e.label,value:e.dataField})))),e.columns.push(s),e._reset(),e._createAddNewButton(),e.$.fireEvent("columnAdd",{newColumn:s}),delete e._columnAddTimer}),50),a.stopPropagation()))}o.focus(),o.onkeydown=e=>{"Escape"===e.key?(l.classList.remove("pending"),o&&o.parentElement&&(o.parentElement.removeChild(o),e.stopPropagation(),e.preventDefault())):"Enter"===e.key&&r(e)},o.addEventListener("blur",r),o.addEventListener("change",r)}_handleColumnEditing(e){const t=this,a=t.columns.find((t=>t.dataField===e));if(t._columnEditing)return;const s=Array.from(t.$.body.getElementsByClassName("smart-kanban-column")).find((t=>t.column.dataField===e)).querySelector(".smart-kanban-column-header-label"),l=document.createElement("input");s.classList.add("pending"),s.appendChild(l);const o=a.label;if(l.value=a.label,l.classList.add("smart-kanban-column-header-input"),t.columnColors){s.classList.add("colors");const e=t._getColorInput();e.value=a.color||"transparent",s.appendChild(e)}function r(e){let r=l.value,n=s.querySelector("smart-color-input");if(!n||!n.opened){if(!1===/^\s*$/.test(r)&&(r=r.trim(),a.label=r,s.querySelector(".smart-kanban-title").innerHTML=r),n){a.color=n.value;const e=s.querySelector(".heading");if(e){const t=new Smart.Color(a.color).getInvertedColor();e.style.backgroundColor=a.color,e.style.color=t}n.remove()}s.classList.remove("pending");try{l.parentNode&&l.parentNode.removeChild(l)}catch(e){t._error=e}t._columnEditTimer&&clearTimeout(t._columnEditTimer),t._columnEditing=!1,t._columnEditTimer=setTimeout((()=>{o!==a.label&&t.$.fireEvent("columnUpdate",{column:a,oldValue:o,value:a.label}),delete t._columnEditTimer}),50),e.stopPropagation()}}t._columnEditing=!0,setTimeout((()=>{l.focus()}),50),l.onkeydown=e=>{if("Escape"===e.key){s.classList.remove("pending"),l.value=o;try{l.parentNode&&l.parentNode.removeChild(l)}catch(e){t._error=e}t._columnEditing=!1}else"Enter"===e.key&&r(e)},l.addEventListener("blur",r),l.addEventListener("change",r)}_validateDataSourceMap(){this.dataSourceMap=Object.assign({},{checklist:"checklist",color:"color",comments:"comments",dueDate:"dueDate",id:"id",priority:"priority",progress:"progress",startDate:"startDate",status:"status",swimlane:"swimlane",tags:"tags",text:"text",userId:"userId"},this.dataSourceMap)}});