@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,71 @@
1
+ import { getFieldOptionByField } from '../core';
2
+ import { AI_TABLE_GRID_FIELD_SERVICE_MAP } from '../services';
3
+ export function getColumnIndicesMap(fields) {
4
+ const columnIndicesMap = {};
5
+ fields?.forEach((field, index) => {
6
+ columnIndicesMap[index] = field.width ?? getFieldOptionByField(field).width;
7
+ });
8
+ return columnIndicesMap;
9
+ }
10
+ /**
11
+ * 获取单元格位置
12
+ * 根据单元格是否是第一列/最后一列确定单元格所在的位置
13
+ */
14
+ export function getCellHorizontalPosition(options) {
15
+ const { columnWidth } = options;
16
+ return { width: columnWidth, offset: 0 };
17
+ }
18
+ export function transformCellValue(aiTable, field, cellValue) {
19
+ const fieldService = AI_TABLE_GRID_FIELD_SERVICE_MAP.get(aiTable);
20
+ if (!fieldService) {
21
+ return cellValue;
22
+ }
23
+ const fieldRenderers = fieldService.aiFieldConfig?.fieldRenderers;
24
+ if (!fieldRenderers) {
25
+ return cellValue;
26
+ }
27
+ const cellTransform = fieldRenderers[field.type]?.transform;
28
+ if (!cellTransform) {
29
+ return cellValue;
30
+ }
31
+ const cellText = cellTransform(field, cellValue);
32
+ if (cellText == null) {
33
+ return cellValue;
34
+ }
35
+ return cellText;
36
+ }
37
+ /**
38
+ * `\u4e00`: https://www.compart.com/en/unicode/U+4E00
39
+ * `\u9fa5`: https://www.compart.com/en/unicode/U+9FA5
40
+ */
41
+ const UNIFIED_IDEOGRAPHS_REGEX = /^[\u4e00-\u9fa5]+$/;
42
+ const SET_OF_LETTERS_REGEX = /^[a-zA-Z\/ ]+$/;
43
+ export function getAvatarShortName(name) {
44
+ if (!name) {
45
+ return '';
46
+ }
47
+ name = name.trim();
48
+ if (UNIFIED_IDEOGRAPHS_REGEX.test(name) && name.length > 2) {
49
+ return name.slice(name.length - 2);
50
+ }
51
+ if (SET_OF_LETTERS_REGEX.test(name) && name.indexOf(' ') > 0) {
52
+ const words = name.split(' ');
53
+ return (words[0].slice(0, 1) + words[1].slice(0, 1)).toUpperCase();
54
+ }
55
+ return name.length > 2 ? name.slice(0, 2).toUpperCase() : name.toUpperCase();
56
+ }
57
+ export function getAvatarBgColor(name) {
58
+ if (!name) {
59
+ return;
60
+ }
61
+ const colors = ['#56abfb', '#5dcfff', '#84e17e', '#73d897', '#ff9f73', '#fa8888', '#fb7fb7', '#9a7ef4', '#868af6'];
62
+ const nameArray = name.split('');
63
+ const code = name && name.length > 0
64
+ ? nameArray.reduce(function (result, item) {
65
+ result.value += item.charCodeAt(0);
66
+ return result;
67
+ }, { value: 0 }).value
68
+ : 0;
69
+ return colors[code % 9];
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3V0aWxzL2NlbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5RCxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2RyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQXNCO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQW1CLEVBQUUsQ0FBQztJQUM1QyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUsscUJBQXFCLENBQUMsS0FBSyxDQUF3QixDQUFDLEtBQUssQ0FBQztJQUN4RyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxPQUEwRTtJQUNoSCxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFVLE9BQWdCLEVBQUUsS0FBbUIsRUFBRSxTQUFxQjtJQUNwRyxNQUFNLFlBQVksR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQztJQUNsRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFD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ZWxkLCBBSVRhYmxlRmllbGRPcHRpb24sIEZpZWxkVmFsdWUsIGdldEZpZWxkT3B0aW9uQnlGaWVsZCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlfVEFCTEVfR1JJRF9GSUVMRF9TRVJWSUNFX01BUCB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEFJVGFibGVTaXplTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uSW5kaWNlc01hcChmaWVsZHM6IEFJVGFibGVGaWVsZFtdKSB7XG4gICAgY29uc3QgY29sdW1uSW5kaWNlc01hcDogQUlUYWJsZVNpemVNYXAgPSB7fTtcbiAgICBmaWVsZHM/LmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb2x1bW5JbmRpY2VzTWFwW2luZGV4XSA9IGZpZWxkLndpZHRoID8/IChnZXRGaWVsZE9wdGlvbkJ5RmllbGQoZmllbGQpIGFzIEFJVGFibGVGaWVsZE9wdGlvbikud2lkdGg7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbkluZGljZXNNYXA7XG59XG5cbi8qKlxuICog6I635Y+W5Y2V5YWD5qC85L2N572uXG4gKiDmoLnmja7ljZXlhYPmoLzmmK/lkKbmmK/nrKzkuIDliJcv5pyA5ZCO5LiA5YiX56Gu5a6a5Y2V5YWD5qC85omA5Zyo55qE5L2N572uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDZWxsSG9yaXpvbnRhbFBvc2l0aW9uKG9wdGlvbnM6IHsgY29sdW1uV2lkdGg6IG51bWJlcjsgY29sdW1uSW5kZXg6IG51bWJlcjsgY29sdW1uQ291bnQ6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyBjb2x1bW5XaWR0aCB9ID0gb3B0aW9ucztcbiAgICByZXR1cm4geyB3aWR0aDogY29sdW1uV2lkdGgsIG9mZnNldDogMCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtQ2VsbFZhbHVlPFQgPSBhbnk+KGFpVGFibGU6IEFJVGFibGUsIGZpZWxkOiBBSVRhYmxlRmllbGQsIGNlbGxWYWx1ZTogRmllbGRWYWx1ZSk6IFQge1xuICAgIGNvbnN0IGZpZWxkU2VydmljZSA9IEFJX1RBQkxFX0dSSURfRklFTERfU0VSVklDRV9NQVAuZ2V0KGFpVGFibGUpO1xuXG4gICAgaWYgKCFmaWVsZFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFJlbmRlcmVycyA9IGZpZWxkU2VydmljZS5haUZpZWxkQ29uZmlnPy5maWVsZFJlbmRlcmVycztcbiAgICBpZiAoIWZpZWxkUmVuZGVyZXJzKSB7XG4gICAgICAgIHJldHVybiBjZWxsVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2VsbFRyYW5zZm9ybSA9IGZpZWxkUmVuZGVyZXJzW2ZpZWxkLnR5cGVdPy50cmFuc2Zvcm07XG4gICAgaWYgKCFjZWxsVHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBjZWxsVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2VsbFRleHQgPSBjZWxsVHJhbnNmb3JtKGZpZWxkLCBjZWxsVmFsdWUpO1xuXG4gICAgaWYgKGNlbGxUZXh0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFRleHQ7XG59XG5cbi8qKlxuICogYFxcdTRlMDBgOiBodHRwczovL3d3dy5jb21wYXJ0LmNvbS9lbi91bmljb2RlL1UrNEUwMFxuICogYFxcdTlmYTVgOiBodHRwczovL3d3dy5jb21wYXJ0LmNvbS9lbi91bmljb2RlL1UrOUZBNVxuICovXG5jb25zdCBVTklGSUVEX0lERU9HUkFQSFNfUkVHRVggPSAvXltcXHU0ZTAwLVxcdTlmYTVdKyQvO1xuXG5jb25zdCBTRVRfT0ZfTEVUVEVSU19SRUdFWCA9IC9eW2EtekEtWlxcLyBdKyQvO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhdGFyU2hvcnROYW1lKG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbmFtZSA9IG5hbWUudHJpbSgpO1xuXG4gICAgaWYgKFVOSUZJRURfSURFT0dSQVBIU19SRUdFWC50ZXN0KG5hbWUpICYmIG5hbWUubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gbmFtZS5zbGljZShuYW1lLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIGlmIChTRVRfT0ZfTEVUVEVSU19SRUdFWC50ZXN0KG5hbWUpICYmIG5hbWUuaW5kZXhPZignICcpID4gMCkge1xuICAgICAgICBjb25zdCB3b3Jkczogc3RyaW5nW10gPSBuYW1lLnNwbGl0KCcgJyk7XG4gICAgICAgIHJldHVybiAod29yZHNbMF0uc2xpY2UoMCwgMSkgKyB3b3Jkc1sxXS5zbGljZSgwLCAxKSkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAyID8gbmFtZS5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpIDogbmFtZS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhdGFyQmdDb2xvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBbJyM1NmFiZmInLCAnIzVkY2ZmZicsICcjODRlMTdlJywgJyM3M2Q4OTcnLCAnI2ZmOWY3MycsICcjZmE4ODg4JywgJyNmYjdmYjcnLCAnIzlhN2VmNCcsICcjODY4YWY2J107XG4gICAgY29uc3QgbmFtZUFycmF5OiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJycpO1xuICAgIGNvbnN0IGNvZGU6IG51bWJlciA9XG4gICAgICAgIG5hbWUgJiYgbmFtZS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IG5hbWVBcnJheS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlICs9IGl0ZW0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IDAgfVxuICAgICAgICAgICAgICApLnZhbHVlXG4gICAgICAgICAgICA6IDA7XG4gICAgcmV0dXJuIGNvbG9yc1tjb2RlICUgOV07XG59XG4iXX0=
@@ -0,0 +1,49 @@
1
+ import { AI_TABLE_BLANK } from '../constants';
2
+ /**
3
+ * 生成目标名称
4
+ */
5
+ export const generateTargetName = ({ targetName, fieldId, recordId, mouseStyle }) => {
6
+ const flag = '$';
7
+ return `${targetName}.${fieldId || flag}.${recordId || flag}.${mouseStyle || flag}`;
8
+ };
9
+ /**
10
+ * 取目标名称
11
+ */
12
+ export const getTargetName = (targetName) => {
13
+ if (targetName == null || targetName === '')
14
+ return AI_TABLE_BLANK;
15
+ return targetName.split('.')[0];
16
+ };
17
+ /**
18
+ * Parse targetName for built-in information
19
+ */
20
+ export const getDetailByTargetName = (_targetName) => {
21
+ if (_targetName == null) {
22
+ return {
23
+ targetName: null,
24
+ fieldId: null,
25
+ recordId: null,
26
+ mouseStyle: null
27
+ };
28
+ }
29
+ const flag = '$';
30
+ const [targetName, fieldId, recordId, mouseStyle] = _targetName.split('.');
31
+ return {
32
+ targetName,
33
+ fieldId: fieldId === flag ? null : fieldId,
34
+ recordId: recordId === flag ? null : recordId,
35
+ mouseStyle: mouseStyle === flag ? null : mouseStyle
36
+ };
37
+ };
38
+ /**
39
+ * 转换为字符串
40
+ * @param value
41
+ * @returns
42
+ */
43
+ export const castToString = (value) => {
44
+ if (value == null) {
45
+ return null;
46
+ }
47
+ return typeof value !== 'string' ? String(value) : value;
48
+ };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHOUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUE0QixFQUFFLEVBQUU7SUFDMUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxVQUFVLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN4RixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQTBCLEVBQUUsRUFBRTtJQUN4RCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxLQUFLLEVBQUU7UUFBRSxPQUFPLGNBQWMsQ0FBQztJQUNuRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFdBQTBCLEVBQTJCLEVBQUU7SUFDekYsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTztZQUNILFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtTQUNuQixDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNqQixNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRSxPQUFPO1FBQ0gsVUFBVTtRQUNWLE9BQU8sRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDMUMsUUFBUSxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUM3QyxVQUFVLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO0tBQ3RELENBQUM7QUFDTixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFpQixFQUFFO0lBQ3pELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlfVEFCTEVfQkxBTksgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZVRhcmdldE5hbWVEZXRhaWwsIEFJVGFibGVUYXJnZXROYW1lT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiDnlJ/miJDnm67moIflkI3np7BcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlVGFyZ2V0TmFtZSA9ICh7IHRhcmdldE5hbWUsIGZpZWxkSWQsIHJlY29yZElkLCBtb3VzZVN0eWxlIH06IEFJVGFibGVUYXJnZXROYW1lT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGZsYWcgPSAnJCc7XG4gICAgcmV0dXJuIGAke3RhcmdldE5hbWV9LiR7ZmllbGRJZCB8fCBmbGFnfS4ke3JlY29yZElkIHx8IGZsYWd9LiR7bW91c2VTdHlsZSB8fCBmbGFnfWA7XG59O1xuXG4vKipcbiAqICDlj5bnm67moIflkI3np7BcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhcmdldE5hbWUgPSAodGFyZ2V0TmFtZT86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBpZiAodGFyZ2V0TmFtZSA9PSBudWxsIHx8IHRhcmdldE5hbWUgPT09ICcnKSByZXR1cm4gQUlfVEFCTEVfQkxBTks7XG4gICAgcmV0dXJuIHRhcmdldE5hbWUuc3BsaXQoJy4nKVswXTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGFyZ2V0TmFtZSBmb3IgYnVpbHQtaW4gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERldGFpbEJ5VGFyZ2V0TmFtZSA9IChfdGFyZ2V0TmFtZTogc3RyaW5nIHwgbnVsbCk6IEFJVGFibGVUYXJnZXROYW1lRGV0YWlsID0+IHtcbiAgICBpZiAoX3RhcmdldE5hbWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0TmFtZTogbnVsbCxcbiAgICAgICAgICAgIGZpZWxkSWQ6IG51bGwsXG4gICAgICAgICAgICByZWNvcmRJZDogbnVsbCxcbiAgICAgICAgICAgIG1vdXNlU3R5bGU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFnID0gJyQnO1xuICAgIGNvbnN0IFt0YXJnZXROYW1lLCBmaWVsZElkLCByZWNvcmRJZCwgbW91c2VTdHlsZV0gPSBfdGFyZ2V0TmFtZS5zcGxpdCgnLicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQgPT09IGZsYWcgPyBudWxsIDogZmllbGRJZCxcbiAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkID09PSBmbGFnID8gbnVsbCA6IHJlY29yZElkLFxuICAgICAgICBtb3VzZVN0eWxlOiBtb3VzZVN0eWxlID09PSBmbGFnID8gbnVsbCA6IG1vdXNlU3R5bGVcbiAgICB9O1xufTtcblxuLyoqXG4gKiDovazmjaLkuLrlrZfnrKbkuLJcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNhc3RUb1N0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlO1xufTtcbiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { AI_TABLE_CELL, AI_TABLE_OFFSET, Colors } from '../constants';
2
+ import { AITable } from '../core';
3
+ import { AITableRowType } from '../types';
4
+ import { getCellHorizontalPosition } from './cell';
5
+ import { generateTargetName } from './common';
6
+ export function getPlaceHolderCellsConfigs(options) {
7
+ const { aiTable, coordinate, columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } = options;
8
+ const { linearRows } = aiTable.context;
9
+ const { rowHeight, columnCount, rowCount } = coordinate;
10
+ const visibleColumns = AITable.getVisibleFields(aiTable);
11
+ let configs = [];
12
+ for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {
13
+ // 当前列索引超出总列数范围,返回空
14
+ if (columnIndex > columnCount - 1) {
15
+ return [];
16
+ }
17
+ const field = visibleColumns[columnIndex];
18
+ const fieldId = field._id;
19
+ // 当前列不存在,返回空
20
+ if (field == null) {
21
+ return [];
22
+ }
23
+ // 当前列的 X 轴偏移量和列宽度
24
+ const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;
25
+ const columnWidth = coordinate.getColumnWidth(columnIndex);
26
+ for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {
27
+ // 当前行索引是否超出总行数范围,超出则退出循环
28
+ if (rowIndex > rowCount - 1) {
29
+ break;
30
+ }
31
+ const row = linearRows()[rowIndex];
32
+ const { _id: recordId, type } = row;
33
+ if (type !== AITableRowType.record) {
34
+ continue;
35
+ }
36
+ // 当前行的 Y 轴偏移量,并根据列宽和列索引获取单元格的水平位置(宽度和偏移量)
37
+ const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;
38
+ const { width, offset } = getCellHorizontalPosition({
39
+ columnWidth,
40
+ columnIndex,
41
+ columnCount
42
+ });
43
+ const height = rowHeight;
44
+ configs.unshift({
45
+ key: `placeholder-cell-${fieldId}-${recordId}`,
46
+ name: generateTargetName({
47
+ targetName: AI_TABLE_CELL,
48
+ fieldId,
49
+ recordId
50
+ }),
51
+ x: x + offset,
52
+ y,
53
+ width,
54
+ height,
55
+ fill: Colors.transparent,
56
+ strokeEnabled: false,
57
+ hitStrokeWidth: 0,
58
+ transformsEnabled: 'position',
59
+ perfectDrawEnabled: false,
60
+ shadowEnabled: false
61
+ });
62
+ }
63
+ }
64
+ return configs;
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBsYWNlaG9sZGVyLWNlbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvdXRpbHMvZ2V0LXBsYWNlaG9sZGVyLWNlbGxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBc0IsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFOUMsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE9BQTJCO0lBQ2xFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3hHLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBUSxDQUFDO0lBQ3hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUN4RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFekQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssSUFBSSxXQUFXLEdBQUcsZ0JBQWdCLEVBQUUsV0FBVyxJQUFJLGVBQWUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ3JGLG1CQUFtQjtRQUNuQixJQUFJLFdBQVcsR0FBRyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFMUIsYUFBYTtRQUNiLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLGVBQWUsQ0FBQztRQUNwRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELEtBQUssSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLFFBQVEsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN0RSx5QkFBeUI7WUFDekIsSUFBSSxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBQ1YsQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUNwQyxJQUFJLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLFNBQVM7WUFDYixDQUFDO1lBRUQsMENBQTBDO1lBQzFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO1lBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcseUJBQXlCLENBQUM7Z0JBQ2hELFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxXQUFXO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ1osR0FBRyxFQUFFLG9CQUFvQixPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM5QyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixPQUFPO29CQUNQLFFBQVE7aUJBQ1gsQ0FBQztnQkFDRixDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU07Z0JBQ2IsQ0FBQztnQkFDRCxLQUFLO2dCQUNMLE1BQU07Z0JBQ04sSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUN4QixhQUFhLEVBQUUsS0FBSztnQkFDcEIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLGlCQUFpQixFQUFFLFVBQVU7Z0JBQzdCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLGFBQWEsRUFBRSxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFJX1RBQkxFX0NFTEwsIEFJX1RBQkxFX09GRlNFVCwgQ29sb3JzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGUgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVDZWxsc0NvbmZpZywgQUlUYWJsZVJvd1R5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDZWxsSG9yaXpvbnRhbFBvc2l0aW9uIH0gZnJvbSAnLi9jZWxsJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBsYWNlSG9sZGVyQ2VsbHNDb25maWdzKG9wdGlvbnM6IEFJVGFibGVDZWxsc0NvbmZpZykge1xuICAgIGNvbnN0IHsgYWlUYWJsZSwgY29vcmRpbmF0ZSwgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uU3RvcEluZGV4LCByb3dTdGFydEluZGV4LCByb3dTdG9wSW5kZXggfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBsaW5lYXJSb3dzIH0gPSBhaVRhYmxlLmNvbnRleHQhO1xuICAgIGNvbnN0IHsgcm93SGVpZ2h0LCBjb2x1bW5Db3VudCwgcm93Q291bnQgfSA9IGNvb3JkaW5hdGU7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSk7XG5cbiAgICBsZXQgY29uZmlncyA9IFtdO1xuICAgIGZvciAobGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICAgIC8vIOW9k+WJjeWIl+e0ouW8lei2heWHuuaAu+WIl+aVsOiMg+WbtO+8jOi/lOWbnuepulxuICAgICAgICBpZiAoY29sdW1uSW5kZXggPiBjb2x1bW5Db3VudCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IHZpc2libGVDb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgY29uc3QgZmllbGRJZCA9IGZpZWxkLl9pZDtcblxuICAgICAgICAvLyDlvZPliY3liJfkuI3lrZjlnKjvvIzov5Tlm57nqbpcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOW9k+WJjeWIl+eahCBYIOi9tOWBj+enu+mHj+WSjOWIl+WuveW6plxuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuXG4gICAgICAgIGZvciAobGV0IHJvd0luZGV4ID0gcm93U3RhcnRJbmRleDsgcm93SW5kZXggPD0gcm93U3RvcEluZGV4OyByb3dJbmRleCsrKSB7XG4gICAgICAgICAgICAvLyDlvZPliY3ooYzntKLlvJXmmK/lkKbotoXlh7rmgLvooYzmlbDojIPlm7TvvIzotoXlh7rliJnpgIDlh7rlvqrnjq9cbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA+IHJvd0NvdW50IC0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByb3cgPSBsaW5lYXJSb3dzKClbcm93SW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgeyBfaWQ6IHJlY29yZElkLCB0eXBlIH0gPSByb3c7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gQUlUYWJsZVJvd1R5cGUucmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOW9k+WJjeihjOeahCBZIOi9tOWBj+enu+mHj++8jOW5tuagueaNruWIl+WuveWSjOWIl+e0ouW8leiOt+WPluWNleWFg+agvOeahOawtOW5s+S9jee9ru+8iOWuveW6puWSjOWBj+enu+mHj++8iVxuICAgICAgICAgICAgY29uc3QgeSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KSArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIG9mZnNldCB9ID0gZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgY29sdW1uQ291bnRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICBjb25maWdzLnVuc2hpZnQoe1xuICAgICAgICAgICAgICAgIGtleTogYHBsYWNlaG9sZGVyLWNlbGwtJHtmaWVsZElkfS0ke3JlY29yZElkfWAsXG4gICAgICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWRcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB4OiB4ICsgb2Zmc2V0LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy50cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgICBzdHJva2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoaXRTdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zRW5hYmxlZDogJ3Bvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICBwZXJmZWN0RHJhd0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoYWRvd0VuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlncztcbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { LRUCache } from 'lru-cache';
2
+ import { DEFAULT_TEXT_MAX_CACHE } from '../constants';
3
+ const fontCache = {};
4
+ export const textDataCache = new LRUCache({
5
+ max: DEFAULT_TEXT_MAX_CACHE
6
+ });
7
+ /**
8
+ * 计算给定文本在指定字体和 Canvas 环境下的宽度。
9
+ * 它通过缓存机制来优化性能,避免重复计算相同文本的宽度
10
+ */
11
+ export const getTextWidth = (ctx, text, font) => {
12
+ let width = 0;
13
+ if (!text || typeof text !== 'string') {
14
+ return width;
15
+ }
16
+ let cacheOfFont = fontCache[font];
17
+ if (!cacheOfFont) {
18
+ cacheOfFont = fontCache[font] = new LRUCache({
19
+ max: 500
20
+ });
21
+ }
22
+ width = cacheOfFont.get(text);
23
+ if (width == null) {
24
+ ctx.font = font;
25
+ width = ctx.measureText(text).width;
26
+ cacheOfFont.set(text, width);
27
+ }
28
+ return width;
29
+ };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRleHQtd2lkdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9nZXQtdGV4dC13aWR0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd0RCxNQUFNLFNBQVMsR0FBZ0QsRUFBRSxDQUFDO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLFFBQVEsQ0FBZ0M7SUFDckUsR0FBRyxFQUFFLHNCQUFzQjtDQUM5QixDQUFDLENBQUM7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUE2QixFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN0RixJQUFJLEtBQUssR0FBdUIsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDZixXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDO1lBQ3pDLEdBQUcsRUFBRSxHQUFHO1NBQ1gsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxHQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgREVGQVVMVF9URVhUX01BWF9DQUNIRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlV3JhcFRleHRSZXN1bHQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGZvbnRDYWNoZTogeyBba2V5OiBzdHJpbmddOiBMUlVDYWNoZTxzdHJpbmcsIG51bWJlcj4gfSA9IHt9O1xuZXhwb3J0IGNvbnN0IHRleHREYXRhQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBBSVRhYmxlV3JhcFRleHRSZXN1bHQ+KHtcbiAgICBtYXg6IERFRkFVTFRfVEVYVF9NQVhfQ0FDSEVcbn0pO1xuXG4vKipcbiAqIOiuoeeul+e7meWumuaWh+acrOWcqOaMh+WumuWtl+S9k+WSjCBDYW52YXMg546v5aKD5LiL55qE5a695bqm44CCXG4gKiDlroPpgJrov4fnvJPlrZjmnLrliLbmnaXkvJjljJbmgKfog73vvIzpgb/lhY3ph43lpI3orqHnrpfnm7jlkIzmlofmnKznmoTlrr3luqZcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRXaWR0aCA9IChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGV4dDogc3RyaW5nLCBmb250OiBzdHJpbmcpID0+IHtcbiAgICBsZXQgd2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG4gICAgaWYgKCF0ZXh0IHx8IHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuICAgIGxldCBjYWNoZU9mRm9udCA9IGZvbnRDYWNoZVtmb250XTtcbiAgICBpZiAoIWNhY2hlT2ZGb250KSB7XG4gICAgICAgIGNhY2hlT2ZGb250ID0gZm9udENhY2hlW2ZvbnRdID0gbmV3IExSVUNhY2hlKHtcbiAgICAgICAgICAgIG1heDogNTAwXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aWR0aCA9IGNhY2hlT2ZGb250LmdldCh0ZXh0KTtcbiAgICBpZiAod2lkdGggPT0gbnVsbCkge1xuICAgICAgICBjdHguZm9udCA9IGZvbnQ7XG4gICAgICAgIHdpZHRoID0gY3R4IS5tZWFzdXJlVGV4dCh0ZXh0KS53aWR0aDtcbiAgICAgICAgY2FjaGVPZkZvbnQuc2V0KHRleHQsIHdpZHRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG59O1xuIl19
@@ -0,0 +1,57 @@
1
+ export const imageCache = (() => {
2
+ const imageMap = {};
3
+ const imgPromises = [];
4
+ function loadImage(name, src, option) {
5
+ imgPromises.push(new Promise((resolve, reject) => {
6
+ const img = new Image();
7
+ img.src = src;
8
+ img.referrerPolicy = 'no-referrer';
9
+ if (!option?.crossOrigin) {
10
+ img.crossOrigin = 'Anonymous';
11
+ }
12
+ imageMap[name] = {
13
+ img,
14
+ success: false
15
+ };
16
+ try {
17
+ img.onload = () => {
18
+ imageMap[name] = {
19
+ img,
20
+ success: true
21
+ };
22
+ resolve({
23
+ name,
24
+ img
25
+ });
26
+ };
27
+ }
28
+ catch (err) {
29
+ imageMap[name] = {
30
+ img,
31
+ success: false
32
+ };
33
+ reject(err);
34
+ }
35
+ }));
36
+ }
37
+ function imageMapOnload(callback) {
38
+ Promise.all(imgPromises).then(callback);
39
+ }
40
+ function getImage(name) {
41
+ const imgInfo = imageMap[name];
42
+ if (imgInfo == null) {
43
+ return null;
44
+ }
45
+ const { img, success } = imgInfo;
46
+ if (!success)
47
+ return false;
48
+ return img;
49
+ }
50
+ return {
51
+ loadImage,
52
+ getImage,
53
+ imageMapOnload,
54
+ imageMap
55
+ };
56
+ })();
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9pbWFnZS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDNUIsTUFBTSxRQUFRLEdBS1YsRUFBRSxDQUFDO0lBQ1AsTUFBTSxXQUFXLEdBQVEsRUFBRSxDQUFDO0lBRTVCLFNBQVMsU0FBUyxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsTUFBMkI7UUFDckUsV0FBVyxDQUFDLElBQUksQ0FDWixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBRXhCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2QsR0FBRyxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7WUFFbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbEMsQ0FBQztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDYixHQUFHO2dCQUNILE9BQU8sRUFBRSxLQUFLO2FBQ2pCLENBQUM7WUFFRixJQUFJLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7b0JBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHO3dCQUNiLEdBQUc7d0JBQ0gsT0FBTyxFQUFFLElBQUk7cUJBQ2hCLENBQUM7b0JBQ0YsT0FBTyxDQUFDO3dCQUNKLElBQUk7d0JBQ0osR0FBRztxQkFDTixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDO1lBQ04sQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ1gsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHO29CQUNiLEdBQUc7b0JBQ0gsT0FBTyxFQUFFLEtBQUs7aUJBQ2pCLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsY0FBYyxDQUFDLFFBQWE7UUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFNBQVMsUUFBUSxDQUFDLElBQVk7UUFDMUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVqQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU87UUFDSCxTQUFTO1FBQ1QsUUFBUTtRQUNSLGNBQWM7UUFDZCxRQUFRO0tBQ1gsQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQUlUYWJsZUltYWdlT3B0aW9uIHtcbiAgICBjcm9zc09yaWdpbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBpbWFnZUNhY2hlID0gKCgpID0+IHtcbiAgICBjb25zdCBpbWFnZU1hcDoge1xuICAgICAgICBbbmFtZTogc3RyaW5nXToge1xuICAgICAgICAgICAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50O1xuICAgICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG4gICAgY29uc3QgaW1nUHJvbWlzZXM6IGFueSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbG9hZEltYWdlKG5hbWU6IHN0cmluZywgc3JjOiBzdHJpbmcsIG9wdGlvbj86IEFJVGFibGVJbWFnZU9wdGlvbikge1xuICAgICAgICBpbWdQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgaW1nLnNyYyA9IHNyYztcbiAgICAgICAgICAgICAgICBpbWcucmVmZXJyZXJQb2xpY3kgPSAnbm8tcmVmZXJyZXInO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24/LmNyb3NzT3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGltYWdlTWFwW25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBpbWcsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcFtuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXBbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGltYWdlTWFwT25sb2FkKGNhbGxiYWNrOiBhbnkpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoaW1nUHJvbWlzZXMpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEltYWdlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpbWdJbmZvID0gaW1hZ2VNYXBbbmFtZV07XG5cbiAgICAgICAgaWYgKGltZ0luZm8gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGltZywgc3VjY2VzcyB9ID0gaW1nSW5mbztcblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGltZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsb2FkSW1hZ2UsXG4gICAgICAgIGdldEltYWdlLFxuICAgICAgICBpbWFnZU1hcE9ubG9hZCxcbiAgICAgICAgaW1hZ2VNYXBcbiAgICB9O1xufSkoKTtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export * from './build';
2
+ export * from './cell';
3
+ export * from './common';
4
+ export * from './get-placeholder-cells';
5
+ export * from './get-text-width';
6
+ export * from './image-cache';
7
+ export * from './os';
8
+ export * from './position';
9
+ export * from './style';
10
+ export * from './text-measure';
11
+ export * from './visible-range';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idWlsZCc7XG5leHBvcnQgKiBmcm9tICcuL2NlbGwnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtcGxhY2Vob2xkZXItY2VsbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtdGV4dC13aWR0aCc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLWNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vb3MnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3NpdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3N0eWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dC1tZWFzdXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlzaWJsZS1yYW5nZSc7XG4iXX0=
@@ -0,0 +1,16 @@
1
+ export const isWindowsOS = () => {
2
+ const agent = navigator.userAgent.toLowerCase();
3
+ if (agent.indexOf('win32') >= 0 || agent.indexOf('wow32') >= 0) {
4
+ return true;
5
+ }
6
+ if (agent.indexOf('win64') >= 0 || agent.indexOf('wow64') >= 0) {
7
+ return true;
8
+ }
9
+ return false;
10
+ };
11
+ export const isWindows = isWindowsOS();
12
+ export const isMac = () => {
13
+ const agent = navigator.userAgent;
14
+ return /macintosh/i.test(agent);
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO0lBQzVCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUd2QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO0lBQ3RCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDbEMsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc1dpbmRvd3NPUyA9ICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoYWdlbnQuaW5kZXhPZignd2luMzInKSA+PSAwIHx8IGFnZW50LmluZGV4T2YoJ3dvdzMyJykgPj0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGFnZW50LmluZGV4T2YoJ3dpbjY0JykgPj0gMCB8fCBhZ2VudC5pbmRleE9mKCd3b3c2NCcpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBpc1dpbmRvd3NPUygpO1xuXG5cbmV4cG9ydCBjb25zdCBpc01hYyA9ICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIC9tYWNpbnRvc2gvaS50ZXN0KGFnZW50KTtcbn07XG4iXX0=
@@ -0,0 +1,48 @@
1
+ import { AI_TABLE_BLANK, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';
2
+ import { AITableAreaType } from '../types';
3
+ import { getTargetName } from './common';
4
+ import { scrollMax } from './visible-range';
5
+ export const getMousePosition = (x, y, coordinate, fields, context, _targetName) => {
6
+ const { scrollTop, scrollLeft } = context.scrollState();
7
+ const { scrollMaxWidth, scrollMaxHeight } = scrollMax(coordinate, fields);
8
+ const offsetTop = scrollTop + y;
9
+ const rowIndex = coordinate.getRowStartIndex(offsetTop);
10
+ const offsetLeft = isWithinFrozenColumnBoundary(x, coordinate.frozenColumnWidth) ? x : scrollLeft + x;
11
+ const columnIndex = coordinate.getColumnStartIndex(offsetLeft);
12
+ const areaType = offsetLeft <= scrollMaxWidth && offsetTop <= scrollMaxHeight ? AITableAreaType.grid : AITableAreaType.none;
13
+ const targetName = getTargetName(_targetName);
14
+ return {
15
+ areaType,
16
+ targetName, // As a simple operational identifier, with prefix name only
17
+ realTargetName: _targetName || AI_TABLE_BLANK, // Real name
18
+ rowIndex,
19
+ columnIndex,
20
+ offsetTop,
21
+ offsetLeft,
22
+ x,
23
+ y
24
+ };
25
+ };
26
+ export const isWithinFrozenColumnBoundary = (x, frozenColumnWidth) => {
27
+ const max = AI_TABLE_ROW_HEAD_WIDTH + frozenColumnWidth;
28
+ const min = AI_TABLE_ROW_HEAD_WIDTH;
29
+ return x > min && x < max;
30
+ };
31
+ export const getEditorSpace = (widthOrHeight) => {
32
+ return widthOrHeight + AI_TABLE_OFFSET * 2;
33
+ };
34
+ export const getEditorBoxOffset = () => {
35
+ return -AI_TABLE_OFFSET;
36
+ };
37
+ export const getCellEditorBorderSpace = () => {
38
+ return AI_TABLE_CELL_ACTIVE_BORDER_WIDTH * 2 - AI_TABLE_OFFSET * 2;
39
+ };
40
+ export const getHoverEditorSpace = (widthOrHeight) => {
41
+ const borderSpace = getCellEditorBorderSpace();
42
+ return widthOrHeight - borderSpace;
43
+ };
44
+ export const getHoverEditorBoxOffset = () => {
45
+ const borderSpace = getCellEditorBorderSpace();
46
+ return borderSpace / 2;
47
+ };
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlDQUFpQyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzVCLENBQVMsRUFDVCxDQUFTLEVBQ1QsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsT0FBd0IsRUFDeEIsV0FBb0IsRUFDdEIsRUFBRTtJQUNBLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hELE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RCxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUN0RyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxJQUFJLGNBQWMsSUFBSSxTQUFTLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQzVILE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0gsUUFBUTtRQUNSLFVBQVUsRUFBRSw0REFBNEQ7UUFDeEUsY0FBYyxFQUFFLFdBQVcsSUFBSSxjQUFjLEVBQUUsWUFBWTtRQUMzRCxRQUFRO1FBQ1IsV0FBVztRQUNYLFNBQVM7UUFDVCxVQUFVO1FBQ1YsQ0FBQztRQUNELENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsaUJBQXlCLEVBQUUsRUFBRTtJQUNqRixNQUFNLEdBQUcsR0FBRyx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQztJQUN4RCxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQztJQUNwQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUU7SUFDcEQsT0FBTyxhQUFhLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEVBQUU7SUFDekMsT0FBTyxpQ0FBaUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGFBQXFCLEVBQUUsRUFBRTtJQUN6RCxNQUFNLFdBQVcsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9DLE9BQU8sYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLEVBQUU7SUFDeEMsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlfVEFCTEVfQkxBTkssIEFJX1RBQkxFX0NFTExfQUNUSVZFX0JPUkRFUl9XSURUSCwgQUlfVEFCTEVfT0ZGU0VULCBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGQsIENvb3JkaW5hdGUsIFJlbmRlcmVyQ29udGV4dCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUFyZWFUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmFtZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IHNjcm9sbE1heCB9IGZyb20gJy4vdmlzaWJsZS1yYW5nZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRNb3VzZVBvc2l0aW9uID0gKFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZSxcbiAgICBmaWVsZHM6IEFJVGFibGVGaWVsZFtdLFxuICAgIGNvbnRleHQ6IFJlbmRlcmVyQ29udGV4dCxcbiAgICBfdGFyZ2V0TmFtZT86IHN0cmluZ1xuKSA9PiB7XG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbExlZnQgfSA9IGNvbnRleHQuc2Nyb2xsU3RhdGUoKTtcbiAgICBjb25zdCB7IHNjcm9sbE1heFdpZHRoLCBzY3JvbGxNYXhIZWlnaHQgfSA9IHNjcm9sbE1heChjb29yZGluYXRlLCBmaWVsZHMpO1xuICAgIGNvbnN0IG9mZnNldFRvcCA9IHNjcm9sbFRvcCArIHk7XG4gICAgY29uc3Qgcm93SW5kZXggPSBjb29yZGluYXRlLmdldFJvd1N0YXJ0SW5kZXgob2Zmc2V0VG9wKTtcbiAgICBjb25zdCBvZmZzZXRMZWZ0ID0gaXNXaXRoaW5Gcm96ZW5Db2x1bW5Cb3VuZGFyeSh4LCBjb29yZGluYXRlLmZyb3plbkNvbHVtbldpZHRoKSA/IHggOiBzY3JvbGxMZWZ0ICsgeDtcbiAgICBjb25zdCBjb2x1bW5JbmRleCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uU3RhcnRJbmRleChvZmZzZXRMZWZ0KTtcbiAgICBjb25zdCBhcmVhVHlwZSA9IG9mZnNldExlZnQgPD0gc2Nyb2xsTWF4V2lkdGggJiYgb2Zmc2V0VG9wIDw9IHNjcm9sbE1heEhlaWdodCA/IEFJVGFibGVBcmVhVHlwZS5ncmlkIDogQUlUYWJsZUFyZWFUeXBlLm5vbmU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGdldFRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFyZWFUeXBlLFxuICAgICAgICB0YXJnZXROYW1lLCAvLyBBcyBhIHNpbXBsZSBvcGVyYXRpb25hbCBpZGVudGlmaWVyLCB3aXRoIHByZWZpeCBuYW1lIG9ubHlcbiAgICAgICAgcmVhbFRhcmdldE5hbWU6IF90YXJnZXROYW1lIHx8IEFJX1RBQkxFX0JMQU5LLCAvLyBSZWFsIG5hbWVcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICBvZmZzZXRUb3AsXG4gICAgICAgIG9mZnNldExlZnQsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzV2l0aGluRnJvemVuQ29sdW1uQm91bmRhcnkgPSAoeDogbnVtYmVyLCBmcm96ZW5Db2x1bW5XaWR0aDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbWF4ID0gQUlfVEFCTEVfUk9XX0hFQURfV0lEVEggKyBmcm96ZW5Db2x1bW5XaWR0aDtcbiAgICBjb25zdCBtaW4gPSBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSDtcbiAgICByZXR1cm4geCA+IG1pbiAmJiB4IDwgbWF4O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVkaXRvclNwYWNlID0gKHdpZHRoT3JIZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB3aWR0aE9ySGVpZ2h0ICsgQUlfVEFCTEVfT0ZGU0VUICogMjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZGl0b3JCb3hPZmZzZXQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIC1BSV9UQUJMRV9PRkZTRVQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2VsbEVkaXRvckJvcmRlclNwYWNlID0gKCkgPT4ge1xuICAgIHJldHVybiBBSV9UQUJMRV9DRUxMX0FDVElWRV9CT1JERVJfV0lEVEggKiAyIC0gQUlfVEFCTEVfT0ZGU0VUICogMjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIb3ZlckVkaXRvclNwYWNlID0gKHdpZHRoT3JIZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGJvcmRlclNwYWNlID0gZ2V0Q2VsbEVkaXRvckJvcmRlclNwYWNlKCk7XG4gICAgcmV0dXJuIHdpZHRoT3JIZWlnaHQgLSBib3JkZXJTcGFjZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIb3ZlckVkaXRvckJveE9mZnNldCA9ICgpID0+IHtcbiAgICBjb25zdCBib3JkZXJTcGFjZSA9IGdldENlbGxFZGl0b3JCb3JkZXJTcGFjZSgpO1xuICAgIHJldHVybiBib3JkZXJTcGFjZSAvIDI7XG59OyJdfQ==
@@ -0,0 +1,25 @@
1
+ import { AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_SELECT_CHECKBOX } from '../constants';
2
+ import { AITableAreaType } from '../types';
3
+ import { getDetailByTargetName } from './common';
4
+ export const handleMouseStyle = (realTargetName, areaType = AITableAreaType.grid, container) => {
5
+ const { targetName, mouseStyle } = getDetailByTargetName(realTargetName);
6
+ if (mouseStyle)
7
+ return setMouseStyle(mouseStyle, container);
8
+ if (areaType === AITableAreaType.none)
9
+ return setMouseStyle('default', container);
10
+ switch (targetName) {
11
+ case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:
12
+ case AI_TABLE_FIELD_HEAD_MORE:
13
+ case AI_TABLE_ROW_SELECT_CHECKBOX:
14
+ case AI_TABLE_ROW_ADD_BUTTON:
15
+ case AI_TABLE_FIELD_ADD_BUTTON: {
16
+ return setMouseStyle('pointer', container);
17
+ }
18
+ default:
19
+ return setMouseStyle('default', container);
20
+ }
21
+ };
22
+ export const setMouseStyle = (mouseStyle, container) => {
23
+ container.style.cursor = mouseStyle;
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9zdHlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUMvQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGNBQXNCLEVBQUUsV0FBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxTQUF5QixFQUFFLEVBQUU7SUFDcEksTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RSxJQUFJLFVBQVU7UUFBRSxPQUFPLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUk7UUFBRSxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEYsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNqQixLQUFLLG1DQUFtQyxDQUFDO1FBQ3pDLEtBQUssd0JBQXdCLENBQUM7UUFDOUIsS0FBSyw0QkFBNEIsQ0FBQztRQUNsQyxLQUFLLHVCQUF1QixDQUFDO1FBQzdCLEtBQUsseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0Q7WUFDSSxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQWtCLEVBQUUsU0FBeUIsRUFBRSxFQUFFO0lBQzNFLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfU0VMRUNUX0NIRUNLQk9YLFxuICAgIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OLFxuICAgIEFJX1RBQkxFX1JPV19TRUxFQ1RfQ0hFQ0tCT1hcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGVBcmVhVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldERldGFpbEJ5VGFyZ2V0TmFtZSB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU1vdXNlU3R5bGUgPSAocmVhbFRhcmdldE5hbWU6IHN0cmluZywgYXJlYVR5cGU6IEFJVGFibGVBcmVhVHlwZSA9IEFJVGFibGVBcmVhVHlwZS5ncmlkLCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgeyB0YXJnZXROYW1lLCBtb3VzZVN0eWxlIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUocmVhbFRhcmdldE5hbWUpO1xuICAgIGlmIChtb3VzZVN0eWxlKSByZXR1cm4gc2V0TW91c2VTdHlsZShtb3VzZVN0eWxlLCBjb250YWluZXIpO1xuICAgIGlmIChhcmVhVHlwZSA9PT0gQUlUYWJsZUFyZWFUeXBlLm5vbmUpIHJldHVybiBzZXRNb3VzZVN0eWxlKCdkZWZhdWx0JywgY29udGFpbmVyKTtcbiAgICBzd2l0Y2ggKHRhcmdldE5hbWUpIHtcbiAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkU6XG4gICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjpcbiAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OOiB7XG4gICAgICAgICAgICByZXR1cm4gc2V0TW91c2VTdHlsZSgncG9pbnRlcicsIGNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBzZXRNb3VzZVN0eWxlKCdkZWZhdWx0JywgY29udGFpbmVyKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0TW91c2VTdHlsZSA9IChtb3VzZVN0eWxlOiBzdHJpbmcsIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICBjb250YWluZXIuc3R5bGUuY3Vyc29yID0gbW91c2VTdHlsZTtcbn07XG4iXX0=
@@ -0,0 +1,122 @@
1
+ import { DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_SCALE } from '../constants';
2
+ import { castToString } from './common';
3
+ /**
4
+ * 在 Canvas 上测量文本的宽度和高度,以便在显示文本时能够动态调整布局或限制文本的显示区域
5
+ * @param defaults
6
+ * @returns
7
+ */
8
+ export const TextMeasure = (defaults = {}) => {
9
+ const { fontFamily = DEFAULT_FONT_FAMILY, fontSize = DEFAULT_FONT_SIZE, fontWeight = DEFAULT_FONT_WEIGHT, fontStyle = DEFAULT_FONT_STYLE, lineHeight = DEFAULT_TEXT_LINE_HEIGHT, scale = DEFAULT_TEXT_SCALE } = defaults;
10
+ const o = {
11
+ fontFamily,
12
+ fontSize,
13
+ fontWeight,
14
+ fontStyle,
15
+ lineHeight,
16
+ scale
17
+ };
18
+ const canvas = document.createElement('canvas');
19
+ const context = canvas ? canvas.getContext('2d') : null;
20
+ const normalizeFontFamily = (fontFamily) => {
21
+ return fontFamily
22
+ .split(',')
23
+ .map((family) => {
24
+ family = family.trim();
25
+ const hasSpace = family.indexOf(' ') >= 0;
26
+ const hasQuotes = family.indexOf('"') >= 0 || family.indexOf("'") >= 0;
27
+ if (hasSpace && !hasQuotes) {
28
+ family = `"${family}"`;
29
+ }
30
+ return family;
31
+ })
32
+ .join(', ');
33
+ };
34
+ // 可以在运行时动态调整字体样式,从而影响后续的文本测量
35
+ const setFont = (options = {}) => {
36
+ for (const key in options) {
37
+ o[key] = options[key] ?? o[key];
38
+ }
39
+ if (context) {
40
+ context.font = `${o.fontWeight} ${o.fontSize * o.scale}px ${normalizeFontFamily(o.fontFamily)}`;
41
+ }
42
+ };
43
+ // 根据指定的最大宽度和行数来计算文本的显示方式。如果文本太长,它会自动换行或截断,并返回是否发生溢出的信息
44
+ const getWidthOfLongestText = (text, maxWidth, maxLineCount) => {
45
+ let width = 0;
46
+ let height = 0;
47
+ let lineCount = 0;
48
+ if (text == null) {
49
+ return { width, height, lastLineWidth: 0 };
50
+ }
51
+ const lines = text.split('\n');
52
+ for (let i = 0; i < lines.length; i++) {
53
+ const line = lines[i];
54
+ const lineWidth = context?.measureText(line).width ?? 0;
55
+ width = Math.max(width, lineWidth);
56
+ lineCount = maxWidth != null ? Math.ceil(lineWidth / maxWidth) || 1 : 1;
57
+ height += o.lineHeight * lineCount;
58
+ }
59
+ if (maxWidth == null || maxLineCount === 1 || (maxLineCount && lineCount <= maxLineCount)) {
60
+ return {
61
+ width: Math.ceil(width),
62
+ height: Math.ceil(height),
63
+ text,
64
+ isOverflow: Boolean(maxLineCount && lineCount > maxLineCount),
65
+ lastLineWidth: Math.ceil(width)
66
+ };
67
+ }
68
+ const arrText = text.split('');
69
+ let rowCount = 0; // 总行数
70
+ let textHeight = 0; // 文本最终占用的高度
71
+ let showText = ''; // 每行展示的文本
72
+ let totalText = '';
73
+ let isLimitRow = false;
74
+ const textLength = arrText.length;
75
+ for (let n = 0; n < textLength; n++) {
76
+ const singleText = arrText[n];
77
+ const composeText = showText + singleText;
78
+ // 如果没有超过 maxLineCount,就会继续换行
79
+ isLimitRow = maxLineCount ? rowCount === maxLineCount - 1 : false;
80
+ const measureText = isLimitRow ? composeText + '…' : composeText;
81
+ totalText += singleText;
82
+ const textWidth = context?.measureText(measureText).width ?? 0;
83
+ const isLineBreak = ['\n', '\r'].includes(singleText);
84
+ if (((maxWidth && textWidth > maxWidth) || isLineBreak) && (maxLineCount == null || rowCount < maxLineCount)) {
85
+ showText = isLineBreak ? '' : singleText;
86
+ textHeight += lineHeight;
87
+ rowCount++;
88
+ if (isLimitRow) {
89
+ if (n < textLength - 1) {
90
+ totalText = totalText.substring(0, totalText.length - 1) + '…';
91
+ }
92
+ break;
93
+ }
94
+ }
95
+ else {
96
+ showText = composeText;
97
+ }
98
+ }
99
+ return {
100
+ width: Math.ceil(width),
101
+ height: Math.ceil(maxLineCount == null || rowCount < maxLineCount ? textHeight + lineHeight : textHeight),
102
+ text: totalText,
103
+ isOverflow: isLimitRow,
104
+ lastLineWidth: context?.measureText(showText).width ?? 0
105
+ };
106
+ };
107
+ // 测量给定文本的宽度和高度。
108
+ // 支持指定最大宽度 (maxWidth) 和最大行数 (maxLineCount),从而能够处理多行文本的自动换行和截断(例如在文本超过行数限制时添加省略号 "…")
109
+ const measureText = (text, maxWidth, maxLineCount) => {
110
+ return getWidthOfLongestText(castToString(text), maxWidth, maxLineCount);
111
+ };
112
+ // 可以将字体样式重置为初始默认配置
113
+ const reset = () => setFont(defaults);
114
+ setFont(o);
115
+ return {
116
+ context,
117
+ measureText,
118
+ setFont,
119
+ reset
120
+ };
121
+ };
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1tZWFzdXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvdXRpbHMvdGV4dC1tZWFzdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNyQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBV3hDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxXQUFzQyxFQUFFLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEVBQ0YsVUFBVSxHQUFHLG1CQUFtQixFQUNoQyxRQUFRLEdBQUcsaUJBQWlCLEVBQzVCLFVBQVUsR0FBRyxtQkFBbUIsRUFDaEMsU0FBUyxHQUFHLGtCQUFrQixFQUM5QixVQUFVLEdBQUcsd0JBQXdCLEVBQ3JDLEtBQUssR0FBRyxrQkFBa0IsRUFDN0IsR0FBRyxRQUFRLENBQUM7SUFDYixNQUFNLENBQUMsR0FBd0M7UUFDM0MsVUFBVTtRQUNWLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztRQUNULFVBQVU7UUFDVixLQUFLO0tBQ1IsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFeEQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtRQUMvQyxPQUFPLFVBQVU7YUFDWixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDWixN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Q0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQztJQUVGLG1CQUFtQjtJQUNuQixNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRVgsT0FBTztRQUNILE9BQU87UUFDUCxXQUFXO1FBQ1gsT0FBTztRQUNQLEtBQUs7S0FDUixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9TVFlMRSxcbiAgICBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgIERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfU0NBTEVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNhc3RUb1N0cmluZyB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlVGV4dE1lYXN1cmVPcHRpb25zIHtcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIGZvbnRTaXplPzogbnVtYmVyO1xuICAgIGZvbnRXZWlnaHQ/OiBzdHJpbmc7XG4gICAgZm9udFN0eWxlPzogc3RyaW5nO1xuICAgIGxpbmVIZWlnaHQ/OiBudW1iZXI7XG4gICAgc2NhbGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICog5ZyoIENhbnZhcyDkuIrmtYvph4/mlofmnKznmoTlrr3luqblkozpq5jluqbvvIzku6Xkvr/lnKjmmL7npLrmlofmnKzml7bog73lpJ/liqjmgIHosIPmlbTluIPlsYDmiJbpmZDliLbmlofmnKznmoTmmL7npLrljLrln59cbiAqIEBwYXJhbSBkZWZhdWx0c1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRNZWFzdXJlID0gKGRlZmF1bHRzOiBBSVRhYmxlVGV4dE1lYXN1cmVPcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGZvbnRGYW1pbHkgPSBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgICAgICBmb250U2l6ZSA9IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICAgICAgZm9udFN0eWxlID0gREVGQVVMVF9GT05UX1NUWUxFLFxuICAgICAgICBsaW5lSGVpZ2h0ID0gREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgICAgICBzY2FsZSA9IERFRkFVTFRfVEVYVF9TQ0FMRVxuICAgIH0gPSBkZWZhdWx0cztcbiAgICBjb25zdCBvOiBSZXF1aXJlZDxBSVRhYmxlVGV4dE1lYXN1cmVPcHRpb25zPiA9IHtcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgIGZvbnRTdHlsZSxcbiAgICAgICAgbGluZUhlaWdodCxcbiAgICAgICAgc2NhbGVcbiAgICB9O1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMgPyBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSA6IG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVGb250RmFtaWx5ID0gKGZvbnRGYW1pbHk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZm9udEZhbWlseVxuICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoKGZhbWlseSkgPT4ge1xuICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU3BhY2UgPSBmYW1pbHkuaW5kZXhPZignICcpID49IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUXVvdGVzID0gZmFtaWx5LmluZGV4T2YoJ1wiJykgPj0gMCB8fCBmYW1pbHkuaW5kZXhPZihcIidcIikgPj0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaGFzU3BhY2UgJiYgIWhhc1F1b3Rlcykge1xuICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBgXCIke2ZhbWlseX1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYW1pbHk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfTtcblxuICAgIC8vIOWPr+S7peWcqOi/kOihjOaXtuWKqOaAgeiwg+aVtOWtl+S9k+agt+W8j++8jOS7juiAjOW9seWTjeWQjue7reeahOaWh+acrOa1i+mHj1xuICAgIGNvbnN0IHNldEZvbnQgPSAob3B0aW9uczogQUlUYWJsZVRleHRNZWFzdXJlT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIChvIGFzIGFueSlba2V5XSA9IChvcHRpb25zIGFzIGFueSlba2V5XSA/PyAobyBhcyBhbnkpW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZm9udCA9IGAke28uZm9udFdlaWdodH0gJHtvLmZvbnRTaXplICogby5zY2FsZX1weCAke25vcm1hbGl6ZUZvbnRGYW1pbHkoby5mb250RmFtaWx5KX1gO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIOagueaNruaMh+WumueahOacgOWkp+WuveW6puWSjOihjOaVsOadpeiuoeeul+aWh+acrOeahOaYvuekuuaWueW8j+OAguWmguaenOaWh+acrOWkqumVv++8jOWug+S8muiHquWKqOaNouihjOaIluaIquaWre+8jOW5tui/lOWbnuaYr+WQpuWPkeeUn+a6ouWHuueahOS/oeaBr1xuICAgIGNvbnN0IGdldFdpZHRoT2ZMb25nZXN0VGV4dCA9ICh0ZXh0OiBzdHJpbmcgfCBudWxsLCBtYXhXaWR0aD86IG51bWJlciwgbWF4TGluZUNvdW50PzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICBsZXQgbGluZUNvdW50ID0gMDtcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGFzdExpbmVXaWR0aDogMCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXSE7XG4gICAgICAgICAgICBjb25zdCBsaW5lV2lkdGggPSBjb250ZXh0Py5tZWFzdXJlVGV4dChsaW5lKS53aWR0aCA/PyAwO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmVDb3VudCA9IG1heFdpZHRoICE9IG51bGwgPyBNYXRoLmNlaWwobGluZVdpZHRoIC8gbWF4V2lkdGgpIHx8IDEgOiAxO1xuICAgICAgICAgICAgaGVpZ2h0ICs9IG8ubGluZUhlaWdodCAqIGxpbmVDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4V2lkdGggPT0gbnVsbCB8fCBtYXhMaW5lQ291bnQgPT09IDEgfHwgKG1heExpbmVDb3VudCAmJiBsaW5lQ291bnQgPD0gbWF4TGluZUNvdW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5jZWlsKHdpZHRoKSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGguY2VpbChoZWlnaHQpLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgaXNPdmVyZmxvdzogQm9vbGVhbihtYXhMaW5lQ291bnQgJiYgbGluZUNvdW50ID4gbWF4TGluZUNvdW50KSxcbiAgICAgICAgICAgICAgICBsYXN0TGluZVdpZHRoOiBNYXRoLmNlaWwod2lkdGgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyVGV4dCA9IHRleHQuc3BsaXQoJycpO1xuICAgICAgICBsZXQgcm93Q291bnQgPSAwOyAvLyDmgLvooYzmlbBcbiAgICAgICAgbGV0IHRleHRIZWlnaHQgPSAwOyAvLyDmlofmnKzmnIDnu4jljaDnlKjnmoTpq5jluqZcbiAgICAgICAgbGV0IHNob3dUZXh0ID0gJyc7IC8vIOavj+ihjOWxleekuueahOaWh+acrFxuICAgICAgICBsZXQgdG90YWxUZXh0ID0gJyc7XG4gICAgICAgIGxldCBpc0xpbWl0Um93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSBhcnJUZXh0Lmxlbmd0aDtcblxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRleHRMZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGV4dCA9IGFyclRleHRbbl0hO1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZVRleHQgPSBzaG93VGV4dCArIHNpbmdsZVRleHQ7XG4gICAgICAgICAgICAvLyDlpoLmnpzmsqHmnInotoXov4cgbWF4TGluZUNvdW5077yM5bCx5Lya57un57ut5o2i6KGMXG4gICAgICAgICAgICBpc0xpbWl0Um93ID0gbWF4TGluZUNvdW50ID8gcm93Q291bnQgPT09IG1heExpbmVDb3VudCAtIDEgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVUZXh0ID0gaXNMaW1pdFJvdyA/IGNvbXBvc2VUZXh0ICsgJ+KApicgOiBjb21wb3NlVGV4dDtcbiAgICAgICAgICAgIHRvdGFsVGV4dCArPSBzaW5nbGVUZXh0O1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY29udGV4dD8ubWVhc3VyZVRleHQobWVhc3VyZVRleHQpLndpZHRoID8/IDA7XG4gICAgICAgICAgICBjb25zdCBpc0xpbmVCcmVhayA9IFsnXFxuJywgJ1xcciddLmluY2x1ZGVzKHNpbmdsZVRleHQpO1xuICAgICAgICAgICAgaWYgKCgobWF4V2lkdGggJiYgdGV4dFdpZHRoID4gbWF4V2lkdGgpIHx8IGlzTGluZUJyZWFrKSAmJiAobWF4TGluZUNvdW50ID09IG51bGwgfHwgcm93Q291bnQgPCBtYXhMaW5lQ291bnQpKSB7XG4gICAgICAgICAgICAgICAgc2hvd1RleHQgPSBpc0xpbmVCcmVhayA/ICcnIDogc2luZ2xlVGV4dDtcbiAgICAgICAgICAgICAgICB0ZXh0SGVpZ2h0ICs9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcm93Q291bnQrKztcbiAgICAgICAgICAgICAgICBpZiAoaXNMaW1pdFJvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IHRleHRMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFRleHQgPSB0b3RhbFRleHQuc3Vic3RyaW5nKDAsIHRvdGFsVGV4dC5sZW5ndGggLSAxKSArICfigKYnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd1RleHQgPSBjb21wb3NlVGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IE1hdGguY2VpbCh3aWR0aCksXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGguY2VpbChtYXhMaW5lQ291bnQgPT0gbnVsbCB8fCByb3dDb3VudCA8IG1heExpbmVDb3VudCA/IHRleHRIZWlnaHQgKyBsaW5lSGVpZ2h0IDogdGV4dEhlaWdodCksXG4gICAgICAgICAgICB0ZXh0OiB0b3RhbFRleHQsXG4gICAgICAgICAgICBpc092ZXJmbG93OiBpc0xpbWl0Um93LFxuICAgICAgICAgICAgbGFzdExpbmVXaWR0aDogY29udGV4dD8ubWVhc3VyZVRleHQoc2hvd1RleHQpLndpZHRoID8/IDBcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLy8g5rWL6YeP57uZ5a6a5paH5pys55qE5a695bqm5ZKM6auY5bqm44CCXG4gICAgLy8g5pSv5oyB5oyH5a6a5pyA5aSn5a695bqmIChtYXhXaWR0aCkg5ZKM5pyA5aSn6KGM5pWwIChtYXhMaW5lQ291bnQp77yM5LuO6ICM6IO95aSf5aSE55CG5aSa6KGM5paH5pys55qE6Ieq5Yqo5o2i6KGM5ZKM5oiq5pat77yI5L6L5aaC5Zyo5paH5pys6LaF6L+H6KGM5pWw6ZmQ5Yi25pe25re75Yqg55yB55Wl5Y+3IFwi4oCmXCLvvIlcbiAgICBjb25zdCBtZWFzdXJlVGV4dCA9ICh0ZXh0OiBzdHJpbmcsIG1heFdpZHRoPzogbnVtYmVyLCBtYXhMaW5lQ291bnQ/OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldFdpZHRoT2ZMb25nZXN0VGV4dChjYXN0VG9TdHJpbmcodGV4dCksIG1heFdpZHRoLCBtYXhMaW5lQ291bnQpO1xuICAgIH07XG5cbiAgICAvLyDlj6/ku6XlsIblrZfkvZPmoLflvI/ph43nva7kuLrliJ3lp4vpu5jorqTphY3nva5cbiAgICBjb25zdCByZXNldCA9ICgpID0+IHNldEZvbnQoZGVmYXVsdHMpO1xuXG4gICAgc2V0Rm9udChvKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIG1lYXN1cmVUZXh0LFxuICAgICAgICBzZXRGb250LFxuICAgICAgICByZXNldFxuICAgIH07XG59O1xuIl19