@ai-table/grid 0.0.73 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/angular-konva/components/container.component.d.ts.map +1 -1
  2. package/angular-konva/components/shape.component.d.ts.map +1 -1
  3. package/angular-konva/components/stage.component.d.ts.map +1 -1
  4. package/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
  5. package/components/cell-editors/date/date-editor.component.d.ts.map +1 -1
  6. package/components/cell-editors/link/edit-link/edit-link.component.d.ts.map +1 -1
  7. package/components/cell-editors/link/link-editor.component.d.ts.map +1 -1
  8. package/components/cell-editors/number/number-editor.component.d.ts.map +1 -1
  9. package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
  10. package/components/cell-editors/text/text-editor.component.d.ts.map +1 -1
  11. package/components/cell-views/select/option.component.d.ts.map +1 -1
  12. package/components/context-menu/context-menu.component.d.ts.map +1 -1
  13. package/components/drag/drag.component.d.ts.map +1 -1
  14. package/components/field-menu/field-menu.component.d.ts.map +1 -1
  15. package/components/field-setting/field-setting.component.d.ts.map +1 -1
  16. package/core/context.d.ts +2 -0
  17. package/core/context.d.ts.map +1 -1
  18. package/core/types/ai-table.d.ts.map +1 -1
  19. package/core/utils/field.d.ts.map +1 -1
  20. package/core/utils/queries.d.ts.map +1 -1
  21. package/core/utils/short-id.d.ts.map +1 -1
  22. package/dom-grid.component.d.ts.map +1 -1
  23. package/fesm2022/ai-table-grid.mjs +322 -310
  24. package/fesm2022/ai-table-grid.mjs.map +1 -1
  25. package/grid-base.component.d.ts +3 -1
  26. package/grid-base.component.d.ts.map +1 -1
  27. package/grid.component.d.ts +1 -1
  28. package/grid.component.d.ts.map +1 -1
  29. package/package.json +3 -5
  30. package/pipes/grid.pipe.d.ts.map +1 -1
  31. package/renderer/components/action-icon.component.d.ts.map +1 -1
  32. package/renderer/components/add-field-column.component.d.ts.map +1 -1
  33. package/renderer/components/cells/attachment.component.d.ts.map +1 -1
  34. package/renderer/components/cells/link.component.d.ts.map +1 -1
  35. package/renderer/components/cells/progress.component.d.ts.map +1 -1
  36. package/renderer/components/cells/rate.component.d.ts.map +1 -1
  37. package/renderer/components/cells/rich-text.component.d.ts.map +1 -1
  38. package/renderer/components/cells.component.d.ts.map +1 -1
  39. package/renderer/components/field-head.component.d.ts +2 -2
  40. package/renderer/components/field-head.component.d.ts.map +1 -1
  41. package/renderer/components/field-icon.component.d.ts.map +1 -1
  42. package/renderer/components/frozen-cells.component.d.ts.map +1 -1
  43. package/renderer/components/frozen-heads.component.d.ts +1 -1
  44. package/renderer/components/frozen-heads.component.d.ts.map +1 -1
  45. package/renderer/components/frozen-placeholder-cells.component.d.ts.map +1 -1
  46. package/renderer/components/heads.component.d.ts +1 -1
  47. package/renderer/components/heads.component.d.ts.map +1 -1
  48. package/renderer/components/hover-cell.component.d.ts.map +1 -1
  49. package/renderer/components/hover-row-heads.component.d.ts.map +1 -1
  50. package/renderer/components/icon.component.d.ts.map +1 -1
  51. package/renderer/components/other-rows.component.d.ts.map +1 -1
  52. package/renderer/components/placeholder-cells.component.d.ts.map +1 -1
  53. package/renderer/components/text.component.d.ts.map +1 -1
  54. package/renderer/creations/create-active-cell-border.d.ts.map +1 -1
  55. package/renderer/creations/create-cells.d.ts.map +1 -1
  56. package/renderer/creations/create-heads.d.ts.map +1 -1
  57. package/renderer/drawers/add-row-layout-drawer.d.ts +1 -1
  58. package/renderer/drawers/add-row-layout-drawer.d.ts.map +1 -1
  59. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  60. package/renderer/drawers/drawer.d.ts +1 -1
  61. package/renderer/renderer.component.d.ts +5 -4
  62. package/renderer/renderer.component.d.ts.map +1 -1
  63. package/types/cell.d.ts +2 -0
  64. package/types/cell.d.ts.map +1 -1
  65. package/types/component-config.d.ts +2 -0
  66. package/types/component-config.d.ts.map +1 -1
  67. package/types/grid.d.ts +4 -0
  68. package/types/grid.d.ts.map +1 -1
  69. package/types/row.d.ts +1 -0
  70. package/types/row.d.ts.map +1 -1
  71. package/utils/build.d.ts.map +1 -1
  72. package/utils/clipboard/clipboard.d.ts.map +1 -1
  73. package/utils/clipboard/copy.d.ts.map +1 -1
  74. package/utils/clipboard/paste.d.ts +5 -1
  75. package/utils/clipboard/paste.d.ts.map +1 -1
  76. package/utils/common.d.ts.map +1 -1
  77. package/utils/field/model/date.d.ts.map +1 -1
  78. package/utils/field/model/link.d.ts.map +1 -1
  79. package/utils/field/model/progress.d.ts.map +1 -1
  80. package/utils/field/model/text.d.ts.map +1 -1
  81. package/utils/get-text-width.d.ts.map +1 -1
  82. package/utils/i18n.d.ts +2 -0
  83. package/utils/i18n.d.ts.map +1 -1
  84. package/utils/match-keywords.d.ts.map +1 -1
  85. package/utils/position.d.ts.map +1 -1
  86. package/utils/style.d.ts.map +1 -1
  87. package/utils/text-measure.d.ts.map +1 -1
  88. package/utils/visible-range.d.ts.map +1 -1
  89. package/esm2022/ai-table-grid.mjs +0 -5
  90. package/esm2022/angular-konva/components/container.component.mjs +0 -29
  91. package/esm2022/angular-konva/components/container.token.mjs +0 -3
  92. package/esm2022/angular-konva/components/index.mjs +0 -4
  93. package/esm2022/angular-konva/components/shape.component.mjs +0 -142
  94. package/esm2022/angular-konva/components/stage.component.mjs +0 -123
  95. package/esm2022/angular-konva/index.mjs +0 -5
  96. package/esm2022/angular-konva/interfaces/component.mjs +0 -4
  97. package/esm2022/angular-konva/interfaces/config.mjs +0 -2
  98. package/esm2022/angular-konva/interfaces/event-object.mjs +0 -2
  99. package/esm2022/angular-konva/interfaces/index.mjs +0 -5
  100. package/esm2022/angular-konva/interfaces/shape.mjs +0 -42
  101. package/esm2022/angular-konva/utils/apply-node-props.mjs +0 -67
  102. package/esm2022/angular-konva/utils/common.mjs +0 -48
  103. package/esm2022/angular-konva/utils/index.mjs +0 -5
  104. package/esm2022/angular-konva/utils/types.mjs +0 -2
  105. package/esm2022/angular-konva/utils/update-picture.mjs +0 -7
  106. package/esm2022/components/cell-editors/abstract-cell-editor.component.mjs +0 -56
  107. package/esm2022/components/cell-editors/date/date-editor.component.mjs +0 -87
  108. package/esm2022/components/cell-editors/link/edit-link/edit-link.component.mjs +0 -81
  109. package/esm2022/components/cell-editors/link/link-editor.component.mjs +0 -122
  110. package/esm2022/components/cell-editors/number/number-editor.component.mjs +0 -41
  111. package/esm2022/components/cell-editors/select/select-editor.component.mjs +0 -74
  112. package/esm2022/components/cell-editors/text/text-editor.component.mjs +0 -76
  113. package/esm2022/components/cell-views/select/option.component.mjs +0 -28
  114. package/esm2022/components/context-menu/context-menu.component.mjs +0 -42
  115. package/esm2022/components/drag/drag.component.mjs +0 -300
  116. package/esm2022/components/field-menu/field-menu.component.mjs +0 -47
  117. package/esm2022/components/field-setting/field-setting.component.mjs +0 -142
  118. package/esm2022/components/index.mjs +0 -10
  119. package/esm2022/constants/colors.mjs +0 -19
  120. package/esm2022/constants/editor.mjs +0 -11
  121. package/esm2022/constants/file-icon.mjs +0 -342
  122. package/esm2022/constants/grid.mjs +0 -35
  123. package/esm2022/constants/icon.mjs +0 -30
  124. package/esm2022/constants/index.mjs +0 -7
  125. package/esm2022/constants/table.mjs +0 -78
  126. package/esm2022/constants/text.mjs +0 -23
  127. package/esm2022/core/constants/field.mjs +0 -107
  128. package/esm2022/core/context.mjs +0 -29
  129. package/esm2022/core/coordinate.mjs +0 -222
  130. package/esm2022/core/index.mjs +0 -6
  131. package/esm2022/core/types/ai-table.mjs +0 -57
  132. package/esm2022/core/types/core.mjs +0 -2
  133. package/esm2022/core/types/index.mjs +0 -3
  134. package/esm2022/core/utils/common.mjs +0 -45
  135. package/esm2022/core/utils/field.mjs +0 -64
  136. package/esm2022/core/utils/id-creator.mjs +0 -21
  137. package/esm2022/core/utils/index.mjs +0 -5
  138. package/esm2022/core/utils/queries.mjs +0 -80
  139. package/esm2022/core/utils/short-id.mjs +0 -53
  140. package/esm2022/dom-grid.component.mjs +0 -80
  141. package/esm2022/grid-base.component.mjs +0 -145
  142. package/esm2022/grid.component.mjs +0 -649
  143. package/esm2022/index.mjs +0 -2
  144. package/esm2022/pipes/grid.pipe.mjs +0 -110
  145. package/esm2022/pipes/index.mjs +0 -2
  146. package/esm2022/public-api.mjs +0 -12
  147. package/esm2022/renderer/components/action-icon.component.mjs +0 -117
  148. package/esm2022/renderer/components/add-field-column.component.mjs +0 -88
  149. package/esm2022/renderer/components/cells/attachment.component.mjs +0 -107
  150. package/esm2022/renderer/components/cells/cells.mjs +0 -6
  151. package/esm2022/renderer/components/cells/index.mjs +0 -7
  152. package/esm2022/renderer/components/cells/link.component.mjs +0 -89
  153. package/esm2022/renderer/components/cells/progress.component.mjs +0 -268
  154. package/esm2022/renderer/components/cells/rate.component.mjs +0 -153
  155. package/esm2022/renderer/components/cells/rich-text.component.mjs +0 -95
  156. package/esm2022/renderer/components/cells.component.mjs +0 -35
  157. package/esm2022/renderer/components/field-head.component.mjs +0 -146
  158. package/esm2022/renderer/components/field-icon.component.mjs +0 -72
  159. package/esm2022/renderer/components/frozen-cells.component.mjs +0 -36
  160. package/esm2022/renderer/components/frozen-heads.component.mjs +0 -214
  161. package/esm2022/renderer/components/frozen-placeholder-cells.component.mjs +0 -38
  162. package/esm2022/renderer/components/heads.component.mjs +0 -38
  163. package/esm2022/renderer/components/hover-cell.component.mjs +0 -104
  164. package/esm2022/renderer/components/hover-row-heads.component.mjs +0 -132
  165. package/esm2022/renderer/components/icon.component.mjs +0 -84
  166. package/esm2022/renderer/components/index.mjs +0 -15
  167. package/esm2022/renderer/components/other-rows.component.mjs +0 -68
  168. package/esm2022/renderer/components/placeholder-cells.component.mjs +0 -33
  169. package/esm2022/renderer/components/text.component.mjs +0 -67
  170. package/esm2022/renderer/creations/create-active-cell-border.mjs +0 -70
  171. package/esm2022/renderer/creations/create-cells.mjs +0 -190
  172. package/esm2022/renderer/creations/create-heads.mjs +0 -51
  173. package/esm2022/renderer/drawers/add-row-layout-drawer.mjs +0 -98
  174. package/esm2022/renderer/drawers/cell-drawer.mjs +0 -673
  175. package/esm2022/renderer/drawers/drawer.mjs +0 -947
  176. package/esm2022/renderer/drawers/layout-drawer.mjs +0 -64
  177. package/esm2022/renderer/drawers/record-row-layout-drawer.mjs +0 -131
  178. package/esm2022/renderer/index.mjs +0 -4
  179. package/esm2022/renderer/interfaces/hover-cell.mjs +0 -4
  180. package/esm2022/renderer/interfaces/index.mjs +0 -2
  181. package/esm2022/renderer/renderer.component.mjs +0 -197
  182. package/esm2022/services/event.service.mjs +0 -241
  183. package/esm2022/services/field.service.mjs +0 -56
  184. package/esm2022/services/index.mjs +0 -4
  185. package/esm2022/services/selection.service.mjs +0 -151
  186. package/esm2022/types/avatar.mjs +0 -27
  187. package/esm2022/types/canvas.mjs +0 -2
  188. package/esm2022/types/cell.mjs +0 -2
  189. package/esm2022/types/clipboard.mjs +0 -2
  190. package/esm2022/types/component-config.mjs +0 -7
  191. package/esm2022/types/field.mjs +0 -2
  192. package/esm2022/types/grid.mjs +0 -17
  193. package/esm2022/types/index.mjs +0 -10
  194. package/esm2022/types/layout.mjs +0 -2
  195. package/esm2022/types/row.mjs +0 -6
  196. package/esm2022/utils/build.mjs +0 -39
  197. package/esm2022/utils/cell.mjs +0 -80
  198. package/esm2022/utils/clear-cells.mjs +0 -23
  199. package/esm2022/utils/clipboard/clipboard.mjs +0 -88
  200. package/esm2022/utils/clipboard/copy.mjs +0 -99
  201. package/esm2022/utils/clipboard/extract.mjs +0 -38
  202. package/esm2022/utils/clipboard/index.mjs +0 -5
  203. package/esm2022/utils/clipboard/paste.mjs +0 -188
  204. package/esm2022/utils/common.mjs +0 -50
  205. package/esm2022/utils/field/field-operable.mjs +0 -2
  206. package/esm2022/utils/field/field.mjs +0 -20
  207. package/esm2022/utils/field/index.mjs +0 -4
  208. package/esm2022/utils/field/model/attachment.mjs +0 -56
  209. package/esm2022/utils/field/model/date.mjs +0 -141
  210. package/esm2022/utils/field/model/index.mjs +0 -12
  211. package/esm2022/utils/field/model/link.mjs +0 -56
  212. package/esm2022/utils/field/model/member.mjs +0 -81
  213. package/esm2022/utils/field/model/number.mjs +0 -59
  214. package/esm2022/utils/field/model/progress.mjs +0 -69
  215. package/esm2022/utils/field/model/rate.mjs +0 -58
  216. package/esm2022/utils/field/model/rich-text.mjs +0 -39
  217. package/esm2022/utils/field/model/select.mjs +0 -131
  218. package/esm2022/utils/field/model/text.mjs +0 -32
  219. package/esm2022/utils/field/operate.mjs +0 -73
  220. package/esm2022/utils/file.mjs +0 -116
  221. package/esm2022/utils/get-placeholder-cells.mjs +0 -66
  222. package/esm2022/utils/get-text-width.mjs +0 -30
  223. package/esm2022/utils/hover-cell.mjs +0 -25
  224. package/esm2022/utils/i18n.mjs +0 -87
  225. package/esm2022/utils/image-cache.mjs +0 -57
  226. package/esm2022/utils/index.mjs +0 -19
  227. package/esm2022/utils/match-keywords.mjs +0 -15
  228. package/esm2022/utils/os.mjs +0 -16
  229. package/esm2022/utils/position.mjs +0 -48
  230. package/esm2022/utils/style.mjs +0 -37
  231. package/esm2022/utils/text-measure.mjs +0 -122
  232. package/esm2022/utils/visible-range.mjs +0 -42
@@ -1,89 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
- import { AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../../constants';
3
- import { AITable, getMousePosition, handleMouseStyle } from '../../../utils';
4
- import { AITableText } from '../text.component';
5
- import { AITableFieldType } from '@ai-table/utils';
6
- import { drawer } from '../../drawers/drawer';
7
- import * as i0 from "@angular/core";
8
- export class AITableCellLink {
9
- constructor() {
10
- this.config = input();
11
- this.textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;
12
- this.render = computed(() => this.config()?.render);
13
- this.transformValue = computed(() => this.render()?.transformValue);
14
- this.showLink = computed(() => !!this.transformValue()?.text);
15
- this.textConfig = computed(() => {
16
- const render = this.config()?.render;
17
- if (render) {
18
- const { x, y, transformValue, columnWidth, rowHeight, style, zIndex } = render;
19
- let textRender = transformValue.text;
20
- if (textRender == null) {
21
- return;
22
- }
23
- textRender = textRender.replace(/\r|\n/g, ' ');
24
- const fontWeight = style?.fontWeight;
25
- const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;
26
- const { text, textWidth } = drawer.textEllipsis({
27
- text: textRender,
28
- maxWidth: textMaxWidth,
29
- fontWeight
30
- });
31
- return {
32
- x,
33
- y,
34
- text,
35
- wrap: 'none',
36
- width: textWidth,
37
- fillStyle: Colors.primary,
38
- fill: Colors.primary,
39
- height: rowHeight + 2,
40
- lineHeight: 1.84,
41
- listening: true,
42
- ellipsis: true,
43
- textDecoration: 'underline',
44
- zIndex
45
- };
46
- }
47
- return;
48
- });
49
- }
50
- static { this.fieldType = AITableFieldType.link; }
51
- linkClick(e) {
52
- e.event.cancelBubble = true;
53
- window.open(this.transformValue().url, '_blank', 'noopener,noreferrer');
54
- }
55
- linkMouseMove(e) {
56
- e.event.cancelBubble = true;
57
- const { aiTable, coordinate } = this.config();
58
- const targetName = e.event.target.name();
59
- const gridStage = e.event.currentTarget.getStage();
60
- const pos = gridStage?.getPointerPosition();
61
- if (pos == null)
62
- return;
63
- const { context } = aiTable;
64
- const { x, y } = pos;
65
- const curMousePosition = getMousePosition(aiTable, x, y, coordinate, AITable.getVisibleFields(aiTable), context, targetName);
66
- handleMouseStyle(AI_TABLE_FIELD_HEAD_MORE, curMousePosition.areaType, coordinate.container);
67
- }
68
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellLink, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
69
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableCellLink, isStandalone: true, selector: "ai-table-link", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
70
- @if (showLink()) {
71
- <ai-table-text [config]="textConfig()!" (koClick)="linkClick($event)" (koMouseMove)="linkMouseMove($event)"></ai-table-text>
72
- }
73
- `, isInline: true, dependencies: [{ kind: "component", type: AITableText, selector: "ai-table-text", inputs: ["config"], outputs: ["koClick", "koMouseMove"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellLink, decorators: [{
76
- type: Component,
77
- args: [{
78
- selector: 'ai-table-link',
79
- template: `
80
- @if (showLink()) {
81
- <ai-table-text [config]="textConfig()!" (koClick)="linkClick($event)" (koMouseMove)="linkMouseMove($event)"></ai-table-text>
82
- }
83
- `,
84
- standalone: true,
85
- imports: [AITableText],
86
- changeDetection: ChangeDetectionStrategy.OnPush
87
- }]
88
- }] });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NlbGxzL2xpbmsuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEksT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBYzlDLE1BQU0sT0FBTyxlQUFlO0lBWDVCO1FBY0ksV0FBTSxHQUFHLEtBQUssRUFBc0MsQ0FBQztRQUVyRCxlQUFVLEdBQUcscUJBQXFCLEdBQUcsaUNBQWlDLENBQUM7UUFFdkUsV0FBTSxHQUFHLFFBQVEsQ0FBNEIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFFLG1CQUFjLEdBQUcsUUFBUSxDQUFnQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFOUYsYUFBUSxHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxFLGVBQVUsR0FBRyxRQUFRLENBQXlCLEdBQUcsRUFBRTtZQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDO1lBQ3JDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztnQkFDL0UsSUFBSSxVQUFVLEdBQWtCLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BELElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNyQixPQUFPO2dCQUNYLENBQUM7Z0JBRUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsVUFBVSxDQUFDO2dCQUNyQyxNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO2dCQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7b0JBQzVDLElBQUksRUFBRSxVQUFVO29CQUNoQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVTtpQkFDYixDQUFDLENBQUM7Z0JBRUgsT0FBTztvQkFDSCxDQUFDO29CQUNELENBQUM7b0JBQ0QsSUFBSTtvQkFDSixJQUFJLEVBQUUsTUFBTTtvQkFDWixLQUFLLEVBQUUsU0FBUztvQkFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3BCLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxJQUFJO29CQUNmLFFBQVEsRUFBRSxJQUFJO29CQUNkLGNBQWMsRUFBRSxXQUFXO29CQUMzQixNQUFNO2lCQUNULENBQUM7WUFDTixDQUFDO1lBQ0QsT0FBTztRQUNYLENBQUMsQ0FBQyxDQUFDO0tBbUJOO2FBbEVVLGNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEFBQXhCLENBQXlCO0lBaUR6QyxTQUFTLENBQUMsQ0FBNEI7UUFDbEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQTRCO1FBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUcsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLEdBQUcsSUFBSSxJQUFJO1lBQUUsT0FBTztRQUN4QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUgsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRyxDQUFDOytHQWxFUSxlQUFlO21HQUFmLGVBQWUsZ05BVGQ7Ozs7S0FJVCw0REFFUyxXQUFXOzs0RkFHWixlQUFlO2tCQVgzQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUN0QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJX1RBQkxFX0NFTExfUEFERElORywgQUlfVEFCTEVfRklFTERfSEVBRF9JQ09OX0dBUF9TSVpFLCBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUsIENvbG9ycyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBnZXRNb3VzZVBvc2l0aW9uLCBoYW5kbGVNb3VzZVN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQUlUYWJsZVRleHQgfSBmcm9tICcuLi90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlSG92ZXJDZWxsQ29uZmlnLCBBSVRhYmxlUmVuZGVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgS29FdmVudE9iamVjdCB9IGZyb20gJy4uLy4uLy4uL2FuZ3VsYXIta29udmEnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkVHlwZSB9IGZyb20gJ0BhaS10YWJsZS91dGlscyc7XG5pbXBvcnQgeyBUZXh0Q29uZmlnIH0gZnJvbSAna29udmEvbGliL3NoYXBlcy9UZXh0JztcbmltcG9ydCB7IGRyYXdlciB9IGZyb20gJy4uLy4uL2RyYXdlcnMvZHJhd2VyJztcbmltcG9ydCB7IEhvdmVyQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWxpbmsnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIEBpZiAoc2hvd0xpbmsoKSkge1xuICAgICAgICAgICAgPGFpLXRhYmxlLXRleHQgW2NvbmZpZ109XCJ0ZXh0Q29uZmlnKCkhXCIgKGtvQ2xpY2spPVwibGlua0NsaWNrKCRldmVudClcIiAoa29Nb3VzZU1vdmUpPVwibGlua01vdXNlTW92ZSgkZXZlbnQpXCI+PC9haS10YWJsZS10ZXh0PlxuICAgICAgICB9XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtBSVRhYmxlVGV4dF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUNlbGxMaW5rIGltcGxlbWVudHMgSG92ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZmllbGRUeXBlID0gQUlUYWJsZUZpZWxkVHlwZS5saW5rO1xuXG4gICAgY29uZmlnID0gaW5wdXQ8QUlUYWJsZUhvdmVyQ2VsbENvbmZpZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgIHRleHRPZmZzZXQgPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkU7XG5cbiAgICByZW5kZXIgPSBjb21wdXRlZDxBSVRhYmxlUmVuZGVyIHwgdW5kZWZpbmVkPigoKSA9PiB0aGlzLmNvbmZpZygpPy5yZW5kZXIpO1xuXG4gICAgdHJhbnNmb3JtVmFsdWUgPSBjb21wdXRlZDx7IHRleHQ6IHN0cmluZzsgdXJsOiBzdHJpbmcgfT4oKCkgPT4gdGhpcy5yZW5kZXIoKT8udHJhbnNmb3JtVmFsdWUpO1xuXG4gICAgc2hvd0xpbmsgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiAhIXRoaXMudHJhbnNmb3JtVmFsdWUoKT8udGV4dCk7XG5cbiAgICB0ZXh0Q29uZmlnID0gY29tcHV0ZWQ8VGV4dENvbmZpZyB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBjb25zdCByZW5kZXIgPSB0aGlzLmNvbmZpZygpPy5yZW5kZXI7XG4gICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGNvbHVtbldpZHRoLCByb3dIZWlnaHQsIHN0eWxlLCB6SW5kZXggfSA9IHJlbmRlcjtcbiAgICAgICAgICAgIGxldCB0ZXh0UmVuZGVyOiBzdHJpbmcgfCBudWxsID0gdHJhbnNmb3JtVmFsdWUudGV4dDtcbiAgICAgICAgICAgIGlmICh0ZXh0UmVuZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRleHRSZW5kZXIgPSB0ZXh0UmVuZGVyLnJlcGxhY2UoL1xccnxcXG4vZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRXZWlnaHQgPSBzdHlsZT8uZm9udFdlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCwgdGV4dFdpZHRoIH0gPSBkcmF3ZXIudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0UmVuZGVyLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgd3JhcDogJ25vbmUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0ZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodCArIDIsXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS44NCxcbiAgICAgICAgICAgICAgICBsaXN0ZW5pbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgZWxsaXBzaXM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnLFxuICAgICAgICAgICAgICAgIHpJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICBsaW5rQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBlLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNmb3JtVmFsdWUoKS51cmwsICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICAgIH1cblxuICAgIGxpbmtNb3VzZU1vdmUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBlLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHsgYWlUYWJsZSwgY29vcmRpbmF0ZSB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IGdyaWRTdGFnZSA9IGUuZXZlbnQuY3VycmVudFRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICBjb25zdCBwb3MgPSBncmlkU3RhZ2U/LmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgICBpZiAocG9zID09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSBhaVRhYmxlO1xuICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgY29uc3QgY3VyTW91c2VQb3NpdGlvbiA9IGdldE1vdXNlUG9zaXRpb24oYWlUYWJsZSwgeCwgeSwgY29vcmRpbmF0ZSwgQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpLCBjb250ZXh0ISwgdGFyZ2V0TmFtZSk7XG4gICAgICAgIGhhbmRsZU1vdXNlU3R5bGUoQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLCBjdXJNb3VzZVBvc2l0aW9uLmFyZWFUeXBlLCBjb29yZGluYXRlLmNvbnRhaW5lcik7XG4gICAgfVxufVxuIl19
@@ -1,268 +0,0 @@
1
- import { Component, computed, input, signal } from '@angular/core';
2
- import { ChangeDetectionStrategy } from '@angular/core';
3
- import { KoShape } from '../../../angular-konva';
4
- import { AITableFieldType } from '@ai-table/utils';
5
- import { generateTargetName } from '../../../utils';
6
- import { isActiveCell } from '../../../renderer';
7
- import { Colors, AI_TABLE_CELL_PADDING, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_OFFSET, AI_TABLE_CELL, AI_TABLE_CELL_BORDER, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_TEXT_GAP, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_FILL } from '../../../constants';
8
- import { isNil } from 'lodash';
9
- import * as i0 from "@angular/core";
10
- export class AITableCellProgress {
11
- constructor() {
12
- this.config = input();
13
- this.readonly = computed(() => {
14
- return this.config()?.readonly;
15
- });
16
- this.dragPointerX = signal(null);
17
- this.railWidth = computed(() => {
18
- const { columnWidth } = this.config().render;
19
- return columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PROGRESS_TEXT_WIDTH;
20
- });
21
- this.trackWidth = computed(() => {
22
- return (this.progressValue() / 100) * this.railWidth();
23
- });
24
- this.pointerWidth = AI_TABLE_PROGRESS_BAR_POINTER_WIDTH;
25
- this.progressOffsetY = (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2 + AI_TABLE_OFFSET;
26
- this.dragProgressValue = signal(null);
27
- this.progressValue = computed(() => {
28
- const dragValue = this.dragProgressValue();
29
- if (dragValue !== null) {
30
- return dragValue;
31
- }
32
- const { render } = this.config();
33
- const { transformValue } = render;
34
- if (isNil(transformValue)) {
35
- return 0;
36
- }
37
- return transformValue;
38
- });
39
- this.whiteBgConfig = computed(() => {
40
- const { aiTable, render, field, recordId, coordinate } = this.config();
41
- const pointPosition = aiTable.context.pointPosition();
42
- const { x, y } = render;
43
- const { columnIndex } = pointPosition;
44
- const isActive = isActiveCell([recordId, field._id], aiTable);
45
- return {
46
- x: x - AI_TABLE_CELL_PADDING + AI_TABLE_CELL_BORDER / 2,
47
- y: y + AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET,
48
- width: coordinate.getColumnWidth(columnIndex) - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET) * 2 + AI_TABLE_CELL_BORDER / 2,
49
- height: AI_TABLE_ROW_BLANK_HEIGHT - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET),
50
- fill: Colors.white,
51
- stroke: isActive ? null : Colors.white,
52
- name: generateTargetName({
53
- targetName: AI_TABLE_CELL,
54
- fieldId: field._id,
55
- recordId
56
- })
57
- };
58
- });
59
- this.railConfig = computed(() => {
60
- const { render, field, recordId } = this.config();
61
- const { x } = render;
62
- return {
63
- x,
64
- y: this.progressOffsetY,
65
- width: this.railWidth(),
66
- height: AI_TABLE_PROGRESS_BAR_HEIGHT,
67
- cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
68
- fill: Colors.gray200,
69
- name: generateTargetName({
70
- targetName: AI_TABLE_CELL,
71
- fieldId: field._id,
72
- recordId,
73
- mouseStyle: this.readonly() ? 'default' : 'pointer'
74
- })
75
- };
76
- });
77
- this.trackConfig = computed(() => {
78
- const { render, field, recordId } = this.config();
79
- const { x } = render;
80
- return {
81
- x,
82
- y: this.progressOffsetY,
83
- width: this.trackWidth(),
84
- height: AI_TABLE_PROGRESS_BAR_HEIGHT,
85
- cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
86
- fill: Colors.success,
87
- name: generateTargetName({
88
- targetName: AI_TABLE_CELL,
89
- fieldId: field._id,
90
- recordId,
91
- mouseStyle: this.readonly() ? 'default' : 'pointer'
92
- })
93
- };
94
- });
95
- this.pointerConfig = computed(() => {
96
- const { render, field, recordId } = this.config();
97
- const { x } = render;
98
- const halfPointerWidth = this.pointerWidth / 2;
99
- const pointerY = this.progressOffsetY - (AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2;
100
- let pointerX;
101
- if (this.dragPointerX() !== null) {
102
- pointerX = this.dragPointerX() - halfPointerWidth;
103
- }
104
- else {
105
- pointerX = x + this.trackWidth() - halfPointerWidth;
106
- }
107
- return {
108
- x: pointerX,
109
- y: pointerY,
110
- width: this.pointerWidth,
111
- height: AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT,
112
- fill: Colors.white,
113
- stroke: Colors.success,
114
- strokeWidth: 1,
115
- cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
116
- opacity: this.readonly() ? 0 : 1,
117
- draggable: !this.readonly(),
118
- dragBoundFunc: (pos) => {
119
- const minX = x;
120
- const maxX = x + this.railWidth() - this.pointerWidth;
121
- return {
122
- x: Math.min(minX, Math.min(maxX, pos.x)),
123
- y: pointerY
124
- };
125
- },
126
- name: generateTargetName({
127
- targetName: AI_TABLE_CELL,
128
- fieldId: field._id,
129
- recordId,
130
- mouseStyle: this.readonly() ? 'default' : 'pointer'
131
- })
132
- };
133
- });
134
- this.textConfig = computed(() => {
135
- const { render, field, recordId } = this.config();
136
- const { x } = render;
137
- const textX = x + this.railWidth() + AI_TABLE_TEXT_GAP;
138
- const textY = (AI_TABLE_ROW_BLANK_HEIGHT - DEFAULT_FONT_SIZE) / 2 + AI_TABLE_OFFSET;
139
- return {
140
- x: textX,
141
- y: textY,
142
- text: `${this.progressValue()}%`,
143
- fill: DEFAULT_TEXT_FILL,
144
- fontFamily: DEFAULT_FONT_FAMILY,
145
- fontSize: DEFAULT_FONT_SIZE,
146
- name: generateTargetName({
147
- targetName: AI_TABLE_CELL,
148
- fieldId: field._id,
149
- recordId
150
- })
151
- };
152
- });
153
- }
154
- static { this.fieldType = AITableFieldType.progress; }
155
- calculatePercentage(clickX) {
156
- return Math.max(0, Math.min(100, Math.round((clickX / this.railWidth()) * 100)));
157
- }
158
- koClick(e) {
159
- if (this.readonly()) {
160
- return;
161
- }
162
- this.updateProgressValue(e);
163
- }
164
- pointerDragstart(e) {
165
- if (this.readonly()) {
166
- return;
167
- }
168
- }
169
- pointerDragmove(e) {
170
- if (this.readonly()) {
171
- return;
172
- }
173
- const { render, aiTable, coordinate } = this.config();
174
- const { x } = render;
175
- const { scrollLeft } = aiTable.context.scrollState();
176
- const pointPosition = aiTable.context.pointPosition();
177
- const { columnIndex } = pointPosition;
178
- const columnLeftX = coordinate.getColumnOffset(columnIndex) - scrollLeft + AI_TABLE_OFFSET;
179
- const stage = e.event.target.getStage();
180
- if (!stage)
181
- return;
182
- const point = stage.getPointerPosition();
183
- if (!point)
184
- return;
185
- const dragX = point.x - columnLeftX - x;
186
- const minX = x;
187
- const maxX = x + this.railWidth();
188
- let dragPointerX = point.x - columnLeftX;
189
- if (dragPointerX < minX) {
190
- dragPointerX = minX;
191
- }
192
- else if (dragPointerX > maxX) {
193
- dragPointerX = maxX;
194
- }
195
- this.dragPointerX.set(dragPointerX);
196
- const percentage = this.calculatePercentage(dragX);
197
- this.dragProgressValue.set(percentage);
198
- }
199
- pointerDragend(e) {
200
- if (this.readonly()) {
201
- return;
202
- }
203
- this.updateProgressValue(e);
204
- this.dragPointerX.set(null);
205
- this.dragProgressValue.set(null);
206
- }
207
- updateProgressValue(e) {
208
- const { render, aiTable, coordinate, actions, field, recordId } = this.config();
209
- const { x } = render;
210
- const { scrollLeft } = aiTable.context.scrollState();
211
- const pointPosition = aiTable.context.pointPosition();
212
- const { columnIndex } = pointPosition;
213
- const columnLeftX = coordinate.getColumnOffset(columnIndex) - scrollLeft + AI_TABLE_OFFSET;
214
- const stage = e.event.target.getStage();
215
- if (!stage)
216
- return;
217
- const point = stage.getPointerPosition();
218
- if (!point)
219
- return;
220
- const dragX = point.x - columnLeftX - x;
221
- const percentage = this.calculatePercentage(dragX);
222
- if (!this.readonly() && actions && actions.updateFieldValue) {
223
- actions.updateFieldValue({
224
- value: percentage,
225
- path: [recordId, field._id]
226
- });
227
- }
228
- }
229
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellProgress, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableCellProgress, isStandalone: true, selector: "ai-table-progress", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
231
- @if (!readonly()) {
232
- <ko-rect [config]="whiteBgConfig()"></ko-rect>
233
- }
234
- <ko-rect [config]="railConfig()" (koClick)="koClick($event)"></ko-rect>
235
- <ko-rect [config]="trackConfig()" (koClick)="koClick($event)"></ko-rect>
236
- <ko-rect
237
- [config]="pointerConfig()"
238
- (koDragstart)="pointerDragstart($event)"
239
- (koDragmove)="pointerDragmove($event)"
240
- (koDragend)="pointerDragend($event)"
241
- ></ko-rect>
242
- <ko-text [config]="textConfig()"></ko-text>
243
- `, isInline: true, dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
244
- }
245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellProgress, decorators: [{
246
- type: Component,
247
- args: [{
248
- selector: 'ai-table-progress',
249
- template: `
250
- @if (!readonly()) {
251
- <ko-rect [config]="whiteBgConfig()"></ko-rect>
252
- }
253
- <ko-rect [config]="railConfig()" (koClick)="koClick($event)"></ko-rect>
254
- <ko-rect [config]="trackConfig()" (koClick)="koClick($event)"></ko-rect>
255
- <ko-rect
256
- [config]="pointerConfig()"
257
- (koDragstart)="pointerDragstart($event)"
258
- (koDragmove)="pointerDragmove($event)"
259
- (koDragend)="pointerDragend($event)"
260
- ></ko-rect>
261
- <ko-text [config]="textConfig()"></ko-text>
262
- `,
263
- standalone: true,
264
- imports: [KoShape],
265
- changeDetection: ChangeDetectionStrategy.OnPush
266
- }]
267
- }] });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9jZWxscy9wcm9ncmVzcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUNILE1BQU0sRUFDTixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLG1DQUFtQyxFQUNuQyxvQ0FBb0MsRUFDcEMsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFzQi9CLE1BQU0sT0FBTyxtQkFBbUI7SUFwQmhDO1FBdUJJLFdBQU0sR0FBRyxLQUFLLEVBQTBCLENBQUM7UUFFekMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FB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QUFLO1lBQUUsT0FBTztRQUVuQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDckIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLElBQUksRUFBRSxDQUFDLFFBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDOytHQXpQUSxtQkFBbUI7bUdBQW5CLG1CQUFtQixvTkFsQmxCOzs7Ozs7Ozs7Ozs7O0tBYVQsNERBRVMsT0FBTzs7NEZBR1IsbUJBQW1CO2tCQXBCL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7S0FhVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS29TaGFwZSwgS29FdmVudE9iamVjdCB9IGZyb20gJy4uLy4uLy4uL2FuZ3VsYXIta29udmEnO1xuaW1wb3J0IHsgSG92ZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkVHlwZSB9IGZyb20gJ0BhaS10YWJsZS91dGlscyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVRhcmdldE5hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0FjdGl2ZUNlbGwgfSBmcm9tICcuLi8uLi8uLi9yZW5kZXJlcic7XG5pbXBvcnQge1xuICAgIENvbG9ycyxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfQ0VMTCxcbiAgICBBSV9UQUJMRV9DRUxMX0JPUkRFUixcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV0lEVEgsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUE9JTlRFUl9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUE9JTlRFUl9IRUlHSFQsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBERUZBVUxUX1RFWFRfRklMTFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLXByb2dyZXNzJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cIndoaXRlQmdDb25maWcoKVwiPjwva28tcmVjdD5cbiAgICAgICAgfVxuICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cInJhaWxDb25maWcoKVwiIChrb0NsaWNrKT1cImtvQ2xpY2soJGV2ZW50KVwiPjwva28tcmVjdD5cbiAgICAgICAgPGtvLXJlY3QgW2NvbmZpZ109XCJ0cmFja0NvbmZpZygpXCIgKGtvQ2xpY2spPVwia29DbGljaygkZXZlbnQpXCI+PC9rby1yZWN0PlxuICAgICAgICA8a28tcmVjdFxuICAgICAgICAgICAgW2NvbmZpZ109XCJwb2ludGVyQ29uZmlnKClcIlxuICAgICAgICAgICAgKGtvRHJhZ3N0YXJ0KT1cInBvaW50ZXJEcmFnc3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29EcmFnbW92ZSk9XCJwb2ludGVyRHJhZ21vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29EcmFnZW5kKT1cInBvaW50ZXJEcmFnZW5kKCRldmVudClcIlxuICAgICAgICA+PC9rby1yZWN0PlxuICAgICAgICA8a28tdGV4dCBbY29uZmlnXT1cInRleHRDb25maWcoKVwiPjwva28tdGV4dD5cbiAgICBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tvU2hhcGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVDZWxsUHJvZ3Jlc3MgaW1wbGVtZW50cyBIb3ZlckNlbGxDb21wb25lbnQge1xuICAgIHN0YXRpYyBmaWVsZFR5cGUgPSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzO1xuXG4gICAgY29uZmlnID0gaW5wdXQ8QUlUYWJsZUhvdmVyQ2VsbENvbmZpZz4oKTtcblxuICAgIHJlYWRvbmx5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8ucmVhZG9ubHk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIGRyYWdQb2ludGVyWCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAgIHByaXZhdGUgcmFpbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbldpZHRoIH0gPSB0aGlzLmNvbmZpZygpIS5yZW5kZXI7XG4gICAgICAgIHJldHVybiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dJRFRIO1xuICAgIH0pO1xuXG4gICAgcHJpdmF0ZSB0cmFja1dpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gKHRoaXMucHJvZ3Jlc3NWYWx1ZSgpIC8gMTAwKSAqIHRoaXMucmFpbFdpZHRoKCk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHBvaW50ZXJXaWR0aCA9IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9QT0lOVEVSX1dJRFRIO1xuXG4gICAgcHJpdmF0ZSBwcm9ncmVzc09mZnNldFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQpIC8gMiArIEFJX1RBQkxFX09GRlNFVDtcblxuICAgIHByaXZhdGUgZHJhZ1Byb2dyZXNzVmFsdWUgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgICBwcml2YXRlIHByb2dyZXNzVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYWdWYWx1ZSA9IHRoaXMuZHJhZ1Byb2dyZXNzVmFsdWUoKTtcbiAgICAgICAgaWYgKGRyYWdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRyYWdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoaXNOaWwodHJhbnNmb3JtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtVmFsdWU7XG4gICAgfSk7XG5cbiAgICB3aGl0ZUJnQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGFpVGFibGUsIHJlbmRlciwgZmllbGQsIHJlY29yZElkLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgcG9pbnRQb3NpdGlvbiA9IGFpVGFibGUuY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5JbmRleCB9ID0gcG9pbnRQb3NpdGlvbjtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBpc0FjdGl2ZUNlbGwoW3JlY29yZElkISwgZmllbGQuX2lkXSwgYWlUYWJsZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHggLSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX0JPUkRFUiAvIDIsXG4gICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfQ0VMTF9CT1JERVIgKyBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB3aWR0aDogY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCkgLSAoQUlfVEFCTEVfQ0VMTF9CT1JERVIgKyBBSV9UQUJMRV9PRkZTRVQpICogMiArIEFJX1RBQkxFX0NFTExfQk9SREVSIC8gMixcbiAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIChBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCksXG4gICAgICAgICAgICBmaWxsOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICBzdHJva2U6IGlzQWN0aXZlID8gbnVsbCA6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZC5faWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByYWlsQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgZmllbGQsIHJlY29yZElkIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4IH0gPSByZW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5OiB0aGlzLnByb2dyZXNzT2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnJhaWxXaWR0aCgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkyMDAsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkLFxuICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHRoaXMucmVhZG9ubHkoKSA/ICdkZWZhdWx0JyA6ICdwb2ludGVyJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRyYWNrQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgZmllbGQsIHJlY29yZElkIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4IH0gPSByZW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5OiB0aGlzLnByb2dyZXNzT2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnRyYWNrV2lkdGgoKSxcbiAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCxcbiAgICAgICAgICAgIGNvcm5lclJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IENvbG9ycy5zdWNjZXNzLFxuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9DRUxMLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZCxcbiAgICAgICAgICAgICAgICBtb3VzZVN0eWxlOiB0aGlzLnJlYWRvbmx5KCkgPyAnZGVmYXVsdCcgOiAncG9pbnRlcidcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBwb2ludGVyQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgZmllbGQsIHJlY29yZElkIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4IH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGhhbGZQb2ludGVyV2lkdGggPSB0aGlzLnBvaW50ZXJXaWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ZXJZID0gdGhpcy5wcm9ncmVzc09mZnNldFkgLSAoQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1BPSU5URVJfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyO1xuXG4gICAgICAgIGxldCBwb2ludGVyWDogbnVtYmVyO1xuICAgICAgICBpZiAodGhpcy5kcmFnUG9pbnRlclgoKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcG9pbnRlclggPSB0aGlzLmRyYWdQb2ludGVyWCgpISAtIGhhbGZQb2ludGVyV2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludGVyWCA9IHggKyB0aGlzLnRyYWNrV2lkdGgoKSAtIGhhbGZQb2ludGVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcG9pbnRlclgsXG4gICAgICAgICAgICB5OiBwb2ludGVyWSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBvaW50ZXJXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1BPSU5URVJfSEVJR0hULFxuICAgICAgICAgICAgZmlsbDogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgc3Ryb2tlOiBDb2xvcnMuc3VjY2VzcyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5yZWFkb25seSgpID8gMCA6IDEsXG4gICAgICAgICAgICBkcmFnZ2FibGU6ICF0aGlzLnJlYWRvbmx5KCksXG4gICAgICAgICAgICBkcmFnQm91bmRGdW5jOiAocG9zOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5YID0geDtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhYID0geCArIHRoaXMucmFpbFdpZHRoKCkgLSB0aGlzLnBvaW50ZXJXaWR0aDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHg6IE1hdGgubWluKG1pblgsIE1hdGgubWluKG1heFgsIHBvcy54KSksXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvaW50ZXJZXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkLFxuICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHRoaXMucmVhZG9ubHkoKSA/ICdkZWZhdWx0JyA6ICdwb2ludGVyJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRleHRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHggfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgdGV4dFggPSB4ICsgdGhpcy5yYWlsV2lkdGgoKSArIEFJX1RBQkxFX1RFWFRfR0FQO1xuICAgICAgICBjb25zdCB0ZXh0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gREVGQVVMVF9GT05UX1NJWkUpIC8gMiArIEFJX1RBQkxFX09GRlNFVDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogdGV4dFgsXG4gICAgICAgICAgICB5OiB0ZXh0WSxcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMucHJvZ3Jlc3NWYWx1ZSgpfSVgLFxuICAgICAgICAgICAgZmlsbDogREVGQVVMVF9URVhUX0ZJTEwsXG4gICAgICAgICAgICBmb250RmFtaWx5OiBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgICAgICAgICAgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9DRUxMLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUGVyY2VudGFnZShjbGlja1g6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoKGNsaWNrWCAvIHRoaXMucmFpbFdpZHRoKCkpICogMTAwKSkpO1xuICAgIH1cblxuICAgIGtvQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1ZhbHVlKGUpO1xuICAgIH1cblxuICAgIHBvaW50ZXJEcmFnc3RhcnQoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb2ludGVyRHJhZ21vdmUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJlbmRlciwgYWlUYWJsZSwgY29vcmRpbmF0ZSB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IHsgeCB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCB7IHNjcm9sbExlZnQgfSA9IGFpVGFibGUuY29udGV4dCEuc2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcG9pbnRQb3NpdGlvbiA9IGFpVGFibGUuY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB7IGNvbHVtbkluZGV4IH0gPSBwb2ludFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBjb2x1bW5MZWZ0WCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uT2Zmc2V0KGNvbHVtbkluZGV4KSAtIHNjcm9sbExlZnQgKyBBSV9UQUJMRV9PRkZTRVQ7XG5cbiAgICAgICAgY29uc3Qgc3RhZ2UgPSBlLmV2ZW50LnRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICBpZiAoIXN0YWdlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9pbnQgPSBzdGFnZS5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgICAgaWYgKCFwb2ludCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGRyYWdYID0gcG9pbnQueCAtIGNvbHVtbkxlZnRYIC0geDtcbiAgICAgICAgY29uc3QgbWluWCA9IHg7XG4gICAgICAgIGNvbnN0IG1heFggPSB4ICsgdGhpcy5yYWlsV2lkdGgoKTtcblxuICAgICAgICBsZXQgZHJhZ1BvaW50ZXJYID0gcG9pbnQueCAtIGNvbHVtbkxlZnRYO1xuICAgICAgICBpZiAoZHJhZ1BvaW50ZXJYIDwgbWluWCkge1xuICAgICAgICAgICAgZHJhZ1BvaW50ZXJYID0gbWluWDtcbiAgICAgICAgfSBlbHNlIGlmIChkcmFnUG9pbnRlclggPiBtYXhYKSB7XG4gICAgICAgICAgICBkcmFnUG9pbnRlclggPSBtYXhYO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnUG9pbnRlclguc2V0KGRyYWdQb2ludGVyWCk7XG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnRhZ2UoZHJhZ1gpO1xuICAgICAgICB0aGlzLmRyYWdQcm9ncmVzc1ZhbHVlLnNldChwZXJjZW50YWdlKTtcbiAgICB9XG5cbiAgICBwb2ludGVyRHJhZ2VuZChlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NWYWx1ZShlKTtcbiAgICAgICAgdGhpcy5kcmFnUG9pbnRlclguc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmRyYWdQcm9ncmVzc1ZhbHVlLnNldChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByb2dyZXNzVmFsdWUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pik6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgYWlUYWJsZSwgY29vcmRpbmF0ZSwgYWN0aW9ucywgZmllbGQsIHJlY29yZElkIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4IH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gYWlUYWJsZS5jb250ZXh0IS5zY3JvbGxTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gYWlUYWJsZS5jb250ZXh0IS5wb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uSW5kZXggfSA9IHBvaW50UG9zaXRpb247XG4gICAgICAgIGNvbnN0IGNvbHVtbkxlZnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpIC0gc2Nyb2xsTGVmdCArIEFJX1RBQkxFX09GRlNFVDtcblxuICAgICAgICBjb25zdCBzdGFnZSA9IGUuZXZlbnQudGFyZ2V0LmdldFN0YWdlKCk7XG4gICAgICAgIGlmICghc3RhZ2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwb2ludCA9IHN0YWdlLmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgICBpZiAoIXBvaW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZHJhZ1ggPSBwb2ludC54IC0gY29sdW1uTGVmdFggLSB4O1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50YWdlKGRyYWdYKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkoKSAmJiBhY3Rpb25zICYmIGFjdGlvbnMudXBkYXRlRmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBbcmVjb3JkSWQhLCBmaWVsZC5faWRdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,153 +0,0 @@
1
- import { Component, computed, input, signal } from '@angular/core';
2
- import { ChangeDetectionStrategy } from '@angular/core';
3
- import { KoShape } from '../../../angular-konva';
4
- import { AITableFieldType } from '@ai-table/utils';
5
- import { generateTargetName } from '../../../utils';
6
- import { isActiveCell } from '../../../renderer';
7
- import { StarFill, Colors, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_PADDING, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_OFFSET, AI_TABLE_CELL, AI_TABLE_RATE_MAX, AI_TABLE_CELL_BORDER } from '../../../constants';
8
- import * as i0 from "@angular/core";
9
- export class AITableCellRate {
10
- constructor() {
11
- this.pointerX = signal(0);
12
- this.pointerY = signal(0);
13
- this.resetStatus = signal(false);
14
- this.config = input();
15
- this.readonly = computed(() => {
16
- return this.config()?.readonly;
17
- });
18
- this.whiteBgConfig = computed(() => {
19
- const { aiTable, render, field, recordId, coordinate } = this.config();
20
- const pointPosition = aiTable.context.pointPosition();
21
- const { x, y } = render;
22
- const { columnIndex } = pointPosition;
23
- const isActive = isActiveCell([recordId, field._id], aiTable);
24
- return {
25
- x: x - AI_TABLE_CELL_PADDING + AI_TABLE_CELL_BORDER,
26
- y: y + AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET,
27
- width: coordinate.getColumnWidth(columnIndex) - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET) * 2,
28
- height: AI_TABLE_ROW_BLANK_HEIGHT - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET),
29
- fill: Colors.white,
30
- stroke: isActive ? null : Colors.white,
31
- zIndex: 0,
32
- name: generateTargetName({
33
- targetName: AI_TABLE_CELL,
34
- fieldId: field._id,
35
- recordId
36
- })
37
- };
38
- });
39
- this.starConfigs = computed(() => {
40
- const { render, field, recordId, readonly, aiTable, coordinate } = this.config();
41
- const { x, transformValue } = render;
42
- const max = AI_TABLE_RATE_MAX;
43
- const starY = (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_CELL_EMOJI_SIZE) / 2 + AI_TABLE_OFFSET;
44
- const pointPosition = aiTable.context.pointPosition();
45
- const { rowIndex, columnIndex } = pointPosition;
46
- const { scrollLeft, scrollTop } = aiTable.context.scrollState();
47
- const columnLeftX = coordinate.getColumnOffset(columnIndex) - scrollLeft + AI_TABLE_OFFSET;
48
- const columnTopY = coordinate.getRowOffset(rowIndex) - scrollTop + AI_TABLE_OFFSET;
49
- const firstStarLeftX = columnLeftX + AI_TABLE_CELL_PADDING;
50
- const lastStarRightX = columnLeftX + AI_TABLE_CELL_PADDING + max * AI_TABLE_CELL_EMOJI_SIZE + (max - 1) * AI_TABLE_CELL_EMOJI_PADDING;
51
- const startTopY = columnTopY + starY;
52
- const startBottomY = columnTopY + starY + AI_TABLE_CELL_EMOJI_SIZE;
53
- const isHoverStar = this.pointerX() >= firstStarLeftX &&
54
- this.pointerX() <= lastStarRightX &&
55
- this.pointerY() >= startTopY &&
56
- this.pointerY() <= startBottomY;
57
- const renderWidth = coordinate.getColumnWidth(columnIndex) - AI_TABLE_CELL_PADDING;
58
- const starWidth = AI_TABLE_CELL_EMOJI_SIZE + AI_TABLE_CELL_EMOJI_PADDING;
59
- const maxStar = Math.min(max, Math.floor(renderWidth / starWidth));
60
- return [...Array(maxStar).keys()].map((item, index) => {
61
- const value = index + 1;
62
- const checked = value <= transformValue;
63
- const starX = x + index * (AI_TABLE_CELL_EMOJI_SIZE + AI_TABLE_CELL_EMOJI_PADDING);
64
- let fill = null;
65
- if (this.resetStatus()) {
66
- fill = Colors.gray100;
67
- }
68
- else {
69
- if (isHoverStar) {
70
- fill = columnLeftX + starX <= this.pointerX() ? Colors.waring : Colors.gray100;
71
- }
72
- else {
73
- fill = checked ? Colors.waring : Colors.gray100;
74
- }
75
- }
76
- return {
77
- x: starX,
78
- y: starY,
79
- size: 22,
80
- data: StarFill,
81
- fill,
82
- scaleX: 1.14,
83
- scaleY: 1.14,
84
- name: generateTargetName({
85
- targetName: AI_TABLE_CELL,
86
- fieldId: field._id,
87
- recordId,
88
- mouseStyle: readonly ? 'default' : 'pointer'
89
- })
90
- };
91
- });
92
- });
93
- }
94
- static { this.fieldType = AITableFieldType.rate; }
95
- koMousemove(e) {
96
- if (this.readonly()) {
97
- return;
98
- }
99
- this.resetStatus.set(false);
100
- const pos = e.event.target.getStage()?.getPointerPosition();
101
- if (!pos)
102
- return;
103
- const { x, y } = pos;
104
- this.pointerX.set(x);
105
- this.pointerY.set(y);
106
- }
107
- koClick(e, index) {
108
- if (this.readonly()) {
109
- return;
110
- }
111
- this.resetStatus.set(false);
112
- const { render, readonly, field, recordId, actions } = this.config();
113
- const { transformValue } = render;
114
- let value = index + 1;
115
- if (transformValue === value) {
116
- value = 0;
117
- this.resetStatus.set(true);
118
- }
119
- if (!readonly && actions && actions.updateFieldValue) {
120
- actions.updateFieldValue({
121
- value,
122
- path: [recordId, field._id]
123
- });
124
- }
125
- }
126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellRate, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
127
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableCellRate, isStandalone: true, selector: "ai-table-rate", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
128
- @if (!readonly()) {
129
- <ko-rect [config]="whiteBgConfig()" (koMousemove)="koMousemove($event)"></ko-rect>
130
- }
131
- @for (config of starConfigs(); let index = $index; track $index) {
132
- <ko-path [config]="config" (koClick)="koClick($event, index)"></ko-path>
133
- }
134
- `, isInline: true, dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
135
- }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellRate, decorators: [{
137
- type: Component,
138
- args: [{
139
- selector: 'ai-table-rate',
140
- template: `
141
- @if (!readonly()) {
142
- <ko-rect [config]="whiteBgConfig()" (koMousemove)="koMousemove($event)"></ko-rect>
143
- }
144
- @for (config of starConfigs(); let index = $index; track $index) {
145
- <ko-path [config]="config" (koClick)="koClick($event, index)"></ko-path>
146
- }
147
- `,
148
- standalone: true,
149
- imports: [KoShape],
150
- changeDetection: ChangeDetectionStrategy.OnPush
151
- }]
152
- }] });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NlbGxzL3JhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxRQUFRLEVBQ1IsTUFBTSxFQUNOLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQzs7QUFnQjVCLE1BQU0sT0FBTyxlQUFlO0lBZDVCO1FBaUJZLGFBQVEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsYUFBUSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUU3QixnQkFBVyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUU3QyxXQUFNLEdBQUcsS0FBSyxFQUEwQixDQUFDO1FBRXpDLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FB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RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLb1NoYXBlLCBLb0V2ZW50T2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQgeyBIb3ZlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFJVGFibGVIb3ZlckNlbGxDb25maWcgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnQGFpLXRhYmxlL3V0aWxzJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGlzQWN0aXZlQ2VsbCB9IGZyb20gJy4uLy4uLy4uL3JlbmRlcmVyJztcbmltcG9ydCB7XG4gICAgU3RhckZpbGwsXG4gICAgQ29sb3JzLFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTEwsXG4gICAgQUlfVEFCTEVfUkFURV9NQVgsXG4gICAgQUlfVEFCTEVfQ0VMTF9CT1JERVJcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhaS10YWJsZS1yYXRlJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cIndoaXRlQmdDb25maWcoKVwiIChrb01vdXNlbW92ZSk9XCJrb01vdXNlbW92ZSgkZXZlbnQpXCI+PC9rby1yZWN0PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbmZpZyBvZiBzdGFyQ29uZmlncygpOyBsZXQgaW5kZXggPSAkaW5kZXg7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGtvLXBhdGggW2NvbmZpZ109XCJjb25maWdcIiAoa29DbGljayk9XCJrb0NsaWNrKCRldmVudCwgaW5kZXgpXCI+PC9rby1wYXRoPlxuICAgICAgICB9XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtLb1NoYXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlQ2VsbFJhdGUgaW1wbGVtZW50cyBIb3ZlckNlbGxDb21wb25lbnQge1xuICAgIHN0YXRpYyBmaWVsZFR5cGUgPSBBSVRhYmxlRmllbGRUeXBlLnJhdGU7XG5cbiAgICBwcml2YXRlIHBvaW50ZXJYID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICBwcml2YXRlIHBvaW50ZXJZID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICBwcml2YXRlIHJlc2V0U3RhdHVzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIGNvbmZpZyA9IGlucHV0PEFJVGFibGVIb3ZlckNlbGxDb25maWc+KCk7XG5cbiAgICByZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnKCk/LnJlYWRvbmx5O1xuICAgIH0pO1xuXG4gICAgd2hpdGVCZ0NvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBhaVRhYmxlLCByZW5kZXIsIGZpZWxkLCByZWNvcmRJZCwgY29vcmRpbmF0ZSB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBhaVRhYmxlLmNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uSW5kZXggfSA9IHBvaW50UG9zaXRpb247XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gaXNBY3RpdmVDZWxsKFtyZWNvcmRJZCEsIGZpZWxkLl9pZF0sIGFpVGFibGUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB4IC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfQ0VMTF9CT1JERVIsXG4gICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfQ0VMTF9CT1JERVIgKyBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB3aWR0aDogY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCkgLSAoQUlfVEFCTEVfQ0VMTF9CT1JERVIgKyBBSV9UQUJMRV9PRkZTRVQpICogMixcbiAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIChBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCksXG4gICAgICAgICAgICBmaWxsOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICBzdHJva2U6IGlzQWN0aXZlID8gbnVsbCA6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZC5faWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBzdGFyQ29uZmlncyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIGZpZWxkLCByZWNvcmRJZCwgcmVhZG9ubHksIGFpVGFibGUsIGNvb3JkaW5hdGUgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHgsIHRyYW5zZm9ybVZhbHVlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IG1heCA9IEFJX1RBQkxFX1JBVEVfTUFYO1xuICAgICAgICBjb25zdCBzdGFyWSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFKSAvIDIgKyBBSV9UQUJMRV9PRkZTRVQ7XG5cbiAgICAgICAgY29uc3QgcG9pbnRQb3NpdGlvbiA9IGFpVGFibGUuY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4LCBjb2x1bW5JbmRleCB9ID0gcG9pbnRQb3NpdGlvbjtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IGFpVGFibGUuY29udGV4dCEuc2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgY29uc3QgY29sdW1uTGVmdFggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCkgLSBzY3JvbGxMZWZ0ICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICBjb25zdCBjb2x1bW5Ub3BZID0gY29vcmRpbmF0ZS5nZXRSb3dPZmZzZXQocm93SW5kZXgpIC0gc2Nyb2xsVG9wICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICBjb25zdCBmaXJzdFN0YXJMZWZ0WCA9IGNvbHVtbkxlZnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBsYXN0U3RhclJpZ2h0WCA9XG4gICAgICAgICAgICBjb2x1bW5MZWZ0WCArIEFJX1RBQkxFX0NFTExfUEFERElORyArIG1heCAqIEFJX1RBQkxFX0NFTExfRU1PSklfU0laRSArIChtYXggLSAxKSAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgY29uc3Qgc3RhcnRUb3BZID0gY29sdW1uVG9wWSArIHN0YXJZO1xuICAgICAgICBjb25zdCBzdGFydEJvdHRvbVkgPSBjb2x1bW5Ub3BZICsgc3RhclkgKyBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkU7XG5cbiAgICAgICAgY29uc3QgaXNIb3ZlclN0YXIgPVxuICAgICAgICAgICAgdGhpcy5wb2ludGVyWCgpID49IGZpcnN0U3RhckxlZnRYICYmXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJYKCkgPD0gbGFzdFN0YXJSaWdodFggJiZcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclkoKSA+PSBzdGFydFRvcFkgJiZcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclkoKSA8PSBzdGFydEJvdHRvbVk7XG5cbiAgICAgICAgY29uc3QgcmVuZGVyV2lkdGggPSBjb29yZGluYXRlLmdldENvbHVtbldpZHRoKGNvbHVtbkluZGV4KSAtIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgc3RhcldpZHRoID0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFICsgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HO1xuICAgICAgICBjb25zdCBtYXhTdGFyID0gTWF0aC5taW4obWF4LCBNYXRoLmZsb29yKHJlbmRlcldpZHRoIC8gc3RhcldpZHRoKSk7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXhTdGFyKS5rZXlzKCldLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlIDw9IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RhclggPSB4ICsgaW5kZXggKiAoQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFICsgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HKTtcblxuICAgICAgICAgICAgbGV0IGZpbGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzZXRTdGF0dXMoKSkge1xuICAgICAgICAgICAgICAgIGZpbGwgPSBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJTdGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjb2x1bW5MZWZ0WCArIHN0YXJYIDw9IHRoaXMucG9pbnRlclgoKSA/IENvbG9ycy53YXJpbmcgOiBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWxsID0gY2hlY2tlZCA/IENvbG9ycy53YXJpbmcgOiBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogc3RhclgsXG4gICAgICAgICAgICAgICAgeTogc3RhclksXG4gICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgZGF0YTogU3RhckZpbGwsXG4gICAgICAgICAgICAgICAgZmlsbCxcbiAgICAgICAgICAgICAgICBzY2FsZVg6IDEuMTQsXG4gICAgICAgICAgICAgICAgc2NhbGVZOiAxLjE0LFxuICAgICAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHJlYWRvbmx5ID8gJ2RlZmF1bHQnIDogJ3BvaW50ZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAga29Nb3VzZW1vdmUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U3RhdHVzLnNldChmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBvcyA9IGUuZXZlbnQudGFyZ2V0LmdldFN0YWdlKCk/LmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgICBpZiAoIXBvcykgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgdGhpcy5wb2ludGVyWC5zZXQoeCk7XG4gICAgICAgIHRoaXMucG9pbnRlclkuc2V0KHkpO1xuICAgIH1cblxuICAgIGtvQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50PiwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U3RhdHVzLnNldChmYWxzZSk7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCByZWFkb25seSwgZmllbGQsIHJlY29yZElkLCBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IGluZGV4ICsgMTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgdGhpcy5yZXNldFN0YXR1cy5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlYWRvbmx5ICYmIGFjdGlvbnMgJiYgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnVwZGF0ZUZpZWxkVmFsdWUoe1xuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtyZWNvcmRJZCEsIGZpZWxkLl9pZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19