my-common-zzp 0.0.1

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 (327) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/ag-grid/AgGridSubPageBase.mjs +138 -0
  3. package/esm2022/lib/ag-grid/AgGridSubPageBaseEx.mjs +274 -0
  4. package/esm2022/lib/ag-grid/DEFAULT_COL_DEF.mjs +109 -0
  5. package/esm2022/lib/ag-grid/FIX_COLDEFS.mjs +23 -0
  6. package/esm2022/lib/ag-grid/ag-gird-toolbar/component.mjs +110 -0
  7. package/esm2022/lib/ag-grid/index.mjs +49 -0
  8. package/esm2022/lib/component/_componentBase.mjs +104 -0
  9. package/esm2022/lib/component/_objectPageBase.mjs +14 -0
  10. package/esm2022/lib/component/_subPageBase.mjs +49 -0
  11. package/esm2022/lib/component/_subPageBaseEx.mjs +117 -0
  12. package/esm2022/lib/component/_viewStateServiceBase.mjs +212 -0
  13. package/esm2022/lib/component/_viewStateServiceBaseEx.mjs +173 -0
  14. package/esm2022/lib/component/_workListBase.mjs +68 -0
  15. package/esm2022/lib/component/fullScreenDot.mjs +134 -0
  16. package/esm2022/lib/component/index.mjs +11 -0
  17. package/esm2022/lib/component/object-headerBase.mjs +297 -0
  18. package/esm2022/lib/component/object-pageBase.mjs +135 -0
  19. package/esm2022/lib/component/viewStateService/GetDefaultObjectPageActions.mjs +21 -0
  20. package/esm2022/lib/component/viewStateService/ILayoutSetting.mjs +2 -0
  21. package/esm2022/lib/component/viewStateService/IObjectHeader.mjs +2 -0
  22. package/esm2022/lib/component/viewStateService/IObjectPage.mjs +2 -0
  23. package/esm2022/lib/component/viewStateService/IObjectPageLayoutSetting.mjs +2 -0
  24. package/esm2022/lib/component/viewStateService/IViewStateService.mjs +2 -0
  25. package/esm2022/lib/component/viewStateService/IWorkListLayoutSetting.mjs +2 -0
  26. package/esm2022/lib/component/work-listBase.mjs +220 -0
  27. package/esm2022/lib/formly-config/formlyModuleConfig.mjs +74 -0
  28. package/esm2022/lib/formly-config/index.mjs +8 -0
  29. package/esm2022/lib/formly-config/types/avatar/component.mjs +206 -0
  30. package/esm2022/lib/formly-config/types/avatar/cropImageModal/component.mjs +294 -0
  31. package/esm2022/lib/formly-config/types/avatar/cropImageModal/data.mjs +70 -0
  32. package/esm2022/lib/formly-config/types/avatar/cropImageModal/method.mjs +239 -0
  33. package/esm2022/lib/formly-config/types/buttonType.mjs +302 -0
  34. package/esm2022/lib/formly-config/types/checkbox.mjs +83 -0
  35. package/esm2022/lib/formly-config/types/date/date-range.mjs +152 -0
  36. package/esm2022/lib/formly-config/types/date/date.mjs +148 -0
  37. package/esm2022/lib/formly-config/types/date/method.mjs +53 -0
  38. package/esm2022/lib/formly-config/types/display-text.mjs +120 -0
  39. package/esm2022/lib/formly-config/types/input/Input-percent-number.mjs +128 -0
  40. package/esm2022/lib/formly-config/types/input/input-number.mjs +183 -0
  41. package/esm2022/lib/formly-config/types/input/input-text.mjs +83 -0
  42. package/esm2022/lib/formly-config/types/input/input-textarea.mjs +128 -0
  43. package/esm2022/lib/formly-config/types/pickup.mjs +186 -0
  44. package/esm2022/lib/formly-config/types/select/addNewModal.mjs +170 -0
  45. package/esm2022/lib/formly-config/types/select/checkbox-group.mjs +242 -0
  46. package/esm2022/lib/formly-config/types/select/radio-group.mjs +165 -0
  47. package/esm2022/lib/formly-config/types/select/select/component.mjs +211 -0
  48. package/esm2022/lib/formly-config/types/select/select-cascader.mjs +138 -0
  49. package/esm2022/lib/formly-config/types/select/select-multi-ex/component.mjs +321 -0
  50. package/esm2022/lib/formly-config/types/select/select-multi.mjs +204 -0
  51. package/esm2022/lib/formly-config/types/select/switch-group.mjs +251 -0
  52. package/esm2022/lib/formly-config/utils/DISPLAYFIELD.mjs +13 -0
  53. package/esm2022/lib/formly-config/utils/VALUEFIELD.mjs +9 -0
  54. package/esm2022/lib/formly-config/utils/createFormlyField.mjs +216 -0
  55. package/esm2022/lib/formly-config/utils/formlyField.mjs +18 -0
  56. package/esm2022/lib/formly-config/utils/formlyField.utils.mjs +97 -0
  57. package/esm2022/lib/formly-config/validators/index.mjs +164 -0
  58. package/esm2022/lib/formly-config/validators/regular.mjs +10 -0
  59. package/esm2022/lib/formly-config/wrappers/collapseWrapper.mjs +37 -0
  60. package/esm2022/lib/formly-config/wrappers/label-horizontal.mjs +52 -0
  61. package/esm2022/lib/formly-config/wrappers/label-vertical.mjs +234 -0
  62. package/esm2022/lib/formly-config/wrappers/navRepeatWrapper.mjs +199 -0
  63. package/esm2022/lib/formly-config/wrappers/repeatWrapper.mjs +71 -0
  64. package/esm2022/lib/formly-config/wrappers/sectionWrapper.mjs +55 -0
  65. package/esm2022/lib/formly-config/wrappers/separatorWrapper.mjs +21 -0
  66. package/esm2022/lib/grid-config/editor/date/date.mjs +159 -0
  67. package/esm2022/lib/grid-config/editor/input/input-number-type.mjs +67 -0
  68. package/esm2022/lib/grid-config/editor/input/input-text-type.mjs +67 -0
  69. package/esm2022/lib/grid-config/editor/pickup/ag-grid-pickup.mjs +170 -0
  70. package/esm2022/lib/grid-config/editor/select/select-type.mjs +115 -0
  71. package/esm2022/lib/grid-config/index.mjs +11 -0
  72. package/esm2022/lib/grid-config/renderer/action/component.mjs +161 -0
  73. package/esm2022/lib/grid-config/renderer/codeMap.mjs +44 -0
  74. package/esm2022/lib/grid-config/renderer/date.mjs +33 -0
  75. package/esm2022/lib/grid-config/renderer/number.mjs +37 -0
  76. package/esm2022/lib/grid-config/type.mjs +2 -0
  77. package/esm2022/lib/material.module.mjs +188 -0
  78. package/esm2022/lib/ngZorroAntd.module.mjs +301 -0
  79. package/esm2022/lib/service/GeneralServiceBase.mjs +10 -0
  80. package/esm2022/lib/service/GlobalStateService.mjs +30 -0
  81. package/esm2022/lib/service/UserSetting.mjs +31 -0
  82. package/esm2022/lib/service/_appInjector.mjs +22 -0
  83. package/esm2022/lib/service/_notificationService.mjs +29 -0
  84. package/esm2022/lib/service/_storeBase.mjs +581 -0
  85. package/esm2022/lib/service/application.mjs +135 -0
  86. package/esm2022/lib/service/index.mjs +12 -0
  87. package/esm2022/lib/service/inject.token.mjs +10 -0
  88. package/esm2022/lib/service/layoutService.mjs +282 -0
  89. package/esm2022/lib/service/model/Criteria.mjs +2 -0
  90. package/esm2022/lib/service/model/FieldFilterInfo.mjs +11 -0
  91. package/esm2022/lib/service/model/FilterGroup.mjs +117 -0
  92. package/esm2022/lib/service/model/Msg.mjs +3 -0
  93. package/esm2022/lib/service/model/PrepareFilter.mjs +61 -0
  94. package/esm2022/lib/service/model/createFilterGroups.mjs +24 -0
  95. package/esm2022/lib/service/model/dialogSetting.mjs +24 -0
  96. package/esm2022/lib/service/model/index.mjs +7 -0
  97. package/esm2022/lib/service/staticService.mjs +123 -0
  98. package/esm2022/lib/service/utils/CreateStoreService.mjs +12 -0
  99. package/esm2022/lib/service/utils/PrepareCriteria.mjs +60 -0
  100. package/esm2022/lib/service/utils/SyncEntities.mjs +58 -0
  101. package/esm2022/lib/service/utils/index.mjs +7 -0
  102. package/esm2022/lib/service/utils/isValidHttpUrl.mjs +10 -0
  103. package/esm2022/lib/service/utils/obj2Str.mjs +27 -0
  104. package/esm2022/lib/service/utils/str2Obj.mjs +25 -0
  105. package/esm2022/lib/uc/common/barItem.const.mjs +73 -0
  106. package/esm2022/lib/uc/common/barItem.mjs +3 -0
  107. package/esm2022/lib/uc/common/index.mjs +8 -0
  108. package/esm2022/lib/uc/common/node.mjs +2 -0
  109. package/esm2022/lib/uc/common/state-action.mjs +61 -0
  110. package/esm2022/lib/uc/common/tableColumn.utils.mjs +108 -0
  111. package/esm2022/lib/uc/common/tableColumnSetting.const.mjs +155 -0
  112. package/esm2022/lib/uc/common/tableColumnSetting.mjs +22 -0
  113. package/esm2022/lib/uc/index.mjs +22 -0
  114. package/esm2022/lib/uc/uc-date-range/component.mjs +256 -0
  115. package/esm2022/lib/uc/uc-dialog/ucNzModalContent.Component.mjs +110 -0
  116. package/esm2022/lib/uc/uc-fields/component.mjs +432 -0
  117. package/esm2022/lib/uc/uc-fields/data-model.mjs +11 -0
  118. package/esm2022/lib/uc/uc-fields/fieldsEdit.component.mjs +241 -0
  119. package/esm2022/lib/uc/uc-fields/fieldsReadonly.component.mjs +85 -0
  120. package/esm2022/lib/uc/uc-fields/uc-form.component.mjs +157 -0
  121. package/esm2022/lib/uc/uc-list-filter/uc-list-filterOption.mjs +37 -0
  122. package/esm2022/lib/uc/uc-list-nav/component.mjs +106 -0
  123. package/esm2022/lib/uc/uc-list-table/component.mjs +102 -0
  124. package/esm2022/lib/uc/uc-list-table/readExcel.mjs +99 -0
  125. package/esm2022/lib/uc/uc-list-table/table.component.mjs +473 -0
  126. package/esm2022/lib/uc/uc-list-tree/component.mjs +130 -0
  127. package/esm2022/lib/uc/uc-list-tree/readExcel.mjs +99 -0
  128. package/esm2022/lib/uc/uc-list-tree/table.component.mjs +650 -0
  129. package/esm2022/lib/uc/uc-list-tree/tableColumnSetting.mjs +145 -0
  130. package/esm2022/lib/uc/uc-nav-list/component.mjs +67 -0
  131. package/esm2022/lib/uc/uc-nav1/uc-nav1.component.mjs +196 -0
  132. package/esm2022/lib/uc/uc-perfect-scrollbar/component.mjs +112 -0
  133. package/esm2022/lib/uc/uc-pickup-window/colDefs.mjs +515 -0
  134. package/esm2022/lib/uc/uc-pickup-window/component.mjs +359 -0
  135. package/esm2022/lib/uc/uc-pickup-window/header.component.mjs +158 -0
  136. package/esm2022/lib/uc/uc-subheader/component.mjs +35 -0
  137. package/esm2022/lib/uc/uc-title-nav/animations.mjs +121 -0
  138. package/esm2022/lib/uc/uc-title-nav/component.mjs +289 -0
  139. package/esm2022/lib/uc/uc-toolbar/component.mjs +76 -0
  140. package/esm2022/lib/ucModel.mjs +469 -0
  141. package/esm2022/lib/utils/I18nService.mjs +37 -0
  142. package/esm2022/lib/utils/allowEdit.directive.mjs +20 -0
  143. package/esm2022/lib/utils/applyFilter.mjs +153 -0
  144. package/esm2022/lib/utils/canDeactivate.mjs +16 -0
  145. package/esm2022/lib/utils/confirmClick.directive.mjs +49 -0
  146. package/esm2022/lib/utils/datetimeUtils.mjs +31 -0
  147. package/esm2022/lib/utils/formatNumberT.mjs +36 -0
  148. package/esm2022/lib/utils/getColumnByLabel.mjs +15 -0
  149. package/esm2022/lib/utils/getDateAbbr.mjs +69 -0
  150. package/esm2022/lib/utils/getObjectPropertyValue.mjs +16 -0
  151. package/esm2022/lib/utils/getUniqueIdWithPrefix.mjs +17 -0
  152. package/esm2022/lib/utils/getValueChanges.mjs +85 -0
  153. package/esm2022/lib/utils/getViewPort.mjs +16 -0
  154. package/esm2022/lib/utils/index.mjs +58 -0
  155. package/esm2022/lib/utils/message-utils.mjs +108 -0
  156. package/esm2022/lib/utils/modal-utils.mjs +144 -0
  157. package/esm2022/lib/utils/ro.directive.mjs +44 -0
  158. package/esm2022/lib/utils/saveAsExcel.mjs +17 -0
  159. package/esm2022/lib/utils/time-elapsed.pipe.mjs +94 -0
  160. package/esm2022/my-common-zzp.mjs +5 -0
  161. package/esm2022/my-common.mjs +5 -0
  162. package/esm2022/public-api.mjs +11 -0
  163. package/fesm2022/my-common-zzp.mjs +16169 -0
  164. package/fesm2022/my-common-zzp.mjs.map +1 -0
  165. package/fesm2022/my-common.mjs +16169 -0
  166. package/fesm2022/my-common.mjs.map +1 -0
  167. package/index.d.ts +5 -0
  168. package/lib/ag-grid/AgGridSubPageBase.d.ts +53 -0
  169. package/lib/ag-grid/AgGridSubPageBaseEx.d.ts +69 -0
  170. package/lib/ag-grid/DEFAULT_COL_DEF.d.ts +2 -0
  171. package/lib/ag-grid/FIX_COLDEFS.d.ts +2 -0
  172. package/lib/ag-grid/ag-gird-toolbar/component.d.ts +33 -0
  173. package/lib/ag-grid/index.d.ts +9 -0
  174. package/lib/component/_componentBase.d.ts +73 -0
  175. package/lib/component/_objectPageBase.d.ts +16 -0
  176. package/lib/component/_subPageBase.d.ts +27 -0
  177. package/lib/component/_subPageBaseEx.d.ts +54 -0
  178. package/lib/component/_viewStateServiceBase.d.ts +128 -0
  179. package/lib/component/_viewStateServiceBaseEx.d.ts +123 -0
  180. package/lib/component/_workListBase.d.ts +24 -0
  181. package/lib/component/fullScreenDot.d.ts +26 -0
  182. package/lib/component/index.d.ts +10 -0
  183. package/lib/component/object-headerBase.d.ts +26 -0
  184. package/lib/component/object-pageBase.d.ts +30 -0
  185. package/lib/component/viewStateService/GetDefaultObjectPageActions.d.ts +4 -0
  186. package/lib/component/viewStateService/ILayoutSetting.d.ts +15 -0
  187. package/lib/component/viewStateService/IObjectHeader.d.ts +18 -0
  188. package/lib/component/viewStateService/IObjectPage.d.ts +15 -0
  189. package/lib/component/viewStateService/IObjectPageLayoutSetting.d.ts +39 -0
  190. package/lib/component/viewStateService/IViewStateService.d.ts +24 -0
  191. package/lib/component/viewStateService/IWorkListLayoutSetting.d.ts +20 -0
  192. package/lib/component/work-listBase.d.ts +38 -0
  193. package/lib/formly-config/formlyModuleConfig.d.ts +102 -0
  194. package/lib/formly-config/index.d.ts +6 -0
  195. package/lib/formly-config/types/avatar/component.d.ts +30 -0
  196. package/lib/formly-config/types/avatar/cropImageModal/component.d.ts +53 -0
  197. package/lib/formly-config/types/avatar/cropImageModal/data.d.ts +21 -0
  198. package/lib/formly-config/types/avatar/cropImageModal/method.d.ts +28 -0
  199. package/lib/formly-config/types/buttonType.d.ts +18 -0
  200. package/lib/formly-config/types/checkbox.d.ts +14 -0
  201. package/lib/formly-config/types/date/date-range.d.ts +18 -0
  202. package/lib/formly-config/types/date/date.d.ts +19 -0
  203. package/lib/formly-config/types/date/method.d.ts +3 -0
  204. package/lib/formly-config/types/display-text.d.ts +17 -0
  205. package/lib/formly-config/types/input/Input-percent-number.d.ts +19 -0
  206. package/lib/formly-config/types/input/input-number.d.ts +22 -0
  207. package/lib/formly-config/types/input/input-text.d.ts +13 -0
  208. package/lib/formly-config/types/input/input-textarea.d.ts +25 -0
  209. package/lib/formly-config/types/pickup.d.ts +46 -0
  210. package/lib/formly-config/types/select/addNewModal.d.ts +29 -0
  211. package/lib/formly-config/types/select/checkbox-group.d.ts +25 -0
  212. package/lib/formly-config/types/select/radio-group.d.ts +19 -0
  213. package/lib/formly-config/types/select/select/component.d.ts +40 -0
  214. package/lib/formly-config/types/select/select-cascader.d.ts +43 -0
  215. package/lib/formly-config/types/select/select-multi-ex/component.d.ts +44 -0
  216. package/lib/formly-config/types/select/select-multi.d.ts +25 -0
  217. package/lib/formly-config/types/select/switch-group.d.ts +31 -0
  218. package/lib/formly-config/utils/DISPLAYFIELD.d.ts +11 -0
  219. package/lib/formly-config/utils/VALUEFIELD.d.ts +7 -0
  220. package/lib/formly-config/utils/createFormlyField.d.ts +8 -0
  221. package/lib/formly-config/utils/formlyField.d.ts +53 -0
  222. package/lib/formly-config/utils/formlyField.utils.d.ts +43 -0
  223. package/lib/formly-config/validators/index.d.ts +72 -0
  224. package/lib/formly-config/validators/regular.d.ts +9 -0
  225. package/lib/formly-config/wrappers/collapseWrapper.d.ts +6 -0
  226. package/lib/formly-config/wrappers/label-horizontal.d.ts +7 -0
  227. package/lib/formly-config/wrappers/label-vertical.d.ts +25 -0
  228. package/lib/formly-config/wrappers/navRepeatWrapper.d.ts +18 -0
  229. package/lib/formly-config/wrappers/repeatWrapper.d.ts +7 -0
  230. package/lib/formly-config/wrappers/sectionWrapper.d.ts +6 -0
  231. package/lib/formly-config/wrappers/separatorWrapper.d.ts +6 -0
  232. package/lib/grid-config/editor/date/date.d.ts +37 -0
  233. package/lib/grid-config/editor/input/input-number-type.d.ts +18 -0
  234. package/lib/grid-config/editor/input/input-text-type.d.ts +15 -0
  235. package/lib/grid-config/editor/pickup/ag-grid-pickup.d.ts +47 -0
  236. package/lib/grid-config/editor/select/select-type.d.ts +25 -0
  237. package/lib/grid-config/index.d.ts +9 -0
  238. package/lib/grid-config/renderer/action/component.d.ts +28 -0
  239. package/lib/grid-config/renderer/codeMap.d.ts +15 -0
  240. package/lib/grid-config/renderer/date.d.ts +12 -0
  241. package/lib/grid-config/renderer/number.d.ts +12 -0
  242. package/lib/grid-config/type.d.ts +7 -0
  243. package/lib/material.module.d.ts +49 -0
  244. package/lib/ngZorroAntd.module.d.ts +78 -0
  245. package/lib/service/GeneralServiceBase.d.ts +14 -0
  246. package/lib/service/GlobalStateService.d.ts +16 -0
  247. package/lib/service/UserSetting.d.ts +16 -0
  248. package/lib/service/_appInjector.d.ts +14 -0
  249. package/lib/service/_notificationService.d.ts +13 -0
  250. package/lib/service/_storeBase.d.ts +232 -0
  251. package/lib/service/application.d.ts +61 -0
  252. package/lib/service/index.d.ts +11 -0
  253. package/lib/service/inject.token.d.ts +3 -0
  254. package/lib/service/layoutService.d.ts +61 -0
  255. package/lib/service/model/Criteria.d.ts +20 -0
  256. package/lib/service/model/FieldFilterInfo.d.ts +9 -0
  257. package/lib/service/model/FilterGroup.d.ts +43 -0
  258. package/lib/service/model/Msg.d.ts +5 -0
  259. package/lib/service/model/PrepareFilter.d.ts +11 -0
  260. package/lib/service/model/createFilterGroups.d.ts +17 -0
  261. package/lib/service/model/dialogSetting.d.ts +29 -0
  262. package/lib/service/model/index.d.ts +7 -0
  263. package/lib/service/staticService.d.ts +23 -0
  264. package/lib/service/utils/CreateStoreService.d.ts +7 -0
  265. package/lib/service/utils/PrepareCriteria.d.ts +22 -0
  266. package/lib/service/utils/SyncEntities.d.ts +1 -0
  267. package/lib/service/utils/index.d.ts +6 -0
  268. package/lib/service/utils/isValidHttpUrl.d.ts +1 -0
  269. package/lib/service/utils/obj2Str.d.ts +8 -0
  270. package/lib/service/utils/str2Obj.d.ts +7 -0
  271. package/lib/uc/common/barItem.const.d.ts +27 -0
  272. package/lib/uc/common/barItem.d.ts +14 -0
  273. package/lib/uc/common/index.d.ts +7 -0
  274. package/lib/uc/common/node.d.ts +6 -0
  275. package/lib/uc/common/state-action.d.ts +42 -0
  276. package/lib/uc/common/tableColumn.utils.d.ts +3 -0
  277. package/lib/uc/common/tableColumnSetting.const.d.ts +55 -0
  278. package/lib/uc/common/tableColumnSetting.d.ts +127 -0
  279. package/lib/uc/index.d.ts +21 -0
  280. package/lib/uc/uc-date-range/component.d.ts +34 -0
  281. package/lib/uc/uc-dialog/ucNzModalContent.Component.d.ts +19 -0
  282. package/lib/uc/uc-fields/component.d.ts +74 -0
  283. package/lib/uc/uc-fields/data-model.d.ts +61 -0
  284. package/lib/uc/uc-fields/fieldsEdit.component.d.ts +44 -0
  285. package/lib/uc/uc-fields/fieldsReadonly.component.d.ts +14 -0
  286. package/lib/uc/uc-fields/uc-form.component.d.ts +27 -0
  287. package/lib/uc/uc-list-filter/uc-list-filterOption.d.ts +11 -0
  288. package/lib/uc/uc-list-nav/component.d.ts +32 -0
  289. package/lib/uc/uc-list-table/component.d.ts +34 -0
  290. package/lib/uc/uc-list-table/readExcel.d.ts +21 -0
  291. package/lib/uc/uc-list-table/table.component.d.ts +95 -0
  292. package/lib/uc/uc-list-tree/component.d.ts +44 -0
  293. package/lib/uc/uc-list-tree/readExcel.d.ts +21 -0
  294. package/lib/uc/uc-list-tree/table.component.d.ts +124 -0
  295. package/lib/uc/uc-list-tree/tableColumnSetting.d.ts +113 -0
  296. package/lib/uc/uc-nav-list/component.d.ts +24 -0
  297. package/lib/uc/uc-nav1/uc-nav1.component.d.ts +28 -0
  298. package/lib/uc/uc-perfect-scrollbar/component.d.ts +26 -0
  299. package/lib/uc/uc-pickup-window/colDefs.d.ts +561 -0
  300. package/lib/uc/uc-pickup-window/component.d.ts +68 -0
  301. package/lib/uc/uc-pickup-window/header.component.d.ts +27 -0
  302. package/lib/uc/uc-subheader/component.d.ts +15 -0
  303. package/lib/uc/uc-title-nav/animations.d.ts +22 -0
  304. package/lib/uc/uc-title-nav/component.d.ts +32 -0
  305. package/lib/uc/uc-toolbar/component.d.ts +19 -0
  306. package/lib/ucModel.d.ts +84 -0
  307. package/lib/utils/I18nService.d.ts +14 -0
  308. package/lib/utils/allowEdit.directive.d.ts +10 -0
  309. package/lib/utils/applyFilter.d.ts +8 -0
  310. package/lib/utils/canDeactivate.d.ts +11 -0
  311. package/lib/utils/confirmClick.directive.d.ts +14 -0
  312. package/lib/utils/datetimeUtils.d.ts +10 -0
  313. package/lib/utils/formatNumberT.d.ts +8 -0
  314. package/lib/utils/getColumnByLabel.d.ts +8 -0
  315. package/lib/utils/getDateAbbr.d.ts +6 -0
  316. package/lib/utils/getObjectPropertyValue.d.ts +7 -0
  317. package/lib/utils/getUniqueIdWithPrefix.d.ts +7 -0
  318. package/lib/utils/getValueChanges.d.ts +15 -0
  319. package/lib/utils/getViewPort.d.ts +4 -0
  320. package/lib/utils/index.d.ts +22 -0
  321. package/lib/utils/message-utils.d.ts +33 -0
  322. package/lib/utils/modal-utils.d.ts +19 -0
  323. package/lib/utils/ro.directive.d.ts +12 -0
  324. package/lib/utils/saveAsExcel.d.ts +1 -0
  325. package/lib/utils/time-elapsed.pipe.d.ts +42 -0
  326. package/package.json +26 -0
  327. package/public-api.d.ts +10 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # MyCommon
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project my-common` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-common`.
8
+ > Note: Don't forget to add `--project my-common` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build my-common` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build my-common`, go to the dist folder `cd dist/my-common` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test my-common` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,138 @@
1
+ //#region
2
+ import { Directive, signal, ViewChild } from '@angular/core';
3
+ import _ from 'lodash';
4
+ import { ComponentBase, } from '../component';
5
+ import { DEFAULT_COL_DEF } from './DEFAULT_COL_DEF';
6
+ import { AgGridToolbarComponent } from './ag-gird-toolbar/component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../component";
9
+ //#endregion
10
+ /**
11
+ * 只读的 AG-GRID
12
+ */
13
+ export class AgGridSubPageBase extends ComponentBase {
14
+ constructor(vss = null) {
15
+ super();
16
+ this.vss = vss;
17
+ // 列表所有数据
18
+ this.dataRows = [];
19
+ //页面ID
20
+ this.pageId = '';
21
+ // toolbar 变量
22
+ this.allowShowCheckbox = true;
23
+ this.columnDefs = [];
24
+ this.gridOptions = {
25
+ //columnDefs: colDefs,
26
+ defaultColDef: DEFAULT_COL_DEF,
27
+ rowSelection: 'multiple',
28
+ onRowClicked: this.onRowClicked.bind(this),
29
+ onSelectionChanged: this.onSelectionChanged.bind(this),
30
+ };
31
+ // 加总列数据计算
32
+ this.pinnedBottomRowData = [];
33
+ //#region 行选择、取消选择 相关功能
34
+ this.selectedRowsCount = signal(0); // 微变量
35
+ this._previousMasterId = 0;
36
+ this._previousRowData = [];
37
+ }
38
+ onGridReady(params) {
39
+ this.gridApi = params.api;
40
+ this.gridApi.addEventListener('cellKeyDown', this.onCellKeyDown.bind(this));
41
+ }
42
+ // 用于即时验证、保存单元格数据以及更新依赖单元格的其他组件。
43
+ onCellEditingStopped(event) { }
44
+ // 行修改事件,用于批量处理数据、同步整个数据集、刷新统计数据等,粗粒度,处理整行或整个数据集的变化
45
+ onRowDataUpdated(event) {
46
+ // 获取所有的数据
47
+ const rowData = this.getAllGridData();
48
+ //console.log('onRowDataUpdated');
49
+ // 计算总计行
50
+ const totalRow = rowData.reduce((acc, row) => {
51
+ return {
52
+ name: 'Total',
53
+ description: acc.description + 1,
54
+ };
55
+ }, { name: 'Total', description: 0 });
56
+ this.pinnedBottomRowData = [totalRow];
57
+ // 更新旧数据状态
58
+ this._previousRowData = _.cloneDeep(rowData);
59
+ }
60
+ /**
61
+ * 通过 UI HOT-KEY 处理新增删除拖拽编辑数据
62
+ * 注册各种热键操作
63
+ * @param event
64
+ */
65
+ onCellKeyDown(event) { }
66
+ onRowClicked(event) {
67
+ // 单选情况下,点击选择,并取消之前的选择
68
+ if (!this.allowShowCheckbox) {
69
+ //console.log(event.node);
70
+ event.node.setSelected(true, true);
71
+ }
72
+ }
73
+ cancelSelected() {
74
+ // 取消选择所有行
75
+ this.gridApi.deselectAll();
76
+ //this.gridApi.getSelectedNodes().map((node) => node.setSelected(false));
77
+ }
78
+ onSelectionChanged(event) {
79
+ this.selectedRowsCount.update(() => this.gridApi.getSelectedNodes().length);
80
+ }
81
+ //#endregion
82
+ //sortByConfigs = [];
83
+ menuItemClick(params = undefined) {
84
+ // 排序相关操作
85
+ if ('sort' in params) {
86
+ // todo: 'code,name:desc' 字符串转成数组的模式
87
+ const sortCols = [].concat(params['sort']);
88
+ this.gridApi.applyColumnState({
89
+ state: sortCols,
90
+ applyOrder: false,
91
+ });
92
+ }
93
+ }
94
+ /**
95
+ * 读取所有数据
96
+ * @returns
97
+ */
98
+ getAllGridData() {
99
+ const rowData = [];
100
+ this.gridApi?.forEachNode((node) => rowData.push(node.data));
101
+ return rowData;
102
+ }
103
+ //#region 数据更新
104
+ agGridSetData(list) {
105
+ // id 不相同,则更新,
106
+ if (this._previousMasterId !== this.vss.masterModel.id) {
107
+ this.dataRows = list;
108
+ //this.gridApi.refreshCells(); //.setRowData(this.rowData); // 更新表格数据
109
+ this._previousMasterId = this.vss.masterModel.id;
110
+ this._previousRowData = _.cloneDeep(list);
111
+ }
112
+ // 如果相同,且已提交,则刷新
113
+ else if (this.dataStore.isDirty === false) {
114
+ this.dataRows = list;
115
+ //this.gridApi.redrawRows();
116
+ this._previousRowData = _.cloneDeep(list);
117
+ }
118
+ }
119
+ //#endregion
120
+ onAgGridToolbarClick(event) {
121
+ if (event.actionCode === 'CANCEL_SELECT') {
122
+ this.cancelSelected();
123
+ }
124
+ }
125
+ // 在组件销毁时移除全局点击事件监听器
126
+ ngOnDestroy() {
127
+ console.log('SubPageBaseExt Destroy...');
128
+ }
129
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AgGridSubPageBase, deps: [{ token: i1.ViewStateServiceBaseEx }], target: i0.ɵɵFactoryTarget.Directive }); }
130
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: AgGridSubPageBase, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["agGridToolbar"], descendants: true, read: AgGridToolbarComponent }], usesInheritance: true, ngImport: i0 }); }
131
+ }
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AgGridSubPageBase, decorators: [{
133
+ type: Directive
134
+ }], ctorParameters: () => [{ type: i1.ViewStateServiceBaseEx }], propDecorators: { toolbar: [{
135
+ type: ViewChild,
136
+ args: ['agGridToolbar', { read: AgGridToolbarComponent }]
137
+ }] } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdHcmlkU3ViUGFnZUJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teS1jb21tb24vc3JjL2xpYi9hZy1ncmlkL0FnR3JpZFN1YlBhZ2VCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRN0QsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE9BQU8sRUFDSCxhQUFhLEdBRWhCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBR3JFLFlBQVk7QUFFWjs7R0FFRztBQUVILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsYUFBYTtJQTZCekQsWUFBbUIsTUFBOEIsSUFBSTtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURPLFFBQUcsR0FBSCxHQUFHLENBQStCO1FBeEJyRCxTQUFTO1FBQ1QsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLE1BQU07UUFDTixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRVosYUFBYTtRQUNiLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQVFmLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRztZQUNwQixzQkFBc0I7WUFDdEIsYUFBYSxFQUFFLGVBQWU7WUFDOUIsWUFBWSxFQUFFLFVBQVU7WUFDeEIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN6RCxDQUFDO1FBaUJGLFVBQVU7UUFDVix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUE4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QUNkLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxnQkFBZ0I7YUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUdELFlBQVk7SUFFRixvQkFBb0IsQ0FBQyxLQUFLO1FBQ2hDLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsV0FBVztRQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzhHQXhKaUIsaUJBQWlCO2tHQUFqQixpQkFBaUIsK0dBZ0JDLHNCQUFzQjs7MkZBaEJ4QyxpQkFBaUI7a0JBRHRDLFNBQVM7MkZBa0JJLE9BQU87c0JBRGhCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgc2lnbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIENvbERlZixcclxuICAgIEdyaWRBcGksXHJcbiAgICBHcmlkUmVhZHlFdmVudCxcclxuICAgIFJvd0RhdGFVcGRhdGVkRXZlbnQsXHJcbiAgICBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudEJhc2UsXHJcbiAgICBWaWV3U3RhdGVTZXJ2aWNlQmFzZUV4LFxyXG59IGZyb20gJy4uL2NvbXBvbmVudCc7XHJcbmltcG9ydCB7IERFRkFVTFRfQ09MX0RFRiB9IGZyb20gJy4vREVGQVVMVF9DT0xfREVGJztcclxuaW1wb3J0IHsgQWdHcmlkVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vYWctZ2lyZC10b29sYmFyL2NvbXBvbmVudCc7XHJcbmltcG9ydCB7IElTdG9yZUJhc2UgfSBmcm9tICcuLi9zZXJ2aWNlJztcclxuXHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuLyoqXHJcbiAqIOWPquivu+eahCBBRy1HUklEXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFnR3JpZFN1YlBhZ2VCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7XHJcbiAgICAvLyDlvZPliY3ooYzmlbDmja5cclxuICAgIGN1cnJNb2RlbDtcclxuICAgIC8vIOWinuWIoOaUueacjeWKoVxyXG4gICAgZGF0YVN0b3JlOiBJU3RvcmVCYXNlO1xyXG4gICAgLy8g5YiX6KGo5omA5pyJ5pWw5o2uXHJcbiAgICBkYXRhUm93cyA9IFtdO1xyXG5cclxuICAgIC8v6aG16Z2iSURcclxuICAgIHBhZ2VJZCA9ICcnO1xyXG5cclxuICAgIC8vIHRvb2xiYXIg5Y+Y6YePXHJcbiAgICBhbGxvd1Nob3dDaGVja2JveCA9IHRydWU7XHJcbiAgICAvL2FsbG93U29ydGFibGUgPSBmYWxzZTtcclxuICAgIC8vYWxsb3dGaWx0ZXIgPSBmYWxzZTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhZ0dyaWRUb29sYmFyJywgeyByZWFkOiBBZ0dyaWRUb29sYmFyQ29tcG9uZW50IH0pXHJcbiAgICBwcm90ZWN0ZWQgdG9vbGJhciE6IEFnR3JpZFRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIGdyaWRBcGkhOiBHcmlkQXBpPGFueT47XHJcbiAgICBwcm90ZWN0ZWQgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCBncmlkT3B0aW9ucyA9IHtcclxuICAgICAgICAvL2NvbHVtbkRlZnM6IGNvbERlZnMsXHJcbiAgICAgICAgZGVmYXVsdENvbERlZjogREVGQVVMVF9DT0xfREVGLFxyXG4gICAgICAgIHJvd1NlbGVjdGlvbjogJ211bHRpcGxlJyxcclxuICAgICAgICBvblJvd0NsaWNrZWQ6IHRoaXMub25Sb3dDbGlja2VkLmJpbmQodGhpcyksXHJcbiAgICAgICAgb25TZWxlY3Rpb25DaGFuZ2VkOiB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRoaXMpLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdnNzOiBWaWV3U3RhdGVTZXJ2aWNlQmFzZUV4ID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgICAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAnY2VsbEtleURvd24nLFxyXG4gICAgICAgICAgICB0aGlzLm9uQ2VsbEtleURvd24uYmluZCh0aGlzKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g55So5LqO5Y2z5pe26aqM6K+B44CB5L+d5a2Y5Y2V5YWD5qC85pWw5o2u5Lul5Y+K5pu05paw5L6d6LWW5Y2V5YWD5qC855qE5YW25LuW57uE5Lu244CCXHJcbiAgICBwcm90ZWN0ZWQgb25DZWxsRWRpdGluZ1N0b3BwZWQoZXZlbnQpIHt9XHJcblxyXG4gICAgLy8g5Yqg5oC75YiX5pWw5o2u6K6h566XXHJcbiAgICBwaW5uZWRCb3R0b21Sb3dEYXRhID0gW107XHJcbiAgICAvLyDooYzkv67mlLnkuovku7bvvIznlKjkuo7mibnph4/lpITnkIbmlbDmja7jgIHlkIzmraXmlbTkuKrmlbDmja7pm4bjgIHliLfmlrDnu5/orqHmlbDmja7nrYks57KX57KS5bqm77yM5aSE55CG5pW06KGM5oiW5pW05Liq5pWw5o2u6ZuG55qE5Y+Y5YyWXHJcbiAgICBwcm90ZWN0ZWQgb25Sb3dEYXRhVXBkYXRlZChldmVudDogUm93RGF0YVVwZGF0ZWRFdmVudCkge1xyXG4gICAgICAgIC8vIOiOt+WPluaJgOacieeahOaVsOaNrlxyXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdldEFsbEdyaWREYXRhKCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29uUm93RGF0YVVwZGF0ZWQnKTtcclxuXHJcbiAgICAgICAgLy8g6K6h566X5oC76K6h6KGMXHJcbiAgICAgICAgY29uc3QgdG90YWxSb3cgPSByb3dEYXRhLnJlZHVjZShcclxuICAgICAgICAgICAgKGFjYywgcm93KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUb3RhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGFjYy5kZXNjcmlwdGlvbiArIDEsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdUb3RhbCcsIGRlc2NyaXB0aW9uOiAwIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGlubmVkQm90dG9tUm93RGF0YSA9IFt0b3RhbFJvd107XHJcblxyXG4gICAgICAgIC8vIOabtOaWsOaXp+aVsOaNrueKtuaAgVxyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzUm93RGF0YSA9IF8uY2xvbmVEZWVwKHJvd0RhdGEpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDpgJrov4cgVUkgSE9ULUtFWSDlpITnkIbmlrDlop7liKDpmaTmi5bmi73nvJbovpHmlbDmja5cclxuICAgICAqIOazqOWGjOWQhOenjeeDremUruaTjeS9nFxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkNlbGxLZXlEb3duKGV2ZW50OiBhbnkpIHt9XHJcblxyXG4gICAgLy8jcmVnaW9uIOihjOmAieaLqeOAgeWPlua2iOmAieaLqSDnm7jlhbPlip/og71cclxuXHJcbiAgICBzZWxlY3RlZFJvd3NDb3VudCA9IHNpZ25hbCgwKTsgLy8g5b6u5Y+Y6YePXHJcbiAgICBwcm90ZWN0ZWQgb25Sb3dDbGlja2VkKGV2ZW50KSB7XHJcbiAgICAgICAgLy8g5Y2V6YCJ5oOF5Ya15LiL77yM54K55Ye76YCJ5oupLOW5tuWPlua2iOS5i+WJjeeahOmAieaLqVxyXG4gICAgICAgIGlmICghdGhpcy5hbGxvd1Nob3dDaGVja2JveCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGV2ZW50Lm5vZGUpO1xyXG4gICAgICAgICAgICBldmVudC5ub2RlLnNldFNlbGVjdGVkKHRydWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjYW5jZWxTZWxlY3RlZCgpIHtcclxuICAgICAgICAvLyDlj5bmtojpgInmi6nmiYDmnInooYxcclxuICAgICAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgICAgICAvL3RoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLnNldFNlbGVjdGVkKGZhbHNlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uU2VsZWN0aW9uQ2hhbmdlZChldmVudDogU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDb3VudC51cGRhdGUoXHJcbiAgICAgICAgICAgICgpID0+IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCkubGVuZ3RoXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvL3NvcnRCeUNvbmZpZ3MgPSBbXTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgbWVudUl0ZW1DbGljayhwYXJhbXM6IGFueSA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIOaOkuW6j+ebuOWFs+aTjeS9nFxyXG4gICAgICAgIGlmICgnc29ydCcgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIC8vIHRvZG86ICdjb2RlLG5hbWU6ZGVzYycg5a2X56ym5Liy6L2s5oiQ5pWw57uE55qE5qih5byPXHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnRDb2xzID0gW10uY29uY2F0KHBhcmFtc1snc29ydCddKTtcclxuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IHNvcnRDb2xzLFxyXG4gICAgICAgICAgICAgICAgYXBwbHlPcmRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOivu+WPluaJgOacieaVsOaNrlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEFsbEdyaWREYXRhKCk6IGFueVtdIHtcclxuICAgICAgICBjb25zdCByb3dEYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaT8uZm9yRWFjaE5vZGUoKG5vZGUpID0+IHJvd0RhdGEucHVzaChub2RlLmRhdGEpKTtcclxuICAgICAgICByZXR1cm4gcm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNyZWdpb24g5pWw5o2u5pu05pawXHJcbiAgICBwcm90ZWN0ZWQgYWdHcmlkU2V0RGF0YShsaXN0KSB7XHJcbiAgICAgICAgLy8gaWQg5LiN55u45ZCM77yM5YiZ5pu05paw77yMXHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzTWFzdGVySWQgIT09IHRoaXMudnNzLm1hc3Rlck1vZGVsLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVJvd3MgPSBsaXN0O1xyXG4gICAgICAgICAgICAvL3RoaXMuZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoKTsgLy8uc2V0Um93RGF0YSh0aGlzLnJvd0RhdGEpOyAvLyDmm7TmlrDooajmoLzmlbDmja5cclxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNNYXN0ZXJJZCA9IHRoaXMudnNzLm1hc3Rlck1vZGVsLmlkO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1Jvd0RhdGEgPSBfLmNsb25lRGVlcChsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5aaC5p6c55u45ZCM77yM5LiU5bey5o+Q5Lqk77yM5YiZ5Yi35pawXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhU3RvcmUuaXNEaXJ0eSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhUm93cyA9IGxpc3Q7XHJcbiAgICAgICAgICAgIC8vdGhpcy5ncmlkQXBpLnJlZHJhd1Jvd3MoKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNSb3dEYXRhID0gXy5jbG9uZURlZXAobGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c01hc3RlcklkID0gMDtcclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNSb3dEYXRhID0gW107XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25BZ0dyaWRUb29sYmFyQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uQ29kZSA9PT0gJ0NBTkNFTF9TRUxFQ1QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsU2VsZWN0ZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Zyo57uE5Lu26ZSA5q+B5pe256e76Zmk5YWo5bGA54K55Ye75LqL5Lu255uR5ZCs5ZmoXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnU3ViUGFnZUJhc2VFeHQgRGVzdHJveS4uLicpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,274 @@
1
+ /***
2
+ * ag-grid 缺省功能: 增删改、拖拽
3
+ * 1、每个栏位都可以编辑,存档
4
+ * 2、tab 键到最后一行最后一列,自动新增一行
5
+ * 3、新增 + 按钮、在当前位置新增一行
6
+ * 4、快捷键 shift+insert, 当前行上方插入新行
7
+ * 5、快捷键 ctrl+d, 删除当前行
8
+ * 6、删除选择行
9
+ * 7、拖拽排序并存档(需要设定 lineCodeField) *
10
+ * 8、自定义编辑控件
11
+ * 9、自定义渲染控件
12
+ * 10、分组栏位第二行不显示
13
+ * 11、赠品、配件、主要标记
14
+ * 12、加总区域
15
+ *
16
+ * ag-grid toolbar
17
+ * 1、已选择行数、取消选择功能
18
+ * 2、取消编辑
19
+ * 3、多选开启或关闭
20
+ * 4、拖拽开启或关闭
21
+ * 5、新增
22
+ * 6、存档
23
+ */
24
+ //#region
25
+ import { Directive } from '@angular/core';
26
+ import { AgGridSubPageBase } from './AgGridSubPageBase';
27
+ import { calcFloatStepValue } from './index';
28
+ import { AppInjector, Application } from '../service';
29
+ import * as i0 from "@angular/core";
30
+ import * as i1 from "../component";
31
+ //#endregion
32
+ export class AgGridSubPageBaseEx extends AgGridSubPageBase {
33
+ constructor(vss) {
34
+ super(vss);
35
+ this.vss = vss;
36
+ this.App = AppInjector.get(Application);
37
+ //lineCode
38
+ this.lineCodeField = '';
39
+ }
40
+ onGridReady(params) {
41
+ this.gridApi = params.api;
42
+ this.gridApi.addEventListener('cellKeyDown', this.onCellKeyDown.bind(this));
43
+ }
44
+ /**
45
+ * 通过 UI HOT-KEY 处理新增删除拖拽编辑数据
46
+ * 注册各种热键操作
47
+ * @param event
48
+ */
49
+ onCellKeyDown(event) {
50
+ if (event.event.code === 'Tab' && this.isLastCell(event)) {
51
+ // 新增至末尾
52
+ event.event.preventDefault();
53
+ this.addNewRow();
54
+ }
55
+ else if (event.event.ctrlKey && event.event.key === 'Insert') {
56
+ // 当前位置新增
57
+ event.event.preventDefault();
58
+ this.addNewRow(event.node.rowIndex);
59
+ }
60
+ else if (event.event.ctrlKey && event.event.key === 'd') {
61
+ // 删除当前笔
62
+ event.event.preventDefault();
63
+ this.deleteSelectedRow(event.node);
64
+ }
65
+ }
66
+ cellClicked(e) {
67
+ this.currRowIndex = e.rowIndex;
68
+ this.currModel = e.data;
69
+ }
70
+ onCellValueChanged(event) { }
71
+ // 用于即时验证、保存单元格数据以及更新依赖单元格的其他组件。
72
+ onCellEditingStopped(event) {
73
+ //console.log(event);
74
+ if (event.valueChanged) {
75
+ //console.log(event);
76
+ if (!this.validateField()) {
77
+ this.App.notify('提示', '请在提交或取消编辑后执行此操作');
78
+ this.gridApi.startEditingCell({
79
+ rowIndex: event.rowIndex,
80
+ colKey: event.column.colId,
81
+ });
82
+ return;
83
+ }
84
+ const field = event.colDef.field;
85
+ // 需要更新,否则订阅流的相关方法不会执行
86
+ this.dataStore.update(event.data.id, {
87
+ [field]: event.value,
88
+ });
89
+ }
90
+ }
91
+ /**
92
+ * 指定位置新增,并设定焦点
93
+ * @param indexToAdd
94
+ */
95
+ addNewRow(indexToAdd = -1) {
96
+ this.currModel = this.addNew();
97
+ const params = {
98
+ add: [this.currModel],
99
+ };
100
+ // 在特定位置新增
101
+ indexToAdd > -1 && (params.addIndex = indexToAdd);
102
+ const transactionResult = this.gridApi.applyTransaction(params);
103
+ if (transactionResult.add) {
104
+ // 根据插入位置,设定row 对象序号
105
+ this.calcNewSeqValue(transactionResult.add[0], this.getAllGridData());
106
+ console.log(transactionResult.add[0]);
107
+ // 获取新添加行的最大索引
108
+ const maxIndex = Math.max(...transactionResult.add.map((rowNode) => rowNode.rowIndex));
109
+ // 设定焦点
110
+ this.gridApi.ensureIndexVisible(maxIndex);
111
+ this.gridApi.setFocusedCell(maxIndex, 'code');
112
+ }
113
+ this.dataStore.add(this.currModel);
114
+ }
115
+ /**
116
+ * 删除当前行 或者 选择行,并重新设置焦点
117
+ * @param node
118
+ */
119
+ deleteSelectedRow(node) {
120
+ const selectedNodes = node ? [node] : this.gridApi.getSelectedNodes();
121
+ const selectedData = selectedNodes.map((node) => node.data);
122
+ const lastRemovedRowIndex = selectedNodes[selectedNodes.length - 1].rowIndex;
123
+ const transactionResult = this.gridApi.applyTransaction({
124
+ remove: selectedData,
125
+ });
126
+ selectedData.forEach((row) => this.dataStore.remove(row));
127
+ // this.gridApi.refreshCells({ force: true });
128
+ // 设置焦点
129
+ if (transactionResult.remove.length > 0) {
130
+ let focusIndex;
131
+ if (lastRemovedRowIndex < this.gridApi.getDisplayedRowCount() - 1) {
132
+ focusIndex = lastRemovedRowIndex; // Focus on the next row
133
+ }
134
+ else {
135
+ focusIndex = lastRemovedRowIndex - 1; // Focus on the previous row
136
+ }
137
+ if (focusIndex >= 0) {
138
+ this.gridApi.ensureIndexVisible(focusIndex);
139
+ this.gridApi.setFocusedCell(focusIndex, 'code');
140
+ }
141
+ }
142
+ }
143
+ /**
144
+ * 拖拽后 设定行序号
145
+ * @param event
146
+ */
147
+ onRowDragEnd(event) {
148
+ if (!this.lineCodeField)
149
+ return;
150
+ const rowData = [];
151
+ event.api.forEachNode((node) => rowData.push(node.data));
152
+ // 计算拖拽后行的 seq 值
153
+ this.calcNewSeqValue(event.node, rowData);
154
+ //console.log(rowData);
155
+ // 更新到后台
156
+ this.dataStore.update(event.node.data.id, {
157
+ [this.lineCodeField]: event.node.data[this.lineCodeField],
158
+ });
159
+ }
160
+ onAgGridToolbarClick(event) {
161
+ super.onAgGridToolbarClick(event);
162
+ // 一般增、删改、操作
163
+ if (event.actionCode === 'ADD_NEWROW') {
164
+ this.addNewRow();
165
+ }
166
+ else if (event.actionCode === 'DELETE_SELECT') {
167
+ this.deleteSelectedRow();
168
+ }
169
+ else if (event.actionCode === 'CANCEL_EDIT') {
170
+ this.dataStore.cancel();
171
+ }
172
+ else if (event.actionCode === 'MENUITEM_CLICK') {
173
+ this.menuItemClick(event.params);
174
+ }
175
+ }
176
+ //sortByConfigs = [];
177
+ menuItemClick(params = undefined) {
178
+ // 排序相关操作
179
+ if ('sort' in params) {
180
+ // todo: 'code,name:desc' 字符串转成数组的模式
181
+ const sortCols = [].concat(params['sort']);
182
+ this.gridApi.applyColumnState({
183
+ state: sortCols,
184
+ applyOrder: false,
185
+ });
186
+ //此处的排序,是需要存档的,下次载入就是按照这个顺序。
187
+ const rowNodes = this.gridApi.getRenderedNodes();
188
+ const sortedData = rowNodes.map((rowNode) => rowNode.data);
189
+ this.calcNewSeqValue2(sortedData);
190
+ }
191
+ }
192
+ // 校验所有
193
+ validate() {
194
+ return true;
195
+ }
196
+ validateField() {
197
+ return true;
198
+ }
199
+ validateObject() {
200
+ return true;
201
+ }
202
+ validateList() {
203
+ return true;
204
+ }
205
+ /**
206
+ * 判断 cell 是否为 最右下
207
+ * @param event
208
+ * @returns
209
+ */
210
+ isLastCell(event) {
211
+ const displayedRowCount = this.gridApi.getDisplayedRowCount();
212
+ const lastRowIndex = displayedRowCount - 1;
213
+ // Get all visible columns
214
+ const allColumns = this.gridApi.getAllDisplayedColumns();
215
+ const lastColumnIndex = allColumns.length - 1;
216
+ const columnIndex = allColumns.indexOf(event.column);
217
+ return (event.rowIndex === lastRowIndex && columnIndex === lastColumnIndex);
218
+ }
219
+ /**
220
+ * node.seq = 前后笔之差,取最大步进,100,10,1,0.1
221
+ * @param node
222
+ * @param rows
223
+ * @returns
224
+ */
225
+ calcNewSeqValue(draggedNode, rows) {
226
+ if (!this.lineCodeField)
227
+ return;
228
+ const draggedIndex = draggedNode.rowIndex;
229
+ // 仅一笔
230
+ let newSeq = 1;
231
+ // 多笔的情况下,重新赋值
232
+ if (rows.length >= 2) {
233
+ // 如果拖拽到第一行
234
+ if (draggedIndex === 0) {
235
+ newSeq = parseFloat(rows[1][this.lineCodeField]);
236
+ newSeq = calcFloatStepValue(newSeq);
237
+ }
238
+ // 如果拖拽到最后一行
239
+ else if (draggedIndex === rows.length - 1) {
240
+ newSeq =
241
+ parseFloat(rows[rows.length - 2][this.lineCodeField]) + 1;
242
+ }
243
+ // 多行的中间
244
+ else if (rows.length >= 3) {
245
+ const prevSeq = parseFloat(rows[draggedIndex - 1][this.lineCodeField]);
246
+ const nextSeq = parseFloat(rows[draggedIndex + 1][this.lineCodeField]);
247
+ newSeq = prevSeq + calcFloatStepValue(nextSeq - prevSeq);
248
+ }
249
+ }
250
+ // 更新拖拽后行的 seq 值
251
+ draggedNode.data[this.lineCodeField] = newSeq;
252
+ }
253
+ /**
254
+ * node.seq = 重新排序,1,2,3...
255
+ * @param node
256
+ * @param rows
257
+ * @returns
258
+ */
259
+ calcNewSeqValue2(rows) {
260
+ if (this.lineCodeField)
261
+ rows.forEach((row, index) => {
262
+ row[this.lineCodeField] = index + 1; // 或者根据你的需求重新排序
263
+ this.dataStore.update(row.id, {
264
+ [this.lineCodeField]: row[this.lineCodeField],
265
+ });
266
+ });
267
+ }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AgGridSubPageBaseEx, deps: [{ token: i1.ViewStateServiceBaseEx }], target: i0.ɵɵFactoryTarget.Directive }); }
269
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: AgGridSubPageBaseEx, usesInheritance: true, ngImport: i0 }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AgGridSubPageBaseEx, decorators: [{
272
+ type: Directive
273
+ }], ctorParameters: () => [{ type: i1.ViewStateServiceBaseEx }] });
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdHcmlkU3ViUGFnZUJhc2VFeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215LWNvbW1vbi9zcmMvbGliL2FnLWdyaWQvQWdHcmlkU3ViUGFnZUJhc2VFeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVM7QUFDVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBR3RELFlBQVk7QUFHWixNQUFNLE9BQWdCLG1CQUFvQixTQUFRLGlCQUFpQjtJQUsvRCxZQUFtQixHQUEyQjtRQUMxQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFESSxRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUp2QyxRQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxVQUFVO1FBQ1Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7SUFJbkIsQ0FBQztJQUVTLFdBQVcsQ0FBQyxNQUFzQjtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDekIsYUFBYSxFQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUNEOzs7O09BSUc7SUFDTyxhQUFhLENBQUMsS0FBVTtRQUM5QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUss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LENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO2dCQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO29CQUMxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztpQkFDaEQsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQW5SaUIsbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqXHJcbiAqIGFnLWdyaWQg57y655yB5Yqf6IO9OiDlop7liKDmlLnjgIHmi5bmi71cclxuICogMeOAgeavj+S4quagj+S9jemDveWPr+S7pee8lui+ke+8jOWtmOaho1xyXG4gKiAy44CBdGFiIOmUruWIsOacgOWQjuS4gOihjOacgOWQjuS4gOWIl++8jOiHquWKqOaWsOWinuS4gOihjFxyXG4gKiAz44CB5paw5aKeICsg5oyJ6ZKu44CB5Zyo5b2T5YmN5L2N572u5paw5aKe5LiA6KGMXHJcbiAqIDTjgIHlv6vmjbfplK4gc2hpZnQraW5zZXJ0LCDlvZPliY3ooYzkuIrmlrnmj5LlhaXmlrDooYxcclxuICogNeOAgeW/q+aNt+mUriBjdHJsK2QsIOWIoOmZpOW9k+WJjeihjFxyXG4gKiA244CB5Yig6Zmk6YCJ5oup6KGMXHJcbiAqIDfjgIHmi5bmi73mjpLluo/lubblrZjmoaMo6ZyA6KaB6K6+5a6aIGxpbmVDb2RlRmllbGQpICpcclxuICogOOOAgeiHquWumuS5iee8lui+keaOp+S7tlxyXG4gKiA544CB6Ieq5a6a5LmJ5riy5p+T5o6n5Lu2XHJcbiAqIDEw44CB5YiG57uE5qCP5L2N56ys5LqM6KGM5LiN5pi+56S6XHJcbiAqIDEx44CB6LWg5ZOB44CB6YWN5Lu244CB5Li76KaB5qCH6K6wXHJcbiAqIDEy44CB5Yqg5oC75Yy65Z+fXHJcbiAqXHJcbiAqIGFnLWdyaWQgdG9vbGJhclxyXG4gKiAx44CB5bey6YCJ5oup6KGM5pWw44CB5Y+W5raI6YCJ5oup5Yqf6IO9XHJcbiAqIDLjgIHlj5bmtojnvJbovpFcclxuICogM+OAgeWkmumAieW8gOWQr+aIluWFs+mXrVxyXG4gKiA044CB5ouW5ou95byA5ZCv5oiW5YWz6ZetXHJcbiAqIDXjgIHmlrDlop5cclxuICogNuOAgeWtmOaho1xyXG4gKi9cclxuLy8jcmVnaW9uXHJcbmltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgQWdHcmlkU3ViUGFnZUJhc2UgfSBmcm9tICcuL0FnR3JpZFN1YlBhZ2VCYXNlJztcclxuaW1wb3J0IHsgY2FsY0Zsb2F0U3RlcFZhbHVlIH0gZnJvbSAnLi9pbmRleCc7XHJcbmltcG9ydCB7IEFwcEluamVjdG9yLCBBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3U3RhdGVTZXJ2aWNlQmFzZUV4IH0gZnJvbSAnLi4vY29tcG9uZW50JztcclxuXHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZ0dyaWRTdWJQYWdlQmFzZUV4IGV4dGVuZHMgQWdHcmlkU3ViUGFnZUJhc2Uge1xyXG4gICAgcHVibGljIEFwcCA9IEFwcEluamVjdG9yLmdldChBcHBsaWNhdGlvbik7XHJcbiAgICAvL2xpbmVDb2RlXHJcbiAgICBsaW5lQ29kZUZpZWxkID0gJyc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHZzczogVmlld1N0YXRlU2VydmljZUJhc2VFeCkge1xyXG4gICAgICAgIHN1cGVyKHZzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgICAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAnY2VsbEtleURvd24nLFxyXG4gICAgICAgICAgICB0aGlzLm9uQ2VsbEtleURvd24uYmluZCh0aGlzKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOmAmui/hyBVSSBIT1QtS0VZIOWkhOeQhuaWsOWinuWIoOmZpOaLluaLvee8lui+keaVsOaNrlxyXG4gICAgICog5rOo5YaM5ZCE56eN54Ot6ZSu5pON5L2cXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uQ2VsbEtleURvd24oZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChldmVudC5ldmVudC5jb2RlID09PSAnVGFiJyAmJiB0aGlzLmlzTGFzdENlbGwoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIC8vIOaWsOWinuiHs+acq+WwvlxyXG4gICAgICAgICAgICBldmVudC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5ld1JvdygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZXZlbnQuY3RybEtleSAmJiBldmVudC5ldmVudC5rZXkgPT09ICdJbnNlcnQnKSB7XHJcbiAgICAgICAgICAgIC8vIOW9k+WJjeS9jee9ruaWsOWinlxyXG4gICAgICAgICAgICBldmVudC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5ld1JvdyhldmVudC5ub2RlLnJvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuZXZlbnQua2V5ID09PSAnZCcpIHtcclxuICAgICAgICAgICAgLy8g5Yig6Zmk5b2T5YmN56yUXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWRSb3coZXZlbnQubm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gKGNlbGxDbGlja2VkKT1cImNlbGxDbGlja2VkKCRldmVudClcIlxyXG4gICAgLy8gKGNlbGxWYWx1ZUNoYW5nZWQpPVwib25DZWxsVmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG5cclxuICAgIGN1cnJSb3dJbmRleDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2VsbENsaWNrZWQoZSkge1xyXG4gICAgICAgIHRoaXMuY3VyclJvd0luZGV4ID0gZS5yb3dJbmRleDtcclxuICAgICAgICB0aGlzLmN1cnJNb2RlbCA9IGUuZGF0YTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNlbGxWYWx1ZUNoYW5nZWQoZXZlbnQpIHt9XHJcbiAgICAvLyDnlKjkuo7ljbPml7bpqozor4HjgIHkv53lrZjljZXlhYPmoLzmlbDmja7ku6Xlj4rmm7TmlrDkvp3otZbljZXlhYPmoLznmoTlhbbku5bnu4Tku7bjgIJcclxuICAgIHByb3RlY3RlZCBvbkNlbGxFZGl0aW5nU3RvcHBlZChldmVudCkge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICAgIGlmIChldmVudC52YWx1ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUZpZWxkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuQXBwLm5vdGlmeSgn5o+Q56S6JywgJ+ivt+WcqOaPkOS6pOaIluWPlua2iOe8lui+keWQjuaJp+ihjOatpOaTjeS9nCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnN0YXJ0RWRpdGluZ0NlbGwoe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiBldmVudC5yb3dJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICBjb2xLZXk6IGV2ZW50LmNvbHVtbi5jb2xJZCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZXZlbnQuY29sRGVmLmZpZWxkO1xyXG4gICAgICAgICAgICAvLyDpnIDopoHmm7TmlrDvvIzlkKbliJnorqLpmIXmtYHnmoTnm7jlhbPmlrnms5XkuI3kvJrmiafooYxcclxuICAgICAgICAgICAgdGhpcy5kYXRhU3RvcmUudXBkYXRlKGV2ZW50LmRhdGEuaWQsIHtcclxuICAgICAgICAgICAgICAgIFtmaWVsZF06IGV2ZW50LnZhbHVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOe7p+aJv+exu+W/hemhu+iHquWumuS5ieaWsOWinmRlZmF1bHTlrZfmrrVcclxuICAgICAqL1xyXG4gICAgYWJzdHJhY3QgYWRkTmV3KCk6IG9iamVjdDtcclxuICAgIC8qKlxyXG4gICAgICog5oyH5a6a5L2N572u5paw5aKe77yM5bm26K6+5a6a54Sm54K5XHJcbiAgICAgKiBAcGFyYW0gaW5kZXhUb0FkZFxyXG4gICAgICovXHJcbiAgICBhZGROZXdSb3coaW5kZXhUb0FkZCA9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyTW9kZWwgPSB0aGlzLmFkZE5ldygpO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcclxuICAgICAgICAgICAgYWRkOiBbdGhpcy5jdXJyTW9kZWxdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8g5Zyo54m55a6a5L2N572u5paw5aKeXHJcbiAgICAgICAgaW5kZXhUb0FkZCA+IC0xICYmIChwYXJhbXMuYWRkSW5kZXggPSBpbmRleFRvQWRkKTtcclxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvblJlc3VsdCA9IHRoaXMuZ3JpZEFwaS5hcHBseVRyYW5zYWN0aW9uKHBhcmFtcyk7XHJcblxyXG4gICAgICAgIGlmICh0cmFuc2FjdGlvblJlc3VsdC5hZGQpIHtcclxuICAgICAgICAgICAgLy8g5qC55o2u5o+S5YWl5L2N572u77yM6K6+5a6acm93IOWvueixoeW6j+WPt1xyXG4gICAgICAgICAgICB0aGlzLmNhbGNOZXdTZXFWYWx1ZShcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVzdWx0LmFkZFswXSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsR3JpZERhdGEoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0cmFuc2FjdGlvblJlc3VsdC5hZGRbMF0pO1xyXG4gICAgICAgICAgICAvLyDojrflj5bmlrDmt7vliqDooYznmoTmnIDlpKfntKLlvJVcclxuICAgICAgICAgICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heChcclxuICAgICAgICAgICAgICAgIC4uLnRyYW5zYWN0aW9uUmVzdWx0LmFkZC5tYXAoKHJvd05vZGUpID0+IHJvd05vZGUucm93SW5kZXgpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyDorr7lrprnhKbngrlcclxuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLmVuc3VyZUluZGV4VmlzaWJsZShtYXhJbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRGb2N1c2VkQ2VsbChtYXhJbmRleCwgJ2NvZGUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVN0b3JlLmFkZCh0aGlzLmN1cnJNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaTlvZPliY3ooYwg5oiW6ICFIOmAieaLqeihjO+8jOW5tumHjeaWsOiuvue9rueEpueCuVxyXG4gICAgICogQHBhcmFtIG5vZGVcclxuICAgICAqL1xyXG4gICAgZGVsZXRlU2VsZWN0ZWRSb3cobm9kZT86IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBub2RlID8gW25vZGVdIDogdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBzZWxlY3RlZE5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcclxuICAgICAgICBjb25zdCBsYXN0UmVtb3ZlZFJvd0luZGV4ID1cclxuICAgICAgICAgICAgc2VsZWN0ZWROb2Rlc1tzZWxlY3RlZE5vZGVzLmxlbmd0aCAtIDFdLnJvd0luZGV4O1xyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVzdWx0ID0gdGhpcy5ncmlkQXBpLmFwcGx5VHJhbnNhY3Rpb24oe1xyXG4gICAgICAgICAgICByZW1vdmU6IHNlbGVjdGVkRGF0YSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZERhdGEuZm9yRWFjaCgocm93KSA9PiB0aGlzLmRhdGFTdG9yZS5yZW1vdmUocm93KSk7XHJcbiAgICAgICAgLy8gdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICAvLyDorr7nva7nhKbngrlcclxuICAgICAgICBpZiAodHJhbnNhY3Rpb25SZXN1bHQucmVtb3ZlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGZvY3VzSW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChsYXN0UmVtb3ZlZFJvd0luZGV4IDwgdGhpcy5ncmlkQXBpLmdldERpc3BsYXllZFJvd0NvdW50KCkgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0luZGV4ID0gbGFzdFJlbW92ZWRSb3dJbmRleDsgLy8gRm9jdXMgb24gdGhlIG5leHQgcm93XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0luZGV4ID0gbGFzdFJlbW92ZWRSb3dJbmRleCAtIDE7IC8vIEZvY3VzIG9uIHRoZSBwcmV2aW91cyByb3dcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZvY3VzSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLmVuc3VyZUluZGV4VmlzaWJsZShmb2N1c0luZGV4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRGb2N1c2VkQ2VsbChmb2N1c0luZGV4LCAnY29kZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5ouW5ou95ZCOIOiuvuWumuihjOW6j+WPt1xyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblJvd0RyYWdFbmQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5saW5lQ29kZUZpZWxkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IFtdO1xyXG4gICAgICAgIGV2ZW50LmFwaS5mb3JFYWNoTm9kZSgobm9kZTogYW55KSA9PiByb3dEYXRhLnB1c2gobm9kZS5kYXRhKSk7XHJcblxyXG4gICAgICAgIC8vIOiuoeeul+aLluaLveWQjuihjOeahCBzZXEg5YC8XHJcbiAgICAgICAgdGhpcy5jYWxjTmV3U2VxVmFsdWUoZXZlbnQubm9kZSwgcm93RGF0YSk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhyb3dEYXRhKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5Yiw5ZCO5Y+wXHJcbiAgICAgICAgdGhpcy5kYXRhU3RvcmUudXBkYXRlKGV2ZW50Lm5vZGUuZGF0YS5pZCwge1xyXG4gICAgICAgICAgICBbdGhpcy5saW5lQ29kZUZpZWxkXTogZXZlbnQubm9kZS5kYXRhW3RoaXMubGluZUNvZGVGaWVsZF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uQWdHcmlkVG9vbGJhckNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgc3VwZXIub25BZ0dyaWRUb29sYmFyQ2xpY2soZXZlbnQpO1xyXG4gICAgICAgIC8vIOS4gOiIrOWinuOAgeWIoOaUueOAgeaTjeS9nFxyXG4gICAgICAgIGlmIChldmVudC5hY3Rpb25Db2RlID09PSAnQUREX05FV1JPVycpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGROZXdSb3coKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmFjdGlvbkNvZGUgPT09ICdERUxFVEVfU0VMRUNUJykge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkUm93KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5hY3Rpb25Db2RlID09PSAnQ0FOQ0VMX0VESVQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVN0b3JlLmNhbmNlbCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuYWN0aW9uQ29kZSA9PT0gJ01FTlVJVEVNX0NMSUNLJykge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2xpY2soZXZlbnQucGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL3NvcnRCeUNvbmZpZ3MgPSBbXTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgbWVudUl0ZW1DbGljayhwYXJhbXM6IGFueSA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIOaOkuW6j+ebuOWFs+aTjeS9nFxyXG4gICAgICAgIGlmICgnc29ydCcgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIC8vIHRvZG86ICdjb2RlLG5hbWU6ZGVzYycg5a2X56ym5Liy6L2s5oiQ5pWw57uE55qE5qih5byPXHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnRDb2xzID0gW10uY29uY2F0KHBhcmFtc1snc29ydCddKTtcclxuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IHNvcnRDb2xzLFxyXG4gICAgICAgICAgICAgICAgYXBwbHlPcmRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy/mraTlpITnmoTmjpLluo/vvIzmmK/pnIDopoHlrZjmoaPnmoTvvIzkuIvmrKHovb3lhaXlsLHmmK/mjInnhafov5nkuKrpobrluo/jgIJcclxuICAgICAgICAgICAgY29uc3Qgcm93Tm9kZXMgPSB0aGlzLmdyaWRBcGkuZ2V0UmVuZGVyZWROb2RlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gcm93Tm9kZXMubWFwKChyb3dOb2RlKSA9PiByb3dOb2RlLmRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGNOZXdTZXFWYWx1ZTIoc29ydGVkRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOagoemqjOaJgOaciVxyXG4gICAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZUZpZWxkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGVPYmplY3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZUxpc3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKTmlq0gY2VsbCDmmK/lkKbkuLog5pyA5Y+z5LiLXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBpc0xhc3RDZWxsKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBkaXNwbGF5ZWRSb3dDb3VudCA9IHRoaXMuZ3JpZEFwaS5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RSb3dJbmRleCA9IGRpc3BsYXllZFJvd0NvdW50IC0gMTtcclxuXHJcbiAgICAgICAgLy8gR2V0IGFsbCB2aXNpYmxlIGNvbHVtbnNcclxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5ncmlkQXBpLmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcclxuICAgICAgICBjb25zdCBsYXN0Q29sdW1uSW5kZXggPSBhbGxDb2x1bW5zLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gYWxsQ29sdW1ucy5pbmRleE9mKGV2ZW50LmNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZXZlbnQucm93SW5kZXggPT09IGxhc3RSb3dJbmRleCAmJiBjb2x1bW5JbmRleCA9PT0gbGFzdENvbHVtbkluZGV4XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIG5vZGUuc2VxID0g5YmN5ZCO56yU5LmL5beu77yM5Y+W5pyA5aSn5q2l6L+b77yMMTAw77yMMTDvvIwx77yMMC4xXHJcbiAgICAgKiBAcGFyYW0gbm9kZVxyXG4gICAgICogQHBhcmFtIHJvd3NcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjYWxjTmV3U2VxVmFsdWUoZHJhZ2dlZE5vZGUsIHJvd3MpIHtcclxuICAgICAgICBpZiAoIXRoaXMubGluZUNvZGVGaWVsZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBkcmFnZ2VkSW5kZXggPSBkcmFnZ2VkTm9kZS5yb3dJbmRleDtcclxuXHJcbiAgICAgICAgLy8g5LuF5LiA56yUXHJcbiAgICAgICAgbGV0IG5ld1NlcSA9IDE7XHJcblxyXG4gICAgICAgIC8vIOWkmueslOeahOaDheWGteS4i++8jOmHjeaWsOi1i+WAvFxyXG4gICAgICAgIGlmIChyb3dzLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgIC8vIOWmguaenOaLluaLveWIsOesrOS4gOihjFxyXG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdTZXEgPSBwYXJzZUZsb2F0KHJvd3NbMV1bdGhpcy5saW5lQ29kZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICBuZXdTZXEgPSBjYWxjRmxvYXRTdGVwVmFsdWUobmV3U2VxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyDlpoLmnpzmi5bmi73liLDmnIDlkI7kuIDooYxcclxuICAgICAgICAgICAgZWxzZSBpZiAoZHJhZ2dlZEluZGV4ID09PSByb3dzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIG5ld1NlcSA9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChyb3dzW3Jvd3MubGVuZ3RoIC0gMl1bdGhpcy5saW5lQ29kZUZpZWxkXSkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOWkmuihjOeahOS4remXtFxyXG4gICAgICAgICAgICBlbHNlIGlmIChyb3dzLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U2VxID0gcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgICAgICAgICByb3dzW2RyYWdnZWRJbmRleCAtIDFdW3RoaXMubGluZUNvZGVGaWVsZF1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0U2VxID0gcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgICAgICAgICByb3dzW2RyYWdnZWRJbmRleCArIDFdW3RoaXMubGluZUNvZGVGaWVsZF1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBuZXdTZXEgPSBwcmV2U2VxICsgY2FsY0Zsb2F0U3RlcFZhbHVlKG5leHRTZXEgLSBwcmV2U2VxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5pu05paw5ouW5ou95ZCO6KGM55qEIHNlcSDlgLxcclxuICAgICAgICBkcmFnZ2VkTm9kZS5kYXRhW3RoaXMubGluZUNvZGVGaWVsZF0gPSBuZXdTZXE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBub2RlLnNlcSA9IOmHjeaWsOaOkuW6j++8jDHvvIwy77yMMy4uLlxyXG4gICAgICogQHBhcmFtIG5vZGVcclxuICAgICAqIEBwYXJhbSByb3dzXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FsY05ld1NlcVZhbHVlMihyb3dzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGluZUNvZGVGaWVsZClcclxuICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByb3dbdGhpcy5saW5lQ29kZUZpZWxkXSA9IGluZGV4ICsgMTsgLy8g5oiW6ICF5qC55o2u5L2g55qE6ZyA5rGC6YeN5paw5o6S5bqPXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTdG9yZS51cGRhdGUocm93LmlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMubGluZUNvZGVGaWVsZF06IHJvd1t0aGlzLmxpbmVDb2RlRmllbGRdLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,109 @@
1
+ // 每一列的缺省属性
2
+ export const DEFAULT_COL_DEF = {
3
+ resizable: true,
4
+ editable: true,
5
+ suppressHeaderMenuButton: true,
6
+ suppressHeaderFilterButton: true,
7
+ sortable: true,
8
+ filter: true,
9
+ // UTF-7 排序
10
+ comparator: (a, b) => {
11
+ if (!a && !b)
12
+ return 0;
13
+ if (!a && b)
14
+ return -1;
15
+ if (a && !b)
16
+ return 1;
17
+ // 中文打头 用中文排序规则 todo: 区分 简体繁体日文韩文
18
+ const chineseCharRegex = /^[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/;
19
+ const zhHansCNa = chineseCharRegex.test(a);
20
+ const zhHansCNb = chineseCharRegex.test(b);
21
+ if (!zhHansCNa && zhHansCNb) {
22
+ return -1; // 字母排在汉字前面
23
+ }
24
+ if (zhHansCNa && !zhHansCNb) {
25
+ return 1; // 汉字排在字母后面
26
+ }
27
+ // 如果都是字母或都是汉字,按拼音排序
28
+ if (zhHansCNa && zhHansCNb) {
29
+ return a.localeCompare(b, 'zh-Hans-CN', {
30
+ sensitivity: 'base',
31
+ numeric: true,
32
+ ignorePunctuation: true,
33
+ caseFirst: 'upper',
34
+ });
35
+ }
36
+ return a.localeCompare(b);
37
+ // 仅中文,
38
+ const chineseCharRegex2 = /[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/;
39
+ const isALetter = !chineseCharRegex2.test(a);
40
+ const isBLetter = !chineseCharRegex2.test(b);
41
+ if (isALetter && isBLetter)
42
+ return a.localeCompare(b);
43
+ },
44
+ };
45
+ function compareStrings(a, b) {
46
+ if (!a && !b)
47
+ return 0;
48
+ if (!a && b)
49
+ return -1;
50
+ if (a && !b)
51
+ return 1;
52
+ // 判断语言类型
53
+ const getLanguage = (str) => {
54
+ if (/^[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/.test(str)) {
55
+ // 判断是简体中文还是繁体中文
56
+ if (/^[\u4E00-\u9FFF]/.test(str))
57
+ return 'zh-Hans-CN'; // 简体中文
58
+ return 'zh-Hant-TW'; // 繁体中文
59
+ }
60
+ if (/^[\u3040-\u309F\u30A0-\u30FF]/.test(str))
61
+ return 'ja'; // 日文
62
+ if (/^[\u00C0-\u1EF9]/.test(str))
63
+ return 'vi'; // 越南文
64
+ return 'en'; // 英文或其他
65
+ };
66
+ const langA = getLanguage(a);
67
+ const langB = getLanguage(b);
68
+ if (langA !== langB) {
69
+ // 按语言分组排序
70
+ const languageOrder = ['vi', 'en', 'zh-Hans-CN', 'zh-Hant-TW', 'ja'];
71
+ return languageOrder.indexOf(langA) - languageOrder.indexOf(langB);
72
+ }
73
+ // 同语言按拼音或字母排序
74
+ return a.localeCompare(b, langA, {
75
+ sensitivity: 'base', // 忽略大小写和重音符号
76
+ numeric: true, // 支持数字的自然排序
77
+ ignorePunctuation: true, // 忽略标点符号
78
+ caseFirst: 'upper', // 大写字母优先
79
+ });
80
+ }
81
+ import { pinyin } from 'pinyin-pro';
82
+ // 中文转拼音函数(支持简体和繁体)
83
+ function convertToPinyin(str) {
84
+ const r = pinyin(str, {
85
+ type: 'array',
86
+ //style: 4, // 带声调
87
+ //heteronym: false, // 不显示多音字
88
+ //returnString: true, // 返回字符串
89
+ });
90
+ return r.flat().join('');
91
+ }
92
+ function getSortKey(str) {
93
+ if (/^[\u4E00-\u9FFF]/.test(str)) {
94
+ return convertToPinyin(str); // 中文转换为拼音
95
+ }
96
+ if (/^[\u3040-\u309F\u30A0-\u30FF]/.test(str)) {
97
+ return str; // 日文直接使用原字符串
98
+ }
99
+ if (/^[\u00C0-\u1EF9]/.test(str)) {
100
+ return str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); // 越南文标准化
101
+ }
102
+ return str; // 英文或其他
103
+ }
104
+ function compareStringsBySortKey(a, b) {
105
+ const keyA = getSortKey(a);
106
+ const keyB = getSortKey(b);
107
+ return keyA.localeCompare(keyB, 'en'); // 使用英文语言环境比较
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiREVGQVVMVF9DT0xfREVGLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXktY29tbW9uL3NyYy9saWIvYWctZ3JpZC9ERUZBVUxUX0NPTF9ERUYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsV0FBVztBQUNYLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBVztJQUNuQyxTQUFTLEVBQUUsSUFBSTtJQUNmLFFBQVEsRUFBRSxJQUFJO0lBQ2Qsd0JBQXdCLEVBQUUsSUFBSTtJQUM5QiwwQkFBMEIsRUFBRSxJQUFJO0lBQ2hDLFFBQVEsRUFBRSxJQUFJO0lBQ2QsTUFBTSxFQUFFLElBQUk7SUFDWixXQUFXO0lBQ1gsVUFBVSxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUV0QixpQ0FBaUM7UUFDakMsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztRQUN0RSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDMUIsQ0FBQztRQUNELElBQUksU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ3pCLENBQUM7UUFDRCxvQkFBb0I7UUFDcEIs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QjtRQUNsQiw2QkFBNkI7UUFDN0IseUNBQXlDO0tBQzVDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBQ0QsU0FBUyxVQUFVLENBQUMsR0FBVztJQUMzQixJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVTtJQUMzQyxDQUFDO0lBQ0QsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGFBQWE7SUFDN0IsQ0FBQztJQUNELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFDMUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUTtBQUN4QixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNqRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xEZWYgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcblxyXG4vLyDmr4/kuIDliJfnmoTnvLrnnIHlsZ7mgKdcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MX0RFRjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgZWRpdGFibGU6IHRydWUsXHJcbiAgICBzdXBwcmVzc0hlYWRlck1lbnVCdXR0b246IHRydWUsXHJcbiAgICBzdXBwcmVzc0hlYWRlckZpbHRlckJ1dHRvbjogdHJ1ZSxcclxuICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgZmlsdGVyOiB0cnVlLFxyXG4gICAgLy8gVVRGLTcg5o6S5bqPXHJcbiAgICBjb21wYXJhdG9yOiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoIWEgJiYgIWIpIHJldHVybiAwO1xyXG4gICAgICAgIGlmICghYSAmJiBiKSByZXR1cm4gLTE7XHJcbiAgICAgICAgaWYgKGEgJiYgIWIpIHJldHVybiAxO1xyXG5cclxuICAgICAgICAvLyDkuK3mlofmiZPlpLQg55So5Lit5paH5o6S5bqP6KeE5YiZIHRvZG86IOWMuuWIhiDnroDkvZPnuYHkvZPml6Xmlofpn6nmlodcclxuICAgICAgICBjb25zdCBjaGluZXNlQ2hhclJlZ2V4ID0gL15bXFx1NEUwMC1cXHU5RkZGXFx1MzQwMC1cXHU0REJGXFx1RjkwMC1cXHVGQUZGXS87XHJcbiAgICAgICAgY29uc3QgemhIYW5zQ05hID0gY2hpbmVzZUNoYXJSZWdleC50ZXN0KGEpO1xyXG4gICAgICAgIGNvbnN0IHpoSGFuc0NOYiA9IGNoaW5lc2VDaGFyUmVnZXgudGVzdChiKTtcclxuXHJcbiAgICAgICAgaWYgKCF6aEhhbnNDTmEgJiYgemhIYW5zQ05iKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTsgLy8g5a2X5q+N5o6S5Zyo5rGJ5a2X5YmN6Z2iXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6aEhhbnNDTmEgJiYgIXpoSGFuc0NOYikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTsgLy8g5rGJ5a2X5o6S5Zyo5a2X5q+N5ZCO6Z2iXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOWmguaenOmDveaYr+Wtl+avjeaIlumDveaYr+axieWtl++8jOaMieaLvOmfs+aOkuW6j1xyXG4gICAgICAgIGlmICh6aEhhbnNDTmEgJiYgemhIYW5zQ05iKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgJ3poLUhhbnMtQ04nLCB7XHJcbiAgICAgICAgICAgICAgICBzZW5zaXRpdml0eTogJ2Jhc2UnLFxyXG4gICAgICAgICAgICAgICAgbnVtZXJpYzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FzZUZpcnN0OiAndXBwZXInLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcclxuICAgICAgICAvLyDku4XkuK3mlofvvIxcclxuICAgICAgICBjb25zdCBjaGluZXNlQ2hhclJlZ2V4MiA9IC9bXFx1NEUwMC1cXHU5RkZGXFx1MzQwMC1cXHU0REJGXFx1RjkwMC1cXHVGQUZGXS87XHJcbiAgICAgICAgY29uc3QgaXNBTGV0dGVyID0gIWNoaW5lc2VDaGFyUmVnZXgyLnRlc3QoYSk7XHJcbiAgICAgICAgY29uc3QgaXNCTGV0dGVyID0gIWNoaW5lc2VDaGFyUmVnZXgyLnRlc3QoYik7XHJcbiAgICAgICAgaWYgKGlzQUxldHRlciAmJiBpc0JMZXR0ZXIpIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuZnVuY3Rpb24gY29tcGFyZVN0cmluZ3MoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFhICYmICFiKSByZXR1cm4gMDtcclxuICAgIGlmICghYSAmJiBiKSByZXR1cm4gLTE7XHJcbiAgICBpZiAoYSAmJiAhYikgcmV0dXJuIDE7XHJcblxyXG4gICAgLy8g5Yik5pat6K+t6KiA57G75Z6LXHJcbiAgICBjb25zdCBnZXRMYW5ndWFnZSA9IChzdHI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICgvXltcXHU0RTAwLVxcdTlGRkZcXHUzNDAwLVxcdTREQkZcXHVGOTAwLVxcdUZBRkZdLy50ZXN0KHN0cikpIHtcclxuICAgICAgICAgICAgLy8g5Yik5pat5piv566A5L2T5Lit5paH6L+Y5piv57mB5L2T5Lit5paHXHJcbiAgICAgICAgICAgIGlmICgvXltcXHU0RTAwLVxcdTlGRkZdLy50ZXN0KHN0cikpIHJldHVybiAnemgtSGFucy1DTic7IC8vIOeugOS9k+S4reaWh1xyXG4gICAgICAgICAgICByZXR1cm4gJ3poLUhhbnQtVFcnOyAvLyDnuYHkvZPkuK3mlodcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eW1xcdTMwNDAtXFx1MzA5RlxcdTMwQTAtXFx1MzBGRl0vLnRlc3Qoc3RyKSkgcmV0dXJuICdqYSc7IC8vIOaXpeaWh1xyXG4gICAgICAgIGlmICgvXltcXHUwMEMwLVxcdTFFRjldLy50ZXN0KHN0cikpIHJldHVybiAndmknOyAvLyDotorljZfmlodcclxuICAgICAgICByZXR1cm4gJ2VuJzsgLy8g6Iux5paH5oiW5YW25LuWXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxhbmdBID0gZ2V0TGFuZ3VhZ2UoYSk7XHJcbiAgICBjb25zdCBsYW5nQiA9IGdldExhbmd1YWdlKGIpO1xyXG5cclxuICAgIGlmIChsYW5nQSAhPT0gbGFuZ0IpIHtcclxuICAgICAgICAvLyDmjInor63oqIDliIbnu4TmjpLluo9cclxuICAgICAgICBjb25zdCBsYW5ndWFnZU9yZGVyID0gWyd2aScsICdlbicsICd6aC1IYW5zLUNOJywgJ3poLUhhbnQtVFcnLCAnamEnXTtcclxuICAgICAgICByZXR1cm4gbGFuZ3VhZ2VPcmRlci5pbmRleE9mKGxhbmdBKSAtIGxhbmd1YWdlT3JkZXIuaW5kZXhPZihsYW5nQik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5ZCM6K+t6KiA5oyJ5ou86Z+z5oiW5a2X5q+N5o6S5bqPXHJcbiAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIsIGxhbmdBLCB7XHJcbiAgICAgICAgc2Vuc2l0aXZpdHk6ICdiYXNlJywgLy8g5b+955Wl5aSn5bCP5YaZ5ZKM6YeN6Z+z56ym5Y+3XHJcbiAgICAgICAgbnVtZXJpYzogdHJ1ZSwgLy8g5pSv5oyB5pWw5a2X55qE6Ieq54S25o6S5bqPXHJcbiAgICAgICAgaWdub3JlUHVuY3R1YXRpb246IHRydWUsIC8vIOW/veeVpeagh+eCueespuWPt1xyXG4gICAgICAgIGNhc2VGaXJzdDogJ3VwcGVyJywgLy8g5aSn5YaZ5a2X5q+N5LyY5YWIXHJcbiAgICB9KTtcclxufVxyXG5cclxuaW1wb3J0IHsgcGlueWluIH0gZnJvbSAncGlueWluLXBybyc7XHJcbi8vIOS4reaWh+i9rOaLvOmfs+WHveaVsO+8iOaUr+aMgeeugOS9k+WSjOe5geS9k++8iVxyXG5mdW5jdGlvbiBjb252ZXJ0VG9QaW55aW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgciA9IHBpbnlpbihzdHIsIHtcclxuICAgICAgICB0eXBlOiAnYXJyYXknLFxyXG4gICAgICAgIC8vc3R5bGU6IDQsIC8vIOW4puWjsOiwg1xyXG4gICAgICAgIC8vaGV0ZXJvbnltOiBmYWxzZSwgLy8g5LiN5pi+56S65aSa6Z+z5a2XXHJcbiAgICAgICAgLy9yZXR1cm5TdHJpbmc6IHRydWUsICAgICAgICAgICAgLy8g6L+U5Zue5a2X56ym5LiyXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByLmZsYXQoKS5qb2luKCcnKTtcclxufVxyXG5mdW5jdGlvbiBnZXRTb3J0S2V5KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICgvXltcXHU0RTAwLVxcdTlGRkZdLy50ZXN0KHN0cikpIHtcclxuICAgICAgICByZXR1cm4gY29udmVydFRvUGlueWluKHN0cik7IC8vIOS4reaWh+i9rOaNouS4uuaLvOmfs1xyXG4gICAgfVxyXG4gICAgaWYgKC9eW1xcdTMwNDAtXFx1MzA5RlxcdTMwQTAtXFx1MzBGRl0vLnRlc3Qoc3RyKSkge1xyXG4gICAgICAgIHJldHVybiBzdHI7IC8vIOaXpeaWh+ebtOaOpeS9v+eUqOWOn+Wtl+espuS4slxyXG4gICAgfVxyXG4gICAgaWYgKC9eW1xcdTAwQzAtXFx1MUVGOV0vLnRlc3Qoc3RyKSkge1xyXG4gICAgICAgIHJldHVybiBzdHIubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7IC8vIOi2iuWNl+aWh+agh+WHhuWMllxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjsgLy8g6Iux5paH5oiW5YW25LuWXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVTdHJpbmdzQnlTb3J0S2V5KGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGtleUEgPSBnZXRTb3J0S2V5KGEpO1xyXG4gICAgY29uc3Qga2V5QiA9IGdldFNvcnRLZXkoYik7XHJcbiAgICByZXR1cm4ga2V5QS5sb2NhbGVDb21wYXJlKGtleUIsICdlbicpOyAvLyDkvb/nlKjoi7Hmlofor63oqIDnjq/looPmr5TovoNcclxufVxyXG4iXX0=