@idraw/core 0.4.3 → 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.
- package/dist/esm/board/index.d.ts +2 -2
- package/dist/esm/board/index.js +23 -12
- package/dist/esm/board/sharer.d.ts +3 -3
- package/dist/esm/board/sharer.js +10 -10
- package/dist/esm/board/viewer.d.ts +3 -3
- package/dist/esm/board/viewer.js +14 -14
- package/dist/esm/board/watcher.d.ts +3 -3
- package/dist/esm/board/watcher.js +68 -43
- package/dist/esm/core.d.ts +52 -0
- package/dist/esm/core.js +393 -0
- package/dist/esm/cursor/cursor-image.d.ts +2 -0
- package/dist/esm/cursor/cursor-image.js +2 -0
- package/dist/esm/cursor/cursor.js +60 -24
- package/dist/esm/index.d.ts +12 -61
- package/dist/esm/index.js +11 -389
- package/dist/esm/middlewares/common.d.ts +4 -0
- package/dist/esm/middlewares/common.js +13 -0
- package/dist/esm/middlewares/creator/dom.d.ts +11 -0
- package/dist/esm/middlewares/creator/dom.js +52 -0
- package/dist/esm/middlewares/creator/index.d.ts +5 -0
- package/dist/esm/middlewares/creator/index.js +136 -0
- package/dist/esm/middlewares/creator/static.d.ts +14 -0
- package/dist/esm/middlewares/creator/static.js +19 -0
- package/dist/esm/middlewares/creator/styles.d.ts +4 -0
- package/dist/esm/middlewares/creator/styles.js +32 -0
- package/dist/esm/middlewares/creator/types.d.ts +7 -0
- package/dist/esm/middlewares/creator/types.js +1 -0
- package/dist/esm/middlewares/creator/util.d.ts +10 -0
- package/dist/esm/middlewares/creator/util.js +52 -0
- package/dist/esm/middlewares/dragger/index.js +5 -5
- package/dist/esm/middlewares/info/draw-info.d.ts +11 -11
- package/dist/esm/middlewares/info/draw-info.js +18 -18
- package/dist/esm/middlewares/info/index.d.ts +2 -1
- package/dist/esm/middlewares/info/index.js +48 -51
- package/dist/esm/middlewares/info/static.d.ts +6 -0
- package/dist/esm/middlewares/info/{config.js → static.js} +6 -1
- package/dist/esm/middlewares/info/types.d.ts +2 -2
- package/dist/esm/middlewares/layout-selector/dom.d.ts +10 -0
- package/dist/esm/middlewares/layout-selector/dom.js +108 -0
- package/dist/esm/middlewares/layout-selector/index.d.ts +1 -1
- package/dist/esm/middlewares/layout-selector/index.js +89 -141
- package/dist/esm/middlewares/layout-selector/static.d.ts +32 -0
- package/dist/esm/middlewares/layout-selector/static.js +39 -0
- package/dist/esm/middlewares/layout-selector/styles.d.ts +4 -0
- package/dist/esm/middlewares/layout-selector/styles.js +127 -0
- package/dist/esm/middlewares/layout-selector/types.d.ts +6 -6
- package/dist/esm/middlewares/layout-selector/types.js +2 -2
- package/dist/esm/middlewares/layout-selector/util.d.ts +4 -4
- package/dist/esm/middlewares/layout-selector/util.js +19 -19
- package/dist/esm/middlewares/path-creator/dom.d.ts +29 -0
- package/dist/esm/middlewares/path-creator/dom.js +145 -0
- package/dist/esm/middlewares/path-creator/index.d.ts +5 -0
- package/dist/esm/middlewares/path-creator/index.js +203 -0
- package/dist/esm/middlewares/path-creator/static.d.ts +23 -0
- package/dist/esm/middlewares/path-creator/static.js +49 -0
- package/dist/esm/middlewares/path-creator/types.d.ts +1 -0
- package/dist/esm/middlewares/path-editor/calc.d.ts +6 -0
- package/dist/esm/middlewares/path-editor/calc.js +51 -0
- package/dist/esm/middlewares/path-editor/dom.d.ts +32 -0
- package/dist/esm/middlewares/path-editor/dom.js +575 -0
- package/dist/esm/middlewares/path-editor/draw.d.ts +7 -0
- package/dist/esm/middlewares/path-editor/draw.js +113 -0
- package/dist/esm/middlewares/path-editor/index.d.ts +5 -0
- package/dist/esm/middlewares/path-editor/index.js +312 -0
- package/dist/esm/middlewares/path-editor/parse.d.ts +5 -0
- package/dist/esm/middlewares/path-editor/parse.js +37 -0
- package/dist/esm/middlewares/path-editor/static.d.ts +34 -0
- package/dist/esm/middlewares/path-editor/static.js +82 -0
- package/dist/esm/middlewares/path-editor/types.d.ts +26 -0
- package/dist/esm/middlewares/path-editor/types.js +1 -0
- package/dist/esm/middlewares/path-editor/util.d.ts +5 -0
- package/dist/esm/middlewares/path-editor/util.js +21 -0
- package/dist/esm/middlewares/pointer/index.js +5 -5
- package/dist/esm/middlewares/pointer/types.d.ts +2 -2
- package/dist/esm/middlewares/ruler/index.d.ts +2 -0
- package/dist/esm/middlewares/ruler/index.js +12 -19
- package/dist/esm/middlewares/ruler/static.d.ts +8 -0
- package/dist/esm/middlewares/ruler/{config.js → static.js} +16 -3
- package/dist/esm/middlewares/ruler/types.d.ts +2 -2
- package/dist/esm/middlewares/ruler/util.d.ts +6 -6
- package/dist/esm/middlewares/ruler/util.js +31 -31
- package/dist/esm/middlewares/scaler/index.js +2 -2
- package/dist/esm/middlewares/scroller/dom.d.ts +14 -0
- package/dist/esm/middlewares/scroller/dom.js +53 -0
- package/dist/esm/middlewares/scroller/index.d.ts +2 -0
- package/dist/esm/middlewares/scroller/index.js +111 -46
- package/dist/esm/middlewares/scroller/static.d.ts +21 -0
- package/dist/esm/middlewares/scroller/static.js +29 -0
- package/dist/esm/middlewares/scroller/styles.d.ts +4 -0
- package/dist/esm/middlewares/scroller/styles.js +73 -0
- package/dist/esm/middlewares/scroller/types.d.ts +8 -6
- package/dist/esm/middlewares/scroller/types.js +1 -1
- package/dist/esm/middlewares/scroller/util.d.ts +6 -13
- package/dist/esm/middlewares/scroller/util.js +15 -144
- package/dist/esm/middlewares/selector/dom.d.ts +21 -0
- package/dist/esm/middlewares/selector/dom.js +395 -0
- package/dist/esm/middlewares/selector/draw-base.d.ts +9 -21
- package/dist/esm/middlewares/selector/draw-base.js +19 -43
- package/dist/esm/middlewares/selector/draw-reference.d.ts +4 -5
- package/dist/esm/middlewares/selector/draw-reference.js +5 -5
- package/dist/esm/middlewares/selector/index.d.ts +4 -2
- package/dist/esm/middlewares/selector/index.js +315 -439
- package/dist/esm/middlewares/selector/reference.d.ts +5 -5
- package/dist/esm/middlewares/selector/reference.js +36 -30
- package/dist/esm/middlewares/selector/render-frame.d.ts +11 -0
- package/dist/esm/middlewares/selector/render-frame.js +107 -0
- package/dist/esm/middlewares/selector/resize.d.ts +7 -0
- package/dist/esm/middlewares/selector/resize.js +27 -0
- package/dist/esm/middlewares/selector/static.d.ts +67 -0
- package/dist/esm/middlewares/selector/static.js +92 -0
- package/dist/esm/middlewares/selector/styles.d.ts +4 -0
- package/dist/esm/middlewares/selector/styles.js +153 -0
- package/dist/esm/middlewares/selector/types.d.ts +27 -27
- package/dist/esm/middlewares/selector/types.js +1 -1
- package/dist/esm/middlewares/selector/util.d.ts +22 -32
- package/dist/esm/middlewares/selector/util.js +226 -243
- package/dist/esm/middlewares/text-editor/dom.d.ts +5 -0
- package/dist/esm/middlewares/text-editor/dom.js +135 -0
- package/dist/esm/middlewares/text-editor/index.d.ts +5 -20
- package/dist/esm/middlewares/text-editor/index.js +201 -208
- package/dist/esm/middlewares/text-editor/static.d.ts +10 -0
- package/dist/esm/middlewares/text-editor/static.js +17 -0
- package/dist/esm/middlewares/text-editor/types.d.ts +21 -0
- package/dist/esm/middlewares/text-editor/types.js +1 -0
- package/dist/esm/record.d.ts +5 -5
- package/dist/esm/record.js +14 -14
- package/dist/esm/{config.d.ts → static.d.ts} +16 -0
- package/dist/esm/{config.js → static.js} +18 -2
- package/dist/index.global.js +8934 -5647
- package/dist/index.global.min.js +1 -1
- package/package.json +4 -4
- package/dist/esm/middlewares/info/config.d.ts +0 -5
- package/dist/esm/middlewares/layout-selector/config.d.ts +0 -11
- package/dist/esm/middlewares/layout-selector/config.js +0 -12
- package/dist/esm/middlewares/ruler/config.d.ts +0 -7
- package/dist/esm/middlewares/scroller/config.d.ts +0 -10
- package/dist/esm/middlewares/scroller/config.js +0 -16
- package/dist/esm/middlewares/selector/config.d.ts +0 -30
- package/dist/esm/middlewares/selector/config.js +0 -38
- package/dist/esm/middlewares/selector/draw-auxiliary.js +0 -12
- package/dist/esm/middlewares/selector/draw-debug.d.ts +0 -5
- package/dist/esm/middlewares/selector/draw-debug.js +0 -30
- package/dist/esm/middlewares/selector/draw-wrapper.d.ts +0 -37
- package/dist/esm/middlewares/selector/draw-wrapper.js +0 -139
- package/dist/esm/middlewares/selector/pattern/icon-rotate.d.ts +0 -4
- package/dist/esm/middlewares/selector/pattern/icon-rotate.js +0 -88
- package/dist/esm/middlewares/selector/pattern/index.d.ts +0 -8
- package/dist/esm/middlewares/selector/pattern/index.js +0 -38
- /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
|
|
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
|
-
|
|
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 {
|
|
1
|
+
import { keySelectedMaterialList, keyActionType } from '../selector';
|
|
2
2
|
import type { DeepSelectorSharedStorage } from '../selector';
|
|
3
|
-
export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof
|
|
3
|
+
export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedMaterialList | typeof keyActionType>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D, BoardViewerFrameSnapshot, ViewCalculator,
|
|
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
|
-
|
|
26
|
+
styles: MiddlewareRulerStyles;
|
|
27
27
|
}): void;
|
|
28
28
|
export declare function drawYRuler(ctx: ViewContext2D, opts: {
|
|
29
29
|
scaleList: RulerScale[];
|
|
30
|
-
|
|
30
|
+
styles: MiddlewareRulerStyles;
|
|
31
31
|
}): void;
|
|
32
32
|
export declare function drawRulerBackground(ctx: ViewContext2D, opts: {
|
|
33
33
|
viewScaleInfo: ViewScaleInfo;
|
|
34
34
|
viewSizeInfo: ViewSizeInfo;
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
3
|
-
import { rulerSize, fontSize, fontWeight, lineSize, fontFamily } from './
|
|
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,
|
|
81
|
-
const { scaleColor, textColor } =
|
|
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,
|
|
114
|
-
const { scaleColor, textColor } =
|
|
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,
|
|
151
|
+
const { viewSizeInfo, styles } = opts;
|
|
152
152
|
const { width, height } = viewSizeInfo;
|
|
153
|
-
const { background,
|
|
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 =
|
|
168
|
+
ctx.strokeStyle = stroke;
|
|
169
169
|
ctx.stroke();
|
|
170
170
|
}
|
|
171
171
|
export function drawGrid(ctx, opts) {
|
|
172
|
-
const { xList, yList, viewSizeInfo,
|
|
172
|
+
const { xList, yList, viewSizeInfo, styles } = opts;
|
|
173
173
|
const { width, height } = viewSizeInfo;
|
|
174
|
-
const { gridColor, gridPrimaryColor } =
|
|
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,
|
|
208
|
+
const { snapshot, calculator, styles } = opts;
|
|
209
209
|
const { sharedStore } = snapshot;
|
|
210
|
-
const { selectedAreaColor } =
|
|
211
|
-
const
|
|
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
|
-
|
|
214
|
+
selectedMaterialList.length > 0) {
|
|
215
215
|
const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
|
|
216
216
|
const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
|
|
217
|
-
const
|
|
217
|
+
const rangeBoundingInfoList = [];
|
|
218
218
|
const xAreaStartList = [];
|
|
219
219
|
const xAreaEndList = [];
|
|
220
220
|
const yAreaStartList = [];
|
|
221
221
|
const yAreaEndList = [];
|
|
222
|
-
|
|
223
|
-
const
|
|
222
|
+
selectedMaterialList.forEach((mtrl) => {
|
|
223
|
+
const boundingBox = calculator.calcViewBoundingInfoFromRange(mtrl.id, {
|
|
224
224
|
viewScaleInfo,
|
|
225
|
-
viewSizeInfo
|
|
225
|
+
viewSizeInfo,
|
|
226
226
|
});
|
|
227
|
-
if (
|
|
228
|
-
|
|
229
|
-
xAreaStartList.push(
|
|
230
|
-
xAreaEndList.push(
|
|
231
|
-
yAreaStartList.push(
|
|
232
|
-
yAreaEndList.push(
|
|
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 (!(
|
|
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 '../../
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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,
|
|
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({},
|
|
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 {
|
|
67
|
-
const thumbType = getThumbType(
|
|
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
|
-
|
|
81
|
-
|
|
143
|
+
if (isInScrollbar(nativeEvent)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
82
146
|
},
|
|
83
147
|
pointStart: (e) => {
|
|
84
|
-
const { point } = e;
|
|
85
|
-
const thumbType = getThumbType(
|
|
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(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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;
|