@idraw/core 0.4.0-beta.9 → 0.4.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 (101) hide show
  1. package/dist/esm/board/index.d.ts +44 -0
  2. package/dist/esm/board/index.js +366 -0
  3. package/dist/esm/board/sharer.d.ts +21 -0
  4. package/dist/esm/board/sharer.js +101 -0
  5. package/dist/esm/board/viewer.d.ts +32 -0
  6. package/dist/esm/board/viewer.js +165 -0
  7. package/dist/esm/board/watcher.d.ts +15 -0
  8. package/dist/esm/board/watcher.js +218 -0
  9. package/dist/esm/config.d.ts +28 -0
  10. package/dist/esm/config.js +34 -0
  11. package/dist/esm/{lib → cursor}/cursor-image.d.ts +1 -0
  12. package/dist/esm/{lib → cursor}/cursor-image.js +1 -0
  13. package/dist/esm/cursor/cursor.d.ts +7 -0
  14. package/dist/esm/cursor/cursor.js +154 -0
  15. package/dist/esm/index.d.ts +39 -10
  16. package/dist/esm/index.js +296 -17
  17. package/dist/esm/middlewares/dragger/index.d.ts +7 -0
  18. package/dist/esm/{middleware → middlewares}/dragger/index.js +4 -3
  19. package/dist/esm/middlewares/info/config.d.ts +5 -0
  20. package/dist/esm/middlewares/info/config.js +9 -0
  21. package/dist/esm/middlewares/info/draw-info.d.ts +29 -0
  22. package/dist/esm/middlewares/info/draw-info.js +113 -0
  23. package/dist/esm/middlewares/info/index.d.ts +9 -0
  24. package/dist/esm/middlewares/info/index.js +131 -0
  25. package/dist/esm/middlewares/info/types.d.ts +3 -0
  26. package/dist/esm/middlewares/info/types.js +1 -0
  27. package/dist/esm/middlewares/layout-selector/config.d.ts +11 -0
  28. package/dist/esm/middlewares/layout-selector/config.js +12 -0
  29. package/dist/esm/middlewares/layout-selector/index.d.ts +5 -0
  30. package/dist/esm/middlewares/layout-selector/index.js +371 -0
  31. package/dist/esm/middlewares/layout-selector/types.d.ts +17 -0
  32. package/dist/esm/middlewares/layout-selector/types.js +2 -0
  33. package/dist/esm/middlewares/layout-selector/util.d.ts +9 -0
  34. package/dist/esm/middlewares/layout-selector/util.js +78 -0
  35. package/dist/esm/middlewares/pointer/index.d.ts +3 -0
  36. package/dist/esm/middlewares/pointer/index.js +42 -0
  37. package/dist/esm/middlewares/pointer/types.d.ts +3 -0
  38. package/dist/esm/middlewares/pointer/types.js +1 -0
  39. package/dist/esm/middlewares/ruler/config.d.ts +7 -0
  40. package/dist/esm/middlewares/ruler/config.js +21 -0
  41. package/dist/esm/middlewares/ruler/index.d.ts +3 -0
  42. package/dist/esm/middlewares/ruler/index.js +66 -0
  43. package/dist/esm/middlewares/ruler/types.d.ts +3 -0
  44. package/dist/esm/middlewares/ruler/types.js +1 -0
  45. package/dist/esm/{middleware → middlewares}/ruler/util.d.ts +20 -4
  46. package/dist/esm/{middleware → middlewares}/ruler/util.js +99 -26
  47. package/dist/esm/middlewares/scaler/index.d.ts +2 -0
  48. package/dist/esm/{middleware → middlewares}/scaler/index.js +2 -2
  49. package/dist/esm/{middleware → middlewares}/scroller/config.d.ts +4 -0
  50. package/dist/esm/middlewares/scroller/config.js +16 -0
  51. package/dist/esm/middlewares/scroller/index.d.ts +3 -0
  52. package/dist/esm/{middleware → middlewares}/scroller/index.js +47 -6
  53. package/dist/esm/middlewares/scroller/types.d.ts +11 -0
  54. package/dist/esm/middlewares/scroller/types.js +1 -0
  55. package/dist/esm/{middleware → middlewares}/scroller/util.d.ts +3 -2
  56. package/dist/esm/{middleware → middlewares}/scroller/util.js +33 -44
  57. package/dist/esm/{middleware → middlewares}/selector/config.d.ts +9 -1
  58. package/dist/esm/{middleware → middlewares}/selector/config.js +17 -1
  59. package/dist/esm/middlewares/selector/draw-auxiliary.d.ts +1 -0
  60. package/dist/esm/middlewares/selector/draw-auxiliary.js +12 -0
  61. package/dist/esm/middlewares/selector/draw-base.d.ts +30 -0
  62. package/dist/esm/middlewares/selector/draw-base.js +100 -0
  63. package/dist/esm/middlewares/selector/draw-debug.d.ts +5 -0
  64. package/dist/esm/middlewares/selector/draw-debug.js +30 -0
  65. package/dist/esm/middlewares/selector/draw-reference.d.ts +7 -0
  66. package/dist/esm/middlewares/selector/draw-reference.js +31 -0
  67. package/dist/esm/{middleware → middlewares}/selector/draw-wrapper.d.ts +16 -1
  68. package/dist/esm/middlewares/selector/draw-wrapper.js +139 -0
  69. package/dist/esm/middlewares/selector/index.d.ts +11 -0
  70. package/dist/esm/middlewares/selector/index.js +879 -0
  71. package/dist/esm/middlewares/selector/pattern/icon-rotate.d.ts +4 -0
  72. package/dist/esm/middlewares/selector/pattern/icon-rotate.js +88 -0
  73. package/dist/esm/middlewares/selector/pattern/index.d.ts +8 -0
  74. package/dist/esm/middlewares/selector/pattern/index.js +38 -0
  75. package/dist/esm/middlewares/selector/reference.d.ts +13 -0
  76. package/dist/esm/middlewares/selector/reference.js +267 -0
  77. package/dist/esm/{middleware → middlewares}/selector/types.d.ts +11 -5
  78. package/dist/esm/middlewares/selector/types.js +2 -0
  79. package/dist/esm/{middleware → middlewares}/selector/util.d.ts +14 -7
  80. package/dist/esm/{middleware → middlewares}/selector/util.js +46 -43
  81. package/dist/esm/middlewares/text-editor/index.d.ts +20 -0
  82. package/dist/esm/middlewares/text-editor/index.js +286 -0
  83. package/dist/esm/record.d.ts +5 -0
  84. package/dist/esm/record.js +38 -0
  85. package/dist/index.global.js +5740 -1632
  86. package/dist/index.global.min.js +1 -1
  87. package/package.json +5 -6
  88. package/dist/esm/lib/cursor.d.ts +0 -16
  89. package/dist/esm/lib/cursor.js +0 -129
  90. package/dist/esm/middleware/dragger/index.d.ts +0 -7
  91. package/dist/esm/middleware/ruler/index.d.ts +0 -3
  92. package/dist/esm/middleware/ruler/index.js +0 -48
  93. package/dist/esm/middleware/scaler/index.d.ts +0 -3
  94. package/dist/esm/middleware/scroller/config.js +0 -6
  95. package/dist/esm/middleware/scroller/index.d.ts +0 -2
  96. package/dist/esm/middleware/selector/draw-wrapper.js +0 -107
  97. package/dist/esm/middleware/selector/index.d.ts +0 -5
  98. package/dist/esm/middleware/selector/index.js +0 -510
  99. package/dist/esm/middleware/selector/types.js +0 -1
  100. package/dist/esm/middleware/text-editor/index.d.ts +0 -3
  101. package/dist/esm/middleware/text-editor/index.js +0 -147
@@ -0,0 +1,17 @@
1
+ import type { LayoutSizeController, Element } from '@idraw/types';
2
+ import { keyLayoutActionType, keyLayoutControlType, keyLayoutController, keyLayoutIsHoverContent, keyLayoutIsHoverController, keyLayoutIsSelected, keyLayoutIsBusyMoving } from './config';
3
+ import { keyActionType as keyElementActionType, keyHoverElement } from '../selector';
4
+ import type { ActionType as ElementActionType } from '../selector';
5
+ export type ActionType = 'resize' | null;
6
+ export type ControlType = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
7
+ export type LayoutSelectorSharedStorage = {
8
+ [keyLayoutActionType]: ActionType | null;
9
+ [keyLayoutControlType]: ControlType | null;
10
+ [keyLayoutController]: LayoutSizeController | null;
11
+ [keyElementActionType]: ElementActionType | null;
12
+ [keyHoverElement]: Element | null;
13
+ [keyLayoutIsHoverContent]: boolean | null;
14
+ [keyLayoutIsHoverController]: boolean | null;
15
+ [keyLayoutIsSelected]: boolean | null;
16
+ [keyLayoutIsBusyMoving]: boolean | null;
17
+ };
@@ -0,0 +1,2 @@
1
+ import { keyLayoutActionType, keyLayoutControlType, keyLayoutController, keyLayoutIsHoverContent, keyLayoutIsHoverController, keyLayoutIsSelected, keyLayoutIsBusyMoving } from './config';
2
+ import { keyActionType as keyElementActionType, keyHoverElement } from '../selector';
@@ -0,0 +1,9 @@
1
+ import type { ViewContext2D, LayoutSizeController, ElementSize, MiddlewareLayoutSelectorStyle } from '@idraw/types';
2
+ export declare function drawLayoutController(ctx: ViewContext2D, opts: {
3
+ controller: LayoutSizeController;
4
+ style: MiddlewareLayoutSelectorStyle;
5
+ }): void;
6
+ export declare function drawLayoutHover(ctx: ViewContext2D, opts: {
7
+ layoutSize: ElementSize;
8
+ style: MiddlewareLayoutSelectorStyle;
9
+ }): void;
@@ -0,0 +1,78 @@
1
+ function drawControllerBox(ctx, boxVertexes, style) {
2
+ const { activeColor } = style;
3
+ ctx.setLineDash([]);
4
+ ctx.fillStyle = '#FFFFFF';
5
+ ctx.beginPath();
6
+ ctx.moveTo(boxVertexes[0].x, boxVertexes[0].y);
7
+ ctx.lineTo(boxVertexes[1].x, boxVertexes[1].y);
8
+ ctx.lineTo(boxVertexes[2].x, boxVertexes[2].y);
9
+ ctx.lineTo(boxVertexes[3].x, boxVertexes[3].y);
10
+ ctx.closePath();
11
+ ctx.fill('nonzero');
12
+ ctx.strokeStyle = activeColor;
13
+ ctx.lineWidth = 2;
14
+ ctx.beginPath();
15
+ ctx.moveTo(boxVertexes[0].x, boxVertexes[0].y);
16
+ ctx.lineTo(boxVertexes[1].x, boxVertexes[1].y);
17
+ ctx.lineTo(boxVertexes[2].x, boxVertexes[2].y);
18
+ ctx.lineTo(boxVertexes[3].x, boxVertexes[3].y);
19
+ ctx.closePath();
20
+ ctx.stroke();
21
+ }
22
+ function drawControllerLine(ctx, opts) {
23
+ const { start, end, style } = opts;
24
+ const { activeColor } = style;
25
+ const lineWidth = 2;
26
+ const strokeStyle = activeColor;
27
+ ctx.setLineDash([]);
28
+ ctx.strokeStyle = strokeStyle;
29
+ ctx.lineWidth = lineWidth;
30
+ ctx.beginPath();
31
+ ctx.moveTo(start.x, start.y);
32
+ ctx.lineTo(end.x, end.y);
33
+ ctx.closePath();
34
+ ctx.stroke();
35
+ }
36
+ export function drawLayoutController(ctx, opts) {
37
+ const { controller, style } = opts;
38
+ const { topLeft, topRight, bottomLeft, bottomRight, topMiddle, rightMiddle, bottomMiddle, leftMiddle } = controller;
39
+ drawControllerLine(ctx, { start: topLeft.center, end: topRight.center, centerVertexes: topMiddle.vertexes, style });
40
+ drawControllerLine(ctx, {
41
+ start: topRight.center,
42
+ end: bottomRight.center,
43
+ centerVertexes: rightMiddle.vertexes,
44
+ style
45
+ });
46
+ drawControllerLine(ctx, {
47
+ start: bottomRight.center,
48
+ end: bottomLeft.center,
49
+ centerVertexes: bottomMiddle.vertexes,
50
+ style
51
+ });
52
+ drawControllerLine(ctx, {
53
+ start: bottomLeft.center,
54
+ end: topLeft.center,
55
+ centerVertexes: leftMiddle.vertexes,
56
+ style
57
+ });
58
+ drawControllerBox(ctx, topLeft.vertexes, style);
59
+ drawControllerBox(ctx, topRight.vertexes, style);
60
+ drawControllerBox(ctx, bottomRight.vertexes, style);
61
+ drawControllerBox(ctx, bottomLeft.vertexes, style);
62
+ }
63
+ export function drawLayoutHover(ctx, opts) {
64
+ const { layoutSize, style } = opts;
65
+ const { activeColor } = style;
66
+ const { x, y, w, h } = layoutSize;
67
+ ctx.setLineDash([]);
68
+ ctx.strokeStyle = activeColor;
69
+ ctx.lineWidth = 1;
70
+ ctx.beginPath();
71
+ ctx.moveTo(x, y);
72
+ ctx.lineTo(x + w, y);
73
+ ctx.lineTo(x + w, y + h);
74
+ ctx.lineTo(x, y + h);
75
+ ctx.lineTo(x, y);
76
+ ctx.closePath();
77
+ ctx.stroke();
78
+ }
@@ -0,0 +1,3 @@
1
+ import type { Middleware, CoreEventMap } from '@idraw/types';
2
+ import type { DeepPointerSharedStorage } from './types';
3
+ export declare const MiddlewarePointer: Middleware<DeepPointerSharedStorage, CoreEventMap>;
@@ -0,0 +1,42 @@
1
+ import { keySelectedElementList } from '../selector';
2
+ import { coreEventKeys } from '../../config';
3
+ export const MiddlewarePointer = (opts) => {
4
+ const { boardContent, eventHub, sharer } = opts;
5
+ const canvas = boardContent.boardContext.canvas;
6
+ const container = opts.container || document.body;
7
+ const id = `idraw-middleware-pointer-${Math.random().toString(26).substring(2)}`;
8
+ const getCanvasRect = () => {
9
+ const clientRect = canvas.getBoundingClientRect();
10
+ const { left, top, width, height } = clientRect;
11
+ return { left, top, width, height };
12
+ };
13
+ let contextMenuPointer = document.createElement('div');
14
+ return {
15
+ name: '@middleware/pointer',
16
+ use() {
17
+ contextMenuPointer.setAttribute('id', id);
18
+ contextMenuPointer.style.position = 'fixed';
19
+ contextMenuPointer.style.top = '0';
20
+ contextMenuPointer.style.bottom = 'unset';
21
+ contextMenuPointer.style.left = '0';
22
+ contextMenuPointer.style.right = 'unset';
23
+ container.appendChild(contextMenuPointer);
24
+ },
25
+ disuse() {
26
+ container.removeChild(contextMenuPointer);
27
+ contextMenuPointer.remove();
28
+ contextMenuPointer = null;
29
+ },
30
+ contextMenu(e) {
31
+ const { point } = e;
32
+ const { left, top } = getCanvasRect();
33
+ contextMenuPointer.style.left = `${left + point.x}px`;
34
+ contextMenuPointer.style.top = `${top + point.y}px`;
35
+ const selectedElements = sharer.getSharedStorage(keySelectedElementList);
36
+ eventHub.trigger(coreEventKeys.CONTEXT_MENU, {
37
+ pointerContainer: contextMenuPointer,
38
+ selectedElements: selectedElements || []
39
+ });
40
+ }
41
+ };
42
+ };
@@ -0,0 +1,3 @@
1
+ import { keySelectedElementList } from '../selector';
2
+ import type { DeepSelectorSharedStorage } from '../selector';
3
+ export type DeepPointerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { MiddlewareRulerStyle } from '@idraw/types';
2
+ export declare const rulerSize = 16;
3
+ export declare const fontSize = 10;
4
+ export declare const fontWeight = 100;
5
+ export declare const lineSize = 1;
6
+ export declare const fontFamily = "monospace";
7
+ export declare const defaultStyle: MiddlewareRulerStyle;
@@ -0,0 +1,21 @@
1
+ export const rulerSize = 16;
2
+ export const fontSize = 10;
3
+ export const fontWeight = 100;
4
+ export const lineSize = 1;
5
+ export const fontFamily = 'monospace';
6
+ const background = '#FFFFFFA8';
7
+ const borderColor = '#00000080';
8
+ const scaleColor = '#000000';
9
+ const textColor = '#00000080';
10
+ const gridColor = '#AAAAAA20';
11
+ const gridPrimaryColor = '#AAAAAA40';
12
+ const selectedAreaColor = '#19609780';
13
+ export const defaultStyle = {
14
+ background,
15
+ borderColor,
16
+ scaleColor,
17
+ textColor,
18
+ gridColor,
19
+ gridPrimaryColor,
20
+ selectedAreaColor
21
+ };
@@ -0,0 +1,3 @@
1
+ import type { Middleware, CoreEventMap, MiddlewareRulerConfig } from '@idraw/types';
2
+ import type { DeepRulerSharedStorage } from './types';
3
+ export declare const MiddlewareRuler: Middleware<DeepRulerSharedStorage, CoreEventMap, MiddlewareRulerConfig>;
@@ -0,0 +1,66 @@
1
+ import { getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot } from '@idraw/util';
2
+ import { drawRulerBackground, drawXRuler, drawYRuler, calcXRulerScaleList, calcYRulerScaleList, drawGrid, drawScrollerSelectedArea } from './util';
3
+ import { defaultStyle } from './config';
4
+ import { coreEventKeys } from '../../config';
5
+ export const MiddlewareRuler = (opts, config) => {
6
+ const { boardContent, viewer, eventHub, calculator } = opts;
7
+ const { overlayContext, underlayContext } = boardContent;
8
+ let innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
9
+ let show = true;
10
+ let showGrid = true;
11
+ const rulerCallback = (e) => {
12
+ if (typeof (e === null || e === void 0 ? void 0 : e.show) === 'boolean') {
13
+ show = e.show;
14
+ }
15
+ if (typeof (e === null || e === void 0 ? void 0 : e.showGrid) === 'boolean') {
16
+ showGrid = e.showGrid;
17
+ }
18
+ if (typeof (e === null || e === void 0 ? void 0 : e.show) === 'boolean' || typeof (e === null || e === void 0 ? void 0 : e.showGrid) === 'boolean') {
19
+ viewer.drawFrame();
20
+ }
21
+ };
22
+ return {
23
+ name: '@middleware/ruler',
24
+ use() {
25
+ eventHub.on(coreEventKeys.RULER, rulerCallback);
26
+ },
27
+ disuse() {
28
+ eventHub.off(coreEventKeys.RULER, rulerCallback);
29
+ },
30
+ resetConfig(config) {
31
+ innerConfig = Object.assign(Object.assign({}, innerConfig), config);
32
+ },
33
+ beforeDrawFrame: ({ snapshot }) => {
34
+ const { background, borderColor, scaleColor, textColor, gridColor, gridPrimaryColor, selectedAreaColor } = innerConfig;
35
+ const style = {
36
+ background,
37
+ borderColor,
38
+ scaleColor,
39
+ textColor,
40
+ gridColor,
41
+ gridPrimaryColor,
42
+ selectedAreaColor
43
+ };
44
+ if (show === true) {
45
+ const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
46
+ const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
47
+ drawRulerBackground(overlayContext, { viewScaleInfo, viewSizeInfo, style });
48
+ drawScrollerSelectedArea(overlayContext, { snapshot, calculator, style });
49
+ const { list: xList, rulerUnit } = calcXRulerScaleList({ viewScaleInfo, viewSizeInfo });
50
+ drawXRuler(overlayContext, { scaleList: xList, style });
51
+ const { list: yList } = calcYRulerScaleList({ viewScaleInfo, viewSizeInfo });
52
+ drawYRuler(overlayContext, { scaleList: yList, style });
53
+ if (showGrid === true) {
54
+ const ctx = rulerUnit === 1 ? overlayContext : underlayContext;
55
+ drawGrid(ctx, {
56
+ xList,
57
+ yList,
58
+ viewScaleInfo,
59
+ viewSizeInfo,
60
+ style
61
+ });
62
+ }
63
+ }
64
+ }
65
+ };
66
+ };
@@ -0,0 +1,3 @@
1
+ import { keySelectedElementList, keyActionType } from '../selector';
2
+ import type { DeepSelectorSharedStorage } from '../selector';
3
+ export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
- import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D } from '@idraw/types';
1
+ import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D, BoardViewerFrameSnapshot, ViewCalculator, MiddlewareRulerStyle } from '@idraw/types';
2
+ import type { DeepRulerSharedStorage } from './types';
2
3
  interface RulerScale {
3
4
  num: number;
4
5
  showNum: boolean;
@@ -9,25 +10,40 @@ interface RulerScale {
9
10
  export declare function calcXRulerScaleList(opts: {
10
11
  viewScaleInfo: ViewScaleInfo;
11
12
  viewSizeInfo: ViewSizeInfo;
12
- }): RulerScale[];
13
+ }): {
14
+ list: RulerScale[];
15
+ rulerUnit: number;
16
+ };
13
17
  export declare function calcYRulerScaleList(opts: {
14
18
  viewScaleInfo: ViewScaleInfo;
15
19
  viewSizeInfo: ViewSizeInfo;
16
- }): RulerScale[];
20
+ }): {
21
+ list: RulerScale[];
22
+ rulerUnit: number;
23
+ };
17
24
  export declare function drawXRuler(ctx: ViewContext2D, opts: {
18
25
  scaleList: RulerScale[];
26
+ style: MiddlewareRulerStyle;
19
27
  }): void;
20
28
  export declare function drawYRuler(ctx: ViewContext2D, opts: {
21
29
  scaleList: RulerScale[];
30
+ style: MiddlewareRulerStyle;
22
31
  }): void;
23
32
  export declare function drawRulerBackground(ctx: ViewContext2D, opts: {
24
33
  viewScaleInfo: ViewScaleInfo;
25
34
  viewSizeInfo: ViewSizeInfo;
35
+ style: MiddlewareRulerStyle;
26
36
  }): void;
27
- export declare function drawUnderGrid(ctx: ViewContext2D, opts: {
37
+ export declare function drawGrid(ctx: ViewContext2D, opts: {
28
38
  xList: RulerScale[];
29
39
  yList: RulerScale[];
30
40
  viewScaleInfo: ViewScaleInfo;
31
41
  viewSizeInfo: ViewSizeInfo;
42
+ style: MiddlewareRulerStyle;
43
+ }): void;
44
+ export declare function drawScrollerSelectedArea(ctx: ViewContext2D, opts: {
45
+ snapshot: BoardViewerFrameSnapshot<DeepRulerSharedStorage>;
46
+ calculator: ViewCalculator;
47
+ style: MiddlewareRulerStyle;
32
48
  }): void;
33
49
  export {};
@@ -1,21 +1,35 @@
1
- import { formatNumber, rotateByCenter } from '@idraw/util';
2
- const rulerSize = 16;
3
- const background = '#FFFFFFA8';
4
- const borderColor = '#00000080';
5
- const scaleColor = '#000000';
6
- const textColor = '#00000080';
7
- const fontFamily = 'monospace';
8
- const fontSize = 10;
9
- const fontWeight = 100;
10
- const gridColor = '#AAAAAA20';
11
- const gridKeyColor = '#AAAAAA40';
12
- const lineSize = 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';
4
+ const limitRulerUnitList = [1, 2, 5, 10, 20, 50, 100, 200, 500];
5
+ function limitRulerUnit(unit) {
6
+ unit = Math.max(limitRulerUnitList[0], Math.min(unit, limitRulerUnitList[limitRulerUnitList.length - 1]));
7
+ for (let i = 0; i < limitRulerUnitList.length - 1; i++) {
8
+ const thisUnit = limitRulerUnitList[i];
9
+ const nextUnit = limitRulerUnitList[i + 1];
10
+ if (unit > nextUnit) {
11
+ continue;
12
+ }
13
+ if (unit === thisUnit) {
14
+ return unit;
15
+ }
16
+ if (unit === nextUnit) {
17
+ return unit;
18
+ }
19
+ const mid = (thisUnit + nextUnit) / 2;
20
+ if (unit <= mid) {
21
+ return thisUnit;
22
+ }
23
+ return nextUnit;
24
+ }
25
+ return unit;
26
+ }
13
27
  function calcRulerScaleList(opts) {
14
28
  const { scale, viewLength, viewOffset } = opts;
15
29
  const list = [];
16
30
  let rulerUnit = 10;
17
31
  rulerUnit = formatNumber(rulerUnit / scale, { decimalPlaces: 0 });
18
- rulerUnit = Math.max(10, Math.min(rulerUnit, 1000));
32
+ rulerUnit = limitRulerUnit(rulerUnit);
19
33
  const rulerKeyUnit = rulerUnit * 10;
20
34
  const rulerSubKeyUnit = rulerUnit * 5;
21
35
  let index = 0;
@@ -38,7 +52,7 @@ function calcRulerScaleList(opts) {
38
52
  list.push(rulerScale);
39
53
  index++;
40
54
  }
41
- return list;
55
+ return { list, rulerUnit };
42
56
  }
43
57
  export function calcXRulerScaleList(opts) {
44
58
  const { viewScaleInfo, viewSizeInfo } = opts;
@@ -63,7 +77,8 @@ export function calcYRulerScaleList(opts) {
63
77
  });
64
78
  }
65
79
  export function drawXRuler(ctx, opts) {
66
- const { scaleList } = opts;
80
+ const { scaleList, style } = opts;
81
+ const { scaleColor, textColor } = style;
67
82
  const scaleDrawStart = rulerSize;
68
83
  const scaleDrawEnd = (rulerSize * 4) / 5;
69
84
  const subKeyScaleDrawEnd = (rulerSize * 2) / 5;
@@ -95,7 +110,8 @@ export function drawXRuler(ctx, opts) {
95
110
  }
96
111
  }
97
112
  export function drawYRuler(ctx, opts) {
98
- const { scaleList } = opts;
113
+ const { scaleList, style } = opts;
114
+ const { scaleColor, textColor } = style;
99
115
  const scaleDrawStart = rulerSize;
100
116
  const scaleDrawEnd = (rulerSize * 4) / 5;
101
117
  const subKeyScaleDrawEnd = (rulerSize * 2) / 5;
@@ -132,34 +148,37 @@ export function drawYRuler(ctx, opts) {
132
148
  }
133
149
  }
134
150
  export function drawRulerBackground(ctx, opts) {
135
- const { viewSizeInfo } = opts;
151
+ const { viewSizeInfo, style } = opts;
136
152
  const { width, height } = viewSizeInfo;
153
+ const { background, borderColor } = style;
137
154
  ctx.beginPath();
138
- ctx.moveTo(0, 0);
139
- ctx.lineTo(width + 1, 0);
155
+ const basePosition = -1;
156
+ ctx.moveTo(basePosition, basePosition);
157
+ ctx.lineTo(width + 1, basePosition);
140
158
  ctx.lineTo(width + 1, rulerSize);
141
159
  ctx.lineTo(rulerSize, rulerSize);
142
160
  ctx.lineTo(rulerSize, height + 1);
143
- ctx.lineTo(0, height + 1);
144
- ctx.lineTo(0, 0);
161
+ ctx.lineTo(basePosition, height + 1);
162
+ ctx.lineTo(basePosition, basePosition);
145
163
  ctx.closePath();
146
164
  ctx.fillStyle = background;
147
- ctx.fill();
165
+ ctx.fill('nonzero');
148
166
  ctx.lineWidth = lineSize;
149
167
  ctx.setLineDash([]);
150
168
  ctx.strokeStyle = borderColor;
151
169
  ctx.stroke();
152
170
  }
153
- export function drawUnderGrid(ctx, opts) {
154
- const { xList, yList, viewSizeInfo } = opts;
171
+ export function drawGrid(ctx, opts) {
172
+ const { xList, yList, viewSizeInfo, style } = opts;
155
173
  const { width, height } = viewSizeInfo;
174
+ const { gridColor, gridPrimaryColor } = style;
156
175
  for (let i = 0; i < xList.length; i++) {
157
176
  const item = xList[i];
158
177
  ctx.beginPath();
159
178
  ctx.moveTo(item.position, 0);
160
179
  ctx.lineTo(item.position, height);
161
180
  if (item.isKeyNum === true || item.isSubKeyNum === true) {
162
- ctx.strokeStyle = gridKeyColor;
181
+ ctx.strokeStyle = gridPrimaryColor;
163
182
  }
164
183
  else {
165
184
  ctx.strokeStyle = gridColor;
@@ -175,7 +194,7 @@ export function drawUnderGrid(ctx, opts) {
175
194
  ctx.moveTo(0, item.position);
176
195
  ctx.lineTo(width, item.position);
177
196
  if (item.isKeyNum === true || item.isSubKeyNum === true) {
178
- ctx.strokeStyle = gridKeyColor;
197
+ ctx.strokeStyle = gridPrimaryColor;
179
198
  }
180
199
  else {
181
200
  ctx.strokeStyle = gridColor;
@@ -185,3 +204,57 @@ export function drawUnderGrid(ctx, opts) {
185
204
  ctx.stroke();
186
205
  }
187
206
  }
207
+ export function drawScrollerSelectedArea(ctx, opts) {
208
+ const { snapshot, calculator, style } = opts;
209
+ const { sharedStore } = snapshot;
210
+ const { selectedAreaColor } = style;
211
+ const selectedElementList = sharedStore[keySelectedElementList];
212
+ const actionType = sharedStore[keyActionType];
213
+ if (['select', 'drag', 'drag-list', 'drag-list-end'].includes(actionType) &&
214
+ selectedElementList.length > 0) {
215
+ const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
216
+ const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
217
+ const rangeRectInfoList = [];
218
+ const xAreaStartList = [];
219
+ const xAreaEndList = [];
220
+ const yAreaStartList = [];
221
+ const yAreaEndList = [];
222
+ selectedElementList.forEach((elem) => {
223
+ const rectInfo = calculator.calcViewRectInfoFromRange(elem.uuid, {
224
+ viewScaleInfo,
225
+ viewSizeInfo
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);
233
+ }
234
+ });
235
+ if (!(rangeRectInfoList.length > 0)) {
236
+ return;
237
+ }
238
+ const xAreaStart = Math.min(...xAreaStartList);
239
+ const xAreaEnd = Math.max(...xAreaEndList);
240
+ const yAreaStart = Math.min(...yAreaStartList);
241
+ const yAreaEnd = Math.max(...yAreaEndList);
242
+ ctx.globalAlpha = 1;
243
+ ctx.beginPath();
244
+ ctx.moveTo(xAreaStart, 0);
245
+ ctx.lineTo(xAreaEnd, 0);
246
+ ctx.lineTo(xAreaEnd, rulerSize);
247
+ ctx.lineTo(xAreaStart, rulerSize);
248
+ ctx.fillStyle = selectedAreaColor;
249
+ ctx.closePath();
250
+ ctx.fill('nonzero');
251
+ ctx.beginPath();
252
+ ctx.moveTo(0, yAreaStart);
253
+ ctx.lineTo(rulerSize, yAreaStart);
254
+ ctx.lineTo(rulerSize, yAreaEnd);
255
+ ctx.lineTo(0, yAreaEnd);
256
+ ctx.fillStyle = selectedAreaColor;
257
+ ctx.closePath();
258
+ ctx.fill('nonzero');
259
+ }
260
+ }
@@ -0,0 +1,2 @@
1
+ import type { Middleware, CoreEventMap } from '@idraw/types';
2
+ export declare const MiddlewareScaler: Middleware<Record<string, any>, CoreEventMap>;
@@ -1,5 +1,5 @@
1
1
  import { formatNumber } from '@idraw/util';
2
- export const middlewareEventScale = '@middleware/scale';
2
+ import { coreEventKeys } from '../../config';
3
3
  export const MiddlewareScaler = (opts) => {
4
4
  const { viewer, sharer, eventHub } = opts;
5
5
  const maxScale = 50;
@@ -23,7 +23,7 @@ export const MiddlewareScaler = (opts) => {
23
23
  viewer.scroll({ moveX, moveY });
24
24
  viewer.drawFrame();
25
25
  const scaleNum = formatNumber(scale);
26
- eventHub.trigger(middlewareEventScale, { scale: scaleNum });
26
+ eventHub.trigger(coreEventKeys.SCALE, { scale: scaleNum });
27
27
  }
28
28
  };
29
29
  };
@@ -1,6 +1,10 @@
1
+ import type { MiddlewareScrollerStyle } from '@idraw/types';
1
2
  export declare const key = "SCROLL";
2
3
  export declare const keyXThumbRect: unique symbol;
3
4
  export declare const keyYThumbRect: unique symbol;
5
+ export declare const keyHoverXThumbRect: unique symbol;
6
+ export declare const keyHoverYThumbRect: unique symbol;
4
7
  export declare const keyPrevPoint: unique symbol;
5
8
  export declare const keyActivePoint: unique symbol;
6
9
  export declare const keyActiveThumbType: unique symbol;
10
+ export declare const defaultStyle: MiddlewareScrollerStyle;
@@ -0,0 +1,16 @@
1
+ export const key = 'SCROLL';
2
+ export const keyXThumbRect = Symbol(`${key}_xThumbRect`);
3
+ export const keyYThumbRect = Symbol(`${key}_yThumbRect`);
4
+ export const keyHoverXThumbRect = Symbol(`${key}_hoverXThumbRect`);
5
+ export const keyHoverYThumbRect = Symbol(`${key}_hoverYThumbRect`);
6
+ export const keyPrevPoint = Symbol(`${key}_prevPoint`);
7
+ export const keyActivePoint = Symbol(`${key}_activePoint`);
8
+ export const keyActiveThumbType = Symbol(`${key}_activeThumbType`);
9
+ export const defaultStyle = {
10
+ thumbBackground: '#0000003A',
11
+ thumbBorderColor: '#0000008A',
12
+ hoverThumbBackground: '#0000005F',
13
+ hoverThumbBorderColor: '#000000EE',
14
+ activeThumbBackground: '#0000005E',
15
+ activeThumbBorderColor: '#000000F0'
16
+ };
@@ -0,0 +1,3 @@
1
+ import type { Middleware, MiddlewareScrollerConfig } from '@idraw/types';
2
+ import type { DeepScrollerSharedStorage } from './types';
3
+ export declare const MiddlewareScroller: Middleware<DeepScrollerSharedStorage, any, MiddlewareScrollerConfig>;