@web-atoms/web-controls 2.3.4 → 2.3.6

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 (218) hide show
  1. package/dist/ModuleFiles.js +55 -1
  2. package/dist/ModuleFiles.js.map +1 -1
  3. package/dist/PageNavigator.js +36 -1
  4. package/dist/PageNavigator.js.map +1 -1
  5. package/dist/animations/Animations.js +52 -1
  6. package/dist/animations/Animations.js.map +1 -1
  7. package/dist/auto-complete/AppComboBoxViewModel.js +19 -1
  8. package/dist/auto-complete/AppComboBoxViewModel.js.map +1 -1
  9. package/dist/auto-complete/AutoCompleteBox.js +299 -1
  10. package/dist/auto-complete/AutoCompleteBox.js.map +1 -1
  11. package/dist/auto-complete/AutoCompleteBoxStyle.js +86 -1
  12. package/dist/auto-complete/AutoCompleteBoxStyle.js.map +1 -1
  13. package/dist/auto-complete/ItemHost.js +42 -1
  14. package/dist/auto-complete/ItemHost.js.map +1 -1
  15. package/dist/basic/AtomChips.js +343 -1
  16. package/dist/basic/AtomChips.js.map +1 -1
  17. package/dist/basic/AtomRepeater.js +1102 -1
  18. package/dist/basic/AtomRepeater.js.map +1 -1
  19. package/dist/basic/AtomSuggestions.js +134 -1
  20. package/dist/basic/AtomSuggestions.js.map +1 -1
  21. package/dist/basic/Button.js +65 -1
  22. package/dist/basic/Button.js.map +1 -1
  23. package/dist/basic/Calendar.js +244 -1
  24. package/dist/basic/Calendar.js.map +1 -1
  25. package/dist/basic/CheckBoxList.js +69 -1
  26. package/dist/basic/CheckBoxList.js.map +1 -1
  27. package/dist/basic/Checkbox.js +31 -1
  28. package/dist/basic/Checkbox.js.map +1 -1
  29. package/dist/basic/Chip.js +53 -1
  30. package/dist/basic/Chip.js.map +1 -1
  31. package/dist/basic/ComboBox.js +80 -1
  32. package/dist/basic/ComboBox.js.map +1 -1
  33. package/dist/basic/DataGrid.js +325 -1
  34. package/dist/basic/DataGrid.js.map +1 -1
  35. package/dist/basic/DateField.js +87 -1
  36. package/dist/basic/DateField.js.map +1 -1
  37. package/dist/basic/DropDown.js +141 -1
  38. package/dist/basic/DropDown.js.map +1 -1
  39. package/dist/basic/Editable.js +115 -1
  40. package/dist/basic/Editable.js.map +1 -1
  41. package/dist/basic/Expander.js +133 -1
  42. package/dist/basic/Expander.js.map +1 -1
  43. package/dist/basic/Form.js +313 -1
  44. package/dist/basic/Form.js.map +1 -1
  45. package/dist/basic/FormDialog.js +31 -1
  46. package/dist/basic/FormDialog.js.map +1 -1
  47. package/dist/basic/FormField.js +186 -1
  48. package/dist/basic/FormField.js.map +1 -1
  49. package/dist/basic/IElement.js +8 -1
  50. package/dist/basic/InlinePopup.js +295 -1
  51. package/dist/basic/InlinePopup.js.map +1 -1
  52. package/dist/basic/InlinePopupControl.js +38 -1
  53. package/dist/basic/InlinePopupControl.js.map +1 -1
  54. package/dist/basic/Input.js +29 -1
  55. package/dist/basic/Input.js.map +1 -1
  56. package/dist/basic/ListRepeater.js +44 -1
  57. package/dist/basic/ListRepeater.js.map +1 -1
  58. package/dist/basic/MaskedInput.js +59 -1
  59. package/dist/basic/MaskedInput.js.map +1 -1
  60. package/dist/basic/MaskedInputDiv.js +93 -1
  61. package/dist/basic/MaskedInputDiv.js.map +1 -1
  62. package/dist/basic/Mix.js +30 -1
  63. package/dist/basic/Mix.js.map +1 -1
  64. package/dist/basic/Panel.js +36 -1
  65. package/dist/basic/Panel.js.map +1 -1
  66. package/dist/basic/PasswordBox.js +50 -1
  67. package/dist/basic/PasswordBox.js.map +1 -1
  68. package/dist/basic/PinchZoomView.js +263 -1
  69. package/dist/basic/PinchZoomView.js.map +1 -1
  70. package/dist/basic/PopupButton.js +67 -1
  71. package/dist/basic/PopupButton.js.map +1 -1
  72. package/dist/basic/RadioButtonList.js +66 -1
  73. package/dist/basic/RadioButtonList.js.map +1 -1
  74. package/dist/basic/RefreshLock.js +59 -1
  75. package/dist/basic/RefreshLock.js.map +1 -1
  76. package/dist/basic/Row.js +42 -1
  77. package/dist/basic/Row.js.map +1 -1
  78. package/dist/basic/Swipe.js +120 -1
  79. package/dist/basic/Swipe.js.map +1 -1
  80. package/dist/basic/Switch.js +54 -1
  81. package/dist/basic/Switch.js.map +1 -1
  82. package/dist/basic/TableRepeater.js +51 -1
  83. package/dist/basic/TableRepeater.js.map +1 -1
  84. package/dist/basic/ToggleButtonBar.js +56 -1
  85. package/dist/basic/ToggleButtonBar.js.map +1 -1
  86. package/dist/basic/Tooltip.js +101 -1
  87. package/dist/basic/Tooltip.js.map +1 -1
  88. package/dist/basic/combineClasses.js +12 -1
  89. package/dist/basic/combineClasses.js.map +1 -1
  90. package/dist/basic/in-built/InBuiltStyles.js +48 -1
  91. package/dist/basic/in-built/InBuiltStyles.js.map +1 -1
  92. package/dist/button-bar/AtomButtonBar.js +45 -1
  93. package/dist/button-bar/AtomButtonBar.js.map +1 -1
  94. package/dist/buttons/AtomPopupButton.js +21 -1
  95. package/dist/buttons/AtomPopupButton.js.map +1 -1
  96. package/dist/buttons/AtomPopupButtonStyle.js +31 -1
  97. package/dist/buttons/AtomPopupButtonStyle.js.map +1 -1
  98. package/dist/calendar/AtomCalendar.js +98 -1
  99. package/dist/calendar/AtomCalendar.js.map +1 -1
  100. package/dist/calendar/AtomCalendarStyle.js +179 -1
  101. package/dist/calendar/AtomCalendarStyle.js.map +1 -1
  102. package/dist/calendar/CalendarViewModel.js +126 -1
  103. package/dist/calendar/CalendarViewModel.js.map +1 -1
  104. package/dist/calendar/res/SRCalendar.js +84 -1
  105. package/dist/calendar/res/SRCalendar.js.map +1 -1
  106. package/dist/calendar/res/en-US/SRCalendar.js +77 -1
  107. package/dist/calendar/res/en-US/SRCalendar.js.map +1 -1
  108. package/dist/data-grid/AtomColumn.js +53 -1
  109. package/dist/data-grid/AtomColumn.js.map +1 -1
  110. package/dist/data-grid/AtomDataGrid.js +64 -1
  111. package/dist/data-grid/AtomDataGrid.js.map +1 -1
  112. package/dist/data-grid/AtomDataGridStyle.js +55 -1
  113. package/dist/data-grid/AtomDataGridStyle.js.map +1 -1
  114. package/dist/data-grid/AtomDataGridViewModel.js +71 -1
  115. package/dist/data-grid/AtomDataGridViewModel.js.map +1 -1
  116. package/dist/data-grid/GridTemplate.js +65 -1
  117. package/dist/data-grid/GridTemplate.js.map +1 -1
  118. package/dist/data-pager/AtomDataPager.js +105 -1
  119. package/dist/data-pager/AtomDataPager.js.map +1 -1
  120. package/dist/date-field/AtomDateField.js +60 -1
  121. package/dist/date-field/AtomDateField.js.map +1 -1
  122. package/dist/desktop-app/DesktopApp.js +88 -1
  123. package/dist/desktop-app/DesktopApp.js.map +1 -1
  124. package/dist/form/AtomField.js +112 -1
  125. package/dist/form/AtomField.js.map +1 -1
  126. package/dist/form/AtomForm.js +102 -1
  127. package/dist/form/AtomForm.js.map +1 -1
  128. package/dist/form/AtomFormGroup.js +16 -1
  129. package/dist/form/AtomFormGroup.js.map +1 -1
  130. package/dist/form/AtomFormStyle.js +72 -1
  131. package/dist/form/AtomFormStyle.js.map +1 -1
  132. package/dist/form/HelpPopup.js +26 -1
  133. package/dist/form/HelpPopup.js.map +1 -1
  134. package/dist/html-editor/AtomHtmlEditor.js +322 -3
  135. package/dist/html-editor/AtomHtmlEditor.js.map +1 -1
  136. package/dist/html-editor/commands/AddImage.js +77 -1
  137. package/dist/html-editor/commands/AddImage.js.map +1 -1
  138. package/dist/html-editor/commands/AddLink.js +96 -1
  139. package/dist/html-editor/commands/AddLink.js.map +1 -1
  140. package/dist/html-editor/commands/Align.js +40 -1
  141. package/dist/html-editor/commands/Align.js.map +1 -1
  142. package/dist/html-editor/commands/AttachFile.js +71 -1
  143. package/dist/html-editor/commands/AttachFile.js.map +1 -1
  144. package/dist/html-editor/commands/Bold.js +23 -1
  145. package/dist/html-editor/commands/Bold.js.map +1 -1
  146. package/dist/html-editor/commands/ChangeColor.js +56 -1
  147. package/dist/html-editor/commands/ChangeColor.js.map +1 -1
  148. package/dist/html-editor/commands/ChangeFont.js +71 -1
  149. package/dist/html-editor/commands/ChangeFont.js.map +1 -1
  150. package/dist/html-editor/commands/ChangeFontSize.js +32 -1
  151. package/dist/html-editor/commands/ChangeFontSize.js.map +1 -1
  152. package/dist/html-editor/commands/Command.js +49 -1
  153. package/dist/html-editor/commands/Command.js.map +1 -1
  154. package/dist/html-editor/commands/CommandButton.js +73 -1
  155. package/dist/html-editor/commands/CommandButton.js.map +1 -1
  156. package/dist/html-editor/commands/Headings.js +42 -1
  157. package/dist/html-editor/commands/Headings.js.map +1 -1
  158. package/dist/html-editor/commands/HorizontalRule.js +22 -1
  159. package/dist/html-editor/commands/HorizontalRule.js.map +1 -1
  160. package/dist/html-editor/commands/HtmlCommands.js +77 -1
  161. package/dist/html-editor/commands/HtmlCommands.js.map +1 -1
  162. package/dist/html-editor/commands/IndentLess.js +23 -1
  163. package/dist/html-editor/commands/IndentLess.js.map +1 -1
  164. package/dist/html-editor/commands/IndentMore.js +23 -1
  165. package/dist/html-editor/commands/IndentMore.js.map +1 -1
  166. package/dist/html-editor/commands/Italic.js +23 -1
  167. package/dist/html-editor/commands/Italic.js.map +1 -1
  168. package/dist/html-editor/commands/NumberedList.js +23 -1
  169. package/dist/html-editor/commands/NumberedList.js.map +1 -1
  170. package/dist/html-editor/commands/Quote.js +23 -1
  171. package/dist/html-editor/commands/Quote.js.map +1 -1
  172. package/dist/html-editor/commands/RemoveFormat.js +23 -1
  173. package/dist/html-editor/commands/RemoveFormat.js.map +1 -1
  174. package/dist/html-editor/commands/Separator.js +25 -1
  175. package/dist/html-editor/commands/Separator.js.map +1 -1
  176. package/dist/html-editor/commands/Source.js +66 -1
  177. package/dist/html-editor/commands/Source.js.map +1 -1
  178. package/dist/html-editor/commands/StrikeThrough.js +23 -1
  179. package/dist/html-editor/commands/StrikeThrough.js.map +1 -1
  180. package/dist/html-editor/commands/Underline.js +23 -1
  181. package/dist/html-editor/commands/Underline.js.map +1 -1
  182. package/dist/html-editor/commands/Unlink.js +24 -1
  183. package/dist/html-editor/commands/Unlink.js.map +1 -1
  184. package/dist/html-editor/commands/UnorderedList.js +23 -1
  185. package/dist/html-editor/commands/UnorderedList.js.map +1 -1
  186. package/dist/mobile/pages/AtomPageFrame.js +198 -1
  187. package/dist/mobile/pages/AtomPageFrame.js.map +1 -1
  188. package/dist/mobile/pages/AtomPageFrameStyle.js +63 -1
  189. package/dist/mobile/pages/AtomPageFrameStyle.js.map +1 -1
  190. package/dist/mobile/pages/AtomPageFrameTemplate.js +53 -1
  191. package/dist/mobile/pages/AtomPageFrameTemplate.js.map +1 -1
  192. package/dist/mobile/pages/Page.js +26 -1
  193. package/dist/mobile/pages/Page.js.map +1 -1
  194. package/dist/mobile/pages/PageFrameViewModel.js +136 -1
  195. package/dist/mobile/pages/PageFrameViewModel.js.map +1 -1
  196. package/dist/mobile/pages/TitleTemplate.js +27 -1
  197. package/dist/mobile/pages/TitleTemplate.js.map +1 -1
  198. package/dist/mobile-app/BottomPopup.js +197 -1
  199. package/dist/mobile-app/BottomPopup.js.map +1 -1
  200. package/dist/mobile-app/MobileApp.js +571 -1
  201. package/dist/mobile-app/MobileApp.js.map +1 -1
  202. package/dist/player/AtomVideoPlayer.js +241 -1
  203. package/dist/player/AtomVideoPlayer.js.map +1 -1
  204. package/dist/player/TrackProgress.js +29 -1
  205. package/dist/player/TrackProgress.js.map +1 -1
  206. package/dist/setupBridge.js +89 -1
  207. package/dist/setupBridge.js.map +1 -1
  208. package/dist/switch/AtomSwitch.js +41 -1
  209. package/dist/switch/AtomSwitch.js.map +1 -1
  210. package/dist/switch/AtomSwitchStyle.js +79 -1
  211. package/dist/switch/AtomSwitchStyle.js.map +1 -1
  212. package/dist/time-field/AtomTimeField.js +98 -1
  213. package/dist/time-field/AtomTimeField.js.map +1 -1
  214. package/dist/time-field/AtomTimeFieldStyle.js +27 -1
  215. package/dist/time-field/AtomTimeFieldStyle.js.map +1 -1
  216. package/dist/toggle-view/AtomToggleView.js +94 -1
  217. package/dist/toggle-view/AtomToggleView.js.map +1 -1
  218. package/package.json +3 -3
@@ -1,2 +1,1103 @@
1
- System.register(["tslib","@web-atoms/core/dist/core/AtomBinder","@web-atoms/core/dist/core/Bind","@web-atoms/core/dist/core/BindableProperty","@web-atoms/core/dist/core/Colors","@web-atoms/core/dist/core/StringHelper","@web-atoms/core/dist/core/WatchProperty","@web-atoms/core/dist/core/XNode","@web-atoms/core/dist/style/StyleRule","@web-atoms/core/dist/web/controls/AtomControl","@web-atoms/core/dist/web/services/PopupService","@web-atoms/core/dist/web/styles/CSS","./InlinePopup"],function(_export,_context){"use strict";var __decorate,__metadata,__rest,AtomBinder,Bind,BindableProperty,Colors,StringHelper,WatchProperty,XNode,StyleRule,AtomControl,PopupWindow,CSS,InlinePopup,SelectAllControl,AtomRepeater,popupCSS,getParentRepeaterItem,MatchTrue,MatchFalse,ArrowToString,MatchCaseInsensitive,MatchAnyCaseInsensitive,SameObjectValue,maxHeight,getFirstChild,hoverItem,dragOver;function askSuggestion(items,itemRenderer,match,options){class Suggestions extends PopupWindow{create(){var _a;this.title=(_a=options===null||options===void 0?void 0:options.title)!==null&&_a!==void 0?_a:"Select";this.render(XNode.create("div",{class:popupCSS},XNode.create("input",{type:"search",value:Bind.twoWaysImmediate(()=>this.search),autofocus:true}),XNode.create("div",{class:"items"},XNode.create(AtomRepeater,{class:"presenter",itemRenderer:itemRenderer,visibilityFilter:Bind.oneWay(()=>match(this.search)),eventItemClick:e=>{this.close(e.detail);},items:items}))));}}__decorate([BindableProperty,__metadata("design:type",String)],Suggestions.prototype,"search",void 0);options!==null&&options!==void 0?options:options={};if(typeof options.maximize==="undefined"){if(typeof options.width==="undefined"){options.maxWidth="90%";options.minWidth="300px";}if(typeof options.height==="undefined"){options.height="80%";}}return Suggestions.showModal(options);}function askSuggestionPopup(opener,items,itemRenderer,match,selectedItem){const updateSearch=("search"in opener);const itemsInOpener=("items"in opener);class Suggestions extends InlinePopup{get items(){return itemsInOpener?this.opener.items:items;}onPropertyChanged(name){if(updateSearch&&name==="search"){opener.search=this.search;}super.onPropertyChanged(name);}create(){this.anchorItem=selectedItem;this.opener=opener;if(this.opener.search){this.search=this.opener.search;}if(selectedItem){this.anchorIndex=items.indexOf(selectedItem);}const disableSearch=opener.disableSearch;if(itemsInOpener){this.render(XNode.create("div",{"data-suggestion-popup":"suggestion-popup"},!disableSearch&&XNode.create("input",{type:"search",value:Bind.twoWaysImmediate(()=>this.search),eventKeydown:e=>this.onKey(e),autofocus:true}),XNode.create("div",{class:"items"},XNode.create(AtomRepeater,{class:"presenter",selectedItem:Bind.oneWay(()=>this.anchorItem),itemRenderer:itemRenderer,visibilityFilter:Bind.oneWay(()=>match(this.search)),eventItemClick:e=>{this.anchorItem=e.detail;setTimeout(()=>this.close(e.detail),100);},items:Bind.oneWay(()=>this.opener.items)}))));return;}this.render(XNode.create("div",{"data-suggestion-popup":"suggestion-popup"},!disableSearch&&XNode.create("input",{type:"search",value:Bind.twoWaysImmediate(()=>this.search),eventKeydown:e=>this.onKey(e),autofocus:true}),XNode.create("div",{class:"items"},XNode.create(AtomRepeater,{class:"presenter",selectedItem:Bind.oneWay(()=>this.anchorItem),itemRenderer:itemRenderer,visibilityFilter:Bind.oneWay(()=>match(this.search)),scrollToSelection:true,eventItemClick:e=>{this.close(e.detail);},items:items}))));}onKey(e){var _a;const suggested=match?(_a=this.items)===null||_a===void 0?void 0:_a.filter(match(this.search)):this.items;switch(e.key){case"Enter":const anchorItem=this.anchorItem;if(!anchorItem){return;}this.anchorIndex=0;this.close(anchorItem);this.anchorItem=null;this.search="";break;case"ArrowDown":if(suggested){if(!this.anchorItem){this.anchorIndex=0;}else{if(this.anchorIndex<suggested.length-1){this.anchorIndex++;}}this.anchorItem=suggested[this.anchorIndex];}break;case"ArrowUp":if(suggested){if(!this.anchorItem){return;}if(this.anchorIndex){this.anchorIndex--;}this.anchorItem=suggested[this.anchorIndex];}break;}}}__decorate([BindableProperty,__metadata("design:type",String)],Suggestions.prototype,"search",void 0);return Suggestions.showControl(opener);}function SelectorCheckBox(_a,...nodes){var{text,icon="far fa-square",iconSelected="fas fa-check-square"}=_a,a=__rest(_a,["text","icon","iconSelected"]);if(text){return XNode.create("label",null,XNode.create("i",{class:icon,"data-click-event":"item-select"}),XNode.create("i",{class:iconSelected,"data-click-event":"item-deselect"}),XNode.create("span",{"data-no-wrap":"true",text:text}),...nodes);}return XNode.create("label",null,XNode.create("i",{class:icon,"data-click-event":"item-select"}),XNode.create("i",{class:iconSelected,"data-click-event":"item-deselect"}),...nodes);}function SelectAll(_a,...nodes){var{text="Select All",icon="far fa-square",iconSelected="fas fa-check-square"}=_a,a=__rest(_a,["text","icon","iconSelected"]);if(text){return XNode.create(SelectAllControl,Object.assign({for:"label"},a),XNode.create("i",{class:icon,"data-ui-type":"item-select"}),XNode.create("i",{class:iconSelected,"data-ui-type":"item-deselect"}),XNode.create("span",{"data-no-wrap":"true",text:text}));}return XNode.create(SelectAllControl,Object.assign({for:"label"},a),XNode.create("i",{class:icon,"data-ui-type":"item-select"}),XNode.create("i",{class:iconSelected,"data-ui-type":"item-deselect"}),...nodes);}function disposeChildren(owner,e){if(!e){return;}let s=e.firstElementChild;while(s){const c=s;s=s.nextElementSibling;const ac=c.atomControl;if(ac){ac.dispose();continue;}disposeChildren(owner,c);owner.unbind(c);owner.unbindEvent(c);}e.innerHTML="";}function disposeChild(owner,e){const ac=e.atomControl;if(ac){ac.dispose();return;}disposeChildren(owner,e);owner.unbind(e);owner.unbindEvent(e);e.remove();}function defaultComparer(left,right){if(left&&right){if(left instanceof Date){if(right instanceof Date){return left.getTime()===right.getTime();}return false;}}return left===right;}function updateDragDrop(e,force=false){if(!e){return;}if(force){e.draggable=false;}else{force=e.draggable;}e=e.firstElementChild;while(e){updateDragDrop(e,force);e=e.nextElementSibling;}}_export({askSuggestion:askSuggestion,askSuggestionPopup:askSuggestionPopup,SelectorCheckBox:SelectorCheckBox,SelectAll:SelectAll,disposeChildren:disposeChildren,disposeChild:disposeChild,defaultComparer:defaultComparer,default:void 0});return{setters:[function(_tslib){__decorate=_tslib.__decorate;__metadata=_tslib.__metadata;__rest=_tslib.__rest;},function(_webAtomsCoreDistCoreAtomBinder){AtomBinder=_webAtomsCoreDistCoreAtomBinder.AtomBinder;},function(_webAtomsCoreDistCoreBind){Bind=_webAtomsCoreDistCoreBind.default;},function(_webAtomsCoreDistCoreBindableProperty){BindableProperty=_webAtomsCoreDistCoreBindableProperty.BindableProperty;},function(_webAtomsCoreDistCoreColors){Colors=_webAtomsCoreDistCoreColors.default;},function(_webAtomsCoreDistCoreStringHelper){StringHelper=_webAtomsCoreDistCoreStringHelper.StringHelper;},function(_webAtomsCoreDistCoreWatchProperty){WatchProperty=_webAtomsCoreDistCoreWatchProperty.default;},function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default;},function(_webAtomsCoreDistStyleStyleRule){StyleRule=_webAtomsCoreDistStyleStyleRule.default;},function(_webAtomsCoreDistWebControlsAtomControl){AtomControl=_webAtomsCoreDistWebControlsAtomControl.AtomControl;},function(_webAtomsCoreDistWebServicesPopupService){PopupWindow=_webAtomsCoreDistWebServicesPopupService.PopupWindow;},function(_webAtomsCoreDistWebStylesCSS){CSS=_webAtomsCoreDistWebStylesCSS.default;},function(_InlinePopup){InlinePopup=_InlinePopup.default;}],execute:function(){CSS(StyleRule().display("none"),"[data-ui-display=none]");popupCSS=CSS(StyleRule().minWidth(200).verticalFlexLayout({alignItems:"stretch"}).child(StyleRule(".items").flexStretch().overflow("auto").child(StyleRule(".presenter").child(StyleRule("*").padding(5)).child(StyleRule("[data-selected-item=true]").backgroundColor(Colors.lightGreen)))));_export("getParentRepeaterItem",getParentRepeaterItem=target=>{let eventName;let repeater;let index;let root;while(target){const a=target.atomControl;if(a!==undefined&&a instanceof AtomRepeater){repeater=a;break;}if(index===undefined){const itemIndex=target.dataset.itemIndex;if(typeof itemIndex!=="undefined"){root=target;index=~~itemIndex;}}if(eventName===undefined){const itemClickEvent=target.dataset.clickEvent;if(itemClickEvent){eventName=itemClickEvent.replace(/-([a-z])/g,g=>g[1].toUpperCase());}}target=target.parentElement;}if(index===void 0||repeater===void 0){return undefined;}const item=repeater.items[~~index];return[eventName,repeater,item,index,root];});_export("MatchTrue",MatchTrue=(...a)=>true);_export("MatchFalse",MatchFalse=(...a)=>false);_export("ArrowToString",ArrowToString=item=>{var _a,_b;return(_b=(_a=item.label)===null||_a===void 0?void 0:_a.toString())!==null&&_b!==void 0?_b:item.toString();});_export("MatchCaseInsensitive",MatchCaseInsensitive=(textField=ArrowToString)=>{return s=>{if(!s){return MatchTrue;}const r=StringHelper.createContainsRegExp(s);return item=>r.test(textField(item));};});_export("MatchAnyCaseInsensitive",MatchAnyCaseInsensitive=(textField=ArrowToString)=>{return s=>{if(!s){return MatchTrue;}const r=StringHelper.createContainsAnyWordRegExp(s);return item=>r.test(textField(item));};});_export("SameObjectValue",SameObjectValue=item=>item);maxHeight=window.screen.availHeight/2>250?StyleRule().height("250px"):StyleRule().maxHeight(80);CSS(StyleRule().merge(maxHeight).minWidth(80).verticalFlexLayout({alignItems:"stretch"}).child(StyleRule(".items").flexStretch().overflow("auto").child(StyleRule(".presenter").child(StyleRule("*").padding(5)).child(StyleRule("[data-selected-item=true]").backgroundColor(Colors.lightGreen)))),"*[data-suggestion-popup=suggestion-popup]");CSS(StyleRule().nested(StyleRule("i[data-click-event]").padding(5)).nested(StyleRule("[data-no-wrap=true]").whiteSpace("nowrap")),"*[data-selected-item]");CSS(StyleRule().nested(StyleRule("i[data-click-event=item-select]").padding(5)).displayNone(" i[data-click-event=item-select]"),"*[data-selected-item=true]");CSS(StyleRule().displayNone(" i[data-click-event=item-deselect]"),"*[data-selected-item=false]");CSS(StyleRule().flexLayout({alignItems:"center",justifyContent:"flex-start"}).margin(0).nested(StyleRule("i[data-ui-type]").padding(5)).nested(StyleRule("[data-no-wrap=true]").whiteSpace("nowrap")).displayNone("[data-is-selected=true] i[data-ui-type=item-select]").displayNone("[data-is-selected=false] i[data-ui-type=item-deselect]"),"*[data-select-all=select-all]");SelectAllControl=class SelectAllControl extends AtomControl{preCreate(){this.element.dataset.selectAll="select-all";this.items=[];this.selectedItems=[];this.render(XNode.create(SelectAllControl,{"data-is-selected":Bind.oneWay(()=>this.items.length>0&&this.items.length===this.selectedItems.length,false)}));this.bindEvent(this.element,"click",()=>{const si=this.selectedItems;const items=this.items;if(!si){return;}if(!items){return;}if(items.length===0){return;}if(items.length===si.length){si.clear();}else{si.length=0;si.push(...items);si.refresh();}});}};__decorate([BindableProperty,__metadata("design:type",Array)],SelectAllControl.prototype,"items",void 0);__decorate([BindableProperty,__metadata("design:type",Array)],SelectAllControl.prototype,"selectedItems",void 0);getFirstChild=container=>{let child=container.firstElementChild;while(child&&child.dataset.itemIndex===void 0){child=child.nextElementSibling;}return child;};_export("default",AtomRepeater=class AtomRepeater extends AtomControl{constructor(){super(...arguments);this.bubbleEvents=true;}static from(element){while(element){const{atomControl}=element;if(atomControl instanceof AtomRepeater){return atomControl;}element=element.parentElement;}}set refreshEventScope(v){this.registerDisposable(v.listen(ce=>{this.refreshItem(ce.detail);}));}get allSelected(){const selectedItems=this.selectedItems;const items=this.items;if(!(items&&selectedItems)){return false;}return items.length&&items.length===selectedItems.length;}get value(){var _a;if(this.initialValue!==undefined){return this.initialValue;}const sp=this.selectedItem;if(sp===undefined){return sp;}const vp=(_a=this.valuePath)!==null&&_a!==void 0?_a:SameObjectValue;return vp(sp);}set value(v){var _a,_b;this.initialValue=v;if(!this.items||!this.items.length){AtomBinder.refreshValue(this,"value");return;}const vp=(_a=this.valuePath)!==null&&_a!==void 0?_a:SameObjectValue;const c=(_b=this.comparer)!==null&&_b!==void 0?_b:defaultComparer;const selectedItem=this.items.find(item=>c(vp(item),v));this.selectedItem=selectedItem;delete this.initialValue;}get selectedItem(){var _a;return(_a=this.selectedItems)===null||_a===void 0?void 0:_a[0];}set selectedItem(value){var _a;const si=(_a=this.selectedItems)!==null&&_a!==void 0?_a:this.selectedItems=[];const first=si[0];if(value===first){return;}si.set(0,value);}onPropertyChanged(name){var _a,_b;switch(name){case"items":(_a=this.itemsDisposable)===null||_a===void 0?void 0:_a.dispose();const items=this.items;const d=items===null||items===void 0?void 0:items.watch((target,type,index,item)=>{switch(type){case"add":case"remove":case"set":this.updatePartial(type,index,item);break;default:this.updateItems();break;}this.dispatchCustomEvent("items-updated",{type,items,index});AtomBinder.refreshValue(this,"selectedItem");AtomBinder.refreshValue(this,"value");});if(d){this.itemsDisposable=this.registerDisposable(d);}const iv=this.initialValue;if(iv){this.value=iv;}this.updateItems();this.dispatchCustomEvent("items-updated",{type:"reset",items,index:0});if(this.scrollToSelection){this.bringSelectionIntoView();}break;case"selectedItems":(_b=this.selectedItemsDisposable)===null||_b===void 0?void 0:_b.dispose();const selectedItems=this.selectedItems;const sd=selectedItems===null||selectedItems===void 0?void 0:selectedItems.watch(()=>{this.updateClasses();if(this.scrollToSelection){this.bringSelectionIntoView();}if(this.selectedItem){delete this.initialValue;}AtomBinder.refreshValue(this,"selectedItem");AtomBinder.refreshValue(this,"value");AtomBinder.refreshValue(this,"allSelected");this.dispatchCustomEvent("selection-updated",selectedItems);});if(sd){this.selectedItemsDisposable=this.registerDisposable(sd);}this.updateClasses();this.dispatchCustomEvent("selection-updated",selectedItems);AtomBinder.refreshValue(this,"allSelected");break;case"itemRenderer":case"watch":this.updateItems();break;case"visibilityFilter":this.updateVisibility();break;case"header":case"headerRenderer":this.updateHeaderFooter("header",this.headerPresenter,this.header,this.headerRenderer,true);break;case"footer":case"footerRenderer":this.updateHeaderFooter("footer",this.footerPresenter,this.footer,this.footerRenderer);break;}}bringSelectionIntoView(force){if(force){const selection=this.selectedItem;if(selection){const element=this.elementForItem(selection);element===null||element===void 0?void 0:element.scrollIntoView();}return;}if(this.bringIntoViewId){clearTimeout(this.bringIntoViewId);}this.bringIntoViewId=setTimeout(()=>{clearTimeout(this.bringIntoViewId);this.bringIntoViewId=undefined;this.bringSelectionIntoView(true);},100);}forEach(action,container){var _a;container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let start=getFirstChild(container);while(start){const index=start.dataset.itemIndex;const item=items[~~index];action(item,start);start=start.nextElementSibling;}}*any(fx,itemSelector,container){var _a;container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let node=getFirstChild(container);while(node){const index=node.dataset.itemIndex;const item=items[~~index];let element=node;if(itemSelector){element=element.querySelector(itemSelector);}const ie={item,element};if(fx){if(fx(item)){yield ie;}continue;}yield ie;node=node.nextElementSibling;}}*all(container){var _a;container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let element=getFirstChild(container);while(element){const index=element.dataset.itemIndex;const item=items[~~index];yield{item,element};element=element.nextElementSibling;}}elementForItem(itemToFind,container){var _a;container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let element=getFirstChild(container);while(element){const index=element.dataset.itemIndex;const item=items[~~index];if(item===itemToFind){return element;}element=element.nextElementSibling;}}refreshItem(item,fx,index=-1){if(index===-1){index=this.items.indexOf(item);}if(fx===null||fx===void 0?void 0:fx.then){const finalize=()=>{this.refreshItem(item,undefined,index);};fx.then(finalize,finalize);return;}this.updatePartial("set",index,item);}updatePartial(key,index,item,container){var _a,_b,_c,_d,_e,_f;const items=this.items;if(!items){return;}const ir=this.itemRenderer;if(!ir){return;}container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;let start=getFirstChild(container);let ei;while(start){ei=~~start.dataset.itemIndex;if(ei===index){break;}start=start.nextElementSibling;}if(key!=="add"&&!start){return;}const vp=(_b=this.valuePath)!==null&&_b!==void 0?_b:it=>it;const si=((_c=this.selectedItems)!==null&&_c!==void 0?_c:[]).map(vp);const isRemove=key==="remove";if(isRemove||key==="set"){const current=start;start=start.nextElementSibling;const ac=current.atomControl;if(ac){ac.dispose();}else{this.unbind(current);this.unbindEvent(current);}current.remove();}if(!isRemove){const en=ir(item,index,this);const ea=(_d=en.attributes)!==null&&_d!==void 0?_d:en.attributes={};const v=vp(item);const e=document.createElement((_f=(_e=ea.for)!==null&&_e!==void 0?_e:en.name)!==null&&_f!==void 0?_f:"div");e.dataset.itemIndex=(index++).toString();e.dataset.selectedItem=si.indexOf(v)!==-1?"true":"false";if(this.enableDragDrop){updateDragDrop(e);}if(start){container.insertBefore(e,start);}else{container.appendChild(e);}this.render(en,e,this);}while(start){const ci=items[index];const cv=vp(ci);start.dataset.itemIndex=(index++).toString();start.dataset.selectedItem=si.indexOf(cv)!==-1?"true":"false";start=start.nextElementSibling;}this.onPropertyChanged("footer");}updateItems(container,force){var _a,_b,_c,_d,_e,_f;if(this.deferUpdates&&!force){if(this.deferredUpdateId){return;}this.deferredUpdateId=setTimeout(()=>{this.deferredUpdateId=0;this.updateItems(container,true);},1);return;}container!==null&&container!==void 0?container:container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;if(!container){return;}disposeChildren(this,container);this.onPropertyChanged("header");const ir=this.itemRenderer;if(!ir){this.onPropertyChanged("footer");return;}const items=this.items;if(!items){this.onPropertyChanged("footer");return;}const vp=(_b=this.valuePath)!==null&&_b!==void 0?_b:it=>it;const si=((_c=this.selectedItems)!==null&&_c!==void 0?_c:[]).map(vp);let i=0;for(const iterator of items){const index=i++;const e=ir(iterator,index,this);const ea=(_d=e.attributes)!==null&&_d!==void 0?_d:e.attributes={};const v=vp(iterator);const element=document.createElement((_f=(_e=ea.for)!==null&&_e!==void 0?_e:e.name)!==null&&_f!==void 0?_f:"div");element.dataset.itemIndex=index.toString();element.dataset.selectedItem=si.indexOf(v)!==-1?"true":"false";this.render(e,element,this);if(this.enableDragDrop){updateDragDrop(element);}container.appendChild(element);}this.onPropertyChanged("footer");}preCreate(){this.element.setAttribute("data-click-event","item-click");}dispatchCustomEvent(type,detail){var _a;type=StringHelper.fromHyphenToCamel(type);(_a=this.element)===null||_a===void 0?void 0:_a.dispatchEvent(new CustomEvent(type,{detail,bubbles:false,cancelable:true}));}updateClasses(){var _a,_b,_c;const container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let element=getFirstChild(container);const vp=(_b=this.valuePath)!==null&&_b!==void 0?_b:i=>i;const si=((_c=this.selectedItems)!==null&&_c!==void 0?_c:[]).map(vp);while(element){const index=~~element.dataset.itemIndex;const item=items[index];const v=vp(item);element.dataset.selectedItem=si.indexOf(v)!==-1?"true":"false";element=element.nextElementSibling;}}updateVisibility(){var _a,_b;const container=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.element;const items=this.items;let element=container.firstElementChild;const vf=(_b=this.visibilityFilter)!==null&&_b!==void 0?_b:MatchTrue;while(element){const index=~~element.dataset.itemIndex;const item=items[index];if(vf(item)){element.removeAttribute("data-ui-display");}else{element.dataset.uiDisplay="none";}element=element.nextElementSibling;}}updateHeaderFooter(name,presenter,item,itemRenderer,insert){var _a,_b,_c,_d;presenter!==null&&presenter!==void 0?presenter:presenter=(_a=this.itemsPresenter)!==null&&_a!==void 0?_a:this.itemsPresenter=this.element;if(!presenter){return;}let current;if(insert){current=presenter.firstElementChild;while(current&&current.dataset[name]!==name){current=current.nextElementSibling;}}else{current=presenter.lastElementChild;while(current&&current.dataset[name]!==name){current=current.previousElementSibling;}}if(current){disposeChild(this,current);}if(!(item&&itemRenderer)){return;}const node=itemRenderer(item);const element=document.createElement((_d=(_c=(_b=node.attributes)===null||_b===void 0?void 0:_b.for)!==null&&_c!==void 0?_c:node.name)!==null&&_d!==void 0?_d:"div");element.dataset[name]=name;this.render(node,element,this);if(insert){presenter.insertBefore(element,presenter.firstElementChild);}else{presenter.appendChild(element);}}dispatchHeaderFooterEvent(eventName,type,originalTarget){const detail=this[type];const ce=new CustomEvent(eventName!==null&&eventName!==void 0?eventName:`${type}Click`,{detail,bubbles:this.bubbleEvents,cancelable:true});originalTarget.dispatchEvent(ce);if(!ce.defaultPrevented){this.onPropertyChanged(type);}}dispatchItemEvent(eventName,item,recreate,originalTarget,nestedItem){const ce=new CustomEvent(eventName!==null&&eventName!==void 0?eventName:"itemClick",{detail:nestedItem!==null&&nestedItem!==void 0?nestedItem:item,bubbles:this.bubbleEvents,cancelable:true});originalTarget.dispatchEvent(ce);if(recreate&&ce.executed&&!ce.defaultPrevented){this.refreshItem(item,ce.promise);}}dispatchClickEvent(e,data){var _a;let{clickEvent="itemClick",recreate,header,footer,itemIndex,itemPath}=data;clickEvent=clickEvent.replace(/-([a-z])/g,g=>g[1].toUpperCase());if(header){this.dispatchHeaderFooterEvent(clickEvent,header,e.target);return;}if(footer){this.dispatchHeaderFooterEvent(clickEvent,header,e.target);return;}if(itemIndex===void 0||itemIndex===null){return;}let index=~~itemIndex;const item=this.items[index];if(clickEvent==="itemSelect"||clickEvent==="itemDeselect"){const si=(_a=this.selectedItems)!==null&&_a!==void 0?_a:this.selectedItems=[];if(si){index=si.indexOf(item);if(index===-1){if(this.allowMultipleSelection){si.add(item);}else{si.set(0,item);}}else{si.removeAt(index);}}}if(item){if(itemPath){if(/^[\{\"}]/.test(itemPath)){this.dispatchItemEvent(clickEvent,item,recreate,e.target,JSON.parse(itemPath));return;}let nestedItem={};const all=itemPath.split(",");for(const iterator of all){let[name,paths]=iterator.split(/\=|\:/);if(paths===void 0){if(all.length>1){throw new Error("Invalid path, please use name=path format");}paths=name;}let start=item;for(const path of paths.split(".")){if(path==="$"){start=item;continue;}start=start[path];}if(all.length===1){nestedItem=start;break;}nestedItem[name]=start;}this.dispatchItemEvent(clickEvent,item,recreate,e.target,nestedItem);return;}this.dispatchItemEvent(clickEvent,item,recreate,e.target);}}});__decorate([BindableProperty,__metadata("design:type",Boolean)],AtomRepeater.prototype,"allowMultipleSelection",void 0);__decorate([BindableProperty,__metadata("design:type",Array)],AtomRepeater.prototype,"selectedItems",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"itemsPresenter",void 0);__decorate([BindableProperty,__metadata("design:type",Array)],AtomRepeater.prototype,"items",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"watch",void 0);__decorate([BindableProperty,__metadata("design:type",Function)],AtomRepeater.prototype,"visibilityFilter",void 0);__decorate([BindableProperty,__metadata("design:type",Function)],AtomRepeater.prototype,"enableFunc",void 0);__decorate([BindableProperty,__metadata("design:type",Function)],AtomRepeater.prototype,"itemRenderer",void 0);__decorate([BindableProperty,__metadata("design:type",Function)],AtomRepeater.prototype,"valuePath",void 0);__decorate([BindableProperty,__metadata("design:type",Function)],AtomRepeater.prototype,"comparer",void 0);__decorate([BindableProperty,__metadata("design:type",Boolean)],AtomRepeater.prototype,"deferUpdates",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"header",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"headerRenderer",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"footer",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"footerRenderer",void 0);__decorate([BindableProperty,__metadata("design:type",Object)],AtomRepeater.prototype,"enableDragDrop",void 0);__decorate([WatchProperty,__metadata("design:type",Object),__metadata("design:paramtypes",[])],AtomRepeater.prototype,"allSelected",null);hoverItem={repeater:null,target:null,item:null,placeholder:null};document.body.addEventListener("dragstart",e=>{const{target}=e;if(target.draggable){const ri=getParentRepeaterItem(target);if(!ri){return;}const[type,repeater,item,index]=ri;if(!repeater||!repeater.enableDragDrop){return;}const placeholder=document.createElement("div");placeholder.style.width=target.offsetWidth+"px";placeholder.style.height=target.offsetHeight+"px";placeholder.style.backgroundColor=Colors.lightGray.toString();placeholder.style.border="solid 1px gray";placeholder.style.borderRadius="10px";hoverItem={repeater,target,item,placeholder};e.dataTransfer.dropEffect="move";setTimeout(()=>{target.style.display="none";target.parentElement.insertBefore(placeholder,target);},0);}});document.body.addEventListener("dragend",e=>{var _a,_b;if(!(hoverItem===null||hoverItem===void 0?void 0:hoverItem.placeholder)){return;}const{item,placeholder,repeater}=hoverItem;let start=placeholder;let index=-1;while(start){const itemIndex=(_b=(_a=start.previousElementSibling)===null||_a===void 0?void 0:_a.dataset)===null||_b===void 0?void 0:_b.itemIndex;if(itemIndex!==void 0){index=~~itemIndex;}if(start.parentElement.atomControl){break;}start=start.parentElement;}const targetRepeater=start.parentElement.atomControl;placeholder.remove();hoverItem.placeholder=null;repeater.items.remove(item);index++;const ce=new CustomEvent("itemDropped",{detail:{item,index}});if(ce.defaultPrevented){return;}const{detail}=ce;targetRepeater.items.insert(detail.index,detail.item);});dragOver=e=>{if(hoverItem){const{placeholder}=hoverItem;if(e.target===placeholder){return;}}const ri=getParentRepeaterItem(e.target);if(!ri){return;}const[type,repeater,item,index,target]=ri;if(!repeater){return;}if(hoverItem){const{placeholder}=hoverItem;e.preventDefault();const mp={x:e.clientX,y:e.clientY};const isBefore=(co,n)=>n.x<=co.x+co.width*0.3||n.y<=co.y+co.height*0.3;const isAfter=(co,n)=>n.x>=co.x+co.width*0.7||n.y>=co.y+co.height*0.7;const targetBounds=target.getBoundingClientRect();if(isAfter(targetBounds,mp)){const next=target.nextElementSibling;if(next===placeholder){return;}placeholder.remove();target.insertAdjacentElement("afterend",placeholder);return;}if(isBefore(targetBounds,mp)){const previous=target.previousElementSibling;if(previous===placeholder){return;}placeholder.remove();target.insertAdjacentElement("beforebegin",placeholder);}return;}};document.body.addEventListener("dragover",dragOver);document.body.addEventListener("dragenter",dragOver);}};});
1
+ System.register(["tslib", "@web-atoms/core/dist/core/AtomBinder", "@web-atoms/core/dist/core/Bind", "@web-atoms/core/dist/core/BindableProperty", "@web-atoms/core/dist/core/Colors", "@web-atoms/core/dist/core/StringHelper", "@web-atoms/core/dist/core/WatchProperty", "@web-atoms/core/dist/core/XNode", "@web-atoms/core/dist/style/StyleRule", "@web-atoms/core/dist/web/controls/AtomControl", "@web-atoms/core/dist/web/services/PopupService", "@web-atoms/core/dist/web/styles/CSS", "./InlinePopup"], function (_export, _context) {
2
+ "use strict";
3
+
4
+ var __decorate, __metadata, __rest, AtomBinder, Bind, BindableProperty, Colors, StringHelper, WatchProperty, XNode, StyleRule, AtomControl, PopupWindow, CSS, InlinePopup, SelectAllControl, AtomRepeater, popupCSS, getParentRepeaterItem, MatchTrue, MatchFalse, ArrowToString, MatchCaseInsensitive, MatchAnyCaseInsensitive, SameObjectValue, maxHeight, getFirstChild, hoverItem, dragOver;
5
+ function askSuggestion(items, itemRenderer, match, options) {
6
+ class Suggestions extends PopupWindow {
7
+ create() {
8
+ var _a;
9
+ this.title = (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : "Select";
10
+ this.render(XNode.create("div", {
11
+ class: popupCSS
12
+ }, XNode.create("input", {
13
+ type: "search",
14
+ value: Bind.twoWaysImmediate(() => this.search),
15
+ autofocus: true
16
+ }), XNode.create("div", {
17
+ class: "items"
18
+ }, XNode.create(AtomRepeater, {
19
+ class: "presenter",
20
+ itemRenderer: itemRenderer,
21
+ visibilityFilter: Bind.oneWay(() => match(this.search)),
22
+ eventItemClick: e => {
23
+ this.close(e.detail);
24
+ },
25
+ items: items
26
+ }))));
27
+ }
28
+ }
29
+ __decorate([BindableProperty, __metadata("design:type", String)], Suggestions.prototype, "search", void 0);
30
+ options !== null && options !== void 0 ? options : options = {};
31
+ if (typeof options.maximize === "undefined") {
32
+ if (typeof options.width === "undefined") {
33
+ options.maxWidth = "90%";
34
+ options.minWidth = "300px";
35
+ }
36
+ if (typeof options.height === "undefined") {
37
+ options.height = "80%";
38
+ }
39
+ }
40
+ return Suggestions.showModal(options);
41
+ }
42
+ function askSuggestionPopup(opener, items, itemRenderer, match, selectedItem) {
43
+ const updateSearch = ("search" in opener);
44
+ const itemsInOpener = ("items" in opener);
45
+ class Suggestions extends InlinePopup {
46
+ get items() {
47
+ return itemsInOpener ? this.opener.items : items;
48
+ }
49
+ onPropertyChanged(name) {
50
+ if (updateSearch && name === "search") {
51
+ opener.search = this.search;
52
+ }
53
+ super.onPropertyChanged(name);
54
+ }
55
+ create() {
56
+ this.anchorItem = selectedItem;
57
+ this.opener = opener;
58
+ if (this.opener.search) {
59
+ this.search = this.opener.search;
60
+ }
61
+ if (selectedItem) {
62
+ this.anchorIndex = items.indexOf(selectedItem);
63
+ }
64
+ const disableSearch = opener.disableSearch;
65
+ if (itemsInOpener) {
66
+ this.render(XNode.create("div", {
67
+ "data-suggestion-popup": "suggestion-popup"
68
+ }, !disableSearch && XNode.create("input", {
69
+ type: "search",
70
+ value: Bind.twoWaysImmediate(() => this.search),
71
+ eventKeydown: e => this.onKey(e),
72
+ autofocus: true
73
+ }), XNode.create("div", {
74
+ class: "items"
75
+ }, XNode.create(AtomRepeater, {
76
+ class: "presenter",
77
+ selectedItem: Bind.oneWay(() => this.anchorItem),
78
+ itemRenderer: itemRenderer,
79
+ visibilityFilter: Bind.oneWay(() => match(this.search)),
80
+ eventItemClick: e => {
81
+ this.anchorItem = e.detail;
82
+ setTimeout(() => this.close(e.detail), 100);
83
+ },
84
+ items: Bind.oneWay(() => this.opener.items)
85
+ }))));
86
+ return;
87
+ }
88
+ this.render(XNode.create("div", {
89
+ "data-suggestion-popup": "suggestion-popup"
90
+ }, !disableSearch && XNode.create("input", {
91
+ type: "search",
92
+ value: Bind.twoWaysImmediate(() => this.search),
93
+ eventKeydown: e => this.onKey(e),
94
+ autofocus: true
95
+ }), XNode.create("div", {
96
+ class: "items"
97
+ }, XNode.create(AtomRepeater, {
98
+ class: "presenter",
99
+ selectedItem: Bind.oneWay(() => this.anchorItem),
100
+ itemRenderer: itemRenderer,
101
+ visibilityFilter: Bind.oneWay(() => match(this.search)),
102
+ scrollToSelection: true,
103
+ eventItemClick: e => {
104
+ this.close(e.detail);
105
+ },
106
+ items: items
107
+ }))));
108
+ }
109
+ onKey(e) {
110
+ var _a;
111
+ const suggested = match ? (_a = this.items) === null || _a === void 0 ? void 0 : _a.filter(match(this.search)) : this.items;
112
+ switch (e.key) {
113
+ case "Enter":
114
+ const anchorItem = this.anchorItem;
115
+ if (!anchorItem) {
116
+ return;
117
+ }
118
+ this.anchorIndex = 0;
119
+ this.close(anchorItem);
120
+ this.anchorItem = null;
121
+ this.search = "";
122
+ break;
123
+ case "ArrowDown":
124
+ if (suggested) {
125
+ if (!this.anchorItem) {
126
+ this.anchorIndex = 0;
127
+ } else {
128
+ if (this.anchorIndex < suggested.length - 1) {
129
+ this.anchorIndex++;
130
+ }
131
+ }
132
+ this.anchorItem = suggested[this.anchorIndex];
133
+ }
134
+ break;
135
+ case "ArrowUp":
136
+ if (suggested) {
137
+ if (!this.anchorItem) {
138
+ return;
139
+ }
140
+ if (this.anchorIndex) {
141
+ this.anchorIndex--;
142
+ }
143
+ this.anchorItem = suggested[this.anchorIndex];
144
+ }
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ __decorate([BindableProperty, __metadata("design:type", String)], Suggestions.prototype, "search", void 0);
150
+ return Suggestions.showControl(opener);
151
+ }
152
+ function SelectorCheckBox(_a, ...nodes) {
153
+ var {
154
+ text,
155
+ icon = "far fa-square",
156
+ iconSelected = "fas fa-check-square"
157
+ } = _a,
158
+ a = __rest(_a, ["text", "icon", "iconSelected"]);
159
+ if (text) {
160
+ return XNode.create("label", null, XNode.create("i", {
161
+ class: icon,
162
+ "data-click-event": "item-select"
163
+ }), XNode.create("i", {
164
+ class: iconSelected,
165
+ "data-click-event": "item-deselect"
166
+ }), XNode.create("span", {
167
+ "data-no-wrap": "true",
168
+ text: text
169
+ }), ...nodes);
170
+ }
171
+ return XNode.create("label", null, XNode.create("i", {
172
+ class: icon,
173
+ "data-click-event": "item-select"
174
+ }), XNode.create("i", {
175
+ class: iconSelected,
176
+ "data-click-event": "item-deselect"
177
+ }), ...nodes);
178
+ }
179
+ function SelectAll(_a, ...nodes) {
180
+ var {
181
+ text = "Select All",
182
+ icon = "far fa-square",
183
+ iconSelected = "fas fa-check-square"
184
+ } = _a,
185
+ a = __rest(_a, ["text", "icon", "iconSelected"]);
186
+ if (text) {
187
+ return XNode.create(SelectAllControl, Object.assign({
188
+ for: "label"
189
+ }, a), XNode.create("i", {
190
+ class: icon,
191
+ "data-ui-type": "item-select"
192
+ }), XNode.create("i", {
193
+ class: iconSelected,
194
+ "data-ui-type": "item-deselect"
195
+ }), XNode.create("span", {
196
+ "data-no-wrap": "true",
197
+ text: text
198
+ }));
199
+ }
200
+ return XNode.create(SelectAllControl, Object.assign({
201
+ for: "label"
202
+ }, a), XNode.create("i", {
203
+ class: icon,
204
+ "data-ui-type": "item-select"
205
+ }), XNode.create("i", {
206
+ class: iconSelected,
207
+ "data-ui-type": "item-deselect"
208
+ }), ...nodes);
209
+ }
210
+ function disposeChildren(owner, e) {
211
+ if (!e) {
212
+ return;
213
+ }
214
+ let s = e.firstElementChild;
215
+ while (s) {
216
+ const c = s;
217
+ s = s.nextElementSibling;
218
+ const ac = c.atomControl;
219
+ if (ac) {
220
+ ac.dispose();
221
+ continue;
222
+ }
223
+ disposeChildren(owner, c);
224
+ owner.unbind(c);
225
+ owner.unbindEvent(c);
226
+ }
227
+ e.innerHTML = "";
228
+ }
229
+ function disposeChild(owner, e) {
230
+ const ac = e.atomControl;
231
+ if (ac) {
232
+ ac.dispose();
233
+ return;
234
+ }
235
+ disposeChildren(owner, e);
236
+ owner.unbind(e);
237
+ owner.unbindEvent(e);
238
+ e.remove();
239
+ }
240
+ function defaultComparer(left, right) {
241
+ if (left && right) {
242
+ if (left instanceof Date) {
243
+ if (right instanceof Date) {
244
+ return left.getTime() === right.getTime();
245
+ }
246
+ return false;
247
+ }
248
+ }
249
+ return left === right;
250
+ }
251
+ function updateDragDrop(e, force = false) {
252
+ if (!e) {
253
+ return;
254
+ }
255
+ if (force) {
256
+ e.draggable = false;
257
+ } else {
258
+ force = e.draggable;
259
+ }
260
+ e = e.firstElementChild;
261
+ while (e) {
262
+ updateDragDrop(e, force);
263
+ e = e.nextElementSibling;
264
+ }
265
+ }
266
+ _export({
267
+ askSuggestion: askSuggestion,
268
+ askSuggestionPopup: askSuggestionPopup,
269
+ SelectorCheckBox: SelectorCheckBox,
270
+ SelectAll: SelectAll,
271
+ disposeChildren: disposeChildren,
272
+ disposeChild: disposeChild,
273
+ defaultComparer: defaultComparer,
274
+ default: void 0
275
+ });
276
+ return {
277
+ setters: [function (_tslib) {
278
+ __decorate = _tslib.__decorate;
279
+ __metadata = _tslib.__metadata;
280
+ __rest = _tslib.__rest;
281
+ }, function (_webAtomsCoreDistCoreAtomBinder) {
282
+ AtomBinder = _webAtomsCoreDistCoreAtomBinder.AtomBinder;
283
+ }, function (_webAtomsCoreDistCoreBind) {
284
+ Bind = _webAtomsCoreDistCoreBind.default;
285
+ }, function (_webAtomsCoreDistCoreBindableProperty) {
286
+ BindableProperty = _webAtomsCoreDistCoreBindableProperty.BindableProperty;
287
+ }, function (_webAtomsCoreDistCoreColors) {
288
+ Colors = _webAtomsCoreDistCoreColors.default;
289
+ }, function (_webAtomsCoreDistCoreStringHelper) {
290
+ StringHelper = _webAtomsCoreDistCoreStringHelper.StringHelper;
291
+ }, function (_webAtomsCoreDistCoreWatchProperty) {
292
+ WatchProperty = _webAtomsCoreDistCoreWatchProperty.default;
293
+ }, function (_webAtomsCoreDistCoreXNode) {
294
+ XNode = _webAtomsCoreDistCoreXNode.default;
295
+ }, function (_webAtomsCoreDistStyleStyleRule) {
296
+ StyleRule = _webAtomsCoreDistStyleStyleRule.default;
297
+ }, function (_webAtomsCoreDistWebControlsAtomControl) {
298
+ AtomControl = _webAtomsCoreDistWebControlsAtomControl.AtomControl;
299
+ }, function (_webAtomsCoreDistWebServicesPopupService) {
300
+ PopupWindow = _webAtomsCoreDistWebServicesPopupService.PopupWindow;
301
+ }, function (_webAtomsCoreDistWebStylesCSS) {
302
+ CSS = _webAtomsCoreDistWebStylesCSS.default;
303
+ }, function (_InlinePopup) {
304
+ InlinePopup = _InlinePopup.default;
305
+ }],
306
+ execute: function () {
307
+ CSS(StyleRule().display("none"), "[data-ui-display=none]");
308
+ popupCSS = CSS(StyleRule().minWidth(200).verticalFlexLayout({
309
+ alignItems: "stretch"
310
+ }).child(StyleRule(".items").flexStretch().overflow("auto").child(StyleRule(".presenter").child(StyleRule("*").padding(5)).child(StyleRule("[data-selected-item=true]").backgroundColor(Colors.lightGreen)))));
311
+ _export("getParentRepeaterItem", getParentRepeaterItem = target => {
312
+ let eventName;
313
+ let repeater;
314
+ let index;
315
+ let root;
316
+ while (target) {
317
+ const a = target.atomControl;
318
+ if (a !== undefined && a instanceof AtomRepeater) {
319
+ repeater = a;
320
+ break;
321
+ }
322
+ if (index === undefined) {
323
+ const itemIndex = target.dataset.itemIndex;
324
+ if (typeof itemIndex !== "undefined") {
325
+ root = target;
326
+ index = ~~itemIndex;
327
+ }
328
+ }
329
+ if (eventName === undefined) {
330
+ const itemClickEvent = target.dataset.clickEvent;
331
+ if (itemClickEvent) {
332
+ eventName = itemClickEvent.replace(/-([a-z])/g, g => g[1].toUpperCase());
333
+ }
334
+ }
335
+ target = target.parentElement;
336
+ }
337
+ if (index === void 0 || repeater === void 0) {
338
+ return undefined;
339
+ }
340
+ const item = repeater.items[~~index];
341
+ return [eventName, repeater, item, index, root];
342
+ });
343
+ _export("MatchTrue", MatchTrue = (...a) => true);
344
+ _export("MatchFalse", MatchFalse = (...a) => false);
345
+ _export("ArrowToString", ArrowToString = item => {
346
+ var _a, _b;
347
+ return (_b = (_a = item.label) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : item.toString();
348
+ });
349
+ _export("MatchCaseInsensitive", MatchCaseInsensitive = (textField = ArrowToString) => {
350
+ return s => {
351
+ if (!s) {
352
+ return MatchTrue;
353
+ }
354
+ const r = StringHelper.createContainsRegExp(s);
355
+ return item => r.test(textField(item));
356
+ };
357
+ });
358
+ _export("MatchAnyCaseInsensitive", MatchAnyCaseInsensitive = (textField = ArrowToString) => {
359
+ return s => {
360
+ if (!s) {
361
+ return MatchTrue;
362
+ }
363
+ const r = StringHelper.createContainsAnyWordRegExp(s);
364
+ return item => r.test(textField(item));
365
+ };
366
+ });
367
+ _export("SameObjectValue", SameObjectValue = item => item);
368
+ maxHeight = window.screen.availHeight / 2 > 250 ? StyleRule().height("250px") : StyleRule().maxHeight(80);
369
+ CSS(StyleRule().merge(maxHeight).minWidth(80).verticalFlexLayout({
370
+ alignItems: "stretch"
371
+ }).child(StyleRule(".items").flexStretch().overflow("auto").child(StyleRule(".presenter").child(StyleRule("*").padding(5)).child(StyleRule("[data-selected-item=true]").backgroundColor(Colors.lightGreen)))), "*[data-suggestion-popup=suggestion-popup]");
372
+ CSS(StyleRule().nested(StyleRule("i[data-click-event]").padding(5)).nested(StyleRule("[data-no-wrap=true]").whiteSpace("nowrap")), "*[data-selected-item]");
373
+ CSS(StyleRule().nested(StyleRule("i[data-click-event=item-select]").padding(5)).displayNone(" i[data-click-event=item-select]"), "*[data-selected-item=true]");
374
+ CSS(StyleRule().displayNone(" i[data-click-event=item-deselect]"), "*[data-selected-item=false]");
375
+ CSS(StyleRule().flexLayout({
376
+ alignItems: "center",
377
+ justifyContent: "flex-start"
378
+ }).margin(0).nested(StyleRule("i[data-ui-type]").padding(5)).nested(StyleRule("[data-no-wrap=true]").whiteSpace("nowrap")).displayNone("[data-is-selected=true] i[data-ui-type=item-select]").displayNone("[data-is-selected=false] i[data-ui-type=item-deselect]"), "*[data-select-all=select-all]");
379
+ SelectAllControl = class SelectAllControl extends AtomControl {
380
+ preCreate() {
381
+ this.element.dataset.selectAll = "select-all";
382
+ this.items = [];
383
+ this.selectedItems = [];
384
+ this.render(XNode.create(SelectAllControl, {
385
+ "data-is-selected": Bind.oneWay(() => this.items.length > 0 && this.items.length === this.selectedItems.length, false)
386
+ }));
387
+ this.bindEvent(this.element, "click", () => {
388
+ const si = this.selectedItems;
389
+ const items = this.items;
390
+ if (!si) {
391
+ return;
392
+ }
393
+ if (!items) {
394
+ return;
395
+ }
396
+ if (items.length === 0) {
397
+ return;
398
+ }
399
+ if (items.length === si.length) {
400
+ si.clear();
401
+ } else {
402
+ si.length = 0;
403
+ si.push(...items);
404
+ si.refresh();
405
+ }
406
+ });
407
+ }
408
+ };
409
+ __decorate([BindableProperty, __metadata("design:type", Array)], SelectAllControl.prototype, "items", void 0);
410
+ __decorate([BindableProperty, __metadata("design:type", Array)], SelectAllControl.prototype, "selectedItems", void 0);
411
+ getFirstChild = container => {
412
+ let child = container.firstElementChild;
413
+ while (child && child.dataset.itemIndex === void 0) {
414
+ child = child.nextElementSibling;
415
+ }
416
+ return child;
417
+ };
418
+ _export("default", AtomRepeater = class AtomRepeater extends AtomControl {
419
+ constructor() {
420
+ super(...arguments);
421
+ this.bubbleEvents = true;
422
+ }
423
+ static from(element) {
424
+ while (element) {
425
+ const {
426
+ atomControl
427
+ } = element;
428
+ if (atomControl instanceof AtomRepeater) {
429
+ return atomControl;
430
+ }
431
+ element = element.parentElement;
432
+ }
433
+ }
434
+ set refreshEventScope(v) {
435
+ this.registerDisposable(v.listen(ce => {
436
+ this.refreshItem(ce.detail);
437
+ }));
438
+ }
439
+ get allSelected() {
440
+ const selectedItems = this.selectedItems;
441
+ const items = this.items;
442
+ if (!(items && selectedItems)) {
443
+ return false;
444
+ }
445
+ return items.length && items.length === selectedItems.length;
446
+ }
447
+ get value() {
448
+ var _a;
449
+ if (this.initialValue !== undefined) {
450
+ return this.initialValue;
451
+ }
452
+ const sp = this.selectedItem;
453
+ if (sp === undefined) {
454
+ return sp;
455
+ }
456
+ const vp = (_a = this.valuePath) !== null && _a !== void 0 ? _a : SameObjectValue;
457
+ return vp(sp);
458
+ }
459
+ set value(v) {
460
+ var _a, _b;
461
+ this.initialValue = v;
462
+ if (!this.items || !this.items.length) {
463
+ AtomBinder.refreshValue(this, "value");
464
+ return;
465
+ }
466
+ const vp = (_a = this.valuePath) !== null && _a !== void 0 ? _a : SameObjectValue;
467
+ const c = (_b = this.comparer) !== null && _b !== void 0 ? _b : defaultComparer;
468
+ const selectedItem = this.items.find(item => c(vp(item), v));
469
+ this.selectedItem = selectedItem;
470
+ delete this.initialValue;
471
+ }
472
+ get selectedItem() {
473
+ var _a;
474
+ return (_a = this.selectedItems) === null || _a === void 0 ? void 0 : _a[0];
475
+ }
476
+ set selectedItem(value) {
477
+ var _a;
478
+ const si = (_a = this.selectedItems) !== null && _a !== void 0 ? _a : this.selectedItems = [];
479
+ const first = si[0];
480
+ if (value === first) {
481
+ return;
482
+ }
483
+ si.set(0, value);
484
+ }
485
+ onPropertyChanged(name) {
486
+ var _a, _b;
487
+ switch (name) {
488
+ case "items":
489
+ (_a = this.itemsDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
490
+ const items = this.items;
491
+ const d = items === null || items === void 0 ? void 0 : items.watch((target, type, index, item) => {
492
+ switch (type) {
493
+ case "add":
494
+ case "remove":
495
+ case "set":
496
+ this.updatePartial(type, index, item);
497
+ break;
498
+ default:
499
+ this.updateItems();
500
+ break;
501
+ }
502
+ this.dispatchCustomEvent("items-updated", {
503
+ type,
504
+ items,
505
+ index
506
+ });
507
+ AtomBinder.refreshValue(this, "selectedItem");
508
+ AtomBinder.refreshValue(this, "value");
509
+ });
510
+ if (d) {
511
+ this.itemsDisposable = this.registerDisposable(d);
512
+ }
513
+ const iv = this.initialValue;
514
+ if (iv) {
515
+ this.value = iv;
516
+ }
517
+ this.updateItems();
518
+ this.dispatchCustomEvent("items-updated", {
519
+ type: "reset",
520
+ items,
521
+ index: 0
522
+ });
523
+ if (this.scrollToSelection) {
524
+ this.bringSelectionIntoView();
525
+ }
526
+ break;
527
+ case "selectedItems":
528
+ (_b = this.selectedItemsDisposable) === null || _b === void 0 ? void 0 : _b.dispose();
529
+ const selectedItems = this.selectedItems;
530
+ const sd = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.watch(() => {
531
+ this.updateClasses();
532
+ if (this.scrollToSelection) {
533
+ this.bringSelectionIntoView();
534
+ }
535
+ if (this.selectedItem) {
536
+ delete this.initialValue;
537
+ }
538
+ AtomBinder.refreshValue(this, "selectedItem");
539
+ AtomBinder.refreshValue(this, "value");
540
+ AtomBinder.refreshValue(this, "allSelected");
541
+ this.dispatchCustomEvent("selection-updated", selectedItems);
542
+ });
543
+ if (sd) {
544
+ this.selectedItemsDisposable = this.registerDisposable(sd);
545
+ }
546
+ this.updateClasses();
547
+ this.dispatchCustomEvent("selection-updated", selectedItems);
548
+ AtomBinder.refreshValue(this, "allSelected");
549
+ break;
550
+ case "itemRenderer":
551
+ case "watch":
552
+ this.updateItems();
553
+ break;
554
+ case "visibilityFilter":
555
+ this.updateVisibility();
556
+ break;
557
+ case "header":
558
+ case "headerRenderer":
559
+ this.updateHeaderFooter("header", this.headerPresenter, this.header, this.headerRenderer, true);
560
+ break;
561
+ case "footer":
562
+ case "footerRenderer":
563
+ this.updateHeaderFooter("footer", this.footerPresenter, this.footer, this.footerRenderer);
564
+ break;
565
+ }
566
+ }
567
+ bringSelectionIntoView(force) {
568
+ if (force) {
569
+ const selection = this.selectedItem;
570
+ if (selection) {
571
+ const element = this.elementForItem(selection);
572
+ element === null || element === void 0 ? void 0 : element.scrollIntoView();
573
+ }
574
+ return;
575
+ }
576
+ if (this.bringIntoViewId) {
577
+ clearTimeout(this.bringIntoViewId);
578
+ }
579
+ this.bringIntoViewId = setTimeout(() => {
580
+ clearTimeout(this.bringIntoViewId);
581
+ this.bringIntoViewId = undefined;
582
+ this.bringSelectionIntoView(true);
583
+ }, 100);
584
+ }
585
+ forEach(action, container) {
586
+ var _a;
587
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
588
+ const items = this.items;
589
+ let start = getFirstChild(container);
590
+ while (start) {
591
+ const index = start.dataset.itemIndex;
592
+ const item = items[~~index];
593
+ action(item, start);
594
+ start = start.nextElementSibling;
595
+ }
596
+ }
597
+ *any(fx, itemSelector, container) {
598
+ var _a;
599
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
600
+ const items = this.items;
601
+ let node = getFirstChild(container);
602
+ while (node) {
603
+ const index = node.dataset.itemIndex;
604
+ const item = items[~~index];
605
+ let element = node;
606
+ if (itemSelector) {
607
+ element = element.querySelector(itemSelector);
608
+ }
609
+ const ie = {
610
+ item,
611
+ element
612
+ };
613
+ if (fx) {
614
+ if (fx(item)) {
615
+ yield ie;
616
+ }
617
+ continue;
618
+ }
619
+ yield ie;
620
+ node = node.nextElementSibling;
621
+ }
622
+ }
623
+ *all(container) {
624
+ var _a;
625
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
626
+ const items = this.items;
627
+ let element = getFirstChild(container);
628
+ while (element) {
629
+ const index = element.dataset.itemIndex;
630
+ const item = items[~~index];
631
+ yield {
632
+ item,
633
+ element
634
+ };
635
+ element = element.nextElementSibling;
636
+ }
637
+ }
638
+ elementForItem(itemToFind, container) {
639
+ var _a;
640
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
641
+ const items = this.items;
642
+ let element = getFirstChild(container);
643
+ while (element) {
644
+ const index = element.dataset.itemIndex;
645
+ const item = items[~~index];
646
+ if (item === itemToFind) {
647
+ return element;
648
+ }
649
+ element = element.nextElementSibling;
650
+ }
651
+ }
652
+ refreshItem(item, fx, index = -1) {
653
+ if (index === -1) {
654
+ index = this.items.indexOf(item);
655
+ }
656
+ if (fx === null || fx === void 0 ? void 0 : fx.then) {
657
+ const finalize = () => {
658
+ this.refreshItem(item, undefined, index);
659
+ };
660
+ fx.then(finalize, finalize);
661
+ return;
662
+ }
663
+ this.updatePartial("set", index, item);
664
+ }
665
+ updatePartial(key, index, item, container) {
666
+ var _a, _b, _c, _d, _e, _f;
667
+ const items = this.items;
668
+ if (!items) {
669
+ return;
670
+ }
671
+ const ir = this.itemRenderer;
672
+ if (!ir) {
673
+ return;
674
+ }
675
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
676
+ let start = getFirstChild(container);
677
+ let ei;
678
+ while (start) {
679
+ ei = ~~start.dataset.itemIndex;
680
+ if (ei === index) {
681
+ break;
682
+ }
683
+ start = start.nextElementSibling;
684
+ }
685
+ if (key !== "add" && !start) {
686
+ return;
687
+ }
688
+ const vp = (_b = this.valuePath) !== null && _b !== void 0 ? _b : it => it;
689
+ const si = ((_c = this.selectedItems) !== null && _c !== void 0 ? _c : []).map(vp);
690
+ const isRemove = key === "remove";
691
+ if (isRemove || key === "set") {
692
+ const current = start;
693
+ start = start.nextElementSibling;
694
+ const ac = current.atomControl;
695
+ if (ac) {
696
+ ac.dispose();
697
+ } else {
698
+ this.unbind(current);
699
+ this.unbindEvent(current);
700
+ }
701
+ current.remove();
702
+ }
703
+ if (!isRemove) {
704
+ const en = ir(item, index, this);
705
+ const ea = (_d = en.attributes) !== null && _d !== void 0 ? _d : en.attributes = {};
706
+ const v = vp(item);
707
+ const e = document.createElement((_f = (_e = ea.for) !== null && _e !== void 0 ? _e : en.name) !== null && _f !== void 0 ? _f : "div");
708
+ e.dataset.itemIndex = (index++).toString();
709
+ e.dataset.selectedItem = si.indexOf(v) !== -1 ? "true" : "false";
710
+ if (this.enableDragDrop) {
711
+ updateDragDrop(e);
712
+ }
713
+ if (start) {
714
+ container.insertBefore(e, start);
715
+ } else {
716
+ container.appendChild(e);
717
+ }
718
+ this.render(en, e, this);
719
+ }
720
+ while (start) {
721
+ const ci = items[index];
722
+ const cv = vp(ci);
723
+ start.dataset.itemIndex = (index++).toString();
724
+ start.dataset.selectedItem = si.indexOf(cv) !== -1 ? "true" : "false";
725
+ start = start.nextElementSibling;
726
+ }
727
+ this.onPropertyChanged("footer");
728
+ }
729
+ updateItems(container, force) {
730
+ var _a, _b, _c, _d, _e, _f;
731
+ if (this.deferUpdates && !force) {
732
+ if (this.deferredUpdateId) {
733
+ return;
734
+ }
735
+ this.deferredUpdateId = setTimeout(() => {
736
+ this.deferredUpdateId = 0;
737
+ this.updateItems(container, true);
738
+ }, 1);
739
+ return;
740
+ }
741
+ container !== null && container !== void 0 ? container : container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
742
+ if (!container) {
743
+ return;
744
+ }
745
+ disposeChildren(this, container);
746
+ this.onPropertyChanged("header");
747
+ const ir = this.itemRenderer;
748
+ if (!ir) {
749
+ this.onPropertyChanged("footer");
750
+ return;
751
+ }
752
+ const items = this.items;
753
+ if (!items) {
754
+ this.onPropertyChanged("footer");
755
+ return;
756
+ }
757
+ const vp = (_b = this.valuePath) !== null && _b !== void 0 ? _b : it => it;
758
+ const si = ((_c = this.selectedItems) !== null && _c !== void 0 ? _c : []).map(vp);
759
+ let i = 0;
760
+ for (const iterator of items) {
761
+ const index = i++;
762
+ const e = ir(iterator, index, this);
763
+ const ea = (_d = e.attributes) !== null && _d !== void 0 ? _d : e.attributes = {};
764
+ const v = vp(iterator);
765
+ const element = document.createElement((_f = (_e = ea.for) !== null && _e !== void 0 ? _e : e.name) !== null && _f !== void 0 ? _f : "div");
766
+ element.dataset.itemIndex = index.toString();
767
+ element.dataset.selectedItem = si.indexOf(v) !== -1 ? "true" : "false";
768
+ this.render(e, element, this);
769
+ if (this.enableDragDrop) {
770
+ updateDragDrop(element);
771
+ }
772
+ container.appendChild(element);
773
+ }
774
+ this.onPropertyChanged("footer");
775
+ }
776
+ preCreate() {
777
+ this.element.setAttribute("data-click-event", "item-click");
778
+ }
779
+ dispatchCustomEvent(type, detail) {
780
+ var _a;
781
+ type = StringHelper.fromHyphenToCamel(type);
782
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent(type, {
783
+ detail,
784
+ bubbles: false,
785
+ cancelable: true
786
+ }));
787
+ }
788
+ updateClasses() {
789
+ var _a, _b, _c;
790
+ const container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
791
+ const items = this.items;
792
+ let element = getFirstChild(container);
793
+ const vp = (_b = this.valuePath) !== null && _b !== void 0 ? _b : i => i;
794
+ const si = ((_c = this.selectedItems) !== null && _c !== void 0 ? _c : []).map(vp);
795
+ while (element) {
796
+ const index = ~~element.dataset.itemIndex;
797
+ const item = items[index];
798
+ const v = vp(item);
799
+ element.dataset.selectedItem = si.indexOf(v) !== -1 ? "true" : "false";
800
+ element = element.nextElementSibling;
801
+ }
802
+ }
803
+ updateVisibility() {
804
+ var _a, _b;
805
+ const container = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.element;
806
+ const items = this.items;
807
+ let element = container.firstElementChild;
808
+ const vf = (_b = this.visibilityFilter) !== null && _b !== void 0 ? _b : MatchTrue;
809
+ while (element) {
810
+ const index = ~~element.dataset.itemIndex;
811
+ const item = items[index];
812
+ if (vf(item)) {
813
+ element.removeAttribute("data-ui-display");
814
+ } else {
815
+ element.dataset.uiDisplay = "none";
816
+ }
817
+ element = element.nextElementSibling;
818
+ }
819
+ }
820
+ updateHeaderFooter(name, presenter, item, itemRenderer, insert) {
821
+ var _a, _b, _c, _d;
822
+ presenter !== null && presenter !== void 0 ? presenter : presenter = (_a = this.itemsPresenter) !== null && _a !== void 0 ? _a : this.itemsPresenter = this.element;
823
+ if (!presenter) {
824
+ return;
825
+ }
826
+ let current;
827
+ if (insert) {
828
+ current = presenter.firstElementChild;
829
+ while (current && current.dataset[name] !== name) {
830
+ current = current.nextElementSibling;
831
+ }
832
+ } else {
833
+ current = presenter.lastElementChild;
834
+ while (current && current.dataset[name] !== name) {
835
+ current = current.previousElementSibling;
836
+ }
837
+ }
838
+ if (current) {
839
+ disposeChild(this, current);
840
+ }
841
+ if (!(item && itemRenderer)) {
842
+ return;
843
+ }
844
+ const node = itemRenderer(item);
845
+ const element = document.createElement((_d = (_c = (_b = node.attributes) === null || _b === void 0 ? void 0 : _b.for) !== null && _c !== void 0 ? _c : node.name) !== null && _d !== void 0 ? _d : "div");
846
+ element.dataset[name] = name;
847
+ this.render(node, element, this);
848
+ if (insert) {
849
+ presenter.insertBefore(element, presenter.firstElementChild);
850
+ } else {
851
+ presenter.appendChild(element);
852
+ }
853
+ }
854
+ dispatchHeaderFooterEvent(eventName, type, originalTarget) {
855
+ const detail = this[type];
856
+ const ce = new CustomEvent(eventName !== null && eventName !== void 0 ? eventName : `${type}Click`, {
857
+ detail,
858
+ bubbles: this.bubbleEvents,
859
+ cancelable: true
860
+ });
861
+ originalTarget.dispatchEvent(ce);
862
+ if (!ce.defaultPrevented) {
863
+ this.onPropertyChanged(type);
864
+ }
865
+ }
866
+ dispatchItemEvent(eventName, item, recreate, originalTarget, nestedItem) {
867
+ const ce = new CustomEvent(eventName !== null && eventName !== void 0 ? eventName : "itemClick", {
868
+ detail: nestedItem !== null && nestedItem !== void 0 ? nestedItem : item,
869
+ bubbles: this.bubbleEvents,
870
+ cancelable: true
871
+ });
872
+ originalTarget.dispatchEvent(ce);
873
+ if (recreate && ce.executed && !ce.defaultPrevented) {
874
+ this.refreshItem(item, ce.promise);
875
+ }
876
+ }
877
+ dispatchClickEvent(e, data) {
878
+ var _a;
879
+ let {
880
+ clickEvent = "itemClick",
881
+ recreate,
882
+ header,
883
+ footer,
884
+ itemIndex,
885
+ itemPath
886
+ } = data;
887
+ clickEvent = clickEvent.replace(/-([a-z])/g, g => g[1].toUpperCase());
888
+ if (header) {
889
+ this.dispatchHeaderFooterEvent(clickEvent, header, e.target);
890
+ return;
891
+ }
892
+ if (footer) {
893
+ this.dispatchHeaderFooterEvent(clickEvent, header, e.target);
894
+ return;
895
+ }
896
+ if (itemIndex === void 0 || itemIndex === null) {
897
+ return;
898
+ }
899
+ let index = ~~itemIndex;
900
+ const item = this.items[index];
901
+ if (clickEvent === "itemSelect" || clickEvent === "itemDeselect") {
902
+ const si = (_a = this.selectedItems) !== null && _a !== void 0 ? _a : this.selectedItems = [];
903
+ if (si) {
904
+ index = si.indexOf(item);
905
+ if (index === -1) {
906
+ if (this.allowMultipleSelection) {
907
+ si.add(item);
908
+ } else {
909
+ si.set(0, item);
910
+ }
911
+ } else {
912
+ si.removeAt(index);
913
+ }
914
+ }
915
+ }
916
+ if (item) {
917
+ if (itemPath) {
918
+ if (/^[\{\"}]/.test(itemPath)) {
919
+ this.dispatchItemEvent(clickEvent, item, recreate, e.target, JSON.parse(itemPath));
920
+ return;
921
+ }
922
+ let nestedItem = {};
923
+ const all = itemPath.split(",");
924
+ for (const iterator of all) {
925
+ let [name, paths] = iterator.split(/\=|\:/);
926
+ if (paths === void 0) {
927
+ if (all.length > 1) {
928
+ throw new Error("Invalid path, please use name=path format");
929
+ }
930
+ paths = name;
931
+ }
932
+ let start = item;
933
+ for (const path of paths.split(".")) {
934
+ if (path === "$") {
935
+ start = item;
936
+ continue;
937
+ }
938
+ start = start[path];
939
+ }
940
+ if (all.length === 1) {
941
+ nestedItem = start;
942
+ break;
943
+ }
944
+ nestedItem[name] = start;
945
+ }
946
+ this.dispatchItemEvent(clickEvent, item, recreate, e.target, nestedItem);
947
+ return;
948
+ }
949
+ this.dispatchItemEvent(clickEvent, item, recreate, e.target);
950
+ }
951
+ }
952
+ });
953
+ __decorate([BindableProperty, __metadata("design:type", Boolean)], AtomRepeater.prototype, "allowMultipleSelection", void 0);
954
+ __decorate([BindableProperty, __metadata("design:type", Array)], AtomRepeater.prototype, "selectedItems", void 0);
955
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "itemsPresenter", void 0);
956
+ __decorate([BindableProperty, __metadata("design:type", Array)], AtomRepeater.prototype, "items", void 0);
957
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "watch", void 0);
958
+ __decorate([BindableProperty, __metadata("design:type", Function)], AtomRepeater.prototype, "visibilityFilter", void 0);
959
+ __decorate([BindableProperty, __metadata("design:type", Function)], AtomRepeater.prototype, "enableFunc", void 0);
960
+ __decorate([BindableProperty, __metadata("design:type", Function)], AtomRepeater.prototype, "itemRenderer", void 0);
961
+ __decorate([BindableProperty, __metadata("design:type", Function)], AtomRepeater.prototype, "valuePath", void 0);
962
+ __decorate([BindableProperty, __metadata("design:type", Function)], AtomRepeater.prototype, "comparer", void 0);
963
+ __decorate([BindableProperty, __metadata("design:type", Boolean)], AtomRepeater.prototype, "deferUpdates", void 0);
964
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "header", void 0);
965
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "headerRenderer", void 0);
966
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "footer", void 0);
967
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "footerRenderer", void 0);
968
+ __decorate([BindableProperty, __metadata("design:type", Object)], AtomRepeater.prototype, "enableDragDrop", void 0);
969
+ __decorate([WatchProperty, __metadata("design:type", Object), __metadata("design:paramtypes", [])], AtomRepeater.prototype, "allSelected", null);
970
+ hoverItem = {
971
+ repeater: null,
972
+ target: null,
973
+ item: null,
974
+ placeholder: null
975
+ };
976
+ document.body.addEventListener("dragstart", e => {
977
+ const {
978
+ target
979
+ } = e;
980
+ if (target.draggable) {
981
+ const ri = getParentRepeaterItem(target);
982
+ if (!ri) {
983
+ return;
984
+ }
985
+ const [type, repeater, item, index] = ri;
986
+ if (!repeater || !repeater.enableDragDrop) {
987
+ return;
988
+ }
989
+ const placeholder = document.createElement("div");
990
+ placeholder.style.width = target.offsetWidth + "px";
991
+ placeholder.style.height = target.offsetHeight + "px";
992
+ placeholder.style.backgroundColor = Colors.lightGray.toString();
993
+ placeholder.style.border = "solid 1px gray";
994
+ placeholder.style.borderRadius = "10px";
995
+ hoverItem = {
996
+ repeater,
997
+ target,
998
+ item,
999
+ placeholder
1000
+ };
1001
+ e.dataTransfer.dropEffect = "move";
1002
+ setTimeout(() => {
1003
+ target.style.display = "none";
1004
+ target.parentElement.insertBefore(placeholder, target);
1005
+ }, 0);
1006
+ }
1007
+ });
1008
+ document.body.addEventListener("dragend", e => {
1009
+ var _a, _b;
1010
+ if (!(hoverItem === null || hoverItem === void 0 ? void 0 : hoverItem.placeholder)) {
1011
+ return;
1012
+ }
1013
+ const {
1014
+ item,
1015
+ placeholder,
1016
+ repeater
1017
+ } = hoverItem;
1018
+ let start = placeholder;
1019
+ let index = -1;
1020
+ while (start) {
1021
+ const itemIndex = (_b = (_a = start.previousElementSibling) === null || _a === void 0 ? void 0 : _a.dataset) === null || _b === void 0 ? void 0 : _b.itemIndex;
1022
+ if (itemIndex !== void 0) {
1023
+ index = ~~itemIndex;
1024
+ }
1025
+ if (start.parentElement.atomControl) {
1026
+ break;
1027
+ }
1028
+ start = start.parentElement;
1029
+ }
1030
+ const targetRepeater = start.parentElement.atomControl;
1031
+ placeholder.remove();
1032
+ hoverItem.placeholder = null;
1033
+ repeater.items.remove(item);
1034
+ index++;
1035
+ const ce = new CustomEvent("itemDropped", {
1036
+ detail: {
1037
+ item,
1038
+ index
1039
+ }
1040
+ });
1041
+ if (ce.defaultPrevented) {
1042
+ return;
1043
+ }
1044
+ const {
1045
+ detail
1046
+ } = ce;
1047
+ targetRepeater.items.insert(detail.index, detail.item);
1048
+ });
1049
+ dragOver = e => {
1050
+ if (hoverItem) {
1051
+ const {
1052
+ placeholder
1053
+ } = hoverItem;
1054
+ if (e.target === placeholder) {
1055
+ return;
1056
+ }
1057
+ }
1058
+ const ri = getParentRepeaterItem(e.target);
1059
+ if (!ri) {
1060
+ return;
1061
+ }
1062
+ const [type, repeater, item, index, target] = ri;
1063
+ if (!repeater) {
1064
+ return;
1065
+ }
1066
+ if (hoverItem) {
1067
+ const {
1068
+ placeholder
1069
+ } = hoverItem;
1070
+ e.preventDefault();
1071
+ const mp = {
1072
+ x: e.clientX,
1073
+ y: e.clientY
1074
+ };
1075
+ const isBefore = (co, n) => n.x <= co.x + co.width * 0.3 || n.y <= co.y + co.height * 0.3;
1076
+ const isAfter = (co, n) => n.x >= co.x + co.width * 0.7 || n.y >= co.y + co.height * 0.7;
1077
+ const targetBounds = target.getBoundingClientRect();
1078
+ if (isAfter(targetBounds, mp)) {
1079
+ const next = target.nextElementSibling;
1080
+ if (next === placeholder) {
1081
+ return;
1082
+ }
1083
+ placeholder.remove();
1084
+ target.insertAdjacentElement("afterend", placeholder);
1085
+ return;
1086
+ }
1087
+ if (isBefore(targetBounds, mp)) {
1088
+ const previous = target.previousElementSibling;
1089
+ if (previous === placeholder) {
1090
+ return;
1091
+ }
1092
+ placeholder.remove();
1093
+ target.insertAdjacentElement("beforebegin", placeholder);
1094
+ }
1095
+ return;
1096
+ }
1097
+ };
1098
+ document.body.addEventListener("dragover", dragOver);
1099
+ document.body.addEventListener("dragenter", dragOver);
1100
+ }
1101
+ };
1102
+ });
2
1103
  //# sourceMappingURL=AtomRepeater.js.map