cbvirtua 1.0.41 → 1.0.42
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/canvas-event-system/.babelrc +17 -0
- package/canvas-event-system/.prettierrc +9 -0
- package/canvas-event-system/package-lock.json +6825 -0
- package/canvas-event-system/package.json +40 -0
- package/canvas-event-system/readme.md +13 -0
- package/canvas-event-system/src/canvas-event-system/EventSimulator.ts +75 -0
- package/canvas-event-system/src/canvas-event-system/helpers.ts +27 -0
- package/canvas-event-system/src/canvas-event-system/index.ts +64 -0
- package/canvas-event-system/src/canvas-event-system/shapes/Base.ts +32 -0
- package/canvas-event-system/src/canvas-event-system/shapes/Circle.ts +46 -0
- package/canvas-event-system/src/canvas-event-system/shapes/Path.ts +0 -0
- package/canvas-event-system/src/canvas-event-system/shapes/Rect.ts +46 -0
- package/canvas-event-system/src/canvas-event-system/shapes/index.ts +5 -0
- package/canvas-event-system/src/canvas-event-system/shapes/types.ts +22 -0
- package/canvas-event-system/src/index.html +12 -0
- package/canvas-event-system/src/index.ts +30 -0
- package/canvas-event-system/tsconfig.json +17 -0
- package/canvas-event-system/webpack.config.js +28 -0
- package/hanzi-writer/.prettierrc.json +7 -0
- package/hanzi-writer/COPYING.md +11 -0
- package/hanzi-writer/LICENSE +20 -0
- package/hanzi-writer/README.md +37 -0
- package/hanzi-writer/babel.config.js +14 -0
- package/hanzi-writer/dist/types/HanziWriter.d.ts +108 -0
- package/hanzi-writer/dist/types/LoadingManager.d.ts +20 -0
- package/hanzi-writer/dist/types/Positioner.d.ts +22 -0
- package/hanzi-writer/dist/types/Quiz.d.ts +40 -0
- package/hanzi-writer/dist/types/RenderState.d.ts +74 -0
- package/hanzi-writer/dist/types/__tests__/HanziWriter-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/LoadingManager-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/Mutation-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/Positioner-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/Quiz-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/RenderState-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/defaultCharDataLoader-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/geometry-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/parseCharData-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/strokeMatches-test.d.ts +1 -0
- package/hanzi-writer/dist/types/__tests__/utils-test.d.ts +1 -0
- package/hanzi-writer/dist/types/characterActions.d.ts +18 -0
- package/hanzi-writer/dist/types/defaultCharDataLoader.d.ts +3 -0
- package/hanzi-writer/dist/types/defaultOptions.d.ts +3 -0
- package/hanzi-writer/dist/types/geometry.d.ts +38 -0
- package/hanzi-writer/dist/types/models/Character.d.ts +6 -0
- package/hanzi-writer/dist/types/models/Stroke.d.ts +17 -0
- package/hanzi-writer/dist/types/models/UserStroke.d.ts +8 -0
- package/hanzi-writer/dist/types/parseCharData.d.ts +3 -0
- package/hanzi-writer/dist/types/quizActions.d.ts +10 -0
- package/hanzi-writer/dist/types/renderers/HanziWriterRendererBase.d.ts +14 -0
- package/hanzi-writer/dist/types/renderers/RenderTargetBase.d.ts +22 -0
- package/hanzi-writer/dist/types/renderers/StrokeRendererBase.d.ts +13 -0
- package/hanzi-writer/dist/types/renderers/canvas/CharacterRenderer.d.ts +14 -0
- package/hanzi-writer/dist/types/renderers/canvas/HanziWriterRenderer.d.ts +19 -0
- package/hanzi-writer/dist/types/renderers/canvas/RenderTarget.d.ts +6 -0
- package/hanzi-writer/dist/types/renderers/canvas/StrokeRenderer.d.ts +16 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/CharacterRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/HanziWriterRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/RenderTarget-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/StrokeRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/canvasUtils-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/renderUserStroke-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/canvas/canvasUtils.d.ts +9 -0
- package/hanzi-writer/dist/types/renderers/canvas/index.d.ts +7 -0
- package/hanzi-writer/dist/types/renderers/canvas/renderUserStroke.d.ts +7 -0
- package/hanzi-writer/dist/types/renderers/svg/CharacterRenderer.d.ts +20 -0
- package/hanzi-writer/dist/types/renderers/svg/HanziWriterRenderer.d.ts +20 -0
- package/hanzi-writer/dist/types/renderers/svg/RenderTarget.d.ts +11 -0
- package/hanzi-writer/dist/types/renderers/svg/StrokeRenderer.d.ts +21 -0
- package/hanzi-writer/dist/types/renderers/svg/UserStrokeRenderer.d.ts +15 -0
- package/hanzi-writer/dist/types/renderers/svg/__tests__/CharacterRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/svg/__tests__/HanziWriterRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/svg/__tests__/StrokeRenderer-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/svg/__tests__/svgUtils-test.d.ts +1 -0
- package/hanzi-writer/dist/types/renderers/svg/index.d.ts +7 -0
- package/hanzi-writer/dist/types/renderers/svg/svgUtils.d.ts +5 -0
- package/hanzi-writer/dist/types/strokeMatches.d.ts +14 -0
- package/hanzi-writer/dist/types/testUtils.d.ts +1 -0
- package/hanzi-writer/dist/types/typings/types.d.ts +121 -0
- package/hanzi-writer/dist/types/utils.d.ts +26 -0
- package/hanzi-writer/jest-jsdom-env.js +20 -0
- package/hanzi-writer/package.json +66 -0
- package/hanzi-writer/rollup.config.js +58 -0
- package/hanzi-writer/tsconfig.json +79 -0
- package/package.json +1 -1
- package/pdf.js-2.9.359.zip +0 -0
- package/pdfjs-dist-2.15.349.zip +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CharacterJson, LoadingManagerOptions } from './typings/types';
|
|
2
|
+
type CustomError = Error & {
|
|
3
|
+
reason: string;
|
|
4
|
+
};
|
|
5
|
+
export default class LoadingManager {
|
|
6
|
+
_loadCounter: number;
|
|
7
|
+
_isLoading: boolean;
|
|
8
|
+
_resolve: ((data: CharacterJson) => void) | undefined;
|
|
9
|
+
_reject: ((error?: Error | CustomError | string) => void) | undefined;
|
|
10
|
+
_options: LoadingManagerOptions;
|
|
11
|
+
/** Set when calling LoadingManager.loadCharData */
|
|
12
|
+
_loadingChar: string | undefined;
|
|
13
|
+
/** use this to attribute to determine if there was a problem with loading */
|
|
14
|
+
loadingFailed: boolean;
|
|
15
|
+
constructor(options: LoadingManagerOptions);
|
|
16
|
+
_debouncedLoad(char: string, count: number): void;
|
|
17
|
+
_setupLoadingPromise(): Promise<void | CharacterJson>;
|
|
18
|
+
loadCharData(char: string): Promise<void | CharacterJson>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Point } from './typings/types';
|
|
2
|
+
export type PositionerOptions = {
|
|
3
|
+
/** Default: 0 */
|
|
4
|
+
width: number;
|
|
5
|
+
/** Default: 0 */
|
|
6
|
+
height: number;
|
|
7
|
+
/** Default: 20 */
|
|
8
|
+
padding: number;
|
|
9
|
+
};
|
|
10
|
+
export default class Positioner {
|
|
11
|
+
padding: number;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
xOffset: number;
|
|
15
|
+
yOffset: number;
|
|
16
|
+
scale: number;
|
|
17
|
+
constructor(options: PositionerOptions);
|
|
18
|
+
convertExternalPoint(point: Point): {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { StrokeMatchResultMeta } from './strokeMatches';
|
|
2
|
+
import UserStroke from './models/UserStroke';
|
|
3
|
+
import Positioner from './Positioner';
|
|
4
|
+
import Character from './models/Character';
|
|
5
|
+
import { ParsedHanziWriterOptions, Point, StrokeData } from './typings/types';
|
|
6
|
+
import RenderState from './RenderState';
|
|
7
|
+
export default class Quiz {
|
|
8
|
+
_character: Character;
|
|
9
|
+
_renderState: RenderState;
|
|
10
|
+
_isActive: boolean;
|
|
11
|
+
_positioner: Positioner;
|
|
12
|
+
/** Set on startQuiz */
|
|
13
|
+
_options: ParsedHanziWriterOptions | undefined;
|
|
14
|
+
_currentStrokeIndex: number;
|
|
15
|
+
_mistakesOnStroke: number;
|
|
16
|
+
_totalMistakes: number;
|
|
17
|
+
_userStroke: UserStroke | undefined;
|
|
18
|
+
_userStrokesIds: Array<number> | undefined;
|
|
19
|
+
constructor(character: Character, renderState: RenderState, positioner: Positioner);
|
|
20
|
+
startQuiz(options: ParsedHanziWriterOptions): Promise<{
|
|
21
|
+
canceled: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
startUserStroke(externalPoint: Point): void | Promise<{
|
|
24
|
+
canceled: boolean;
|
|
25
|
+
}> | null;
|
|
26
|
+
continueUserStroke(externalPoint: Point): Promise<void> | Promise<{
|
|
27
|
+
canceled: boolean;
|
|
28
|
+
}>;
|
|
29
|
+
setPositioner(positioner: Positioner): void;
|
|
30
|
+
endUserStroke(): void;
|
|
31
|
+
cancel(): void;
|
|
32
|
+
_getStrokeData({ isCorrect, meta, }: {
|
|
33
|
+
isCorrect: boolean;
|
|
34
|
+
meta: StrokeMatchResultMeta;
|
|
35
|
+
}): StrokeData;
|
|
36
|
+
nextStroke(): void;
|
|
37
|
+
_handleSuccess(meta: StrokeMatchResultMeta): void;
|
|
38
|
+
_handleFailure(meta: StrokeMatchResultMeta): void;
|
|
39
|
+
_getCurrentStroke(): import("./models/Stroke").default;
|
|
40
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import Character from './models/Character';
|
|
2
|
+
import { GenericMutation } from './Mutation';
|
|
3
|
+
import { ColorObject, OnCompleteFunction, Point, RecursivePartial } from './typings/types';
|
|
4
|
+
export type StrokeRenderState = {
|
|
5
|
+
opacity: number;
|
|
6
|
+
displayPortion: number;
|
|
7
|
+
};
|
|
8
|
+
export type CharacterRenderState = {
|
|
9
|
+
opacity: number;
|
|
10
|
+
strokes: Record<number | string, StrokeRenderState>;
|
|
11
|
+
};
|
|
12
|
+
export type RenderStateObject = {
|
|
13
|
+
options: {
|
|
14
|
+
drawingFadeDuration: number;
|
|
15
|
+
drawingWidth: number;
|
|
16
|
+
drawingColor: ColorObject;
|
|
17
|
+
strokeColor: ColorObject;
|
|
18
|
+
outlineColor: ColorObject;
|
|
19
|
+
radicalColor: ColorObject;
|
|
20
|
+
highlightColor: ColorObject;
|
|
21
|
+
};
|
|
22
|
+
character: {
|
|
23
|
+
main: CharacterRenderState;
|
|
24
|
+
outline: CharacterRenderState;
|
|
25
|
+
highlight: CharacterRenderState;
|
|
26
|
+
};
|
|
27
|
+
userStrokes: Record<string, {
|
|
28
|
+
points: Point[];
|
|
29
|
+
opacity: number;
|
|
30
|
+
} | undefined> | null;
|
|
31
|
+
};
|
|
32
|
+
export type CharacterName = keyof RenderStateObject['character'];
|
|
33
|
+
type OnStateChangeCallback = (nextState: RenderStateObject, currentState: RenderStateObject) => void;
|
|
34
|
+
type MutationChain = {
|
|
35
|
+
_isActive: boolean;
|
|
36
|
+
_index: number;
|
|
37
|
+
_resolve: OnCompleteFunction;
|
|
38
|
+
_mutations: GenericMutation[];
|
|
39
|
+
_loop: boolean | undefined;
|
|
40
|
+
_scopes: string[];
|
|
41
|
+
};
|
|
42
|
+
export type RenderStateOptions = {
|
|
43
|
+
strokeColor: string;
|
|
44
|
+
radicalColor: string | null;
|
|
45
|
+
highlightColor: string;
|
|
46
|
+
outlineColor: string;
|
|
47
|
+
drawingColor: string;
|
|
48
|
+
drawingFadeDuration: number;
|
|
49
|
+
drawingWidth: number;
|
|
50
|
+
outlineWidth: number;
|
|
51
|
+
showCharacter: boolean;
|
|
52
|
+
showOutline: boolean;
|
|
53
|
+
};
|
|
54
|
+
export default class RenderState {
|
|
55
|
+
_mutationChains: MutationChain[];
|
|
56
|
+
_onStateChange: OnStateChangeCallback;
|
|
57
|
+
state: RenderStateObject;
|
|
58
|
+
constructor(character: Character, options: RenderStateOptions, onStateChange?: OnStateChangeCallback);
|
|
59
|
+
overwriteOnStateChange(onStateChange: OnStateChangeCallback): void;
|
|
60
|
+
updateState(stateChanges: RecursivePartial<RenderStateObject>): void;
|
|
61
|
+
run(mutations: GenericMutation[], options?: {
|
|
62
|
+
loop?: boolean;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
canceled: boolean;
|
|
65
|
+
}>;
|
|
66
|
+
_run(mutationChain: MutationChain): void;
|
|
67
|
+
_getActiveMutations(): GenericMutation<RenderState>[];
|
|
68
|
+
pauseAll(): void;
|
|
69
|
+
resumeAll(): void;
|
|
70
|
+
cancelMutations(scopesToCancel: string[]): void;
|
|
71
|
+
cancelAll(): void;
|
|
72
|
+
_cancelMutationChain(mutationChain: MutationChain): void;
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Stroke from './models/Stroke';
|
|
2
|
+
import { ColorObject, RecursivePartial } from './typings/types';
|
|
3
|
+
import Character from './models/Character';
|
|
4
|
+
import Mutation, { GenericMutation } from './Mutation';
|
|
5
|
+
import { CharacterName } from './RenderState';
|
|
6
|
+
export declare const showStrokes: (charName: CharacterName, character: Character, duration: number) => GenericMutation[];
|
|
7
|
+
export declare const showCharacter: (charName: CharacterName, character: Character, duration: number) => GenericMutation[];
|
|
8
|
+
export declare const hideCharacter: (charName: CharacterName, character: Character, duration?: number) => GenericMutation[];
|
|
9
|
+
export declare const updateColor: (colorName: string, colorVal: ColorObject | null, duration: number) => Mutation<{
|
|
10
|
+
state: any;
|
|
11
|
+
updateState(changes: RecursivePartial<any>): void;
|
|
12
|
+
}, any>[];
|
|
13
|
+
export declare const highlightStroke: (stroke: Stroke, color: ColorObject | null, speed: number) => GenericMutation[];
|
|
14
|
+
export declare const animateStroke: (charName: CharacterName, stroke: Stroke, speed: number) => GenericMutation[];
|
|
15
|
+
export declare const animateSingleStroke: (charName: CharacterName, character: Character, strokeNum: number, speed: number) => GenericMutation[];
|
|
16
|
+
export declare const showStroke: (charName: CharacterName, strokeNum: number, duration: number) => GenericMutation[];
|
|
17
|
+
export declare const animateCharacter: (charName: CharacterName, character: Character, fadeDuration: number, speed: number, delayBetweenStrokes: number) => GenericMutation[];
|
|
18
|
+
export declare const animateCharacterLoop: (charName: CharacterName, character: Character, fadeDuration: number, speed: number, delayBetweenStrokes: number, delayBetweenLoops: number) => GenericMutation[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Point } from './typings/types';
|
|
2
|
+
export declare const subtract: (p1: Point, p2: Point) => {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const magnitude: (point: Point) => number;
|
|
7
|
+
export declare const distance: (point1: Point, point2: Point) => number;
|
|
8
|
+
export declare const equals: (point1: Point, point2: Point) => boolean;
|
|
9
|
+
export declare const round: (point: Point, precision?: number) => {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const length: (points: Point[]) => number;
|
|
14
|
+
export declare const cosineSimilarity: (point1: Point, point2: Point) => number;
|
|
15
|
+
/**
|
|
16
|
+
* return a new point, p3, which is on the same line as p1 and p2, but distance away
|
|
17
|
+
* from p2. p1, p2, p3 will always lie on the line in that order
|
|
18
|
+
*/
|
|
19
|
+
export declare const _extendPointOnLine: (p1: Point, p2: Point, dist: number) => {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
};
|
|
23
|
+
/** based on http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf */
|
|
24
|
+
export declare const frechetDist: (curve1: Point[], curve2: Point[]) => number;
|
|
25
|
+
/** break up long segments in the curve into smaller segments of len maxLen or smaller */
|
|
26
|
+
export declare const subdivideCurve: (curve: Point[], maxLen?: number) => Point[];
|
|
27
|
+
/** redraw the curve using numPoints equally spaced out along the length of the curve */
|
|
28
|
+
export declare const outlineCurve: (curve: Point[], numPoints?: number) => Point[];
|
|
29
|
+
/** translate and scale from https://en.wikipedia.org/wiki/Procrustes_analysis */
|
|
30
|
+
export declare const normalizeCurve: (curve: Point[]) => Point[];
|
|
31
|
+
export declare const rotate: (curve: Point[], theta: number) => {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
}[];
|
|
35
|
+
export declare const _filterParallelPoints: (points: Point[]) => Point[];
|
|
36
|
+
export declare function getPathString(points: Point[], close?: boolean): string;
|
|
37
|
+
/** take points on a path and move their start point backwards by distance */
|
|
38
|
+
export declare const extendStart: (points: Point[], dist: number) => Point[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Point } from '../typings/types';
|
|
2
|
+
export default class Stroke {
|
|
3
|
+
path: string;
|
|
4
|
+
points: Point[];
|
|
5
|
+
strokeNum: number;
|
|
6
|
+
isInRadical: boolean;
|
|
7
|
+
constructor(path: string, points: Point[], strokeNum: number, isInRadical?: boolean);
|
|
8
|
+
getStartingPoint(): Point;
|
|
9
|
+
getEndingPoint(): Point;
|
|
10
|
+
getLength(): number;
|
|
11
|
+
getVectors(): {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}[];
|
|
15
|
+
getDistance(point: Point): number;
|
|
16
|
+
getAverageDistance(points: Point[]): number;
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Point } from '../typings/types';
|
|
2
|
+
export default class UserStroke {
|
|
3
|
+
id: number;
|
|
4
|
+
points: Point[];
|
|
5
|
+
externalPoints: Point[];
|
|
6
|
+
constructor(id: number, startingPoint: Point, startingExternalPoint: Point);
|
|
7
|
+
appendPoint(point: Point, externalPoint: Point): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GenericMutation } from './Mutation';
|
|
2
|
+
import Character from './models/Character';
|
|
3
|
+
import { ColorObject, Point } from './typings/types';
|
|
4
|
+
export declare const startQuiz: (character: Character, fadeDuration: number, startStrokeNum: number) => GenericMutation[];
|
|
5
|
+
export declare const startUserStroke: (id: string | number, point: Point) => GenericMutation[];
|
|
6
|
+
export declare const updateUserStroke: (userStrokeId: string | number, points: Point[]) => GenericMutation[];
|
|
7
|
+
export declare const hideUserStroke: (userStrokeId: string | number, duration: number) => GenericMutation[];
|
|
8
|
+
export declare const removeAllUserStrokes: (userStrokeIds: Array<number>) => GenericMutation[];
|
|
9
|
+
export declare const highlightCompleteChar: (character: Character, color: ColorObject | null, duration: number) => GenericMutation[];
|
|
10
|
+
export declare const highlightStroke: (stroke: import("./models/Stroke").default, color: ColorObject | null, speed: number) => GenericMutation<import("./RenderState").default>[];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Character from '../models/Character';
|
|
2
|
+
import Positioner from '../Positioner';
|
|
3
|
+
import { RenderStateObject } from '../RenderState';
|
|
4
|
+
import RenderTargetBase from './RenderTargetBase';
|
|
5
|
+
export default interface HanziWriterRendererBase<TElementType extends HTMLElement | HTMLCanvasElement | SVGElement | SVGSVGElement, TRenderTarget extends RenderTargetBase<TElementType>> {
|
|
6
|
+
_character: Character;
|
|
7
|
+
_positioner: Positioner;
|
|
8
|
+
mount(target: TRenderTarget): void;
|
|
9
|
+
render(props: RenderStateObject): void;
|
|
10
|
+
destroy(): void;
|
|
11
|
+
}
|
|
12
|
+
export interface HanziWriterRendererConstructor {
|
|
13
|
+
new (character: Character, positioner: Positioner): HanziWriterRendererBase<any, any>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Point } from '../typings/types';
|
|
2
|
+
type BoundEvent = {
|
|
3
|
+
getPoint(): Point;
|
|
4
|
+
preventDefault(): void;
|
|
5
|
+
};
|
|
6
|
+
/** Generic render target */
|
|
7
|
+
export default class RenderTargetBase<TElement extends HTMLElement | SVGElement | SVGSVGElement | HTMLCanvasElement = HTMLElement> {
|
|
8
|
+
node: TElement;
|
|
9
|
+
constructor(node: TElement);
|
|
10
|
+
addPointerStartListener(callback: (arg: BoundEvent) => void): void;
|
|
11
|
+
addPointerMoveListener(callback: (arg: BoundEvent) => void): void;
|
|
12
|
+
addPointerEndListener(callback: () => void): void;
|
|
13
|
+
getBoundingClientRect(): DOMRect;
|
|
14
|
+
updateDimensions(width: string | number, height: string | number): void;
|
|
15
|
+
_eventify<TEvent extends Event>(evt: TEvent, pointFunc: (event: TEvent) => Point): {
|
|
16
|
+
getPoint: () => Point;
|
|
17
|
+
preventDefault: () => void;
|
|
18
|
+
};
|
|
19
|
+
_getMousePoint(evt: MouseEvent): Point;
|
|
20
|
+
_getTouchPoint(evt: TouchEvent): Point;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Stroke from '../models/Stroke';
|
|
2
|
+
import { ColorObject } from '../typings/types';
|
|
3
|
+
export default class StrokeRendererBase {
|
|
4
|
+
_pathLength: number;
|
|
5
|
+
stroke: Stroke;
|
|
6
|
+
static STROKE_WIDTH: number;
|
|
7
|
+
constructor(stroke: Stroke);
|
|
8
|
+
_getStrokeDashoffset(displayPortion: number): number;
|
|
9
|
+
_getColor({ strokeColor, radicalColor, }: {
|
|
10
|
+
strokeColor: ColorObject;
|
|
11
|
+
radicalColor?: ColorObject | null;
|
|
12
|
+
}): ColorObject;
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Character from '../../models/Character';
|
|
2
|
+
import { StrokeRenderState } from '../../RenderState';
|
|
3
|
+
import { ColorObject } from '../../typings/types';
|
|
4
|
+
import StrokeRenderer from './StrokeRenderer';
|
|
5
|
+
export default class CharacterRenderer {
|
|
6
|
+
_strokeRenderers: StrokeRenderer[];
|
|
7
|
+
constructor(character: Character);
|
|
8
|
+
render(ctx: CanvasRenderingContext2D, props: {
|
|
9
|
+
opacity: number;
|
|
10
|
+
strokes: Record<number, StrokeRenderState>;
|
|
11
|
+
strokeColor: ColorObject;
|
|
12
|
+
radicalColor?: ColorObject | null;
|
|
13
|
+
}): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Character from '../../models/Character';
|
|
2
|
+
import Positioner from '../../Positioner';
|
|
3
|
+
import HanziWriterRendererBase from '../HanziWriterRendererBase';
|
|
4
|
+
import CanvasRenderTarget from '../canvas/RenderTarget';
|
|
5
|
+
import CharacterRenderer from './CharacterRenderer';
|
|
6
|
+
import { RenderStateObject } from '../../RenderState';
|
|
7
|
+
export default class HanziWriterRenderer implements HanziWriterRendererBase<HTMLCanvasElement, CanvasRenderTarget> {
|
|
8
|
+
_character: Character;
|
|
9
|
+
_positioner: Positioner;
|
|
10
|
+
_mainCharRenderer: CharacterRenderer;
|
|
11
|
+
_outlineCharRenderer: CharacterRenderer;
|
|
12
|
+
_highlightCharRenderer: CharacterRenderer;
|
|
13
|
+
_target: CanvasRenderTarget | undefined;
|
|
14
|
+
constructor(character: Character, positioner: Positioner);
|
|
15
|
+
mount(target: CanvasRenderTarget): void;
|
|
16
|
+
destroy: () => void;
|
|
17
|
+
_animationFrame(cb: (ctx: CanvasRenderingContext2D) => void): void;
|
|
18
|
+
render(props: RenderStateObject): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import RenderTargetBase from '../RenderTargetBase';
|
|
2
|
+
export default class RenderTarget extends RenderTargetBase<HTMLCanvasElement> {
|
|
3
|
+
constructor(canvas: HTMLCanvasElement);
|
|
4
|
+
static init(elmOrId: string | HTMLCanvasElement, width?: string, height?: string): RenderTarget;
|
|
5
|
+
getContext(): CanvasRenderingContext2D | null;
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import StrokeRendererBase from '../StrokeRendererBase';
|
|
2
|
+
import Stroke from '../../models/Stroke';
|
|
3
|
+
import { ColorObject, Point } from '../../typings/types';
|
|
4
|
+
/** this is a stroke composed of several stroke parts */
|
|
5
|
+
export default class StrokeRenderer extends StrokeRendererBase {
|
|
6
|
+
_extendedMaskPoints: Point[];
|
|
7
|
+
_path2D: Path2D | undefined;
|
|
8
|
+
_pathCmd: ((ctx: CanvasRenderingContext2D) => void) | undefined;
|
|
9
|
+
constructor(stroke: Stroke, usePath2D?: boolean);
|
|
10
|
+
render(ctx: CanvasRenderingContext2D, props: {
|
|
11
|
+
opacity: number;
|
|
12
|
+
strokeColor: ColorObject;
|
|
13
|
+
radicalColor?: ColorObject | null;
|
|
14
|
+
displayPortion: number;
|
|
15
|
+
}): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Point } from '../../typings/types';
|
|
2
|
+
export declare const drawPath: (ctx: CanvasRenderingContext2D, points: Point[]) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Break a path string into a series of canvas path commands
|
|
5
|
+
*
|
|
6
|
+
* Note: only works with the subset of SVG paths used by MakeMeAHanzi data
|
|
7
|
+
* @param pathString
|
|
8
|
+
*/
|
|
9
|
+
export declare const pathStringToCanvas: (pathString: string) => (ctx: CanvasRenderingContext2D) => void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RenderTargetInitFunction } from '../../typings/types';
|
|
2
|
+
import HanziWriterRenderer from './HanziWriterRenderer';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
HanziWriterRenderer: typeof HanziWriterRenderer;
|
|
5
|
+
createRenderTarget: RenderTargetInitFunction<HTMLCanvasElement>;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import StrokeRenderer from './StrokeRenderer';
|
|
2
|
+
import SVGRenderTarget from './RenderTarget';
|
|
3
|
+
import Character from '../../models/Character';
|
|
4
|
+
import { ColorObject } from '../../typings/types';
|
|
5
|
+
import { StrokeRenderState } from '../../RenderState';
|
|
6
|
+
type SvgCharacterRenderProps = {
|
|
7
|
+
opacity: number;
|
|
8
|
+
strokes: Record<number, StrokeRenderState>;
|
|
9
|
+
strokeColor: ColorObject;
|
|
10
|
+
radicalColor?: ColorObject | null;
|
|
11
|
+
};
|
|
12
|
+
export default class CharacterRenderer {
|
|
13
|
+
_oldProps: SvgCharacterRenderProps | undefined;
|
|
14
|
+
_strokeRenderers: StrokeRenderer[];
|
|
15
|
+
_group: SVGElement | SVGSVGElement | undefined;
|
|
16
|
+
constructor(character: Character);
|
|
17
|
+
mount(target: SVGRenderTarget): void;
|
|
18
|
+
render(props: SvgCharacterRenderProps): void;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import CharacterRenderer from './CharacterRenderer';
|
|
2
|
+
import UserStrokeRenderer from './UserStrokeRenderer';
|
|
3
|
+
import Character from '../../models/Character';
|
|
4
|
+
import Positioner from '../../Positioner';
|
|
5
|
+
import SVGRenderTarget from './RenderTarget';
|
|
6
|
+
import HanziWriterRendererBase from '../HanziWriterRendererBase';
|
|
7
|
+
import { RenderStateObject } from '../../RenderState';
|
|
8
|
+
export default class HanziWriterRenderer implements HanziWriterRendererBase<SVGElement | SVGSVGElement, SVGRenderTarget> {
|
|
9
|
+
_character: Character;
|
|
10
|
+
_positioner: Positioner;
|
|
11
|
+
_mainCharRenderer: CharacterRenderer;
|
|
12
|
+
_outlineCharRenderer: CharacterRenderer;
|
|
13
|
+
_highlightCharRenderer: CharacterRenderer;
|
|
14
|
+
_userStrokeRenderers: Record<string, UserStrokeRenderer | undefined>;
|
|
15
|
+
_positionedTarget: SVGRenderTarget | undefined;
|
|
16
|
+
constructor(character: Character, positioner: Positioner);
|
|
17
|
+
mount(target: SVGRenderTarget): void;
|
|
18
|
+
render(props: RenderStateObject): void;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import RenderTargetBase from '../RenderTargetBase';
|
|
2
|
+
export default class RenderTarget extends RenderTargetBase<SVGSVGElement | SVGElement> {
|
|
3
|
+
static init(elmOrId: Element | string, width?: string, height?: string): RenderTarget;
|
|
4
|
+
svg: SVGSVGElement | SVGElement;
|
|
5
|
+
defs: SVGElement;
|
|
6
|
+
_pt: DOMPoint | undefined;
|
|
7
|
+
constructor(svg: SVGElement | SVGSVGElement, defs: SVGElement);
|
|
8
|
+
createSubRenderTarget(): RenderTarget;
|
|
9
|
+
_getMousePoint(evt: MouseEvent): import("../../HanziWriter").Point;
|
|
10
|
+
_getTouchPoint(evt: TouchEvent): import("../../HanziWriter").Point;
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import StrokeRendererBase from '../StrokeRendererBase';
|
|
2
|
+
import Stroke from '../../models/Stroke';
|
|
3
|
+
import SVGRenderTarget from './RenderTarget';
|
|
4
|
+
import { ColorObject } from '../../typings/types';
|
|
5
|
+
type StrokeRenderProps = {
|
|
6
|
+
strokeColor: ColorObject;
|
|
7
|
+
radicalColor: ColorObject | null;
|
|
8
|
+
displayPortion: number;
|
|
9
|
+
opacity: number;
|
|
10
|
+
};
|
|
11
|
+
/** This is a stroke composed of several stroke parts **/
|
|
12
|
+
export default class StrokeRenderer extends StrokeRendererBase {
|
|
13
|
+
_oldProps: StrokeRenderProps | undefined;
|
|
14
|
+
_animationPath: SVGPathElement | undefined;
|
|
15
|
+
_clip: SVGClipPathElement | undefined;
|
|
16
|
+
_strokePath: SVGPathElement | undefined;
|
|
17
|
+
constructor(stroke: Stroke);
|
|
18
|
+
mount(target: SVGRenderTarget): this;
|
|
19
|
+
render(props: StrokeRenderProps): void;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ColorObject, Point } from '../../typings/types';
|
|
2
|
+
import SVGRenderTarget from './RenderTarget';
|
|
3
|
+
export type UserStrokeProps = {
|
|
4
|
+
strokeWidth: number;
|
|
5
|
+
strokeColor: ColorObject;
|
|
6
|
+
opacity: number;
|
|
7
|
+
points: Point[];
|
|
8
|
+
};
|
|
9
|
+
export default class UserStrokeRenderer {
|
|
10
|
+
_oldProps: UserStrokeProps | undefined;
|
|
11
|
+
_path: SVGElement | undefined;
|
|
12
|
+
mount(target: SVGRenderTarget): void;
|
|
13
|
+
render(props: UserStrokeProps): void;
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RenderTargetInitFunction } from '../../typings/types';
|
|
2
|
+
import HanziWriterRenderer from './HanziWriterRenderer';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
HanziWriterRenderer: typeof HanziWriterRenderer;
|
|
5
|
+
createRenderTarget: RenderTargetInitFunction<SVGElement | SVGSVGElement>;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function createElm(elmType: string): SVGElement;
|
|
2
|
+
export declare function attr(elm: Element, name: string, value: string): void;
|
|
3
|
+
export declare function attrs(elm: Element, attrsMap: Record<string, string>): void;
|
|
4
|
+
export declare function urlIdRef(id: string): string;
|
|
5
|
+
export declare function removeElm(elm: Element | undefined): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import UserStroke from './models/UserStroke';
|
|
2
|
+
import Character from './models/Character';
|
|
3
|
+
export interface StrokeMatchResultMeta {
|
|
4
|
+
isStrokeBackwards: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface StrokeMatchResult {
|
|
7
|
+
isMatch: boolean;
|
|
8
|
+
meta: StrokeMatchResultMeta;
|
|
9
|
+
}
|
|
10
|
+
export default function strokeMatches(userStroke: UserStroke, character: Character, strokeNum: number, options?: {
|
|
11
|
+
leniency?: number;
|
|
12
|
+
isOutlineVisible?: boolean;
|
|
13
|
+
averageDistanceThreshold?: number;
|
|
14
|
+
}): StrokeMatchResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const resolvePromises: (num?: number) => Promise<void>;
|