@idraw/core 0.4.2 → 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/esm/board/index.d.ts +2 -2
  2. package/dist/esm/board/index.js +23 -12
  3. package/dist/esm/board/sharer.d.ts +3 -3
  4. package/dist/esm/board/sharer.js +10 -10
  5. package/dist/esm/board/viewer.d.ts +3 -3
  6. package/dist/esm/board/viewer.js +14 -14
  7. package/dist/esm/board/watcher.d.ts +3 -3
  8. package/dist/esm/board/watcher.js +68 -43
  9. package/dist/esm/core.d.ts +52 -0
  10. package/dist/esm/core.js +393 -0
  11. package/dist/esm/cursor/cursor-image.d.ts +2 -0
  12. package/dist/esm/cursor/cursor-image.js +2 -0
  13. package/dist/esm/cursor/cursor.js +60 -24
  14. package/dist/esm/index.d.ts +12 -61
  15. package/dist/esm/index.js +11 -389
  16. package/dist/esm/middlewares/common.d.ts +4 -0
  17. package/dist/esm/middlewares/common.js +13 -0
  18. package/dist/esm/middlewares/creator/dom.d.ts +11 -0
  19. package/dist/esm/middlewares/creator/dom.js +52 -0
  20. package/dist/esm/middlewares/creator/index.d.ts +5 -0
  21. package/dist/esm/middlewares/creator/index.js +136 -0
  22. package/dist/esm/middlewares/creator/static.d.ts +14 -0
  23. package/dist/esm/middlewares/creator/static.js +19 -0
  24. package/dist/esm/middlewares/creator/styles.d.ts +4 -0
  25. package/dist/esm/middlewares/creator/styles.js +32 -0
  26. package/dist/esm/middlewares/creator/types.d.ts +7 -0
  27. package/dist/esm/middlewares/creator/types.js +1 -0
  28. package/dist/esm/middlewares/creator/util.d.ts +10 -0
  29. package/dist/esm/middlewares/creator/util.js +52 -0
  30. package/dist/esm/middlewares/dragger/index.js +5 -5
  31. package/dist/esm/middlewares/info/draw-info.d.ts +11 -11
  32. package/dist/esm/middlewares/info/draw-info.js +18 -18
  33. package/dist/esm/middlewares/info/index.d.ts +2 -1
  34. package/dist/esm/middlewares/info/index.js +48 -51
  35. package/dist/esm/middlewares/info/static.d.ts +6 -0
  36. package/dist/esm/middlewares/info/{config.js → static.js} +6 -1
  37. package/dist/esm/middlewares/info/types.d.ts +2 -2
  38. package/dist/esm/middlewares/layout-selector/dom.d.ts +10 -0
  39. package/dist/esm/middlewares/layout-selector/dom.js +108 -0
  40. package/dist/esm/middlewares/layout-selector/index.d.ts +1 -1
  41. package/dist/esm/middlewares/layout-selector/index.js +89 -141
  42. package/dist/esm/middlewares/layout-selector/static.d.ts +32 -0
  43. package/dist/esm/middlewares/layout-selector/static.js +39 -0
  44. package/dist/esm/middlewares/layout-selector/styles.d.ts +4 -0
  45. package/dist/esm/middlewares/layout-selector/styles.js +127 -0
  46. package/dist/esm/middlewares/layout-selector/types.d.ts +6 -6
  47. package/dist/esm/middlewares/layout-selector/types.js +2 -2
  48. package/dist/esm/middlewares/layout-selector/util.d.ts +4 -4
  49. package/dist/esm/middlewares/layout-selector/util.js +19 -19
  50. package/dist/esm/middlewares/path-creator/dom.d.ts +29 -0
  51. package/dist/esm/middlewares/path-creator/dom.js +145 -0
  52. package/dist/esm/middlewares/path-creator/index.d.ts +5 -0
  53. package/dist/esm/middlewares/path-creator/index.js +203 -0
  54. package/dist/esm/middlewares/path-creator/static.d.ts +23 -0
  55. package/dist/esm/middlewares/path-creator/static.js +49 -0
  56. package/dist/esm/middlewares/path-creator/types.d.ts +1 -0
  57. package/dist/esm/middlewares/path-editor/calc.d.ts +6 -0
  58. package/dist/esm/middlewares/path-editor/calc.js +51 -0
  59. package/dist/esm/middlewares/path-editor/dom.d.ts +32 -0
  60. package/dist/esm/middlewares/path-editor/dom.js +575 -0
  61. package/dist/esm/middlewares/path-editor/draw.d.ts +7 -0
  62. package/dist/esm/middlewares/path-editor/draw.js +113 -0
  63. package/dist/esm/middlewares/path-editor/index.d.ts +5 -0
  64. package/dist/esm/middlewares/path-editor/index.js +312 -0
  65. package/dist/esm/middlewares/path-editor/parse.d.ts +5 -0
  66. package/dist/esm/middlewares/path-editor/parse.js +37 -0
  67. package/dist/esm/middlewares/path-editor/static.d.ts +34 -0
  68. package/dist/esm/middlewares/path-editor/static.js +82 -0
  69. package/dist/esm/middlewares/path-editor/types.d.ts +26 -0
  70. package/dist/esm/middlewares/path-editor/types.js +1 -0
  71. package/dist/esm/middlewares/path-editor/util.d.ts +5 -0
  72. package/dist/esm/middlewares/path-editor/util.js +21 -0
  73. package/dist/esm/middlewares/pointer/index.js +5 -5
  74. package/dist/esm/middlewares/pointer/types.d.ts +2 -2
  75. package/dist/esm/middlewares/ruler/index.d.ts +2 -0
  76. package/dist/esm/middlewares/ruler/index.js +12 -19
  77. package/dist/esm/middlewares/ruler/static.d.ts +8 -0
  78. package/dist/esm/middlewares/ruler/{config.js → static.js} +16 -3
  79. package/dist/esm/middlewares/ruler/types.d.ts +2 -2
  80. package/dist/esm/middlewares/ruler/util.d.ts +6 -6
  81. package/dist/esm/middlewares/ruler/util.js +31 -31
  82. package/dist/esm/middlewares/scaler/index.js +2 -2
  83. package/dist/esm/middlewares/scroller/dom.d.ts +14 -0
  84. package/dist/esm/middlewares/scroller/dom.js +53 -0
  85. package/dist/esm/middlewares/scroller/index.d.ts +2 -0
  86. package/dist/esm/middlewares/scroller/index.js +111 -46
  87. package/dist/esm/middlewares/scroller/static.d.ts +21 -0
  88. package/dist/esm/middlewares/scroller/static.js +29 -0
  89. package/dist/esm/middlewares/scroller/styles.d.ts +4 -0
  90. package/dist/esm/middlewares/scroller/styles.js +73 -0
  91. package/dist/esm/middlewares/scroller/types.d.ts +8 -6
  92. package/dist/esm/middlewares/scroller/types.js +1 -1
  93. package/dist/esm/middlewares/scroller/util.d.ts +6 -13
  94. package/dist/esm/middlewares/scroller/util.js +15 -144
  95. package/dist/esm/middlewares/selector/dom.d.ts +21 -0
  96. package/dist/esm/middlewares/selector/dom.js +395 -0
  97. package/dist/esm/middlewares/selector/draw-base.d.ts +9 -21
  98. package/dist/esm/middlewares/selector/draw-base.js +19 -43
  99. package/dist/esm/middlewares/selector/draw-reference.d.ts +4 -5
  100. package/dist/esm/middlewares/selector/draw-reference.js +5 -5
  101. package/dist/esm/middlewares/selector/index.d.ts +4 -2
  102. package/dist/esm/middlewares/selector/index.js +315 -439
  103. package/dist/esm/middlewares/selector/reference.d.ts +5 -5
  104. package/dist/esm/middlewares/selector/reference.js +36 -30
  105. package/dist/esm/middlewares/selector/render-frame.d.ts +11 -0
  106. package/dist/esm/middlewares/selector/render-frame.js +107 -0
  107. package/dist/esm/middlewares/selector/resize.d.ts +7 -0
  108. package/dist/esm/middlewares/selector/resize.js +27 -0
  109. package/dist/esm/middlewares/selector/static.d.ts +67 -0
  110. package/dist/esm/middlewares/selector/static.js +92 -0
  111. package/dist/esm/middlewares/selector/styles.d.ts +4 -0
  112. package/dist/esm/middlewares/selector/styles.js +153 -0
  113. package/dist/esm/middlewares/selector/types.d.ts +27 -27
  114. package/dist/esm/middlewares/selector/types.js +1 -1
  115. package/dist/esm/middlewares/selector/util.d.ts +22 -32
  116. package/dist/esm/middlewares/selector/util.js +226 -243
  117. package/dist/esm/middlewares/text-editor/dom.d.ts +5 -0
  118. package/dist/esm/middlewares/text-editor/dom.js +135 -0
  119. package/dist/esm/middlewares/text-editor/index.d.ts +5 -20
  120. package/dist/esm/middlewares/text-editor/index.js +201 -207
  121. package/dist/esm/middlewares/text-editor/static.d.ts +10 -0
  122. package/dist/esm/middlewares/text-editor/static.js +17 -0
  123. package/dist/esm/middlewares/text-editor/types.d.ts +21 -0
  124. package/dist/esm/middlewares/text-editor/types.js +1 -0
  125. package/dist/esm/record.d.ts +5 -5
  126. package/dist/esm/record.js +14 -14
  127. package/dist/esm/{config.d.ts → static.d.ts} +16 -0
  128. package/dist/esm/{config.js → static.js} +18 -2
  129. package/dist/index.global.js +8934 -5646
  130. package/dist/index.global.min.js +1 -1
  131. package/package.json +4 -4
  132. package/dist/esm/middlewares/info/config.d.ts +0 -5
  133. package/dist/esm/middlewares/layout-selector/config.d.ts +0 -11
  134. package/dist/esm/middlewares/layout-selector/config.js +0 -12
  135. package/dist/esm/middlewares/ruler/config.d.ts +0 -7
  136. package/dist/esm/middlewares/scroller/config.d.ts +0 -10
  137. package/dist/esm/middlewares/scroller/config.js +0 -16
  138. package/dist/esm/middlewares/selector/config.d.ts +0 -30
  139. package/dist/esm/middlewares/selector/config.js +0 -38
  140. package/dist/esm/middlewares/selector/draw-auxiliary.js +0 -12
  141. package/dist/esm/middlewares/selector/draw-debug.d.ts +0 -5
  142. package/dist/esm/middlewares/selector/draw-debug.js +0 -30
  143. package/dist/esm/middlewares/selector/draw-wrapper.d.ts +0 -37
  144. package/dist/esm/middlewares/selector/draw-wrapper.js +0 -139
  145. package/dist/esm/middlewares/selector/pattern/icon-rotate.d.ts +0 -4
  146. package/dist/esm/middlewares/selector/pattern/icon-rotate.js +0 -88
  147. package/dist/esm/middlewares/selector/pattern/index.d.ts +0 -8
  148. package/dist/esm/middlewares/selector/pattern/index.js +0 -38
  149. /package/dist/esm/middlewares/{selector/draw-auxiliary.d.ts → path-creator/types.js} +0 -0
@@ -1,10 +1,11 @@
1
+ import { getMiddlewareValidStyles } from '@idraw/util';
1
2
  export const rulerSize = 16;
2
3
  export const fontSize = 10;
3
4
  export const fontWeight = 100;
4
5
  export const lineSize = 1;
5
6
  export const fontFamily = 'monospace';
6
7
  const background = '#FFFFFFA8';
7
- const borderColor = '#00000080';
8
+ const stroke = '#00000080';
8
9
  const scaleColor = '#000000';
9
10
  const textColor = '#00000080';
10
11
  const gridColor = '#AAAAAA20';
@@ -12,10 +13,22 @@ const gridPrimaryColor = '#AAAAAA40';
12
13
  const selectedAreaColor = '#19609780';
13
14
  export const defaultStyle = {
14
15
  background,
15
- borderColor,
16
+ stroke,
16
17
  scaleColor,
17
18
  textColor,
18
19
  gridColor,
19
20
  gridPrimaryColor,
20
- selectedAreaColor
21
+ selectedAreaColor,
21
22
  };
23
+ export function getMiddlewareRulerStyles(config) {
24
+ const styles = getMiddlewareValidStyles(config, [
25
+ 'background',
26
+ 'stroke',
27
+ 'scaleColor',
28
+ 'textColor',
29
+ 'gridColor',
30
+ 'gridPrimaryColor',
31
+ 'selectedAreaColor',
32
+ ]);
33
+ return styles;
34
+ }
@@ -1,3 +1,3 @@
1
- import { keySelectedElementList, keyActionType } from '../selector';
1
+ import { keySelectedMaterialList, keyActionType } from '../selector';
2
2
  import type { DeepSelectorSharedStorage } from '../selector';
3
- export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType>;
3
+ export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedMaterialList | typeof keyActionType>;
@@ -1,4 +1,4 @@
1
- import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D, BoardViewerFrameSnapshot, ViewCalculator, MiddlewareRulerStyle } from '@idraw/types';
1
+ import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D, BoardViewerFrameSnapshot, ViewCalculator, MiddlewareRulerStyles } from '@idraw/types';
2
2
  import type { DeepRulerSharedStorage } from './types';
3
3
  interface RulerScale {
4
4
  num: number;
@@ -23,27 +23,27 @@ export declare function calcYRulerScaleList(opts: {
23
23
  };
24
24
  export declare function drawXRuler(ctx: ViewContext2D, opts: {
25
25
  scaleList: RulerScale[];
26
- style: MiddlewareRulerStyle;
26
+ styles: MiddlewareRulerStyles;
27
27
  }): void;
28
28
  export declare function drawYRuler(ctx: ViewContext2D, opts: {
29
29
  scaleList: RulerScale[];
30
- style: MiddlewareRulerStyle;
30
+ styles: MiddlewareRulerStyles;
31
31
  }): void;
32
32
  export declare function drawRulerBackground(ctx: ViewContext2D, opts: {
33
33
  viewScaleInfo: ViewScaleInfo;
34
34
  viewSizeInfo: ViewSizeInfo;
35
- style: MiddlewareRulerStyle;
35
+ styles: MiddlewareRulerStyles;
36
36
  }): void;
37
37
  export declare function drawGrid(ctx: ViewContext2D, opts: {
38
38
  xList: RulerScale[];
39
39
  yList: RulerScale[];
40
40
  viewScaleInfo: ViewScaleInfo;
41
41
  viewSizeInfo: ViewSizeInfo;
42
- style: MiddlewareRulerStyle;
42
+ styles: MiddlewareRulerStyles;
43
43
  }): void;
44
44
  export declare function drawScrollerSelectedArea(ctx: ViewContext2D, opts: {
45
45
  snapshot: BoardViewerFrameSnapshot<DeepRulerSharedStorage>;
46
46
  calculator: ViewCalculator;
47
- style: MiddlewareRulerStyle;
47
+ styles: MiddlewareRulerStyles;
48
48
  }): void;
49
49
  export {};
@@ -1,6 +1,6 @@
1
1
  import { formatNumber, rotateByCenter, getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot } from '@idraw/util';
2
- import { keySelectedElementList, keyActionType } from '../selector';
3
- import { rulerSize, fontSize, fontWeight, lineSize, fontFamily } from './config';
2
+ import { keySelectedMaterialList, keyActionType } from '../selector';
3
+ import { rulerSize, fontSize, fontWeight, lineSize, fontFamily } from './static';
4
4
  const limitRulerUnitList = [1, 2, 5, 10, 20, 50, 100, 200, 500];
5
5
  function limitRulerUnit(unit) {
6
6
  unit = Math.max(limitRulerUnitList[0], Math.min(unit, limitRulerUnitList[limitRulerUnitList.length - 1]));
@@ -47,7 +47,7 @@ function calcRulerScaleList(opts) {
47
47
  position,
48
48
  showNum: num % rulerKeyUnit === 0,
49
49
  isKeyNum: num % rulerKeyUnit === 0,
50
- isSubKeyNum: num % rulerSubKeyUnit === 0
50
+ isSubKeyNum: num % rulerSubKeyUnit === 0,
51
51
  };
52
52
  list.push(rulerScale);
53
53
  index++;
@@ -62,7 +62,7 @@ export function calcXRulerScaleList(opts) {
62
62
  axis: 'X',
63
63
  scale,
64
64
  viewLength: width,
65
- viewOffset: offsetLeft
65
+ viewOffset: offsetLeft,
66
66
  });
67
67
  }
68
68
  export function calcYRulerScaleList(opts) {
@@ -73,12 +73,12 @@ export function calcYRulerScaleList(opts) {
73
73
  axis: 'Y',
74
74
  scale,
75
75
  viewLength: height,
76
- viewOffset: offsetTop
76
+ viewOffset: offsetTop,
77
77
  });
78
78
  }
79
79
  export function drawXRuler(ctx, opts) {
80
- const { scaleList, style } = opts;
81
- const { scaleColor, textColor } = style;
80
+ const { scaleList, styles } = opts;
81
+ const { scaleColor, textColor } = styles;
82
82
  const scaleDrawStart = rulerSize;
83
83
  const scaleDrawEnd = (rulerSize * 4) / 5;
84
84
  const subKeyScaleDrawEnd = (rulerSize * 2) / 5;
@@ -103,15 +103,15 @@ export function drawXRuler(ctx, opts) {
103
103
  ctx.$setFont({
104
104
  fontWeight,
105
105
  fontSize,
106
- fontFamily
106
+ fontFamily,
107
107
  });
108
108
  ctx.fillText(`${item.num}`, item.position + fontStart, fontStart);
109
109
  }
110
110
  }
111
111
  }
112
112
  export function drawYRuler(ctx, opts) {
113
- const { scaleList, style } = opts;
114
- const { scaleColor, textColor } = style;
113
+ const { scaleList, styles } = opts;
114
+ const { scaleColor, textColor } = styles;
115
115
  const scaleDrawStart = rulerSize;
116
116
  const scaleDrawEnd = (rulerSize * 4) / 5;
117
117
  const subKeyScaleDrawEnd = (rulerSize * 2) / 5;
@@ -140,7 +140,7 @@ export function drawYRuler(ctx, opts) {
140
140
  ctx.$setFont({
141
141
  fontWeight,
142
142
  fontSize,
143
- fontFamily
143
+ fontFamily,
144
144
  });
145
145
  ctx.fillText(numText, fontStart + fontSize, item.position + fontStart);
146
146
  });
@@ -148,9 +148,9 @@ export function drawYRuler(ctx, opts) {
148
148
  }
149
149
  }
150
150
  export function drawRulerBackground(ctx, opts) {
151
- const { viewSizeInfo, style } = opts;
151
+ const { viewSizeInfo, styles } = opts;
152
152
  const { width, height } = viewSizeInfo;
153
- const { background, borderColor } = style;
153
+ const { background, stroke } = styles;
154
154
  ctx.beginPath();
155
155
  const basePosition = -1;
156
156
  ctx.moveTo(basePosition, basePosition);
@@ -165,13 +165,13 @@ export function drawRulerBackground(ctx, opts) {
165
165
  ctx.fill('nonzero');
166
166
  ctx.lineWidth = lineSize;
167
167
  ctx.setLineDash([]);
168
- ctx.strokeStyle = borderColor;
168
+ ctx.strokeStyle = stroke;
169
169
  ctx.stroke();
170
170
  }
171
171
  export function drawGrid(ctx, opts) {
172
- const { xList, yList, viewSizeInfo, style } = opts;
172
+ const { xList, yList, viewSizeInfo, styles } = opts;
173
173
  const { width, height } = viewSizeInfo;
174
- const { gridColor, gridPrimaryColor } = style;
174
+ const { gridColor, gridPrimaryColor } = styles;
175
175
  for (let i = 0; i < xList.length; i++) {
176
176
  const item = xList[i];
177
177
  ctx.beginPath();
@@ -205,34 +205,34 @@ export function drawGrid(ctx, opts) {
205
205
  }
206
206
  }
207
207
  export function drawScrollerSelectedArea(ctx, opts) {
208
- const { snapshot, calculator, style } = opts;
208
+ const { snapshot, calculator, styles } = opts;
209
209
  const { sharedStore } = snapshot;
210
- const { selectedAreaColor } = style;
211
- const selectedElementList = sharedStore[keySelectedElementList];
210
+ const { selectedAreaColor } = styles;
211
+ const selectedMaterialList = sharedStore[keySelectedMaterialList];
212
212
  const actionType = sharedStore[keyActionType];
213
213
  if (['select', 'drag', 'drag-list', 'drag-list-end'].includes(actionType) &&
214
- selectedElementList.length > 0) {
214
+ selectedMaterialList.length > 0) {
215
215
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
216
216
  const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
217
- const rangeRectInfoList = [];
217
+ const rangeBoundingInfoList = [];
218
218
  const xAreaStartList = [];
219
219
  const xAreaEndList = [];
220
220
  const yAreaStartList = [];
221
221
  const yAreaEndList = [];
222
- selectedElementList.forEach((elem) => {
223
- const rectInfo = calculator.calcViewRectInfoFromRange(elem.uuid, {
222
+ selectedMaterialList.forEach((mtrl) => {
223
+ const boundingBox = calculator.calcViewBoundingInfoFromRange(mtrl.id, {
224
224
  viewScaleInfo,
225
- viewSizeInfo
225
+ viewSizeInfo,
226
226
  });
227
- if (rectInfo) {
228
- rangeRectInfoList.push(rectInfo);
229
- xAreaStartList.push(rectInfo.left.x);
230
- xAreaEndList.push(rectInfo.right.x);
231
- yAreaStartList.push(rectInfo.top.y);
232
- yAreaEndList.push(rectInfo.bottom.y);
227
+ if (boundingBox) {
228
+ rangeBoundingInfoList.push(boundingBox);
229
+ xAreaStartList.push(boundingBox.left.x);
230
+ xAreaEndList.push(boundingBox.right.x);
231
+ yAreaStartList.push(boundingBox.top.y);
232
+ yAreaEndList.push(boundingBox.bottom.y);
233
233
  }
234
234
  });
235
- if (!(rangeRectInfoList.length > 0)) {
235
+ if (!(rangeBoundingInfoList.length > 0)) {
236
236
  return;
237
237
  }
238
238
  const xAreaStart = Math.min(...xAreaStartList);
@@ -1,5 +1,5 @@
1
1
  import { formatNumber } from '@idraw/util';
2
- import { coreEventKeys } from '../../config';
2
+ import { coreEventKeys } from '../../static';
3
3
  export const MiddlewareScaler = (opts) => {
4
4
  const { viewer, sharer, eventHub } = opts;
5
5
  const maxScale = 50;
@@ -24,6 +24,6 @@ export const MiddlewareScaler = (opts) => {
24
24
  viewer.drawFrame();
25
25
  const scaleNum = formatNumber(scale);
26
26
  eventHub.trigger(coreEventKeys.SCALE, { scale: scaleNum });
27
- }
27
+ },
28
28
  };
29
29
  };
@@ -0,0 +1,14 @@
1
+ import type { ScrollbarStyles } from './types';
2
+ export declare function initRoot(opts: {
3
+ rootClassName: string;
4
+ $container: HTMLElement;
5
+ }): {
6
+ $horizontal: HTMLDivElement;
7
+ $vertical: HTMLDivElement;
8
+ };
9
+ export declare function isInScrollbar(e: Event): boolean;
10
+ export declare function updateScrollbarStyles(opts: ScrollbarStyles & {
11
+ $horizontal: HTMLElement | null;
12
+ $vertical: HTMLElement | null;
13
+ }): void;
14
+ export declare function getThumbType(e: Event): "X" | "Y" | null;
@@ -0,0 +1,53 @@
1
+ import { ATTR_VALID_WATCH, createHTMLElement, setHTMLCSSProps } from '@idraw/util';
2
+ import { classNameMap, ATTR_THUMB_TYPE, THUMB_X, THUMB_Y } from './static';
3
+ export function initRoot(opts) {
4
+ const { rootClassName, $container } = opts;
5
+ const create = createHTMLElement;
6
+ const $horizontal = create('div', {
7
+ className: `${rootClassName} ${classNameMap.horizontal}`,
8
+ [ATTR_VALID_WATCH]: 'true',
9
+ }, [create('div', { className: classNameMap.thumb, [ATTR_VALID_WATCH]: 'true', [ATTR_THUMB_TYPE]: THUMB_X })]);
10
+ const $vertical = create('div', {
11
+ className: `${rootClassName} ${classNameMap.vertical}`,
12
+ [ATTR_VALID_WATCH]: 'true',
13
+ }, [create('div', { className: classNameMap.thumb, [ATTR_VALID_WATCH]: 'true', [ATTR_THUMB_TYPE]: THUMB_Y })]);
14
+ $container.appendChild($horizontal);
15
+ $container.appendChild($vertical);
16
+ return {
17
+ $horizontal,
18
+ $vertical,
19
+ };
20
+ }
21
+ export function isInScrollbar(e) {
22
+ var _a, _b, _c;
23
+ const $target = e.target;
24
+ if (((_a = $target === null || $target === void 0 ? void 0 : $target.classList) === null || _a === void 0 ? void 0 : _a.contains(classNameMap.thumb)) ||
25
+ ((_b = $target === null || $target === void 0 ? void 0 : $target.classList) === null || _b === void 0 ? void 0 : _b.contains(classNameMap.horizontal)) ||
26
+ ((_c = $target === null || $target === void 0 ? void 0 : $target.classList) === null || _c === void 0 ? void 0 : _c.contains(classNameMap.vertical))) {
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ export function updateScrollbarStyles(opts) {
32
+ const { xThumbStyle, yThumbStyle, $horizontal, $vertical } = opts;
33
+ if ($horizontal && xThumbStyle) {
34
+ const $thumb = $horizontal.getElementsByClassName(classNameMap.thumb)[0];
35
+ if ($thumb) {
36
+ setHTMLCSSProps($thumb, xThumbStyle);
37
+ }
38
+ }
39
+ if ($vertical && yThumbStyle) {
40
+ const $thumb = $vertical.getElementsByClassName(classNameMap.thumb)[0];
41
+ if ($thumb) {
42
+ setHTMLCSSProps($thumb, yThumbStyle);
43
+ }
44
+ }
45
+ }
46
+ export function getThumbType(e) {
47
+ var _a;
48
+ const $target = e === null || e === void 0 ? void 0 : e.target;
49
+ if (((_a = $target === null || $target === void 0 ? void 0 : $target.classList) === null || _a === void 0 ? void 0 : _a.contains(classNameMap.thumb)) && $target.hasAttribute(ATTR_THUMB_TYPE)) {
50
+ return $target.getAttribute(ATTR_THUMB_TYPE);
51
+ }
52
+ return null;
53
+ }
@@ -1,3 +1,5 @@
1
1
  import type { Middleware, MiddlewareScrollerConfig } from '@idraw/types';
2
2
  import type { DeepScrollerSharedStorage } from './types';
3
+ import { getMiddlewareScrollerStyles } from './styles';
4
+ export { getMiddlewareScrollerStyles };
3
5
  export declare const MiddlewareScroller: Middleware<DeepScrollerSharedStorage, any, MiddlewareScrollerConfig>;
@@ -1,22 +1,76 @@
1
- import { drawScroller, isPointInScrollThumb } from './util';
2
- import { keyXThumbRect, keyYThumbRect, keyPrevPoint, keyActivePoint, keyActiveThumbType, keyHoverXThumbRect, keyHoverYThumbRect, defaultStyle } from './config';
3
- import { coreEventKeys } from '../../config';
1
+ import { coreEventKeys } from '../../static';
2
+ import { keyXThumbStyle, keyYThumbStyle, keyPrevPoint, keyActivePoint, keyActiveThumbType, defaultStyles, getRootClassName, scrollbarTrackSize, scrollbarThumbLength, } from './static';
3
+ import { initStyles, destroyStyles, getMiddlewareScrollerStyles } from './styles';
4
+ import { initRoot, isInScrollbar, updateScrollbarStyles, getThumbType } from './dom';
5
+ import { calcScrollbarStyles } from './util';
6
+ export { getMiddlewareScrollerStyles };
4
7
  export const MiddlewareScroller = (opts, config) => {
5
- const { viewer, boardContent, sharer, eventHub } = opts;
6
- const { overlayContext } = boardContent;
7
- sharer.setSharedStorage(keyXThumbRect, null);
8
- sharer.setSharedStorage(keyYThumbRect, null);
8
+ const { viewer, sharer, eventHub } = opts;
9
9
  let isBusy = false;
10
- let innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
10
+ let innerConfig = Object.assign(Object.assign({}, defaultStyles), config);
11
+ const styles = getMiddlewareScrollerStyles(innerConfig);
12
+ const rootClassName = getRootClassName();
13
+ let $horizontal = null;
14
+ let $vertical = null;
11
15
  const clear = () => {
12
16
  sharer.setSharedStorage(keyPrevPoint, null);
13
17
  sharer.setSharedStorage(keyActivePoint, null);
14
18
  sharer.setSharedStorage(keyActiveThumbType, null);
15
- sharer.setSharedStorage(keyHoverXThumbRect, null);
16
- sharer.setSharedStorage(keyHoverYThumbRect, null);
17
19
  isBusy = false;
18
20
  };
19
21
  clear();
22
+ const updateScrollbar = () => {
23
+ const { xThumbStyle, yThumbStyle } = calcScrollbarStyles({
24
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
25
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
26
+ });
27
+ sharer.setSharedStorage(keyXThumbStyle, xThumbStyle);
28
+ sharer.setSharedStorage(keyYThumbStyle, yThumbStyle);
29
+ };
30
+ const updateMovingScrollbar = (opts) => {
31
+ const { thumbMoveX, thumbMoveY } = opts;
32
+ const xThumbStyle = sharer.getSharedStorage(keyXThumbStyle);
33
+ const yThumbStyle = sharer.getSharedStorage(keyYThumbStyle);
34
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
35
+ if (xThumbStyle && (thumbMoveX > 0 || thumbMoveX < 0)) {
36
+ const maxScrollWidth = viewSizeInfo.width - scrollbarTrackSize * 2;
37
+ const minLeft = scrollbarTrackSize;
38
+ let left = xThumbStyle.left - thumbMoveX;
39
+ left = Math.min(viewSizeInfo.width - scrollbarTrackSize - scrollbarThumbLength, Math.max(scrollbarTrackSize, left));
40
+ let width = xThumbStyle.width;
41
+ if (left + width >= maxScrollWidth || left <= minLeft) {
42
+ if (thumbMoveX < 0) {
43
+ width += thumbMoveX;
44
+ }
45
+ else {
46
+ width -= thumbMoveX;
47
+ }
48
+ }
49
+ width = Math.min(maxScrollWidth, Math.max(scrollbarThumbLength, width));
50
+ xThumbStyle.left = left;
51
+ xThumbStyle.width = width;
52
+ sharer.setSharedStorage(keyXThumbStyle, xThumbStyle);
53
+ }
54
+ if (yThumbStyle && (thumbMoveY > 0 || thumbMoveY < 0)) {
55
+ const maxScrollHeight = viewSizeInfo.height - scrollbarTrackSize * 2;
56
+ const minTop = scrollbarTrackSize;
57
+ let top = yThumbStyle.top - thumbMoveY;
58
+ top = Math.min(viewSizeInfo.height - scrollbarTrackSize - scrollbarThumbLength, Math.max(scrollbarTrackSize, top));
59
+ let height = yThumbStyle.height;
60
+ if (top + height >= maxScrollHeight || top <= minTop) {
61
+ if (thumbMoveY < 0) {
62
+ height += thumbMoveY;
63
+ }
64
+ else {
65
+ height -= thumbMoveY;
66
+ }
67
+ }
68
+ height = Math.min(maxScrollHeight, Math.max(scrollbarThumbLength, height));
69
+ yThumbStyle.top = top;
70
+ yThumbStyle.height = height;
71
+ sharer.setSharedStorage(keyYThumbStyle, yThumbStyle);
72
+ }
73
+ };
20
74
  const scrollX = (p) => {
21
75
  const prevPoint = sharer.getSharedStorage(keyPrevPoint);
22
76
  if (prevPoint) {
@@ -26,6 +80,7 @@ export const MiddlewareScroller = (opts, config) => {
26
80
  const totalWidth = width + Math.abs(offsetLeft) + Math.abs(offsetRight);
27
81
  const moveX = (thumbMoveX * totalWidth) / width;
28
82
  viewer.scroll({ moveX });
83
+ updateMovingScrollbar({ thumbMoveX, thumbMoveY: 0 });
29
84
  viewer.drawFrame();
30
85
  }
31
86
  };
@@ -38,60 +93,72 @@ export const MiddlewareScroller = (opts, config) => {
38
93
  const totalHeight = height + Math.abs(offsetTop) + Math.abs(offsetBottom);
39
94
  const moveY = (thumbMoveY * totalHeight) / height;
40
95
  viewer.scroll({ moveY });
96
+ updateMovingScrollbar({ thumbMoveX: 0, thumbMoveY });
41
97
  viewer.drawFrame();
42
98
  }
43
99
  };
44
- const getThumbType = (p) => {
45
- return isPointInScrollThumb(overlayContext, p, {
46
- xThumbRect: sharer.getSharedStorage(keyXThumbRect),
47
- yThumbRect: sharer.getSharedStorage(keyYThumbRect)
48
- });
49
- };
50
100
  return {
51
101
  name: '@middleware/scroller',
102
+ use() {
103
+ initStyles(rootClassName, styles);
104
+ const initedResult = initRoot({ rootClassName, $container: opts.container });
105
+ $horizontal = initedResult.$horizontal;
106
+ $vertical = initedResult.$vertical;
107
+ updateScrollbar();
108
+ updateScrollbarStyles({
109
+ xThumbStyle: sharer.getSharedStorage(keyXThumbStyle),
110
+ yThumbStyle: sharer.getSharedStorage(keyYThumbStyle),
111
+ $horizontal,
112
+ $vertical,
113
+ });
114
+ },
115
+ disuse() {
116
+ destroyStyles(rootClassName);
117
+ $horizontal === null || $horizontal === void 0 ? void 0 : $horizontal.remove();
118
+ $horizontal = null;
119
+ $vertical === null || $vertical === void 0 ? void 0 : $vertical.remove();
120
+ $vertical = null;
121
+ },
52
122
  resetConfig(config) {
53
123
  innerConfig = Object.assign(Object.assign({}, innerConfig), config);
54
124
  },
55
125
  wheel: (e) => {
56
126
  viewer.scroll({
57
127
  moveX: 0 - e.deltaX,
58
- moveY: 0 - e.deltaY
128
+ moveY: 0 - e.deltaY,
59
129
  });
130
+ updateScrollbar();
60
131
  viewer.drawFrame();
61
132
  },
62
133
  hover: (e) => {
63
134
  if (isBusy === true) {
64
135
  return false;
65
136
  }
66
- const { point } = e;
67
- const thumbType = getThumbType(point);
137
+ const { nativeEvent } = e;
138
+ const thumbType = getThumbType(nativeEvent);
68
139
  if (thumbType === 'X' || thumbType === 'Y') {
69
- if (thumbType === 'X') {
70
- sharer.setSharedStorage(keyHoverXThumbRect, true);
71
- sharer.setSharedStorage(keyHoverYThumbRect, false);
72
- }
73
- else {
74
- sharer.setSharedStorage(keyHoverXThumbRect, false);
75
- sharer.setSharedStorage(keyHoverYThumbRect, true);
76
- }
77
140
  eventHub.trigger(coreEventKeys.CURSOR, { type: 'default' });
78
141
  return false;
79
142
  }
80
- sharer.setSharedStorage(keyHoverXThumbRect, false);
81
- sharer.setSharedStorage(keyHoverYThumbRect, false);
143
+ if (isInScrollbar(nativeEvent)) {
144
+ return false;
145
+ }
82
146
  },
83
147
  pointStart: (e) => {
84
- const { point } = e;
85
- const thumbType = getThumbType(point);
148
+ const { point, nativeEvent } = e;
149
+ const thumbType = getThumbType(nativeEvent);
86
150
  if (thumbType === 'X' || thumbType === 'Y') {
87
151
  isBusy = true;
88
152
  sharer.setSharedStorage(keyActiveThumbType, thumbType);
89
153
  sharer.setSharedStorage(keyPrevPoint, point);
90
154
  return false;
91
155
  }
156
+ if (isInScrollbar(nativeEvent)) {
157
+ return false;
158
+ }
92
159
  },
93
160
  pointMove: (e) => {
94
- const { point } = e;
161
+ const { point, nativeEvent } = e;
95
162
  const activeThumbType = sharer.getSharedStorage(keyActiveThumbType);
96
163
  if (activeThumbType === 'X' || activeThumbType === 'Y') {
97
164
  sharer.setSharedStorage(keyActivePoint, point);
@@ -104,6 +171,9 @@ export const MiddlewareScroller = (opts, config) => {
104
171
  sharer.setSharedStorage(keyPrevPoint, point);
105
172
  return false;
106
173
  }
174
+ if (isInScrollbar(nativeEvent)) {
175
+ return false;
176
+ }
107
177
  },
108
178
  pointEnd: () => {
109
179
  isBusy = false;
@@ -111,23 +181,18 @@ export const MiddlewareScroller = (opts, config) => {
111
181
  clear();
112
182
  if (activeThumbType === 'X' || activeThumbType === 'Y') {
113
183
  viewer.scroll({ moveX: 0, moveY: 0 });
184
+ updateScrollbar();
114
185
  viewer.drawFrame();
115
186
  return false;
116
187
  }
117
188
  },
118
- beforeDrawFrame({ snapshot }) {
119
- const { thumbBackground, thumbBorderColor, hoverThumbBackground, hoverThumbBorderColor, activeThumbBackground, activeThumbBorderColor } = innerConfig;
120
- const style = {
121
- thumbBackground,
122
- thumbBorderColor,
123
- hoverThumbBackground,
124
- hoverThumbBorderColor,
125
- activeThumbBackground,
126
- activeThumbBorderColor
127
- };
128
- const { xThumbRect, yThumbRect } = drawScroller(overlayContext, { snapshot, style });
129
- sharer.setSharedStorage(keyXThumbRect, xThumbRect);
130
- sharer.setSharedStorage(keyYThumbRect, yThumbRect);
131
- }
189
+ beforeDrawFrame() {
190
+ updateScrollbarStyles({
191
+ $horizontal,
192
+ $vertical,
193
+ xThumbStyle: sharer.getSharedStorage(keyXThumbStyle),
194
+ yThumbStyle: sharer.getSharedStorage(keyYThumbStyle),
195
+ });
196
+ },
132
197
  };
133
198
  };
@@ -0,0 +1,21 @@
1
+ import type { MiddlewareScrollerStyles } from '@idraw/types';
2
+ export declare const key = "SCROLL";
3
+ export declare const keyXThumbStyle: unique symbol;
4
+ export declare const keyYThumbStyle: unique symbol;
5
+ export declare const keyPrevPoint: unique symbol;
6
+ export declare const keyActivePoint: unique symbol;
7
+ export declare const keyActiveThumbType: unique symbol;
8
+ export declare const prefix = "idraw-middleware-scroller";
9
+ export declare const getRootClassName: () => string;
10
+ export declare const scrollbarTrackSize = 16;
11
+ export declare const scrollbarThumbLength: number;
12
+ export declare const scrollbarThumbSize: number;
13
+ export declare const ATTR_THUMB_TYPE = "data-idraw-thumb-type";
14
+ export declare const THUMB_X = "X";
15
+ export declare const THUMB_Y = "Y";
16
+ export declare const defaultStyles: MiddlewareScrollerStyles;
17
+ export declare const classNameMap: {
18
+ horizontal: string;
19
+ vertical: string;
20
+ thumb: string;
21
+ };
@@ -0,0 +1,29 @@
1
+ import { createId } from '@idraw/util';
2
+ export const key = 'SCROLL';
3
+ export const keyXThumbStyle = Symbol(`${key}_xThumbStyle`);
4
+ export const keyYThumbStyle = Symbol(`${key}_yThumbStyle`);
5
+ export const keyPrevPoint = Symbol(`${key}_prevPoint`);
6
+ export const keyActivePoint = Symbol(`${key}_activePoint`);
7
+ export const keyActiveThumbType = Symbol(`${key}_activeThumbType`);
8
+ export const prefix = `idraw-middleware-scroller`;
9
+ export const getRootClassName = () => `${prefix}-${createId()}`;
10
+ export const scrollbarTrackSize = 16;
11
+ export const scrollbarThumbLength = scrollbarTrackSize * 2.5;
12
+ export const scrollbarThumbSize = scrollbarTrackSize * 0.5;
13
+ export const ATTR_THUMB_TYPE = 'data-idraw-thumb-type';
14
+ export const THUMB_X = 'X';
15
+ export const THUMB_Y = 'Y';
16
+ export const defaultStyles = {
17
+ zIndex: 2,
18
+ thumbBackground: '#0000003A',
19
+ thumbBorderColor: '#0000008A',
20
+ hoverThumbBackground: '#0000005F',
21
+ hoverThumbBorderColor: '#000000EE',
22
+ activeThumbBackground: '#0000005E',
23
+ activeThumbBorderColor: '#000000F0',
24
+ };
25
+ export const classNameMap = {
26
+ horizontal: `${prefix}-horizontal`,
27
+ vertical: `${prefix}-vertical`,
28
+ thumb: `${prefix}-thumb`,
29
+ };
@@ -0,0 +1,4 @@
1
+ import type { MiddlewareScrollerStyles, MiddlewareScrollerConfig } from '@idraw/types';
2
+ export declare function initStyles(rootClassName: string, styles: MiddlewareScrollerStyles): void;
3
+ export declare function destroyStyles(rootClassName: string): void;
4
+ export declare function getMiddlewareScrollerStyles<C = MiddlewareScrollerConfig, S = MiddlewareScrollerStyles>(config: C): S;