@ai-table/grid 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (324) hide show
  1. package/angular-konva/components/container.component.d.ts +7 -0
  2. package/angular-konva/components/container.component.d.ts.map +1 -0
  3. package/angular-konva/components/container.token.d.ts +3 -0
  4. package/angular-konva/components/container.token.d.ts.map +1 -0
  5. package/angular-konva/components/index.d.ts +4 -0
  6. package/angular-konva/components/index.d.ts.map +1 -0
  7. package/angular-konva/components/shape.component.d.ts +61 -0
  8. package/angular-konva/components/shape.component.d.ts.map +1 -0
  9. package/angular-konva/components/stage.component.d.ts +40 -0
  10. package/angular-konva/components/stage.component.d.ts.map +1 -0
  11. package/angular-konva/index.d.ts +5 -0
  12. package/angular-konva/index.d.ts.map +1 -0
  13. package/angular-konva/interfaces/component.d.ts +49 -0
  14. package/angular-konva/interfaces/component.d.ts.map +1 -0
  15. package/angular-konva/interfaces/config.d.ts +26 -0
  16. package/angular-konva/interfaces/config.d.ts.map +1 -0
  17. package/angular-konva/interfaces/event-object.d.ts +7 -0
  18. package/angular-konva/interfaces/event-object.d.ts.map +1 -0
  19. package/angular-konva/interfaces/index.d.ts +5 -0
  20. package/angular-konva/interfaces/index.d.ts.map +1 -0
  21. package/angular-konva/interfaces/shape.d.ts +42 -0
  22. package/angular-konva/interfaces/shape.d.ts.map +1 -0
  23. package/angular-konva/utils/apply-node-props.d.ts +4 -0
  24. package/angular-konva/utils/apply-node-props.d.ts.map +1 -0
  25. package/angular-konva/utils/common.d.ts +8 -0
  26. package/angular-konva/utils/common.d.ts.map +1 -0
  27. package/angular-konva/utils/index.d.ts +5 -0
  28. package/angular-konva/utils/index.d.ts.map +1 -0
  29. package/angular-konva/utils/types.d.ts +4 -0
  30. package/angular-konva/utils/types.d.ts.map +1 -0
  31. package/angular-konva/utils/update-picture.d.ts +4 -0
  32. package/angular-konva/utils/update-picture.d.ts.map +1 -0
  33. package/components/cell-editors/abstract-cell-editor.component.d.ts +7 -5
  34. package/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
  35. package/components/cell-editors/cell-editor.scss +38 -25
  36. package/components/cell-editors/cell-editor.variables.scss +5 -0
  37. package/components/cell-editors/date/date-editor.component.d.ts.map +1 -1
  38. package/components/cell-editors/link/edit-link/edit-link.component.d.ts +33 -0
  39. package/components/cell-editors/link/edit-link/edit-link.component.d.ts.map +1 -0
  40. package/components/cell-editors/link/link-editor.component.d.ts +36 -0
  41. package/components/cell-editors/link/link-editor.component.d.ts.map +1 -0
  42. package/components/cell-editors/link/link-editor.component.scss +21 -0
  43. package/components/cell-editors/progress/progress-editor.component.d.ts +0 -1
  44. package/components/cell-editors/progress/progress-editor.component.d.ts.map +1 -1
  45. package/components/cell-editors/progress/progress-editor.component.scss +12 -4
  46. package/components/cell-editors/rating/rating-editor.component.d.ts +0 -1
  47. package/components/cell-editors/rating/rating-editor.component.d.ts.map +1 -1
  48. package/components/cell-editors/rating/rating-editor.component.scss +10 -0
  49. package/components/cell-editors/select/select-editor.component.d.ts +1 -3
  50. package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
  51. package/components/cell-editors/text/text-editor.component.d.ts +0 -1
  52. package/components/cell-editors/text/text-editor.component.d.ts.map +1 -1
  53. package/components/cell-views/select/option.component.d.ts.map +1 -1
  54. package/components/cell-views/select/option.scss +10 -0
  55. package/components/field-menu/field-menu.component.d.ts +8 -3
  56. package/components/field-menu/field-menu.component.d.ts.map +1 -1
  57. package/components/field-property-editor/field-property-editor.component.d.ts +4 -2
  58. package/components/field-property-editor/field-property-editor.component.d.ts.map +1 -1
  59. package/components/index.d.ts +3 -1
  60. package/components/index.d.ts.map +1 -1
  61. package/constants/colors.d.ts +18 -0
  62. package/constants/colors.d.ts.map +1 -0
  63. package/constants/grid.d.ts +17 -1
  64. package/constants/grid.d.ts.map +1 -1
  65. package/constants/icon.d.ts +19 -0
  66. package/constants/icon.d.ts.map +1 -0
  67. package/constants/index.d.ts +5 -1
  68. package/constants/index.d.ts.map +1 -1
  69. package/constants/table.d.ts +60 -0
  70. package/constants/table.d.ts.map +1 -0
  71. package/constants/text.d.ts +22 -0
  72. package/constants/text.d.ts.map +1 -0
  73. package/core/context.d.ts +14 -0
  74. package/core/context.d.ts.map +1 -0
  75. package/core/coordinate.d.ts +96 -0
  76. package/core/coordinate.d.ts.map +1 -0
  77. package/core/index.d.ts +3 -2
  78. package/core/index.d.ts.map +1 -1
  79. package/core/types/ai-table.d.ts +56 -0
  80. package/core/types/ai-table.d.ts.map +1 -0
  81. package/core/types/core.d.ts +29 -23
  82. package/core/types/core.d.ts.map +1 -1
  83. package/core/types/index.d.ts +1 -1
  84. package/core/types/index.d.ts.map +1 -1
  85. package/core/utils/common.d.ts +1 -2
  86. package/core/utils/common.d.ts.map +1 -1
  87. package/core/utils/field.d.ts +1 -1
  88. package/core/utils/field.d.ts.map +1 -1
  89. package/core/utils/index.d.ts +0 -1
  90. package/core/utils/index.d.ts.map +1 -1
  91. package/core/utils/queries.d.ts +5 -5
  92. package/core/utils/queries.d.ts.map +1 -1
  93. package/dom-grid.component.d.ts +11 -0
  94. package/dom-grid.component.d.ts.map +1 -0
  95. package/esm2022/angular-konva/components/container.component.mjs +29 -0
  96. package/esm2022/angular-konva/components/container.token.mjs +3 -0
  97. package/esm2022/angular-konva/components/index.mjs +4 -0
  98. package/esm2022/angular-konva/components/shape.component.mjs +142 -0
  99. package/esm2022/angular-konva/components/stage.component.mjs +123 -0
  100. package/esm2022/angular-konva/index.mjs +5 -0
  101. package/esm2022/angular-konva/interfaces/component.mjs +4 -0
  102. package/esm2022/angular-konva/interfaces/config.mjs +2 -0
  103. package/esm2022/angular-konva/interfaces/event-object.mjs +2 -0
  104. package/esm2022/angular-konva/interfaces/index.mjs +5 -0
  105. package/esm2022/angular-konva/interfaces/shape.mjs +42 -0
  106. package/esm2022/angular-konva/utils/apply-node-props.mjs +67 -0
  107. package/esm2022/angular-konva/utils/common.mjs +48 -0
  108. package/esm2022/angular-konva/utils/index.mjs +5 -0
  109. package/esm2022/angular-konva/utils/types.mjs +2 -0
  110. package/esm2022/angular-konva/utils/update-picture.mjs +7 -0
  111. package/esm2022/components/cell-editors/abstract-cell-editor.component.mjs +12 -7
  112. package/esm2022/components/cell-editors/date/date-editor.component.mjs +6 -3
  113. package/esm2022/components/cell-editors/link/edit-link/edit-link.component.mjs +66 -0
  114. package/esm2022/components/cell-editors/link/link-editor.component.mjs +117 -0
  115. package/esm2022/components/cell-editors/number/number-editor.component.mjs +2 -2
  116. package/esm2022/components/cell-editors/progress/progress-editor.component.mjs +3 -6
  117. package/esm2022/components/cell-editors/rating/rating-editor.component.mjs +4 -7
  118. package/esm2022/components/cell-editors/select/select-editor.component.mjs +11 -16
  119. package/esm2022/components/cell-editors/text/text-editor.component.mjs +10 -11
  120. package/esm2022/components/cell-views/select/option.component.mjs +6 -5
  121. package/esm2022/components/field-menu/field-menu.component.mjs +11 -8
  122. package/esm2022/components/field-property-editor/field-property-editor.component.mjs +17 -12
  123. package/esm2022/components/index.mjs +4 -2
  124. package/esm2022/constants/colors.mjs +18 -0
  125. package/esm2022/constants/editor.mjs +2 -3
  126. package/esm2022/constants/grid.mjs +22 -4
  127. package/esm2022/constants/icon.mjs +26 -0
  128. package/esm2022/constants/index.mjs +6 -2
  129. package/esm2022/constants/table.mjs +62 -0
  130. package/esm2022/constants/text.mjs +23 -0
  131. package/esm2022/core/context.mjs +25 -0
  132. package/esm2022/core/coordinate.mjs +222 -0
  133. package/esm2022/core/index.mjs +4 -3
  134. package/esm2022/core/types/ai-table.mjs +44 -0
  135. package/esm2022/core/types/core.mjs +6 -1
  136. package/esm2022/core/types/index.mjs +2 -2
  137. package/esm2022/core/utils/common.mjs +3 -20
  138. package/esm2022/core/utils/field.mjs +9 -5
  139. package/esm2022/core/utils/index.mjs +1 -2
  140. package/esm2022/core/utils/queries.mjs +4 -4
  141. package/esm2022/dom-grid.component.mjs +82 -0
  142. package/esm2022/grid-base.component.mjs +154 -0
  143. package/esm2022/grid.component.mjs +336 -160
  144. package/esm2022/public-api.mjs +9 -5
  145. package/esm2022/renderer/components/add-field-column.component.mjs +68 -0
  146. package/esm2022/renderer/components/cells.component.mjs +35 -0
  147. package/esm2022/renderer/components/field-head.component.mjs +130 -0
  148. package/esm2022/renderer/components/field-icon.component.mjs +66 -0
  149. package/esm2022/renderer/components/frozen-cells.component.mjs +36 -0
  150. package/esm2022/renderer/components/frozen-heads.component.mjs +117 -0
  151. package/esm2022/renderer/components/frozen-placeholder-cells.component.mjs +38 -0
  152. package/esm2022/renderer/components/heads.component.mjs +38 -0
  153. package/esm2022/renderer/components/hover-row-heads.component.mjs +107 -0
  154. package/esm2022/renderer/components/icon.component.mjs +80 -0
  155. package/esm2022/renderer/components/index.mjs +14 -0
  156. package/esm2022/renderer/components/other-rows.component.mjs +68 -0
  157. package/esm2022/renderer/components/placeholder-cells.component.mjs +33 -0
  158. package/esm2022/renderer/components/text.component.mjs +45 -0
  159. package/esm2022/renderer/creations/create-active-cell-border.mjs +68 -0
  160. package/esm2022/renderer/creations/create-cells.mjs +135 -0
  161. package/esm2022/renderer/creations/create-heads.mjs +45 -0
  162. package/esm2022/renderer/drawers/add-row-layout-drawer.mjs +97 -0
  163. package/esm2022/renderer/drawers/cell-drawer.mjs +586 -0
  164. package/esm2022/renderer/drawers/drawer.mjs +936 -0
  165. package/esm2022/renderer/drawers/layout-drawer.mjs +58 -0
  166. package/esm2022/renderer/drawers/record-row-layout-drawer.mjs +101 -0
  167. package/esm2022/renderer/index.mjs +4 -0
  168. package/esm2022/renderer/renderer.component.mjs +174 -0
  169. package/esm2022/services/event.service.mjs +115 -11
  170. package/esm2022/services/field.service.mjs +28 -5
  171. package/esm2022/services/index.mjs +4 -0
  172. package/esm2022/services/selection.service.mjs +8 -1
  173. package/esm2022/types/avatar.mjs +27 -0
  174. package/esm2022/types/canvas.mjs +2 -0
  175. package/esm2022/types/cell.mjs +2 -0
  176. package/esm2022/types/component-config.mjs +7 -0
  177. package/esm2022/types/field.mjs +1 -1
  178. package/esm2022/types/grid.mjs +16 -2
  179. package/esm2022/types/index.mjs +8 -2
  180. package/esm2022/types/layout.mjs +2 -0
  181. package/esm2022/types/row.mjs +6 -0
  182. package/esm2022/utils/build.mjs +39 -0
  183. package/esm2022/utils/cell.mjs +71 -0
  184. package/esm2022/utils/common.mjs +49 -0
  185. package/esm2022/utils/get-placeholder-cells.mjs +66 -0
  186. package/esm2022/utils/get-text-width.mjs +30 -0
  187. package/esm2022/utils/image-cache.mjs +57 -0
  188. package/esm2022/utils/index.mjs +12 -0
  189. package/esm2022/utils/os.mjs +16 -0
  190. package/esm2022/utils/position.mjs +48 -0
  191. package/esm2022/utils/style.mjs +25 -0
  192. package/esm2022/utils/text-measure.mjs +122 -0
  193. package/esm2022/utils/visible-range.mjs +38 -0
  194. package/fesm2022/ai-table-grid.mjs +5526 -693
  195. package/fesm2022/ai-table-grid.mjs.map +1 -1
  196. package/grid-base.component.d.ts +52 -0
  197. package/grid-base.component.d.ts.map +1 -0
  198. package/grid.component.d.ts +43 -40
  199. package/grid.component.d.ts.map +1 -1
  200. package/package.json +5 -2
  201. package/public-api.d.ts +8 -4
  202. package/public-api.d.ts.map +1 -1
  203. package/renderer/components/add-field-column.component.d.ts +16 -0
  204. package/renderer/components/add-field-column.component.d.ts.map +1 -0
  205. package/renderer/components/cells.component.d.ts +14 -0
  206. package/renderer/components/cells.component.d.ts.map +1 -0
  207. package/renderer/components/field-head.component.d.ts +73 -0
  208. package/renderer/components/field-head.component.d.ts.map +1 -0
  209. package/renderer/components/field-icon.component.d.ts +17 -0
  210. package/renderer/components/field-icon.component.d.ts.map +1 -0
  211. package/renderer/components/frozen-cells.component.d.ts +14 -0
  212. package/renderer/components/frozen-cells.component.d.ts.map +1 -0
  213. package/renderer/components/frozen-heads.component.d.ts +47 -0
  214. package/renderer/components/frozen-heads.component.d.ts.map +1 -0
  215. package/renderer/components/frozen-placeholder-cells.component.d.ts +22 -0
  216. package/renderer/components/frozen-placeholder-cells.component.d.ts.map +1 -0
  217. package/renderer/components/heads.component.d.ts +9 -0
  218. package/renderer/components/heads.component.d.ts.map +1 -0
  219. package/renderer/components/hover-row-heads.component.d.ts +11 -0
  220. package/renderer/components/hover-row-heads.component.d.ts.map +1 -0
  221. package/renderer/components/icon.component.d.ts +37 -0
  222. package/renderer/components/icon.component.d.ts.map +1 -0
  223. package/renderer/components/index.d.ts +14 -0
  224. package/renderer/components/index.d.ts.map +1 -0
  225. package/renderer/components/other-rows.component.d.ts +31 -0
  226. package/renderer/components/other-rows.component.d.ts.map +1 -0
  227. package/renderer/components/placeholder-cells.component.d.ts +22 -0
  228. package/renderer/components/placeholder-cells.component.d.ts.map +1 -0
  229. package/renderer/components/text.component.d.ts +99 -0
  230. package/renderer/components/text.component.d.ts.map +1 -0
  231. package/renderer/creations/create-active-cell-border.d.ts +7 -0
  232. package/renderer/creations/create-active-cell-border.d.ts.map +1 -0
  233. package/renderer/creations/create-cells.d.ts +8 -0
  234. package/renderer/creations/create-cells.d.ts.map +1 -0
  235. package/renderer/creations/create-heads.d.ts +3 -0
  236. package/renderer/creations/create-heads.d.ts.map +1 -0
  237. package/renderer/drawers/add-row-layout-drawer.d.ts +12 -0
  238. package/renderer/drawers/add-row-layout-drawer.d.ts.map +1 -0
  239. package/renderer/drawers/cell-drawer.d.ts +22 -0
  240. package/renderer/drawers/cell-drawer.d.ts.map +1 -0
  241. package/renderer/drawers/drawer.d.ts +136 -0
  242. package/renderer/drawers/drawer.d.ts.map +1 -0
  243. package/renderer/drawers/layout-drawer.d.ts +22 -0
  244. package/renderer/drawers/layout-drawer.d.ts.map +1 -0
  245. package/renderer/drawers/record-row-layout-drawer.d.ts +14 -0
  246. package/renderer/drawers/record-row-layout-drawer.d.ts.map +1 -0
  247. package/renderer/index.d.ts +4 -0
  248. package/renderer/index.d.ts.map +1 -0
  249. package/renderer/renderer.component.d.ts +64 -0
  250. package/renderer/renderer.component.d.ts.map +1 -0
  251. package/services/event.service.d.ts +17 -3
  252. package/services/event.service.d.ts.map +1 -1
  253. package/services/field.service.d.ts +5 -4
  254. package/services/field.service.d.ts.map +1 -1
  255. package/services/index.d.ts +4 -0
  256. package/services/index.d.ts.map +1 -0
  257. package/services/selection.service.d.ts.map +1 -1
  258. package/styles/styles.scss +71 -11
  259. package/types/avatar.d.ts +24 -0
  260. package/types/avatar.d.ts.map +1 -0
  261. package/types/canvas.d.ts +83 -0
  262. package/types/canvas.d.ts.map +1 -0
  263. package/types/cell.d.ts +43 -0
  264. package/types/cell.d.ts.map +1 -0
  265. package/types/component-config.d.ts +50 -0
  266. package/types/component-config.d.ts.map +1 -0
  267. package/types/field.d.ts +27 -1
  268. package/types/field.d.ts.map +1 -1
  269. package/types/grid.d.ts +80 -2
  270. package/types/grid.d.ts.map +1 -1
  271. package/types/index.d.ts +7 -1
  272. package/types/index.d.ts.map +1 -1
  273. package/types/layout.d.ts +11 -0
  274. package/types/layout.d.ts.map +1 -0
  275. package/types/row.d.ts +27 -0
  276. package/types/row.d.ts.map +1 -0
  277. package/utils/build.d.ts +5 -0
  278. package/utils/build.d.ts.map +1 -0
  279. package/utils/cell.d.ts +19 -0
  280. package/utils/cell.d.ts.map +1 -0
  281. package/utils/common.d.ts +20 -0
  282. package/utils/common.d.ts.map +1 -0
  283. package/utils/get-placeholder-cells.d.ts +16 -0
  284. package/utils/get-placeholder-cells.d.ts.map +1 -0
  285. package/utils/get-text-width.d.ts +9 -0
  286. package/utils/get-text-width.d.ts.map +1 -0
  287. package/utils/image-cache.d.ts +16 -0
  288. package/utils/image-cache.d.ts.map +1 -0
  289. package/utils/index.d.ts +12 -0
  290. package/utils/index.d.ts.map +1 -0
  291. package/utils/os.d.ts +4 -0
  292. package/utils/os.d.ts.map +1 -0
  293. package/utils/position.d.ts +20 -0
  294. package/utils/position.d.ts.map +1 -0
  295. package/utils/style.d.ts +4 -0
  296. package/utils/style.d.ts.map +1 -0
  297. package/utils/text-measure.d.ts +32 -0
  298. package/utils/text-measure.d.ts.map +1 -0
  299. package/utils/visible-range.d.ts +13 -0
  300. package/utils/visible-range.d.ts.map +1 -0
  301. package/components/cell-editors/link/number-editor.component.d.ts +0 -8
  302. package/components/cell-editors/link/number-editor.component.d.ts.map +0 -1
  303. package/constants/field.d.ts +0 -20
  304. package/constants/field.d.ts.map +0 -1
  305. package/core/action/field.d.ts +0 -12
  306. package/core/action/field.d.ts.map +0 -1
  307. package/core/action/general.d.ts +0 -5
  308. package/core/action/general.d.ts.map +0 -1
  309. package/core/action/index.d.ts +0 -12
  310. package/core/action/index.d.ts.map +0 -1
  311. package/core/action/record.d.ts +0 -12
  312. package/core/action/record.d.ts.map +0 -1
  313. package/core/types/action.d.ts +0 -64
  314. package/core/types/action.d.ts.map +0 -1
  315. package/core/utils/weak-map.d.ts +0 -3
  316. package/core/utils/weak-map.d.ts.map +0 -1
  317. package/esm2022/components/cell-editors/link/number-editor.component.mjs +0 -25
  318. package/esm2022/constants/field.mjs +0 -25
  319. package/esm2022/core/action/field.mjs +0 -57
  320. package/esm2022/core/action/general.mjs +0 -116
  321. package/esm2022/core/action/index.mjs +0 -9
  322. package/esm2022/core/action/record.mjs +0 -44
  323. package/esm2022/core/types/action.mjs +0 -18
  324. package/esm2022/core/utils/weak-map.mjs +0 -2
@@ -0,0 +1,58 @@
1
+ import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH } from '../../constants/table';
2
+ import { Drawer } from './drawer';
3
+ /**
4
+ * 用于处理表格行或单元格的布局和绘制。
5
+ * 它提供了基本的布局信息(如位置、大小等),并定义了常用的绘图方法(如渲染缩进区域、添加新字段的空白区域等)。
6
+ * 该类继承自 Drawer,并被其他更具体的布局类(如 RecordRowLayout)扩展和使用
7
+ */
8
+ export class Layout extends Drawer {
9
+ constructor() {
10
+ super(...arguments);
11
+ // 定义当前单元格或行的位置
12
+ this.x = 0;
13
+ this.y = 0;
14
+ // 行高
15
+ this.rowHeight = 0;
16
+ // 列宽
17
+ this.columnWidth = 0;
18
+ // 行索引
19
+ this.rowIndex = 0;
20
+ // 列索引
21
+ this.columnIndex = 0;
22
+ // 列数
23
+ this.columnCount = 0;
24
+ this.containerWidth = 0;
25
+ }
26
+ // 用于初始化或重置布局的基本属性。这个方法通常在每次渲染新的一行或单元格时调用,确保布局信息是最新的
27
+ init({ x, y, rowIndex, columnIndex, rowHeight, columnWidth, columnCount, containerWidth }) {
28
+ this.x = x;
29
+ this.y = y;
30
+ this.rowIndex = rowIndex;
31
+ this.columnIndex = columnIndex;
32
+ this.rowHeight = rowHeight;
33
+ this.columnWidth = columnWidth;
34
+ this.columnCount = columnCount;
35
+ this.containerWidth = containerWidth;
36
+ }
37
+ // 当前单元格是否是行的第一列
38
+ get isFirst() {
39
+ return this.columnIndex === 0;
40
+ }
41
+ // 当前单元格是否是行的最后一列
42
+ get isLast() {
43
+ return this.columnIndex === this.columnCount - 1;
44
+ }
45
+ renderAddFieldBlank() {
46
+ const width = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;
47
+ const y = this.y;
48
+ const rowHeight = this.rowHeight;
49
+ this.rect({
50
+ x: this.x + 0.5,
51
+ y: y - 0.5,
52
+ width: this.containerWidth - this.x < width ? width : this.containerWidth - this.x,
53
+ height: rowHeight + 1,
54
+ fill: this.colors.transparent
55
+ });
56
+ }
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWRyYXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2RyYXdlcnMvbGF5b3V0LWRyYXdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sTUFBTyxTQUFRLE1BQU07SUFBbEM7O1FBQ0ksZUFBZTtRQUNMLE1BQUMsR0FBRyxDQUFDLENBQUM7UUFDTixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEtBQUs7UUFDSyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEtBQUs7UUFDSyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNO1FBQ0ksYUFBUSxHQUFHLENBQUMsQ0FBQztRQUN2QixNQUFNO1FBQ0ksZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDMUIsS0FBSztRQUNLLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBb0NqQyxDQUFDO0lBbENHLG9EQUFvRDtJQUNwRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFpQjtRQUNwRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFjLE9BQU87UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQWMsTUFBTTtRQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLG1CQUFtQjtRQUN6QixNQUFNLEtBQUssR0FBRywrQkFBK0IsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUc7WUFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7WUFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1NBQ2hDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFibGUnO1xuaW1wb3J0IHsgQUlUYWJsZUxheW91dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcblxuLyoqXG4gKiDnlKjkuo7lpITnkIbooajmoLzooYzmiJbljZXlhYPmoLznmoTluIPlsYDlkoznu5jliLbjgIJcbiAqIOWug+aPkOS+m+S6huWfuuacrOeahOW4g+WxgOS/oeaBr++8iOWmguS9jee9ruOAgeWkp+Wwj+etie+8ie+8jOW5tuWumuS5ieS6huW4uOeUqOeahOe7mOWbvuaWueazle+8iOWmgua4suafk+e8qei/m+WMuuWfn+OAgea3u+WKoOaWsOWtl+auteeahOepuueZveWMuuWfn+etie+8ieOAglxuICog6K+l57G757un5om/6IeqIERyYXdlcu+8jOW5tuiiq+WFtuS7luabtOWFt+S9k+eahOW4g+WxgOexu++8iOWmgiBSZWNvcmRSb3dMYXlvdXTvvInmianlsZXlkozkvb/nlKhcbiAqL1xuZXhwb3J0IGNsYXNzIExheW91dCBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5a6a5LmJ5b2T5YmN5Y2V5YWD5qC85oiW6KGM55qE5L2N572uXG4gICAgcHJvdGVjdGVkIHggPSAwO1xuICAgIHByb3RlY3RlZCB5ID0gMDtcbiAgICAvLyDooYzpq5hcbiAgICBwcm90ZWN0ZWQgcm93SGVpZ2h0ID0gMDtcbiAgICAvLyDliJflrr1cbiAgICBwcm90ZWN0ZWQgY29sdW1uV2lkdGggPSAwO1xuICAgIC8vIOihjOe0ouW8lVxuICAgIHByb3RlY3RlZCByb3dJbmRleCA9IDA7XG4gICAgLy8g5YiX57Si5byVXG4gICAgcHJvdGVjdGVkIGNvbHVtbkluZGV4ID0gMDtcbiAgICAvLyDliJfmlbBcbiAgICBwcm90ZWN0ZWQgY29sdW1uQ291bnQgPSAwO1xuXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcldpZHRoID0gMDtcblxuICAgIC8vIOeUqOS6juWIneWni+WMluaIlumHjee9ruW4g+WxgOeahOWfuuacrOWxnuaAp+OAgui/meS4quaWueazlemAmuW4uOWcqOavj+asoea4suafk+aWsOeahOS4gOihjOaIluWNleWFg+agvOaXtuiwg+eUqO+8jOehruS/neW4g+WxgOS/oeaBr+aYr+acgOaWsOeahFxuICAgIGluaXQoeyB4LCB5LCByb3dJbmRleCwgY29sdW1uSW5kZXgsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCBjb250YWluZXJXaWR0aCB9OiBBSVRhYmxlTGF5b3V0KSB7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHRoaXMucm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5jb2x1bW5XaWR0aCA9IGNvbHVtbldpZHRoO1xuICAgICAgICB0aGlzLmNvbHVtbkNvdW50ID0gY29sdW1uQ291bnQ7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvLyDlvZPliY3ljZXlhYPmoLzmmK/lkKbmmK/ooYznmoTnrKzkuIDliJdcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzRmlyc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkluZGV4ID09PSAwO1xuICAgIH1cblxuICAgIC8vIOW9k+WJjeWNleWFg+agvOaYr+WQpuaYr+ihjOeahOacgOWQjuS4gOWIl1xuICAgIHByb3RlY3RlZCBnZXQgaXNMYXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmRleCA9PT0gdGhpcy5jb2x1bW5Db3VudCAtIDE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckFkZEZpZWxkQmxhbmsoKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSDtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLnggKyAwLjUsXG4gICAgICAgICAgICB5OiB5IC0gMC41LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGggLSB0aGlzLnggPCB3aWR0aCA/IHdpZHRoIDogdGhpcy5jb250YWluZXJXaWR0aCAtIHRoaXMueCxcbiAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0ICsgMSxcbiAgICAgICAgICAgIGZpbGw6IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,101 @@
1
+ import { AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH, DEFAULT_FONT_SIZE } from '../../constants';
2
+ import { DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE } from '../../constants/text';
3
+ import { AITable } from '../../core';
4
+ import { Layout } from './layout-drawer';
5
+ /**
6
+ * 绘制行的布局,通过直接操作 Canvas 提供高效的渲染方法。
7
+ * 它继承自 Layout 类,包含了用于绘制行中单元格(尤其是首列和尾列)的几个方法
8
+ */
9
+ export class RecordRowLayout extends Layout {
10
+ // 首列
11
+ renderFirstCell({ row, style, isHoverRow, isCheckedRow }) {
12
+ if (!this.isFirst)
13
+ return;
14
+ const { fill } = style;
15
+ const y = this.y;
16
+ const rowHeight = this.rowHeight;
17
+ const columnWidth = this.columnWidth;
18
+ const colors = AITable.getColors();
19
+ // 编号的上下边框
20
+ let fillBg = colors.transparent;
21
+ if (isCheckedRow) {
22
+ fillBg = colors.itemActiveBgColor;
23
+ }
24
+ else if (isHoverRow) {
25
+ fillBg = colors.gray80;
26
+ }
27
+ this.customRect({
28
+ x: AI_TABLE_OFFSET,
29
+ y,
30
+ width: AI_TABLE_ROW_HEAD_WIDTH - AI_TABLE_OFFSET,
31
+ height: rowHeight,
32
+ fill: fillBg,
33
+ strokes: {
34
+ right: colors.gray200,
35
+ bottom: colors.gray200
36
+ }
37
+ });
38
+ // 第一列单元格
39
+ this.rect({
40
+ x: AI_TABLE_ROW_HEAD_WIDTH,
41
+ y,
42
+ width: columnWidth + AI_TABLE_OFFSET,
43
+ height: rowHeight,
44
+ fill: fill,
45
+ stroke: colors.gray200
46
+ });
47
+ if (!isCheckedRow && !isHoverRow) {
48
+ // 设置字体样式,居中绘制行号
49
+ this.setStyle({ fontSize: DEFAULT_FONT_SIZE });
50
+ this.text({
51
+ x: AI_TABLE_ROW_HEAD_WIDTH / 2,
52
+ y: y + AI_TABLE_FIELD_HEAD_HEIGHT / 2,
53
+ text: String(row.displayIndex),
54
+ textAlign: DEFAULT_TEXT_ALIGN_CENTER,
55
+ verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE
56
+ });
57
+ }
58
+ }
59
+ // 尾列
60
+ renderLastCell({ style }) {
61
+ if (!this.isLast || this.isFirst)
62
+ return;
63
+ const { fill, stroke } = style;
64
+ const columnWidth = this.columnWidth;
65
+ const width = columnWidth;
66
+ const colors = AITable.getColors();
67
+ // 背景、边框
68
+ this.rect({
69
+ x: this.x,
70
+ y: this.y,
71
+ width,
72
+ height: this.rowHeight,
73
+ fill: fill || colors.white,
74
+ stroke: stroke || colors.gray200
75
+ });
76
+ }
77
+ // 绘制中间的普通单元格
78
+ renderCommonCell({ style }) {
79
+ if (this.isFirst || this.isLast)
80
+ return;
81
+ const { fill, stroke } = style;
82
+ const colors = AITable.getColors();
83
+ // 背景、边框
84
+ this.rect({
85
+ x: this.x,
86
+ y: this.y,
87
+ width: this.columnWidth,
88
+ height: this.rowHeight,
89
+ fill: fill || colors.white,
90
+ stroke: stroke || colors.gray200
91
+ });
92
+ }
93
+ render(config) {
94
+ const { row, style, isCheckedRow, isHoverRow } = config;
95
+ this.renderFirstCell({ row, style, isCheckedRow, isHoverRow });
96
+ this.renderCommonCell({ style });
97
+ this.renderLastCell({ style });
98
+ }
99
+ }
100
+ export const recordRowLayout = new RecordRowLayout();
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXJvdy1sYXlvdXQtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvZHJhd2Vycy9yZWNvcmQtcm93LWxheW91dC1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLE1BQU07SUFDdkMsS0FBSztJQUNHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBZTtRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLFVBQVU7UUFDVixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2hDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJ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QUNQLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBbUI7UUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDSjtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsIEFJX1RBQkxFX09GRlNFVCwgQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsIERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IERFRkFVTFRfVEVYVF9BTElHTl9DRU5URVIsIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGV4dCc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IExheW91dCB9IGZyb20gJy4vbGF5b3V0LWRyYXdlcic7XG5cbi8qKlxuICog57uY5Yi26KGM55qE5biD5bGA77yM6YCa6L+H55u05o6l5pON5L2cIENhbnZhcyDmj5Dkvpvpq5jmlYjnmoTmuLLmn5Pmlrnms5XjgIJcbiAqIOWug+e7p+aJv+iHqiBMYXlvdXQg57G777yM5YyF5ZCr5LqG55So5LqO57uY5Yi26KGM5Lit5Y2V5YWD5qC877yI5bCk5YW25piv6aaW5YiX5ZKM5bC+5YiX77yJ55qE5Yeg5Liq5pa55rOVXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRSb3dMYXlvdXQgZXh0ZW5kcyBMYXlvdXQge1xuICAgIC8vIOmmluWIl1xuICAgIHByaXZhdGUgcmVuZGVyRmlyc3RDZWxsKHsgcm93LCBzdHlsZSwgaXNIb3ZlclJvdywgaXNDaGVja2VkUm93IH06IEFJVGFibGVDZWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBmaWxsIH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdGhpcy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgLy8g57yW5Y+355qE5LiK5LiL6L655qGGXG4gICAgICAgIGxldCBmaWxsQmcgPSBjb2xvcnMudHJhbnNwYXJlbnQ7XG4gICAgICAgIGlmIChpc0NoZWNrZWRSb3cpIHtcbiAgICAgICAgICAgIGZpbGxCZyA9IGNvbG9ycy5pdGVtQWN0aXZlQmdDb2xvcjtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hvdmVyUm93KSB7XG4gICAgICAgICAgICBmaWxsQmcgPSBjb2xvcnMuZ3JheTgwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VzdG9tUmVjdCh7XG4gICAgICAgICAgICB4OiBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgaGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsQmcsXG4gICAgICAgICAgICBzdHJva2VzOiB7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNvbG9ycy5ncmF5MjAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOesrOS4gOWIl+WNleWFg+agvFxuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGg6IGNvbHVtbldpZHRoICsgQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgaGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgICAgc3Ryb2tlOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlzQ2hlY2tlZFJvdyAmJiAhaXNIb3ZlclJvdykge1xuICAgICAgICAgICAgLy8g6K6+572u5a2X5L2T5qC35byP77yM5bGF5Lit57uY5Yi26KGM5Y+3XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFIH0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCAvIDIsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0OiBTdHJpbmcocm93LmRpc3BsYXlJbmRleCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBERUZBVUxUX1RFWFRfQUxJR05fQ0VOVEVSLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5bC+5YiXXG4gICAgcHJpdmF0ZSByZW5kZXJMYXN0Q2VsbCh7IHN0eWxlIH06IFBpY2s8QUlUYWJsZUNlbGwsICdzdHlsZSc+KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3QgfHwgdGhpcy5pc0ZpcnN0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBmaWxsLCBzdHJva2UgfSA9IHN0eWxlO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHRoaXMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgLy8g6IOM5pmv44CB6L655qGGXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5yb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsIHx8IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIOe7mOWItuS4remXtOeahOaZrumAmuWNleWFg+agvFxuICAgIHByaXZhdGUgcmVuZGVyQ29tbW9uQ2VsbCh7IHN0eWxlIH06IFBpY2s8QUlUYWJsZUNlbGwsICdzdHlsZSc+KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3QgfHwgdGhpcy5pc0xhc3QpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGZpbGwsIHN0cm9rZSB9ID0gc3R5bGU7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgLy8g6IOM5pmv44CB6L655qGGXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5yb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsIHx8IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcihjb25maWc6IEFJVGFibGVDZWxsKSB7XG4gICAgICAgIGNvbnN0IHsgcm93LCBzdHlsZSwgaXNDaGVja2VkUm93LCBpc0hvdmVyUm93IH0gPSBjb25maWc7XG4gICAgICAgIHRoaXMucmVuZGVyRmlyc3RDZWxsKHsgcm93LCBzdHlsZSwgaXNDaGVja2VkUm93LCBpc0hvdmVyUm93IH0pO1xuICAgICAgICB0aGlzLnJlbmRlckNvbW1vbkNlbGwoeyBzdHlsZSB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJMYXN0Q2VsbCh7IHN0eWxlIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlY29yZFJvd0xheW91dCA9IG5ldyBSZWNvcmRSb3dMYXlvdXQoKTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './creations/create-active-cell-border';
2
+ export * from './creations/create-cells';
3
+ export * from './renderer.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRpb25zL2NyZWF0ZS1hY3RpdmUtY2VsbC1ib3JkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGlvbnMvY3JlYXRlLWNlbGxzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVuZGVyZXIuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,174 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';
2
+ import Konva from 'konva';
3
+ import { KoContainer, KoShape, KoStage } from '../angular-konva';
4
+ import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';
5
+ import { AITable } from '../core';
6
+ import { getVisibleRangeInfo } from '../utils';
7
+ import { AITableAddField, AITableCells, AITableColumnHeads, AITableFieldHead, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenPlaceholderCells, AITableHoverRowHeads, AITableIcon, AITableOtherRows, AITablePlaceholderCells } from './components';
8
+ import { createActiveCellBorder } from './creations/create-active-cell-border';
9
+ import * as i0 from "@angular/core";
10
+ Konva.pixelRatio = 2;
11
+ export class AITableRenderer {
12
+ constructor() {
13
+ this.config = input.required();
14
+ this.koMousemove = output();
15
+ this.koMousedown = output();
16
+ this.koWheel = output();
17
+ this.koClick = output();
18
+ this.koDblclick = output();
19
+ this.fields = computed(() => {
20
+ return AITable.getVisibleFields(this.config().aiTable);
21
+ });
22
+ this.coordinate = computed(() => {
23
+ return this.config()?.coordinate;
24
+ });
25
+ this.containerWidth = computed(() => {
26
+ return this.config().containerWidth;
27
+ });
28
+ this.containerHeight = computed(() => {
29
+ return this.config().containerHeight;
30
+ });
31
+ this.scrollState = computed(() => {
32
+ return this.config()?.aiTable.context.scrollState();
33
+ });
34
+ this.visibleRangeInfo = computed(() => {
35
+ return getVisibleRangeInfo(this.coordinate(), this.scrollState());
36
+ });
37
+ this.frozenAreaWidth = computed(() => {
38
+ return AI_TABLE_ROW_HEAD_WIDTH + this.coordinate().frozenColumnWidth;
39
+ });
40
+ this.lastColumnWidth = computed(() => {
41
+ return this.coordinate().getColumnWidth(this.visibleRangeInfo().columnStopIndex);
42
+ });
43
+ this.lastColumnOffset = computed(() => {
44
+ return this.coordinate().getColumnOffset(this.visibleRangeInfo().columnStopIndex);
45
+ });
46
+ this.cellGroupClipWidth = computed(() => {
47
+ const { scrollLeft } = this.scrollState();
48
+ return Math.min(this.containerWidth() - this.frozenAreaWidth(), AI_TABLE_FIELD_ADD_BUTTON_WIDTH + this.lastColumnOffset() + this.lastColumnWidth() - scrollLeft - this.frozenAreaWidth());
49
+ });
50
+ this.stageConfig = computed(() => {
51
+ const { isScrolling } = this.scrollState();
52
+ return {
53
+ width: this.containerWidth(),
54
+ height: this.containerHeight(),
55
+ listening: isScrolling ? false : true
56
+ };
57
+ });
58
+ this.gridGroupConfig = computed(() => {
59
+ return {
60
+ clipX: 0,
61
+ clipY: 0,
62
+ clipWidth: this.containerWidth(),
63
+ clipHeight: this.containerHeight()
64
+ };
65
+ });
66
+ this.commonGroupConfig = computed(() => {
67
+ return {
68
+ clipX: this.frozenAreaWidth() + 1,
69
+ clipY: 0,
70
+ clipWidth: this.cellGroupClipWidth(),
71
+ clipHeight: this.containerHeight()
72
+ };
73
+ });
74
+ this.attachGroupConfig = computed(() => {
75
+ return {
76
+ clipX: this.frozenAreaWidth() - 1,
77
+ clipY: this.coordinate().rowInitSize - 1,
78
+ clipWidth: this.containerWidth() - this.frozenAreaWidth(),
79
+ clipHeight: this.containerHeight() - this.coordinate().rowInitSize
80
+ };
81
+ });
82
+ this.frozenAttachGroupConfig = computed(() => {
83
+ return {
84
+ clipX: 0,
85
+ clipY: this.coordinate().rowInitSize - 1,
86
+ clipWidth: this.frozenAreaWidth() + 4,
87
+ clipHeight: this.containerHeight() - this.coordinate().rowInitSize
88
+ };
89
+ });
90
+ this.offsetYConfig = computed(() => {
91
+ const { scrollTop } = this.scrollState();
92
+ return {
93
+ offsetY: scrollTop
94
+ };
95
+ });
96
+ this.offsetXConfig = computed(() => {
97
+ const { scrollLeft } = this.scrollState();
98
+ return {
99
+ offsetX: scrollLeft
100
+ };
101
+ });
102
+ this.offsetConfig = computed(() => {
103
+ const { scrollLeft, scrollTop } = this.scrollState();
104
+ return {
105
+ offsetX: scrollLeft,
106
+ offsetY: scrollTop
107
+ };
108
+ });
109
+ this.columnHeadConfig = computed(() => {
110
+ const { columnStartIndex, columnStopIndex } = this.visibleRangeInfo();
111
+ const { aiTable, coordinate } = this.config();
112
+ const { pointPosition } = aiTable.context;
113
+ const fields = this.fields();
114
+ return {
115
+ aiTable,
116
+ coordinate,
117
+ fields,
118
+ columnStartIndex,
119
+ columnStopIndex,
120
+ pointPosition: pointPosition()
121
+ };
122
+ });
123
+ this.cellsConfig = computed(() => {
124
+ const { aiTable, coordinate, references } = this.config();
125
+ const { rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex } = this.visibleRangeInfo();
126
+ return {
127
+ aiTable,
128
+ coordinate,
129
+ references,
130
+ rowStartIndex,
131
+ rowStopIndex,
132
+ columnStartIndex,
133
+ columnStopIndex
134
+ };
135
+ });
136
+ this.activeCellBorderConfig = computed(() => {
137
+ return createActiveCellBorder(this.cellsConfig());
138
+ });
139
+ }
140
+ stageMousemove(e) {
141
+ this.koMousemove.emit(e);
142
+ }
143
+ stageMousedown(e) {
144
+ this.koMousedown.emit(e);
145
+ }
146
+ stageClick(e) {
147
+ this.koClick.emit(e);
148
+ }
149
+ stageDblclick(e) {
150
+ this.koDblclick.emit(e);
151
+ }
152
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
153
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AITableRenderer, isStandalone: true, selector: "ai-table-renderer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { koMousemove: "koMousemove", koMousedown: "koMousedown", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [coordinate]=\"coordinate()\"\n [fields]=\"fields()\"\n [columnStopIndex]=\"visibleRangeInfo().columnStopIndex\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoStage, selector: "ko-stage", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableColumnHeads, selector: "ai-table-column-heads", inputs: ["config"] }, { kind: "component", type: AITableFrozenColumnHeads, selector: "ai-table-frozen-column-heads", inputs: ["config"] }, { kind: "component", type: AITableCells, selector: "ai-table-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenCells, selector: "ai-table-frozen-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenPlaceholderCells, selector: "ai-table-frozen-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITablePlaceholderCells, selector: "ai-table-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableAddField, selector: "ai-table-add-field", inputs: ["coordinate", "fields", "columnStopIndex"] }, { kind: "component", type: AITableHoverRowHeads, selector: "ai-table-hover-row-heads", inputs: ["config"] }, { kind: "component", type: AITableOtherRows, selector: "ai-table-other-rows", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'ai-table-renderer', standalone: true, imports: [
158
+ KoContainer,
159
+ KoStage,
160
+ KoShape,
161
+ AITableIcon,
162
+ AITableFieldHead,
163
+ AITableColumnHeads,
164
+ AITableFrozenColumnHeads,
165
+ AITableCells,
166
+ AITableFrozenCells,
167
+ AITableFrozenPlaceholderCells,
168
+ AITablePlaceholderCells,
169
+ AITableAddField,
170
+ AITableHoverRowHeads,
171
+ AITableOtherRows
172
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [coordinate]=\"coordinate()\"\n [fields]=\"fields()\"\n [columnStopIndex]=\"visibleRangeInfo().columnStopIndex\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
173
+ }] });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLFdBQVcsRUFBaUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsZUFBZSxFQUNmLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUMxQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFL0UsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUF3QnJCLE1BQU0sT0FBTyxlQUFlO0lBdEI1QjtRQXVCSSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztRQUVqRCxnQkFBVyxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUVsRCxnQkFB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ZUFBZSwwVkMvQzVCLHFnRkF3REEsNENEMUJRLFdBQVcsNkVBQ1gsT0FBTyw2VkFDUCxPQUFPLCtoQkFHUCxrQkFBa0Isc0ZBQ2xCLHdCQUF3Qiw2RkFDeEIsWUFBWSwrRUFDWixrQkFBa0Isc0ZBQ2xCLDZCQUE2QixrR0FDN0IsdUJBQXVCLDJGQUN2QixlQUFlLG9IQUNmLG9CQUFvQix5RkFDcEIsZ0JBQWdCOzsyRkFJWCxlQUFlO2tCQXRCM0IsU0FBUzsrQkFDSSxtQkFBbUIsY0FFakIsSUFBSSxXQUNQO3dCQUNMLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLDZCQUE2Qjt3QkFDN0IsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3FCQUNuQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgS29udmEgZnJvbSAna29udmEnO1xuaW1wb3J0IHsgU3RhZ2VDb25maWcgfSBmcm9tICdrb252YS9saWIvU3RhZ2UnO1xuaW1wb3J0IHsgS29Db250YWluZXIsIEtvRXZlbnRPYmplY3QsIEtvU2hhcGUsIEtvU3RhZ2UgfSBmcm9tICcuLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7IEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEgsIEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGUgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVSZW5kZXJlckNvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldFZpc2libGVSYW5nZUluZm8gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICAgIEFJVGFibGVBZGRGaWVsZCxcbiAgICBBSVRhYmxlQ2VsbHMsXG4gICAgQUlUYWJsZUNvbHVtbkhlYWRzLFxuICAgIEFJVGFibGVGaWVsZEhlYWQsXG4gICAgQUlUYWJsZUZyb3plbkNlbGxzLFxuICAgIEFJVGFibGVGcm96ZW5Db2x1bW5IZWFkcyxcbiAgICBBSVRhYmxlRnJvemVuUGxhY2Vob2xkZXJDZWxscyxcbiAgICBBSVRhYmxlSG92ZXJSb3dIZWFkcyxcbiAgICBBSVRhYmxlSWNvbixcbiAgICBBSVRhYmxlT3RoZXJSb3dzLFxuICAgIEFJVGFibGVQbGFjZWhvbGRlckNlbGxzXG59IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjcmVhdGVBY3RpdmVDZWxsQm9yZGVyIH0gZnJvbSAnLi9jcmVhdGlvbnMvY3JlYXRlLWFjdGl2ZS1jZWxsLWJvcmRlcic7XG5cbktvbnZhLnBpeGVsUmF0aW8gPSAyO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLXJlbmRlcmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLb0NvbnRhaW5lcixcbiAgICAgICAgS29TdGFnZSxcbiAgICAgICAgS29TaGFwZSxcbiAgICAgICAgQUlUYWJsZUljb24sXG4gICAgICAgIEFJVGFibGVGaWVsZEhlYWQsXG4gICAgICAgIEFJVGFibGVDb2x1bW5IZWFkcyxcbiAgICAgICAgQUlUYWJsZUZyb3plbkNvbHVtbkhlYWRzLFxuICAgICAgICBBSVRhYmxlQ2VsbHMsXG4gICAgICAgIEFJVGFibGVGcm96ZW5DZWxscyxcbiAgICAgICAgQUlUYWJsZUZyb3plblBsYWNlaG9sZGVyQ2VsbHMsXG4gICAgICAgIEFJVGFibGVQbGFjZWhvbGRlckNlbGxzLFxuICAgICAgICBBSVRhYmxlQWRkRmllbGQsXG4gICAgICAgIEFJVGFibGVIb3ZlclJvd0hlYWRzLFxuICAgICAgICBBSVRhYmxlT3RoZXJSb3dzXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlUmVuZGVyZXIge1xuICAgIGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPEFJVGFibGVSZW5kZXJlckNvbmZpZz4oKTtcblxuICAgIGtvTW91c2Vtb3ZlID0gb3V0cHV0PEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4+KCk7XG5cbiAgICBrb01vdXNlZG93biA9IG91dHB1dDxLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAga29XaGVlbCA9IG91dHB1dDxLb0V2ZW50T2JqZWN0PFdoZWVsRXZlbnQ+PigpO1xuXG4gICAga29DbGljayA9IG91dHB1dDxLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAga29EYmxjbGljayA9IG91dHB1dDxLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAgZmllbGRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuY29uZmlnKCkuYWlUYWJsZSk7XG4gICAgfSk7XG5cbiAgICBjb29yZGluYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8uY29vcmRpbmF0ZTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lcldpZHRoID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZygpLmNvbnRhaW5lcldpZHRoO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVySGVpZ2h0ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZygpLmNvbnRhaW5lckhlaWdodDtcbiAgICB9KTtcblxuICAgIHNjcm9sbFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8uYWlUYWJsZSEuY29udGV4dCEuc2Nyb2xsU3RhdGUoKTtcbiAgICB9KTtcblxuICAgIHZpc2libGVSYW5nZUluZm8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRWaXNpYmxlUmFuZ2VJbmZvKHRoaXMuY29vcmRpbmF0ZSgpISwgdGhpcy5zY3JvbGxTdGF0ZSgpISk7XG4gICAgfSk7XG5cbiAgICBmcm96ZW5BcmVhV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCArIHRoaXMuY29vcmRpbmF0ZSgpIS5mcm96ZW5Db2x1bW5XaWR0aCE7XG4gICAgfSk7XG5cbiAgICBsYXN0Q29sdW1uV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGUoKSEuZ2V0Q29sdW1uV2lkdGgodGhpcy52aXNpYmxlUmFuZ2VJbmZvKCkuY29sdW1uU3RvcEluZGV4KTtcbiAgICB9KTtcblxuICAgIGxhc3RDb2x1bW5PZmZzZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGUoKSEuZ2V0Q29sdW1uT2Zmc2V0KHRoaXMudmlzaWJsZVJhbmdlSW5mbygpLmNvbHVtblN0b3BJbmRleCk7XG4gICAgfSk7XG5cbiAgICBjZWxsR3JvdXBDbGlwV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gdGhpcy5zY3JvbGxTdGF0ZSgpITtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCgpIC0gdGhpcy5mcm96ZW5BcmVhV2lkdGgoKSxcbiAgICAgICAgICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEggKyB0aGlzLmxhc3RDb2x1bW5PZmZzZXQoKSArIHRoaXMubGFzdENvbHVtbldpZHRoKCkgLSBzY3JvbGxMZWZ0IC0gdGhpcy5mcm96ZW5BcmVhV2lkdGgoKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgc3RhZ2VDb25maWcgPSBjb21wdXRlZDxQYXJ0aWFsPFN0YWdlQ29uZmlnPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnNjcm9sbFN0YXRlKCkhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGgoKSxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5jb250YWluZXJIZWlnaHQoKSxcbiAgICAgICAgICAgIGxpc3RlbmluZzogaXNTY3JvbGxpbmcgPyBmYWxzZSA6IHRydWVcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGdyaWRHcm91cENvbmZpZyA9IGNvbXB1dGVkPFBhcnRpYWw8U3RhZ2VDb25maWc+PigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbGlwWDogMCxcbiAgICAgICAgICAgIGNsaXBZOiAwLFxuICAgICAgICAgICAgY2xpcFdpZHRoOiB0aGlzLmNvbnRhaW5lcldpZHRoKCksXG4gICAgICAgICAgICBjbGlwSGVpZ2h0OiB0aGlzLmNvbnRhaW5lckhlaWdodCgpXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb21tb25Hcm91cENvbmZpZyA9IGNvbXB1dGVkPFBhcnRpYWw8U3RhZ2VDb25maWc+PigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbGlwWDogdGhpcy5mcm96ZW5BcmVhV2lkdGgoKSArIDEsXG4gICAgICAgICAgICBjbGlwWTogMCxcbiAgICAgICAgICAgIGNsaXBXaWR0aDogdGhpcy5jZWxsR3JvdXBDbGlwV2lkdGgoKSxcbiAgICAgICAgICAgIGNsaXBIZWlnaHQ6IHRoaXMuY29udGFpbmVySGVpZ2h0KClcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGF0dGFjaEdyb3VwQ29uZmlnID0gY29tcHV0ZWQ8UGFydGlhbDxTdGFnZUNvbmZpZz4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsaXBYOiB0aGlzLmZyb3plbkFyZWFXaWR0aCgpIC0gMSxcbiAgICAgICAgICAgIGNsaXBZOiB0aGlzLmNvb3JkaW5hdGUoKSEucm93SW5pdFNpemUgLSAxLFxuICAgICAgICAgICAgY2xpcFdpZHRoOiB0aGlzLmNvbnRhaW5lcldpZHRoKCkgLSB0aGlzLmZyb3plbkFyZWFXaWR0aCgpLFxuICAgICAgICAgICAgY2xpcEhlaWdodDogdGhpcy5jb250YWluZXJIZWlnaHQoKSAtIHRoaXMuY29vcmRpbmF0ZSgpIS5yb3dJbml0U2l6ZVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgZnJvemVuQXR0YWNoR3JvdXBDb25maWcgPSBjb21wdXRlZDxQYXJ0aWFsPFN0YWdlQ29uZmlnPj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xpcFg6IDAsXG4gICAgICAgICAgICBjbGlwWTogdGhpcy5jb29yZGluYXRlKCkhLnJvd0luaXRTaXplIC0gMSxcbiAgICAgICAgICAgIGNsaXBXaWR0aDogdGhpcy5mcm96ZW5BcmVhV2lkdGgoKSArIDQsXG4gICAgICAgICAgICBjbGlwSGVpZ2h0OiB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC0gdGhpcy5jb29yZGluYXRlKCkhLnJvd0luaXRTaXplXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBvZmZzZXRZQ29uZmlnID0gY29tcHV0ZWQ8UGFydGlhbDxTdGFnZUNvbmZpZz4+KCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AgfSA9IHRoaXMuc2Nyb2xsU3RhdGUoKSE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvZmZzZXRZOiBzY3JvbGxUb3BcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIG9mZnNldFhDb25maWcgPSBjb21wdXRlZDxQYXJ0aWFsPFN0YWdlQ29uZmlnPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNjcm9sbExlZnQgfSA9IHRoaXMuc2Nyb2xsU3RhdGUoKSE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvZmZzZXRYOiBzY3JvbGxMZWZ0XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBvZmZzZXRDb25maWcgPSBjb21wdXRlZDxQYXJ0aWFsPFN0YWdlQ29uZmlnPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCB9ID0gdGhpcy5zY3JvbGxTdGF0ZSgpITtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9mZnNldFg6IHNjcm9sbExlZnQsXG4gICAgICAgICAgICBvZmZzZXRZOiBzY3JvbGxUb3BcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbHVtbkhlYWRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uU3RvcEluZGV4IH0gPSB0aGlzLnZpc2libGVSYW5nZUluZm8oKTtcbiAgICAgICAgY29uc3QgeyBhaVRhYmxlLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBjb25zdCB7IHBvaW50UG9zaXRpb24gfSA9IGFpVGFibGUuY29udGV4dCE7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhaVRhYmxlLFxuICAgICAgICAgICAgY29vcmRpbmF0ZSxcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBjb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uOiBwb2ludFBvc2l0aW9uKClcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNlbGxzQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGFpVGFibGUsIGNvb3JkaW5hdGUsIHJlZmVyZW5jZXMgfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGNvbnN0IHsgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4LCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXggfSA9IHRoaXMudmlzaWJsZVJhbmdlSW5mbygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWlUYWJsZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGUsXG4gICAgICAgICAgICByZWZlcmVuY2VzLFxuICAgICAgICAgICAgcm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIHJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBjb2x1bW5TdG9wSW5kZXhcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGFjdGl2ZUNlbGxCb3JkZXJDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBY3RpdmVDZWxsQm9yZGVyKHRoaXMuY2VsbHNDb25maWcoKSk7XG4gICAgfSk7XG5cbiAgICBzdGFnZU1vdXNlbW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIHRoaXMua29Nb3VzZW1vdmUuZW1pdChlIGFzIEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vkb3duKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgdGhpcy5rb01vdXNlZG93bi5lbWl0KGUgYXMgS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pik7XG4gICAgfVxuXG4gICAgc3RhZ2VDbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIHRoaXMua29DbGljay5lbWl0KGUgYXMgS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pik7XG4gICAgfVxuXG4gICAgc3RhZ2VEYmxjbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIHRoaXMua29EYmxjbGljay5lbWl0KGUgYXMgS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pik7XG4gICAgfVxufVxuIiwiPGtvLXN0YWdlXG4gICAgW2NvbmZpZ109XCJzdGFnZUNvbmZpZygpXCJcbiAgICAoa29Nb3VzZW1vdmUpPVwic3RhZ2VNb3VzZW1vdmUoJGV2ZW50KVwiXG4gICAgKGtvTW91c2Vkb3duKT1cInN0YWdlTW91c2Vkb3duKCRldmVudClcIlxuICAgIChrb0NsaWNrKT1cInN0YWdlQ2xpY2soJGV2ZW50KVwiXG4gICAgKGtvRGJsY2xpY2spPVwic3RhZ2VEYmxjbGljaygkZXZlbnQpXCJcbj5cbiAgICA8a28tbGF5ZXI+XG4gICAgICAgIDxrby1ncm91cCBbY29uZmlnXT1cImdyaWRHcm91cENvbmZpZygpXCI+XG4gICAgICAgICAgICA8a28tZ3JvdXAgW2NvbmZpZ109XCJvZmZzZXRZQ29uZmlnKClcIj5cbiAgICAgICAgICAgICAgICA8YWktdGFibGUtZnJvemVuLWNlbGxzIFtjb25maWddPVwiY2VsbHNDb25maWcoKVwiPjwvYWktdGFibGUtZnJvemVuLWNlbGxzPlxuICAgICAgICAgICAgICAgIDxhaS10YWJsZS1vdGhlci1yb3dzIFtjb25maWddPVwiY2VsbHNDb25maWcoKVwiPjwvYWktdGFibGUtb3RoZXItcm93cz5cbiAgICAgICAgICAgICAgICA8YWktdGFibGUtaG92ZXItcm93LWhlYWRzIFtjb25maWddPVwiY2VsbHNDb25maWcoKVwiPjwvYWktdGFibGUtaG92ZXItcm93LWhlYWRzPlxuICAgICAgICAgICAgICAgIDxhaS10YWJsZS1mcm96ZW4tcGxhY2Vob2xkZXItY2VsbHMgW2NvbmZpZ109XCJjZWxsc0NvbmZpZygpXCI+PC9haS10YWJsZS1mcm96ZW4tcGxhY2Vob2xkZXItY2VsbHM+XG4gICAgICAgICAgICA8L2tvLWdyb3VwPlxuXG4gICAgICAgICAgICA8a28tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGFpLXRhYmxlLWZyb3plbi1jb2x1bW4taGVhZHMgW2NvbmZpZ109XCJjb2x1bW5IZWFkQ29uZmlnKClcIj48L2FpLXRhYmxlLWZyb3plbi1jb2x1bW4taGVhZHM+XG4gICAgICAgICAgICA8L2tvLWdyb3VwPlxuXG4gICAgICAgICAgICA8a28tZ3JvdXAgW2NvbmZpZ109XCJjb21tb25Hcm91cENvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgPGtvLWdyb3VwIFtjb25maWddPVwib2Zmc2V0Q29uZmlnKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFpLXRhYmxlLWNlbGxzIFtjb25maWddPVwiY2VsbHNDb25maWcoKVwiPjwvYWktdGFibGUtY2VsbHM+XG4gICAgICAgICAgICAgICAgPC9rby1ncm91cD5cblxuICAgICAgICAgICAgICAgIDxrby1ncm91cCBbY29uZmlnXT1cIm9mZnNldFhDb25maWcoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YWktdGFibGUtY29sdW1uLWhlYWRzIFtjb25maWddPVwiY29sdW1uSGVhZENvbmZpZygpXCI+PC9haS10YWJsZS1jb2x1bW4taGVhZHM+XG4gICAgICAgICAgICAgICAgICAgIDxhaS10YWJsZS1hZGQtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb29yZGluYXRlXT1cImNvb3JkaW5hdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5TdG9wSW5kZXhdPVwidmlzaWJsZVJhbmdlSW5mbygpLmNvbHVtblN0b3BJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FpLXRhYmxlLWFkZC1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2tvLWdyb3VwPlxuICAgICAgICAgICAgPC9rby1ncm91cD5cblxuICAgICAgICAgICAgPGtvLWdyb3VwIFtjb25maWddPVwiYXR0YWNoR3JvdXBDb25maWcoKVwiPlxuICAgICAgICAgICAgICAgIDxrby1ncm91cCBbY29uZmlnXT1cIm9mZnNldENvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhaS10YWJsZS1wbGFjZWhvbGRlci1jZWxscyBbY29uZmlnXT1cImNlbGxzQ29uZmlnKClcIj48L2FpLXRhYmxlLXBsYWNlaG9sZGVyLWNlbGxzPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUNlbGxCb3JkZXJDb25maWcoKS5hY3RpdmVDZWxsQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cImFjdGl2ZUNlbGxCb3JkZXJDb25maWcoKS5hY3RpdmVDZWxsQm9yZGVyIVwiPjwva28tcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwva28tZ3JvdXA+XG4gICAgICAgICAgICA8L2tvLWdyb3VwPlxuXG4gICAgICAgICAgICA8a28tZ3JvdXAgW2NvbmZpZ109XCJmcm96ZW5BdHRhY2hHcm91cENvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgPGtvLWdyb3VwIFtjb25maWddPVwib2Zmc2V0WUNvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlQ2VsbEJvcmRlckNvbmZpZygpLmZyb3plbkFjdGl2ZUNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxrby1yZWN0IFtjb25maWddPVwiYWN0aXZlQ2VsbEJvcmRlckNvbmZpZygpLmZyb3plbkFjdGl2ZUNlbGxCb3JkZXIhXCI+PC9rby1yZWN0PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9rby1ncm91cD5cbiAgICAgICAgICAgIDwva28tZ3JvdXA+XG4gICAgICAgIDwva28tZ3JvdXA+XG4gICAgPC9rby1sYXllcj5cbjwva28tc3RhZ2U+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==