revas 1.0.3 → 2.0.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.
- package/README.md +61 -1
- package/dist/chunk-JPUKLNW3.js +1710 -0
- package/dist/chunk-JPUKLNW3.js.map +1 -0
- package/dist/revas-common.cjs +1768 -0
- package/dist/revas-common.cjs.map +1 -0
- package/dist/revas-common.d.cts +363 -0
- package/dist/revas-common.d.ts +363 -0
- package/dist/revas-common.js +3 -0
- package/dist/revas-common.js.map +1 -0
- package/dist/revas.cjs +1881 -0
- package/dist/revas.cjs.map +1 -0
- package/dist/revas.d.cts +13 -0
- package/dist/revas.d.ts +13 -0
- package/dist/revas.js +108 -1978
- package/dist/revas.js.map +1 -1
- package/package.json +56 -46
- package/common.d.ts +0 -1
- package/common.js +0 -1
- package/dist/revas.common.js +0 -1872
- package/dist/revas.common.js.map +0 -1
- package/dist/revas.es.js +0 -1943
- package/dist/revas.es.js.map +0 -1
- package/dist/types/develop/App.d.ts +0 -8
- package/dist/types/develop/Intro/About.d.ts +0 -2
- package/dist/types/develop/Intro/Animation.d.ts +0 -2
- package/dist/types/develop/Intro/Component.d.ts +0 -2
- package/dist/types/develop/Intro/Entry.d.ts +0 -6
- package/dist/types/develop/Intro/Gesture.d.ts +0 -2
- package/dist/types/develop/Intro/Interactable.d.ts +0 -10
- package/dist/types/develop/Intro/Navbar.d.ts +0 -6
- package/dist/types/develop/Intro/Panel.d.ts +0 -14
- package/dist/types/develop/Intro/Style.d.ts +0 -2
- package/dist/types/develop/Intro/index.d.ts +0 -2
- package/dist/types/develop/Music/Player.d.ts +0 -79
- package/dist/types/develop/Music/data.d.ts +0 -8
- package/dist/types/develop/Music/index.d.ts +0 -23
- package/dist/types/develop/Music/styles.d.ts +0 -19
- package/dist/types/develop/Timeline/data.d.ts +0 -5
- package/dist/types/develop/Timeline/index.d.ts +0 -11
- package/dist/types/develop/common/back.d.ts +0 -2
- package/dist/types/develop/common/simple-router.d.ts +0 -44
- package/dist/types/develop/serviceWorker.d.ts +0 -7
- package/dist/types/index.d.ts +0 -1
- package/dist/types/revas/common.d.ts +0 -24
- package/dist/types/revas/components/Context.d.ts +0 -12
- package/dist/types/revas/components/Image.d.ts +0 -20
- package/dist/types/revas/components/LinearGradient.d.ts +0 -38
- package/dist/types/revas/components/ListView.d.ts +0 -22
- package/dist/types/revas/components/ScrollView.d.ts +0 -43
- package/dist/types/revas/components/Text.d.ts +0 -16
- package/dist/types/revas/components/Touchable.d.ts +0 -34
- package/dist/types/revas/components/View.d.ts +0 -3
- package/dist/types/revas/components/common/Scroller.d.ts +0 -35
- package/dist/types/revas/components/common/drawImage.d.ts +0 -3
- package/dist/types/revas/components/common/drawText.d.ts +0 -17
- package/dist/types/revas/components/common/imageLoader.d.ts +0 -2
- package/dist/types/revas/core/Animated.d.ts +0 -59
- package/dist/types/revas/core/Canvas.d.ts +0 -17
- package/dist/types/revas/core/Container.d.ts +0 -18
- package/dist/types/revas/core/Node.d.ts +0 -46
- package/dist/types/revas/core/css-layout/index.d.ts +0 -9
- package/dist/types/revas/core/draw.d.ts +0 -4
- package/dist/types/revas/core/offscreen.d.ts +0 -11
- package/dist/types/revas/core/reconciler.d.ts +0 -5
- package/dist/types/revas/core/touch.d.ts +0 -3
- package/dist/types/revas/core/utils.d.ts +0 -22
- package/dist/types/revas/core/yoga-layout/index.d.ts +0 -3
- package/dist/types/revas/core/yoga-layout/init.d.ts +0 -3
- package/dist/types/revas/core/yoga-layout/style.d.ts +0 -3
- package/dist/types/revas/index.d.ts +0 -2
- package/dist/types/revas/web/index.d.ts +0 -1
- package/dist/types/revas/web/render.d.ts +0 -7
- package/doc/API.md +0 -241
- package/doc/README-zh.md +0 -266
- package/public/favicon.ico +0 -0
- package/public/index.html +0 -64
- package/public/logo192.png +0 -0
- package/public/logo512.png +0 -0
- package/public/manifest.json +0 -25
- package/public/robots.txt +0 -2
- package/public/stats.min.js +0 -5
- package/public/touch-emulator.js +0 -363
- package/rollup.config.ts +0 -44
- package/tsconfig.json +0 -30
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/revas/components/View.ts","../src/revas/core/utils.ts","../src/revas/components/common/drawText.ts","../src/revas/components/Text.ts","../src/revas/components/common/imageLoader.ts","../src/revas/components/common/drawImage.ts","../src/revas/components/Image.ts","../src/revas/core/Animated.ts","../src/revas/components/Touchable.ts","../src/revas/components/common/Scroller.ts","../src/revas/components/ScrollView.ts","../src/revas/components/ListView.ts","../src/revas/components/LinearGradient.ts","../src/revas/core/Node.ts","../src/revas/core/reconciler.ts","../src/revas/components/Context.ts","../src/revas/core/yoga-layout/style.ts","../src/revas/core/yoga-layout/index.ts","../src/revas/core/offscreen.ts","../src/revas/core/draw.ts","../src/revas/core/touch.ts","../src/revas/core/Container.ts","../src/revas/core/Canvas.ts"],"names":["React","array","React2","React3","ease","bezier","t2","React4","React5","React6","DEFAULT_STYLE","React7","DefaultEventPriority","ReactReconciler","version","createContext","createElement","Align","Justify","Wrap","FlexDirection","PositionType","Edge","cache","Yoga","process","Direction","funcName"],"mappings":"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","file":"revas-common.cjs","sourcesContent":["import * as React from 'react'\nimport { NodeProps } from '../core/Node'\n\nexport default function View(props: NodeProps) {\n return React.createElement('View', props)\n}","import { Node } from './Node';\nimport { RevasCanvas } from './Canvas';\n\nexport function noop(): any {}\nexport const EMPTY_OBJECT: any = Object.freeze({});\nexport const EMPTY_ARRAY: any[] = Object.freeze([]) as any;\n\nexport function flatten(array: any[]) {\n const flattend: any[] = [];\n (function flat(array) {\n array.forEach(function (el) {\n if (Array.isArray(el)) {\n flat(el);\n } else {\n flattend.push(el);\n }\n });\n })(array);\n return flattend;\n}\n\nexport const now =\n typeof performance === 'object' && typeof performance.now === 'function' ? () => performance.now() : () => Date.now();\n\nfunction observeAnimatedValue(value: any, observer?: Function, defaultValue?: number) {\n if (value === undefined) {\n return defaultValue!;\n }\n if (value && value.getValue) {\n return value.getValue(observer);\n }\n return value;\n}\n\nexport function applyAnimated(style: any, callback?: Function) {\n if (style.animated) {\n // Animated Styles\n for (const key in style) {\n style[key] = observeAnimatedValue(style[key], callback);\n }\n }\n return style;\n}\n\nexport function getMergedStyleFromNode(node: Node, callback?: Function) {\n const {\n props: { style = EMPTY_ARRAY },\n } = node;\n return applyAnimated(Object.assign({}, ...flatten([style])), callback);\n}\n\nexport function getFrameFromNode(node: Node) {\n const { frame } = node;\n return frame;\n}\n\nexport function sortByZIndexAscending(a: Node, b: Node) {\n const styleA = getMergedStyleFromNode(a);\n const styleB = getMergedStyleFromNode(b);\n return (styleA.zIndex || 0) - (styleB.zIndex || 0);\n}\n\nexport function clamp(n: number, min: number, max: number) {\n return Math.min(Math.max(n, min), max);\n}\n\nconst ASTRAL_RANGE = /\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]?|[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*/g;\nconst WORD_RANGE = /\\w+|\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]?|[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*/g;\n\nexport function getChars(str: string): readonly string[] {\n return str.match(ASTRAL_RANGE) || EMPTY_ARRAY;\n}\n\nexport function getWords(str: string): readonly string[] {\n return str.match(WORD_RANGE) || EMPTY_ARRAY;\n}\n\nexport function setShadow(canvas: RevasCanvas, color: string, x = 0, y = 0, blur = 0) {\n if (color && (x || y || blur)) {\n const { context: ctx } = canvas;\n const { shadowBlur, shadowColor, shadowOffsetX, shadowOffsetY } = ctx;\n ctx.shadowBlur = blur;\n ctx.shadowColor = color;\n ctx.shadowOffsetX = x;\n ctx.shadowOffsetY = y;\n return function resetShadow() {\n ctx.shadowBlur = shadowBlur;\n ctx.shadowColor = shadowColor;\n ctx.shadowOffsetX = shadowOffsetX;\n ctx.shadowOffsetY = shadowOffsetY;\n };\n }\n return noop;\n}\n\nexport function pushOpacity(canvas: RevasCanvas, opacity: number) {\n if (opacity !== null && opacity < 1 && opacity >= 0) {\n const cachedOpacity = canvas.context.globalAlpha || 1;\n canvas.context.globalAlpha = cachedOpacity * opacity;\n return function popOpacity() {\n canvas.context.globalAlpha = cachedOpacity;\n };\n }\n return noop;\n}\n\nexport type RevasAdapter = {\n createImage: () => HTMLImageElement;\n createOffscreenCanvas?: (width: number, height: number) => RevasCanvas;\n resetOffscreenCanvas?: (ctx: RevasCanvas, width: number, height: number) => RevasCanvas;\n};\n\nexport const adapter: RevasAdapter = {\n createImage: () => new Image(),\n};\n","import { Frame } from '../../core/Node';\nimport { getChars, getWords, setShadow } from '../../core/utils';\nimport { RevasCanvas } from '../../core/Canvas';\n\nexport interface DrawTextOptions {\n textStyle: any;\n numberOfLines: number;\n frame: Frame;\n content: string;\n}\n\nexport type MeasureLine = { width: number; text: string };\n\nexport type MeasureResult = [MeasureLine[], number];\n\nexport const DEFAULT_MEASURE: MeasureResult = [[], 0];\n\nfunction measureLines(canvas: RevasCanvas, chars: readonly string[], boxWidth: number, numberOfLines: number) {\n const lines: MeasureLine[] = [];\n let width = 0;\n let text = '';\n let cursor = -1;\n function pushLine(charWidth = 0, char = '', force = false) {\n if (force || text) {\n lines.push({ width, text });\n }\n if (cursor < chars.length && numberOfLines > 0 && lines.length >= numberOfLines) {\n const lastLine = lines[lines.length - 1];\n lastLine.text = `${lastLine.text.slice(0, -2)}...`;\n lastLine.width = canvas.context.measureText(lastLine.text).width;\n cursor = chars.length + 1;\n } else {\n width = charWidth;\n text = char.trim();\n }\n }\n while (cursor++ <= chars.length) {\n if (chars.length > cursor) {\n const char = chars[cursor];\n if (char === '\\n') {\n pushLine(0, '', true);\n } else {\n const charWidth = canvas.context.measureText(char).width;\n if (charWidth + width > boxWidth) {\n pushLine(charWidth, char);\n } else {\n width += charWidth;\n text += char;\n }\n }\n } else {\n pushLine();\n }\n }\n return lines;\n}\n\nfunction splitContent(content: string, wordBreak: string) {\n switch (wordBreak) {\n case 'break-all':\n return getChars(content);\n case 'keep-all':\n return [content];\n default:\n return getWords(content);\n }\n}\n\nexport function applyTextStyle(canvas: RevasCanvas, options: DrawTextOptions) {\n const { fontStyle, fontWeight, fontSize, fontFamily, textBaseline, color } = options.textStyle;\n // Apply Styles\n canvas.context.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;\n canvas.context.fillStyle = color;\n canvas.context.textBaseline = textBaseline;\n}\n\nexport function measureText(canvas: RevasCanvas, options: DrawTextOptions): MeasureResult {\n const lines = measureLines(\n canvas,\n splitContent(options.content, options.textStyle.wordBreak),\n options.frame.width,\n options.numberOfLines\n );\n return [lines, options.textStyle.lineHeight * lines.length];\n}\n\nexport function drawText(canvas: RevasCanvas, options: DrawTextOptions, lines: MeasureLine[]) {\n const { textStyle: style, frame } = options;\n\n // Shadow:\n const resetShadow = setShadow(\n canvas,\n style.textShadowColor,\n style.textShadowOffsetX,\n style.textShadowOffsetY,\n style.textShadowBlur\n );\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n let { x } = frame;\n switch (style.textAlign) {\n case 'center':\n x = x + frame.width / 2 - line.width / 2;\n break;\n case 'right':\n x = x + frame.width - line.width;\n break;\n }\n canvas.context.fillText(line.text, x, style.lineHeight * (i + 0.5) + frame.y);\n }\n resetShadow();\n}\n","import * as React from 'react';\nimport { drawText, measureText, applyTextStyle, DrawTextOptions, DEFAULT_MEASURE } from './common/drawText';\nimport { NodeProps, Node } from '../core/Node';\nimport { getFrameFromNode, flatten, applyAnimated } from '../core/utils';\nimport { RevasCanvas } from '../core/Canvas';\n\nexport type TextProps = {\n numberOfLines?: number;\n} & NodeProps;\n\nexport default class Text extends React.Component<TextProps> {\n state = { height: 0 };\n\n _measured = DEFAULT_MEASURE;\n\n _drawed?: DrawTextOptions;\n\n drawText = (canvas: RevasCanvas, node: Node) => {\n const content = getTextFromNode(node);\n if (content) {\n const options = {\n numberOfLines: node.props.numberOfLines || 0,\n textStyle: getTextStyleFromNode(node),\n frame: getFrameFromNode(node),\n content,\n };\n applyTextStyle(canvas, options);\n if (textPropsChanged(options, this._drawed)) {\n this._measured = measureText(canvas, options);\n this._drawed = options;\n }\n const [lines, height] = this._measured;\n // Draw text first\n drawText(canvas, options, lines);\n // Update height asynchronously to avoid clearing canvas in same frame\n if (height !== this.state.height) {\n Promise.resolve().then(() => {\n if (this._drawed) {\n this.setState({ height });\n }\n });\n }\n }\n };\n render() {\n const { children, numberOfLines, ...others } = this.props as any;\n return React.createElement(\n 'View',\n others,\n React.createElement('Text', {\n content: children,\n customDrawer: this.drawText,\n textStyle: others.style,\n style: this.state,\n numberOfLines,\n $ready: Boolean(this._drawed),\n })\n );\n }\n}\n\nconst TEXT_STYLES_LIST = [\n 'fontStyle',\n 'fontWeight',\n 'fontSize',\n 'fontFamily',\n 'textBaseline',\n 'wordBreak',\n 'lineHeight',\n];\n\nconst DEFAULT_TEXTSTYLE = {\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue'\",\n fontWeight: 'normal',\n fontSize: 14,\n color: '#000',\n fontStyle: 'normal',\n textBaseline: 'middle',\n};\n\nfunction textStyleChanged(left: any, right: any) {\n for (let i = 0; i < TEXT_STYLES_LIST.length; i++) {\n const item = TEXT_STYLES_LIST[i];\n if (left[item] !== right[item]) {\n return true;\n }\n }\n return false;\n}\n\nfunction textPropsChanged(left: DrawTextOptions, right?: DrawTextOptions) {\n if (!right) {\n return true;\n }\n if (left.content !== right.content) {\n return true;\n }\n if (left.numberOfLines !== right.numberOfLines) {\n return true;\n }\n if (left.frame.width !== right.frame.width) {\n return true;\n }\n return textStyleChanged(left.textStyle, right.textStyle);\n}\n\nfunction getTextFromNode(node: Node) {\n const frame = getFrameFromNode(node);\n if (frame.width > 0) {\n const { content } = node.props;\n if (typeof content === 'string') {\n return content;\n } else if (Array.isArray(content)) {\n return content.join('');\n }\n }\n return '';\n}\n\nfunction getTextStyleFromNode(node: Node) {\n const style = Object.assign({}, DEFAULT_TEXTSTYLE, ...flatten([node.props.textStyle]));\n style.lineHeight = style.lineHeight || style.fontSize * 1.1;\n return applyAnimated(style);\n}\n// TODO: nested text support\n","import { adapter } from '../../core/utils'\n\nclass CachedImage {\n readonly image = adapter.createImage()\n private readonly targets: Function[] = []\n private _ready = false\n get empty() {\n return this.targets.length === 0\n }\n constructor(\n public readonly src: string\n ) {\n if (!this.image) {\n throw new Error('Revas: createImage must be initialized')\n }\n this.image.onload = this.onload\n this.image.onerror = this.onerror\n this.image.src = src\n }\n onload = () => {\n this._ready = true\n // In React 19, batching is automatic, so just call directly\n this.targets.forEach(target => target(this.image))\n }\n onerror = () => { }\n add(target: Function) {\n if (this.targets.indexOf(target) < 0) {\n this.targets.push(target)\n if (this._ready) {\n target(this.image)\n }\n }\n }\n remove(target: Function) {\n const index = this.targets.indexOf(target)\n this.targets.splice(index, 1)\n }\n}\n\nconst cache = new Map<string, CachedImage>()\n\n\nexport function get(src: string, target?: Function) {\n if (!cache.has(src)) {\n cache.set(src, new CachedImage(src))\n }\n const cached = cache.get(src)!\n target && cached.add(target)\n return cached.image\n}\n\nexport function remove(src: string, target: Function) {\n if (cache.has(src)) {\n const cached = cache.get(src)!\n cached.remove(target)\n if (cached.empty) {\n cache.delete(src)\n }\n }\n}","import { Node } from '../../core/Node';\nimport * as imageLoader from './imageLoader';\nimport { clamp, getMergedStyleFromNode, getFrameFromNode } from '../../core/utils';\nimport { RevasCanvas } from '../../core/Canvas';\n\nexport default function drawImage(canvas: RevasCanvas, node: Node, flags: any) {\n const image = imageLoader.get(node.props.src);\n if (image.height <= 0) {\n return;\n }\n const frame = getFrameFromNode(node);\n const { width, height, x, y } = frame;\n if (width <= 0 || height <= 0) {\n return;\n }\n const style = getMergedStyleFromNode(node);\n\n const actualSize = {\n width: image.width,\n height: image.height,\n };\n\n const focusPoint = style.focusPoint || {\n x: actualSize.width * 0.5,\n y: actualSize.height * 0.5,\n };\n\n const hasClip = flags.hasRadius && !flags.hasClip;\n\n if (hasClip) {\n canvas.context.save();\n canvas.context.clip();\n }\n\n if (style.resizeMode === 'contain') {\n const scale = Math.min(width / actualSize.width, height / actualSize.height) || 1;\n\n const scaledSize = {\n width: actualSize.width * scale,\n height: actualSize.height * scale,\n };\n\n // Clip the image to rectangle (sx, sy, sw, sh).\n const sw = Math.round(actualSize.width);\n const sh = Math.round(actualSize.height);\n\n // Scale the image to dimensions (dw, dh).\n const dw = Math.round(scaledSize.width);\n const dh = Math.round(scaledSize.height);\n\n // Draw the image on the canvas at coordinates (dx, dy).\n const dx = Math.round((width - scaledSize.width) / 2 + x);\n const dy = Math.round((height - scaledSize.height) / 2 + y);\n\n canvas.context.drawImage(image, 0, 0, sw, sh, dx, dy, dw, dh);\n } else {\n const scale = Math.max(width / actualSize.width, height / actualSize.height) || 1;\n\n const scaledSize = {\n width: actualSize.width * scale,\n height: actualSize.height * scale,\n };\n\n // Clip the image to rectangle (sx, sy, sw, sh).\n const sx = Math.round(clamp(width * 0.5 - focusPoint.x * scale, width - scaledSize.width, 0)) * (-1 / scale);\n const sy = Math.round(clamp(height * 0.5 - focusPoint.y * scale, height - scaledSize.height, 0)) * (-1 / scale);\n const sw = Math.round(actualSize.width - sx * 2);\n const sh = Math.round(actualSize.height - sy * 2);\n\n // Scale the image to dimensions (dw, dh).\n const dw = Math.round(width);\n const dh = Math.round(height);\n\n // Draw the image on the canvas at coordinates (dx, dy).\n const dx = Math.round(x);\n const dy = Math.round(y);\n\n canvas.context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);\n }\n if (hasClip) {\n canvas.context.restore();\n }\n}\n","import * as React from 'react';\nimport * as imageLoader from './common/imageLoader';\nimport drawImage from './common/drawImage';\nimport { NodeProps } from '../core/Node';\n\nexport type ImageViewProps = {\n src: string;\n} & NodeProps;\n\nconst DEFAULT_STYLE = { path: true };\n\nexport default function ImageView(props: ImageViewProps) {\n const { src, style } = props;\n const [ready, setReady] = React.useState(false);\n React.useEffect(() => {\n if (src) {\n const onReady = () => setReady(true);\n imageLoader.get(src, onReady);\n return () => imageLoader.remove(src, onReady);\n }\n }, [src]);\n\n return React.createElement('Image', {\n customDrawer: ready ? drawImage : void 0,\n ...props,\n style: [DEFAULT_STYLE, style],\n $ready: ready,\n });\n}\n","import bezier from 'bezier-easing';\n\nexport abstract class AnimatedNode {\n abstract getValue(observer?: Function): number;\n\n interpolate(inRange: number[], outRange: number[], ease = Easing.linear): AnimatedInterpolate {\n return new AnimatedInterpolate(this, inRange, outRange, ease);\n }\n}\n\nexport class AnimatedValue extends AnimatedNode {\n // TODO: tempor\n private _observer?: Function;\n\n constructor(private _value: number) {\n super();\n }\n\n setValue(value: number) {\n this._value = value;\n if (this._observer) {\n const observer = this._observer;\n this._observer = void 0;\n observer();\n }\n }\n\n getValue(observer?: Function) {\n if (observer) {\n this._observer = observer;\n }\n return this._value;\n }\n}\n\nexport class AnimatedInterpolate extends AnimatedNode {\n constructor(\n private source: AnimatedNode,\n private inRange: number[],\n private outRange: number[],\n private ease: (t: number) => number\n ) {\n super();\n }\n // TODO: Check inRange is asc\n\n getValue(observer?: Function) {\n const value = this.source.getValue(observer);\n const len = this.inRange.length;\n let i = 1;\n for (; i < len; i++) {\n const x1 = this.inRange[i];\n if (value < x1 || i === len - 1) {\n const x0 = this.inRange[i - 1];\n const y0 = this.outRange[i - 1];\n const y1 = this.outRange[i];\n const percent = (value - x0) / (x1 - x0);\n const result = (y1 - y0) * this.ease(percent) + y0;\n return result;\n }\n }\n return 0;\n }\n}\n\nexport type TimingConfig = {\n to: number;\n duration: number;\n ease?: (t: number) => number;\n};\n\nexport class AnimatedTiming {\n private _startTime = 0;\n private _startValue = 0;\n private _onEnd?: Function;\n private _next = 0;\n\n constructor(private value: AnimatedValue, private config: TimingConfig) {}\n\n private get _ease() {\n return this.config.ease || Easing.linear;\n }\n\n start(onEnd?: Function) {\n this._startTime = Date.now();\n this._startValue = this.value.getValue();\n this._onEnd = onEnd;\n this._next = requestAnimationFrame(this._loop);\n return this;\n }\n\n stop() {\n cancelAnimationFrame(this._next);\n return this;\n }\n\n promise() {\n return new Promise(resolve => (this._onEnd = resolve));\n }\n\n private _loop = () => {\n const duration = Date.now() - this._startTime;\n if (duration < this.config.duration) {\n const percent = duration / this.config.duration;\n const inc = this._ease(percent) * (this.config.to - this._startValue);\n this.value.setValue(this._startValue + inc);\n this._next = requestAnimationFrame(this._loop);\n } else {\n this.value.setValue(this.config.to);\n this._onEnd && requestAnimationFrame(this._onEnd as any);\n }\n };\n}\n\nexport function timing(value: AnimatedValue, config: TimingConfig) {\n return new AnimatedTiming(value, config);\n}\n\nlet ease: (t: number) => number;\n\nfunction getEase() {\n if (!ease) {\n ease = bezier(0.42, 0, 1, 1);\n }\n return ease;\n}\n\nexport const Easing = {\n linear(t: number) {\n return t;\n },\n\n ease(t: number): number {\n return getEase()(t);\n },\n /**\n * Runs an easing function forwards.\n */\n in(easing = getEase()): (t: number) => number {\n return easing;\n },\n\n /**\n * Runs an easing function backwards.\n */\n out(easing = getEase()): (t: number) => number {\n return t => 1 - easing(1 - t);\n },\n\n /**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\n inOut(easing = getEase()): (t: number) => number {\n return t => {\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n },\n bounce(t: number): number {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n const t2 = t - 1.5 / 2.75;\n return 7.5625 * t2 * t2 + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n const t2 = t - 2.25 / 2.75;\n return 7.5625 * t2 * t2 + 0.9375;\n }\n\n const t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n },\n elastic(bounciness = 1): (t: number) => number {\n const p = bounciness * Math.PI;\n return t => 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);\n },\n};\n","import * as React from 'react';\nimport { BaseProps, RevasTouchEvent, RevasTouch } from '../core/Node';\nimport { AnimatedValue } from '../core/Animated';\n\nexport type TouchableProps = {\n onPress: Function;\n onPressIn?: Function;\n onPressOut?: Function;\n activeOpacity?: number;\n} & BaseProps;\n\nexport default class Touchable extends React.Component<TouchableProps> {\n static defaultProps = {\n activeOpacity: 0.7\n };\n\n _style = {\n opacity: new AnimatedValue(1),\n animated: true\n };\n\n private _start?: RevasTouch;\n private _tid = '';\n\n private _onTouchStart = (e: RevasTouchEvent) => {\n this._tid = Object.keys(e.touches)[0];\n this._start = e.touches[this._tid];\n this._style.opacity.setValue(this.props.activeOpacity!);\n this.props.onPressIn && this.props.onPressIn();\n };\n\n private _onTouchEnd = (e: RevasTouchEvent) => {\n if (this._start && e.touches[this._tid]) {\n if (Math.abs(this._start.x - e.touches[this._tid].x) < 3 &&\n Math.abs(this._start.y - e.touches[this._tid].y) < 3) {\n this.props.onPress && this.props.onPress();\n }\n }\n this._style.opacity.setValue(1);\n this.props.onPressOut && this.props.onPressOut();\n };\n\n render() {\n return React.createElement('Touchable', {\n onTouchStart: this._onTouchStart,\n onTouchEnd: this._onTouchEnd,\n ...this.props,\n style: [\n this.props.style,\n this._style\n ]\n });\n }\n}","import { RevasTouchEvent } from '../../core/Node';\nimport { clamp, noop } from '../../core/utils';\n\nexport type RevasScrollEventType = 'start' | 'scroll' | 'end' | 'none';\n\nexport interface RevasScrollEvent {\n type: RevasScrollEventType;\n x: number;\n y: number;\n vx: number;\n vy: number;\n timestamp: number;\n tid: string;\n}\n\nclass Handler {\n offset = 0;\n velocity = 0;\n max = -1;\n paging = 0;\n\n private _last = -1;\n\n capture(value: number) {\n if (this._last < 0) {\n this._last = value;\n }\n }\n\n onMove(value: number, duration: number) {\n if (this._last >= 0 && duration > 0) {\n const move = this._last - value;\n this.velocity = move / duration;\n this._last = value;\n this.change(move);\n }\n }\n onEnd() {\n if (this._last >= 0) {\n this._last = -1;\n }\n }\n\n afterEnd(duration: number) {\n if (this._last < 0) {\n const absv = Math.abs(this.velocity);\n if (this.paging > 0 && absv <= 0.5 && this.offset < this.max) {\n // start reset to paging\n const distance = Math.round(this.offset / this.paging + this.velocity) * this.paging - this.offset;\n this.velocity = clamp(distance / 2000 + friction(this.velocity, duration, 0.01), -0.5, 0.5);\n if (Math.abs(distance) > 0.5 || absv > 0.05) {\n const move = this.velocity * duration;\n this.change(move);\n return true;\n } else {\n // end to paging\n this.change(distance);\n }\n } else if (absv > 0.05) {\n // scroll for free\n this.velocity = friction(this.velocity, duration, 0.002);\n const move = this.velocity * duration;\n this.change(move);\n return true;\n } else {\n this.velocity = 0;\n }\n }\n return false;\n }\n\n change(move: number) {\n const _offset = clamp(this.offset + move, 0, this.max > 0 ? this.max : 0);\n // check validate\n if (_offset !== this.offset) {\n this.offset = _offset;\n } else if (this._last < 0) {\n this.velocity = 0;\n }\n }\n}\n\nexport default class Scroller {\n private _timestamp = 0;\n private _x = new Handler();\n private _y = new Handler();\n private _tid = '';\n private _timer: any;\n\n horizontal?: boolean = false;\n\n constructor(private listener: (e: RevasScrollEvent) => any) {}\n\n set maxX(value: number) {\n this._x.max = value;\n }\n\n get maxX() {\n return this._x.max;\n }\n\n set maxY(value: number) {\n this._y.max = value;\n }\n\n get maxY() {\n return this._y.max;\n }\n\n set pagingX(value: number) {\n this._x.paging = value;\n }\n\n set pagingY(value: number) {\n this._y.paging = value;\n }\n\n private _sign(e: RevasTouchEvent) {\n e.scroll = { ...e.scroll, x: true, y: true };\n const stopPropagation = e.scroll.stopPropagation || noop;\n if (this.horizontal) {\n if (this._x.velocity > 0) {\n e.scroll.y = false;\n stopPropagation();\n }\n if (this._x.offset > 0 && this._x.offset < this._x.max) {\n e.scroll.x = false;\n }\n } else {\n if (this._y.velocity > 0) {\n e.scroll.x = false;\n stopPropagation();\n }\n if (this._y.offset > 0 && this._y.offset < this._y.max) {\n e.scroll.y = false;\n }\n }\n e.stopPropagation = () => {\n this.touchEnd();\n stopPropagation();\n };\n }\n\n private _check(e: RevasTouchEvent) {\n if (this.horizontal && e.scroll && e.scroll.x === false) {\n return this.touchEnd();\n }\n if (!this.horizontal && e.scroll && e.scroll.y === false) {\n return this.touchEnd();\n }\n return true;\n }\n\n touchStart = (e: RevasTouchEvent) => {\n if (!this._tid) {\n this._tid = Object.keys(e.touches)[0];\n this._timestamp = e.timestamp;\n const { x, y } = e.touches[this._tid];\n this.horizontal ? this._x.capture(x) : this._y.capture(y);\n this.emit('start');\n }\n };\n\n touchMove = (e: RevasTouchEvent) => {\n if (this._tid && e.touches[this._tid] && this._check(e)) {\n const { x, y } = e.touches[this._tid];\n const duration = e.timestamp - this._timestamp;\n this._timestamp = e.timestamp;\n this.horizontal ? this._x.onMove(x, duration) : this._y.onMove(y, duration);\n this.emit('scroll');\n this._sign(e);\n }\n };\n\n touchEnd = () => {\n if (this._tid) {\n this._tid = '';\n this._timestamp = Date.now();\n this._x.onEnd();\n this._y.onEnd();\n this._timer = requestAnimationFrame(this.afterEnd);\n }\n };\n\n afterEnd = () => {\n const timestamp = Date.now();\n const duration = timestamp - this._timestamp;\n this._timestamp = timestamp;\n if (this.horizontal ? this._x.afterEnd(duration) : this._y.afterEnd(duration)) {\n this.emit('scroll');\n this._timer = requestAnimationFrame(this.afterEnd);\n } else {\n this.emit('end');\n }\n };\n\n emit(type: RevasScrollEventType) {\n this.listener({\n type,\n x: this._x.offset,\n vx: this._x.velocity,\n y: this._y.offset,\n vy: this._y.velocity,\n timestamp: this._timestamp,\n tid: this._tid,\n });\n }\n\n cancel() {\n cancelAnimationFrame(this._timer);\n this._tid = '';\n this._timestamp = Date.now();\n this._x.onEnd();\n this._y.onEnd();\n }\n}\n\nfunction friction(v: number, duration: number, factor: number) {\n return v - Math.min(duration * factor, 1) * v;\n}\n","import * as React from 'react';\nimport { NodeProps, Frame } from '../core/Node';\nimport Scroller, { RevasScrollEvent } from './common/Scroller';\nimport { AnimatedValue } from '../core/Animated';\n\nexport type ScrollViewOffset = { x?: number; y?: number };\n\nexport type ScrollViewProps = {\n horizontal?: boolean;\n onScroll?: (e: RevasScrollEvent) => any;\n onScrollStart?: (e: RevasScrollEvent) => any;\n onScrollEnd?: (e: RevasScrollEvent) => any;\n paging?: boolean | number;\n offset?: ScrollViewOffset;\n} & NodeProps;\n\nexport default class ScrollView extends React.Component<ScrollViewProps> {\n private _height = -1;\n private _contentHeight = -1;\n private _width = -1;\n private _contentWidth = -1;\n private _innerStyle = {\n translateX: new AnimatedValue(0),\n translateY: new AnimatedValue(0),\n position: 'absolute',\n animated: true,\n };\n private _offset: ScrollViewOffset = { x: 0, y: 0 };\n\n private _scroller = new Scroller(e => {\n const { x = 0, y = 0 } = this._offset;\n this.props.horizontal ?\n this._innerStyle.translateX.setValue(x - e.x) :\n this._innerStyle.translateY.setValue(y - e.y);\n switch (e.type) {\n case 'scroll':\n return this.props.onScroll && this.props.onScroll(e);\n case 'start':\n return this.props.onScrollStart && this.props.onScrollStart(e);\n case 'end':\n return this.props.onScrollEnd && this.props.onScrollEnd(e);\n }\n });\n\n componentWillUnmount() {\n this._scroller.cancel();\n }\n\n private _onLayout = (frame: Frame) => {\n if (this._width !== frame.width || this._height !== frame.height) {\n this._height = frame.height;\n this._width = frame.width;\n this._checkLayout();\n if (this.props.paging) {\n if (this.props.horizontal) {\n this._scroller.pagingX = this.props.paging === true ? frame.width : this.props.paging;\n } else {\n this._scroller.pagingY = this.props.paging === true ? frame.height : this.props.paging;\n }\n }\n }\n this.props.onLayout && this.props.onLayout(frame);\n };\n\n private _onContentLayout = (frame: Frame) => {\n const { x = 0, y = 0 } = this._offset;\n const width = frame.width + x;\n const height = frame.height + y;\n if (this._contentWidth !== width || this._contentHeight !== height) {\n this._contentHeight = height;\n this._contentWidth = width;\n this._checkLayout();\n }\n };\n\n private _checkLayout = () => {\n const maxX = this._contentWidth - this._width;\n const maxY = this._contentHeight - this._height;\n if ((maxX > 0 && maxX !== this._scroller.maxX) || (maxY > 0 && maxY !== this._scroller.maxY)) {\n this._scroller.maxX = maxX;\n this._scroller.maxY = maxY;\n this._scroller.emit('none');\n }\n };\n\n render() {\n const { children, horizontal, offset, ...others } = this.props;\n\n this._scroller.horizontal = horizontal;\n\n if (offset) {\n this._offset = offset;\n this._scroller.emit('none');\n }\n\n return React.createElement(\n 'Scrollable',\n { ...others, onLayout: this._onLayout },\n React.createElement('ScrollContent', {\n onTouchStart: this._scroller.touchStart,\n onTouchMove: this._scroller.touchMove,\n onTouchEnd: this._scroller.touchEnd,\n onLayout: this._onContentLayout,\n style: [\n this._innerStyle,\n {\n flexDirection: horizontal ? 'row' : 'column',\n [horizontal ? 'height' : 'width']: '100%',\n },\n ],\n children,\n })\n );\n }\n}\n","import * as React from 'react';\nimport { RevasScrollEvent } from './common/Scroller';\nimport ScrollView, { ScrollViewProps } from './ScrollView';\nimport { Frame } from '../core/Node';\n\nexport type ListViewProps<T = any> = {\n data: T[];\n renderItem: (item: T, index: number, data: T[]) => React.ReactNode;\n itemHeight: number;\n} & ScrollViewProps;\n\nexport default class ListView extends React.Component<ListViewProps<any>> {\n state = {\n start: 0,\n end: 1,\n };\n\n private _height = 0;\n\n componentDidMount() {\n this.checkVisible(0);\n }\n\n private checkVisible = (y: number) => {\n if (this._height > 0) {\n const { itemHeight } = this.props;\n const { start: _start, end: _end } = this.state;\n const start = Math.max(0, Math.floor((y - 10) / itemHeight));\n const end = Math.floor((y + this._height + 10) / itemHeight);\n if (start !== _start || end !== _end) {\n this.setState({ start, end });\n }\n }\n };\n\n private _onScroll = (e: RevasScrollEvent) => {\n this.checkVisible(e.y);\n this.props.onScroll && this.props.onScroll(e);\n };\n\n private _onLayout = (frame: Frame) => {\n if (this._height !== frame.height) {\n this._height = frame.height;\n }\n // this._width = frame.width\n };\n\n renderItem = (item: any, i: number) => {\n const { data, renderItem } = this.props;\n const index = i + this.state.start;\n return React.createElement(React.Fragment, { key: index }, renderItem(item, index, data));\n };\n\n render() {\n const { data, itemHeight } = this.props;\n const { start, end } = this.state;\n // console.log(start, end, this._height);\n return React.createElement(\n ScrollView,\n {\n ...this.props,\n onScroll: this._onScroll,\n onLayout: this._onLayout,\n offset: { y: start * itemHeight },\n },\n data.slice(start, end + 1).map(this.renderItem)\n );\n }\n}\n","import * as React from 'react';\nimport { NodeProps, Node } from '../core/Node';\nimport { getFrameFromNode } from '../core/utils';\nimport { RevasCanvas } from '../core/Canvas';\n\nexport type LinearGradientProps = {\n start?: { x: number; y: number };\n end?: { x: number; y: number };\n colors: string[];\n} & NodeProps;\n\nconst DEFAULT_STYLE = { path: true };\n\nexport default function LinearGradient(props: LinearGradientProps) {\n return React.createElement('LinearGradient', {\n ...props,\n style: [DEFAULT_STYLE, props.style],\n customDrawer: drawGradient,\n });\n}\n\nfunction drawGradient(canvas: RevasCanvas, node: Node) {\n const { colors } = node.props as LinearGradientProps;\n if (colors && colors.length > 0) {\n const { start = { x: 0, y: 0 }, end = { x: 1, y: 0 } } = node.props as LinearGradientProps;\n const frame = getFrameFromNode(node);\n const grad = canvas.context.createLinearGradient(\n start.x * frame.width + frame.x,\n start.y * frame.height + frame.y,\n end.x * frame.width + frame.x,\n end.y * frame.height + frame.y\n );\n for (let i = 0; i < colors.length; i++) {\n grad.addColorStop(i / (colors.length - 1), colors[i]);\n }\n canvas.context.fillStyle = grad;\n canvas.context.fill();\n }\n}\n","import { ReactNode } from 'react';\n\nexport class Frame {\n constructor(public x = 0, public y = 0, public width = 0, public height = 0) {}\n}\n\nexport class Node<T = any> {\n public readonly children: Node[] = [];\n public frame = new Frame();\n public parent?: Node;\n constructor(public readonly type: string, public props: NodeProps & T) {}\n get $ready() {\n if (this.props.$ready === false) {\n return false;\n }\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.$ready === false) {\n return false;\n }\n }\n return true;\n }\n}\n\nexport interface RevasTouch {\n identifier: number;\n x: number;\n y: number;\n}\n\nexport type RevasTouchType = 'touchstart' | 'touchmove' | 'touchend';\n\nexport interface RevasTouchEvent {\n type: RevasTouchType;\n touches: { [key: string]: RevasTouch };\n timestamp: number;\n [key: string]: any;\n}\n\nexport type RevasTouchEventListener = (event: RevasTouchEvent) => any;\n\nexport interface BaseProps {\n children?: ReactNode;\n style?: any | any[];\n cache?: string | boolean;\n forceCache?: boolean;\n}\n\nexport interface NodeProps extends BaseProps {\n onTouchStart?: RevasTouchEventListener;\n onTouchMove?: RevasTouchEventListener;\n onTouchEnd?: RevasTouchEventListener;\n onLayout?: (frame: Frame) => any;\n pointerEvents?: 'auto' | 'none' | 'box-none';\n $ready?: boolean;\n}\n","import ReactReconciler from 'react-reconciler';\nimport { DefaultEventPriority } from 'react-reconciler/constants';\nimport { version } from 'react';\nimport { Node } from './Node';\nimport { noop, now } from './utils';\nimport { Container } from './Container';\n\nconst isDev = process.env.NODE_ENV !== 'production';\n\n// Track current update priority\nlet currentUpdatePriority = DefaultEventPriority;\n\nfunction checkAndRemove(parent: Node, child: Node) {\n const index = parent.children.indexOf(child);\n if (index >= 0) {\n parent.children.splice(index, 1);\n }\n}\n\nfunction appendChild(parent: Node, child: Node) {\n checkAndRemove(parent, child);\n parent.children.push(child);\n child.parent = parent;\n}\n\nconst RevasReconciler = ReactReconciler({\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n isPrimaryRenderer: false,\n\n // Timing\n now,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n supportsMicrotasks: true,\n scheduleMicrotask:\n typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout,\n\n // Update priority (required for React 19)\n getCurrentEventPriority: () => DefaultEventPriority,\n setCurrentUpdatePriority: (priority: number) => {\n currentUpdatePriority = priority;\n },\n getCurrentUpdatePriority: () => currentUpdatePriority,\n resolveUpdatePriority: () => currentUpdatePriority || DefaultEventPriority,\n\n // Suspense commit control (required for React 19)\n maySuspendCommit: () => false,\n preloadInstance: () => true,\n startSuspendingCommit: noop,\n suspendInstance: noop,\n waitForCommitToBeReady: () => null,\n\n // Transitions (required for React 19)\n NotPendingTransition: null as null,\n HostTransitionContext: {\n $$typeof: Symbol.for('react.context'),\n _currentValue: null,\n _currentValue2: null,\n },\n resetFormInstance: noop,\n\n // Event tracking (required for React 19)\n trackSchedulerEvent: noop,\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n shouldAttemptEagerTransition: () => false,\n\n // Instance creation\n createInstance(type: string, props: any) {\n return new Node(type, props);\n },\n\n createTextInstance() {\n throw new Error('Revas: string cannot be child out of <Text/>');\n },\n\n // Tree operations\n appendChild,\n appendInitialChild: appendChild,\n appendChildToContainer(container: Container, instance: Node) {\n if (instance.type !== 'Root') {\n throw new Error(`wrong root instance type: ${instance.type}`);\n }\n container.setRoot(instance);\n },\n\n removeChild(parent: Node, child: Node) {\n checkAndRemove(parent, child);\n child.parent = void 0;\n },\n removeChildFromContainer(container: Container) {\n container.setRoot();\n },\n\n insertBefore(parent: Node, child: Node, before: Node) {\n checkAndRemove(parent, child);\n const beforeIndex = parent.children.indexOf(before);\n parent.children.splice(beforeIndex, 0, child);\n child.parent = parent;\n },\n\n insertInContainerBefore() {\n throw new Error(\"shouldn't be here: insertInContainerBefore\");\n },\n\n clearContainer() {\n // noop\n },\n\n // Finalization\n finalizeInitialChildren() {\n return false;\n },\n\n // Public instance\n getPublicInstance(instance: Node) {\n return instance;\n },\n\n // Updates\n prepareUpdate() {\n return true;\n },\n\n commitUpdate(\n instance: Node,\n _updatePayload: any,\n _type: string,\n oldProps: any,\n newProps: any\n ) {\n // Merge old props with new props, keeping old values for undefined new values\n // This handles React 19's behavior where unchanged props may be undefined\n const mergedProps = { ...oldProps };\n for (const key in newProps) {\n if (newProps[key] !== undefined) {\n mergedProps[key] = newProps[key];\n }\n }\n instance.props = mergedProps;\n },\n\n commitMount: noop,\n\n // Commit phase\n prepareForCommit() {\n return null;\n },\n\n resetAfterCommit(container: Container) {\n container.draw(true);\n },\n\n resetTextContent: noop,\n\n // Context\n getRootHostContext() {\n return {};\n },\n\n getChildHostContext(parentHostContext: object) {\n return parentHostContext;\n },\n\n shouldSetTextContent() {\n return false;\n },\n\n // Visibility (required for React 19 Offscreen)\n hideInstance: noop,\n hideTextInstance: noop,\n unhideInstance: noop,\n unhideTextInstance: noop,\n\n // Required stubs for React 19\n getInstanceFromNode() {\n return null;\n },\n\n beforeActiveInstanceBlur: noop,\n afterActiveInstanceBlur: noop,\n preparePortalMount: noop,\n prepareScopeUpdate: noop,\n\n getInstanceFromScope() {\n return null;\n },\n\n detachDeletedInstance: noop,\n});\n\nRevasReconciler.injectIntoDevTools({\n bundleType: isDev ? 1 : 0,\n version: version,\n rendererPackageName: 'revas',\n findHostInstanceByFiber: RevasReconciler.findHostInstance,\n});\n\nexport default RevasReconciler;\n","import { createContext, createElement } from 'react';\nimport { RevasCanvas } from '../core/Canvas';\n\nexport interface AppContextType {\n clientWidth: number;\n clientHeight: number;\n deviceRatio: number;\n canvas?: RevasCanvas;\n RTL?: boolean;\n}\n\nexport const AppContext = createContext<AppContextType>({\n clientWidth: 0,\n clientHeight: 0,\n deviceRatio: 1,\n});\n\nexport function withContext<T>(comp: T): T {\n (comp as any).contextType = AppContext;\n return comp;\n}\n\nexport function Root(props: AppContextType) {\n return createElement(AppContext.Provider, { value: props }, createElement('Root', props));\n}\n","import {\n Node as YogaNode,\n Align,\n Justify,\n Wrap,\n FlexDirection,\n PositionType,\n Edge,\n} from 'yoga-layout';\nimport { flatten } from '../utils';\n\nfunction funcName(key: string) {\n return `set${key[0].toUpperCase()}${key.substr(1)}`;\n}\n\ntype StyleParams = [string, any?, any?];\n\nfunction checkAndRun(yoga: any, key: string, ...values: any[]) {\n if (yoga[key]) {\n yoga[key](...values);\n } else {\n throw new Error(`Revas: No Such Style Func - ${key}`);\n }\n}\n\nfunction parseValue(func: string, value: string | number): StyleParams {\n if (typeof value === 'number') {\n return [func, value];\n } else if (value === 'auto') {\n return [`${func}Auto`];\n } else if (value.endsWith('%')) {\n return [`${func}Percent`, Number(value.slice(0, -1))];\n } else {\n throw new Error(`Revas: No Such Style Value - ${value}`);\n }\n}\n\nfunction parseEnum(func: string, enums: any, value: string): StyleParams {\n if (enums[value] !== undefined) {\n return [func, enums[value]];\n } else {\n throw new Error(`Revas: No Such Style Value - ${value}`);\n }\n}\n\nfunction parseEdge(\n func: string,\n edge: number,\n value: string | number\n): StyleParams {\n if (typeof value === 'number') {\n return [func, edge, value];\n } else if (value === 'auto') {\n return [`${func}Auto`, edge];\n } else if (value.endsWith('%')) {\n return [`${func}Percent`, edge, Number(value.slice(0, -1))];\n } else {\n throw new Error(`Revas: No Such Style Value - ${value}`);\n }\n}\n\nconst ALIGN_ENUM = {\n auto: Align.Auto,\n baseline: Align.Baseline,\n center: Align.Center,\n 'flex-end': Align.FlexEnd,\n 'flex-start': Align.FlexStart,\n 'space-around': Align.SpaceAround,\n 'space-between': Align.SpaceBetween,\n stretch: Align.Stretch,\n};\n\nconst STYLE_MAP: { [key: string]: (value: any) => StyleParams } = {};\n\n// Initialize style map (synchronous in Yoga 3.x)\nconst AVAILABLE = {\n VALUE: [\n 'flex',\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'minHeight',\n 'maxHeight',\n 'flexGrow',\n 'flexShrink',\n 'aspectRatio',\n ],\n ENUM: [\n {\n key: 'justifyContent',\n enum: {\n center: Justify.Center,\n 'flex-end': Justify.FlexEnd,\n 'flex-start': Justify.FlexStart,\n 'space-around': Justify.SpaceAround,\n 'space-between': Justify.SpaceBetween,\n 'space-evenly': Justify.SpaceEvenly,\n },\n },\n { key: 'alignItems', enum: ALIGN_ENUM },\n { key: 'alignSelf', enum: ALIGN_ENUM },\n { key: 'alignContent', enum: ALIGN_ENUM },\n {\n key: 'flexWrap',\n enum: {\n 'no-wrap': Wrap.NoWrap,\n wrap: Wrap.Wrap,\n 'wrap-reverse': Wrap.WrapReverse,\n },\n },\n {\n key: 'flexDirection',\n enum: {\n column: FlexDirection.Column,\n 'column-reverse': FlexDirection.ColumnReverse,\n row: FlexDirection.Row,\n 'row-reverse': FlexDirection.RowReverse,\n },\n },\n {\n key: 'position',\n remap: 'positionType',\n enum: {\n relative: PositionType.Relative,\n absolute: PositionType.Absolute,\n static: PositionType.Static,\n },\n },\n ],\n EDGE: [\n { key: 'padding', remap: 'padding', edge: Edge.All },\n { key: 'paddingLeft', remap: 'padding', edge: Edge.Left },\n { key: 'paddingRight', remap: 'padding', edge: Edge.Right },\n { key: 'paddingTop', remap: 'padding', edge: Edge.Top },\n { key: 'paddingBottom', remap: 'padding', edge: Edge.Bottom },\n\n { key: 'left', remap: 'position', edge: Edge.Left },\n { key: 'right', remap: 'position', edge: Edge.Right },\n { key: 'top', remap: 'position', edge: Edge.Top },\n { key: 'bottom', remap: 'position', edge: Edge.Bottom },\n\n { key: 'margin', remap: 'margin', edge: Edge.All },\n { key: 'marginLeft', remap: 'margin', edge: Edge.Left },\n { key: 'marginRight', remap: 'margin', edge: Edge.Right },\n { key: 'marginTop', remap: 'margin', edge: Edge.Top },\n { key: 'marginBottom', remap: 'margin', edge: Edge.Bottom },\n\n { key: 'borderWidth', remap: 'border', edge: Edge.All },\n { key: 'borderLeftWidth', remap: 'border', edge: Edge.Left },\n { key: 'borderRightWidth', remap: 'border', edge: Edge.Right },\n { key: 'borderTopWidth', remap: 'border', edge: Edge.Top },\n { key: 'borderBottomWidth', remap: 'border', edge: Edge.Bottom },\n ],\n};\n\nAVAILABLE.VALUE.forEach((key) => {\n const func = funcName(key);\n STYLE_MAP[key] = (value) => parseValue(func, value);\n});\n\nAVAILABLE.ENUM.forEach((item) => {\n const func = funcName(item.remap || item.key);\n const enums = item.enum;\n STYLE_MAP[item.key] = (value) => parseEnum(func, enums, value);\n});\n\nAVAILABLE.EDGE.forEach((item) => {\n const func = funcName(item.remap);\n const { edge } = item;\n STYLE_MAP[item.key] = (value) => parseEdge(func, edge, value);\n});\n\nconst cache = new WeakMap<any, StyleParams[]>();\n\nfunction _apply(yoga: YogaNode, style: any) {\n if (style) {\n if (!cache.has(style)) {\n const _styles: StyleParams[] = [];\n for (const key in style) {\n const func = STYLE_MAP[key];\n func && _styles.push(func(style[key]));\n }\n cache.set(style, _styles);\n }\n const styles = cache.get(style)!;\n for (let i = 0; i < styles.length; i++) {\n checkAndRun(yoga, ...styles[i]);\n }\n }\n}\n\nexport default function apply(yoga: YogaNode, style: any) {\n if (style) {\n flatten([style]).forEach((s) => _apply(yoga, s));\n }\n}\n","import Yoga, { Node as YogaNode, Direction } from 'yoga-layout';\nimport { Node, Frame } from '../Node';\nimport apply from './style';\nimport { AppContextType } from '../../components/Context';\n\nfunction _updateLayout(node: Node): [(x?: number, y?: number) => void, YogaNode] {\n const yoga = Yoga.Node.create();\n const children: Array<(x?: number, y?: number) => void> = [];\n apply(yoga, node.props.style);\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const [f, y] = _updateLayout(child);\n const index = children.push(f);\n yoga.insertChild(y, index - 1);\n }\n function process(x = 0, y = 0) {\n const layout = yoga.getComputedLayout();\n node.frame = new Frame(x + layout.left, y + layout.top, layout.width, layout.height);\n node.props.onLayout && node.props.onLayout(node.frame);\n for (let i = 0; i < children.length; i++) {\n children[i](node.frame.x, node.frame.y);\n }\n yoga.free();\n }\n return [process, yoga];\n}\n\nexport function updateLayout(root: Node<AppContextType>) {\n const [process, yoga] = _updateLayout(root);\n const { clientWidth, clientHeight, RTL } = root.props;\n yoga.calculateLayout(clientWidth, clientHeight, RTL ? Direction.RTL : Direction.LTR);\n return process;\n}\n","import { adapter } from './utils';\nimport { Node } from './Node';\nimport { RevasCanvas } from './Canvas';\n\nexport interface CachedCanvas {\n id: string;\n canvas: RevasCanvas;\n style: any;\n}\n\nconst MAX_SIZE = 30;\n\nconst cache = new Map<string, CachedCanvas>();\nconst ids: string[] = [];\n\nexport function getCache(id: string) {\n return cache.get(id);\n}\n\nexport function createCache(style: any, w: number, h: number, id: string): CachedCanvas {\n if (ids.length >= MAX_SIZE) {\n const expiredId = ids.shift()!;\n const { canvas } = cache.get(expiredId)!;\n const cached: CachedCanvas = {\n canvas: adapter.resetOffscreenCanvas!(canvas, w, h),\n id,\n style,\n };\n cache.delete(expiredId);\n cache.set(cached.id, cached);\n ids.push(cached.id);\n return cached;\n } else {\n const cached: CachedCanvas = {\n canvas: adapter.createOffscreenCanvas!(w, h),\n id,\n style,\n };\n cache.set(cached.id, cached);\n ids.push(cached.id);\n return cached;\n }\n}\n\nconst idCache = new WeakMap<Node, string>();\nlet __ID = 0;\n\nexport function autoCacheId(node: Node) {\n if (idCache.has(node)) {\n return idCache.get(node);\n } else {\n const id = `$$auto_id-${__ID++}`;\n idCache.set(node, id);\n return id;\n }\n}\n\nexport function clearCache() {\n cache.clear();\n ids.length = 0;\n}\n","import { Node, Frame } from './Node';\nimport {\n getMergedStyleFromNode,\n getFrameFromNode,\n sortByZIndexAscending,\n setShadow,\n pushOpacity,\n adapter\n} from './utils';\nimport { Container } from './Container';\nimport { getCache, createCache, autoCacheId } from './offscreen';\nimport { RevasCanvas } from './Canvas';\n\nfunction getRadius(style: any) {\n return {\n tl: style.borderTopLeftRadius || style.borderRadius || 0,\n tr: style.borderTopRightRadius || style.borderRadius || 0,\n bl: style.borderBottomLeftRadius || style.borderRadius || 0,\n br: style.borderBottomRightRadius || style.borderRadius || 0,\n };\n}\n\nexport function drawNode(canvas: RevasCanvas, node: Node, container: Container) {\n const style = getMergedStyleFromNode(node, container.draw);\n const frame = getFrameFromNode(node);\n\n if (style.opacity <= 0) {\n return;\n }\n\n // flags\n const hasTransform =\n style.translateX || style.translateY || style.rotate || style.scaleX || style.scaleY || style.scale;\n const hasClip = style.overflow === 'hidden';\n\n if (hasClip) {\n canvas.context.save();\n } else if (hasTransform) {\n canvas.transform.save();\n }\n // Area Range\n\n // Opacity:\n const popOpacity = pushOpacity(canvas, style.opacity);\n\n // Translation:\n if (style.translateX || style.translateY) {\n canvas.transform.translate(style.translateX || 0, style.translateY || 0);\n }\n // Rotate && Scale\n if (style.rotate || style.scaleX || style.scaleY || style.scale) {\n // Origin Center\n const originX = frame.x + frame.width / 2;\n const originY = frame.y + frame.height / 2;\n canvas.transform.translate(originX, originY);\n if (style.rotate) {\n canvas.transform.rotate(style.rotate);\n }\n if (style.scaleX || style.scaleY || style.scale) {\n canvas.transform.scale(style.scaleX || style.scale, style.scaleY || style.scale);\n }\n canvas.transform.translate(-originX, -originY);\n }\n\n if (node.props.cache && adapter.createOffscreenCanvas && frame.height > 0 && frame.width > 0) {\n drawCache(canvas, node, container, style, frame, hasClip);\n } else {\n drawContent(canvas, node, container, style, frame, hasClip);\n }\n\n popOpacity();\n\n if (hasClip) {\n canvas.context.restore();\n } else if (hasTransform) {\n canvas.transform.restore();\n }\n}\n\nfunction drawCache(canvas: RevasCanvas, node: Node, container: Container, style: any, frame: Frame, hasClip: boolean) {\n const cachedId = node.props.cache === true ? autoCacheId(node) : node.props.cache;\n let cached = getCache(cachedId);\n const { shadowBlur = 0, shadowOffsetX = 0, shadowOffsetY = 0 } = cached ? cached.style : style;\n const spread = shadowBlur * 2;\n const x = frame.x + shadowOffsetX - shadowBlur;\n const y = frame.y + shadowOffsetY - shadowBlur;\n const w = frame.width + spread;\n const h = frame.height + spread;\n if (!cached) {\n if (!node.$ready && !node.props.forceCache) {\n return drawContent(canvas, node, container, style, frame, hasClip);\n }\n cached = createCache(style, w, h, cachedId);\n cached.canvas.transform.translate(-x, -y);\n drawContent(cached.canvas, node, container, style, frame, hasClip);\n cached.canvas.transform.translate(x, y);\n }\n canvas.context.drawImage(cached.canvas.element, x, y, w, h);\n}\n\nfunction drawContent(\n canvas: RevasCanvas,\n node: Node,\n container: Container,\n style: any,\n frame: Frame,\n hasClip: boolean\n) {\n const hasBG = style.backgroundColor && style.backgroundColor !== 'transparent';\n const hasBorder = style.borderColor && style.borderWidth > 0;\n const hasRadius =\n style.borderRadius ||\n style.borderTopLeftRadius ||\n style.borderTopRightRadius ||\n style.borderBottomLeftRadius ||\n style.borderBottomRightRadius;\n\n // consts\n const useFrame = hasBG || hasBorder || hasClip || style.path;\n const usePath = hasRadius || hasClip || style.path;\n\n if (useFrame) {\n const { context: ctx } = canvas;\n if (usePath) {\n // Draw Path\n ctx.beginPath();\n if (hasRadius) {\n const radius = getRadius(style);\n ctx.moveTo(frame.x + radius.tl, frame.y);\n ctx.arcTo(frame.x + frame.width, frame.y, frame.x + frame.width, frame.y + frame.height, radius.tr);\n ctx.arcTo(frame.x + frame.width, frame.y + frame.height, frame.x, frame.y + frame.height, radius.br);\n ctx.arcTo(frame.x, frame.y + frame.height, frame.x, frame.y, radius.bl);\n ctx.arcTo(frame.x, frame.y, frame.x + frame.width, frame.y, radius.tl);\n } else {\n ctx.rect(frame.x, frame.y, frame.width, frame.height);\n }\n ctx.closePath();\n\n if (hasClip) {\n ctx.clip();\n }\n }\n\n if (hasBG || hasBorder) {\n // Shadow:\n const resetShadow = setShadow(\n canvas,\n style.shadowColor,\n style.shadowOffsetX,\n style.shadowOffsetY,\n style.shadowBlur\n );\n // Background color & Shadow\n if (hasBG) {\n ctx.fillStyle = style.backgroundColor;\n if (usePath) {\n ctx.fill();\n } else {\n ctx.fillRect(frame.x, frame.y, frame.width, frame.height);\n }\n }\n\n // Border with border radius:\n if (hasBorder) {\n ctx.lineWidth = style.borderWidth;\n ctx.strokeStyle = style.borderColor;\n if (usePath) {\n ctx.stroke();\n } else {\n ctx.strokeRect(frame.x, frame.y, frame.width, frame.height);\n }\n }\n resetShadow();\n }\n }\n\n if (node.props.customDrawer) {\n node.props.customDrawer(canvas, node, { hasRadius, hasClip });\n }\n\n // Draw child layers, sorted by their z-index.\n node.children\n .slice()\n .sort(sortByZIndexAscending)\n .forEach(function drawChild(child) {\n drawNode(canvas, child, container);\n });\n}\n","import { getFrameFromNode, getMergedStyleFromNode, sortByZIndexAscending } from \"./utils\"\nimport { Node, RevasTouchEvent, RevasTouchType, RevasTouch } from \"./Node\"\n\nfunction scaled(x: number, c: number, s = 1) {\n if (!s && s === 1) return x\n return ((s - 1) * c + x) / s\n}\n\nfunction findNodeByPoint(node: Node, x: number, y: number): Node | void {\n if (node.props.pointerEvents === 'none') return\n\n const children = node.children.slice().sort(sortByZIndexAscending).reverse()\n const style = getMergedStyleFromNode(node)\n const frame = getFrameFromNode(node)\n\n // tranlate\n const scaleX = style.scaleX || style.scale\n const scaleY = style.scaleY || style.scale\n const originX = frame.width / 2 + frame.x\n const originY = frame.height / 2 + frame.y\n\n x -= style.translateX || 0\n y -= style.translateY || 0\n x = scaled(x, originX, scaleX)\n y = scaled(y, originY, scaleY)\n\n if (frame.x < x && frame.y < y\n && x <= frame.x + frame.width\n && y <= frame.y + frame.height) {\n\n for (let i = 0; i < children.length; i++) {\n const target = findNodeByPoint(children[i], x, y)\n if (target) return target\n }\n\n if (node.props.pointerEvents === 'box-none') return\n\n return node\n }\n}\n\nconst eventNodeHolder: { [key: number]: Node } = {}\n\nexport function getNodeByTouch(root: Node, type: RevasTouchType, touch: RevasTouch) {\n if (type === 'touchstart') {\n const target = findNodeByPoint(root, touch.x, touch.y)\n eventNodeHolder[touch.identifier] = target || root\n return eventNodeHolder[touch.identifier]\n } else if (type === 'touchmove') {\n return eventNodeHolder[touch.identifier] || root\n } else if (type === 'touchend') {\n const target = eventNodeHolder[touch.identifier]\n delete eventNodeHolder[touch.identifier]\n return target || root\n }\n return root\n}\n\nconst LISTENER_MAP = {\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onTouchEnd'\n}\n\n\nexport function emitTouch(node: Node | void, e: RevasTouchEvent) {\n const funcName = LISTENER_MAP[e.type]\n if (funcName) {\n while (node) {\n if (node.props[funcName]\n && node.props.pointerEvents !== 'box-none'\n && node.props[funcName](e) === false) return\n node = node.parent\n }\n }\n}","import { Node, RevasTouchEvent } from './Node';\nimport { updateLayout } from './yoga-layout';\nimport { drawNode } from './draw';\nimport { getNodeByTouch, emitTouch } from './touch';\nimport { RevasCanvas } from './Canvas';\nimport { AppContextType } from '../components/Context';\n\nexport class Container {\n private _ready = true; // Now always ready since Yoga is sync\n private _next = false;\n private _reflow = false;\n private _root?: Node<AppContextType>;\n\n get canvas(): RevasCanvas | void {\n return this._root?.props.canvas;\n }\n\n get width() {\n return this._root?.props.clientWidth || 0;\n }\n\n get height() {\n return this._root?.props.clientHeight || 0;\n }\n\n get scale() {\n return this._root?.props.deviceRatio || 1;\n }\n\n public setRoot(root?: Node<AppContextType>) {\n this._root = root;\n }\n\n public handleTouch = (evt: RevasTouchEvent) => {\n const { _root } = this;\n if (_root) {\n const emitted = new WeakSet<Node>();\n Object.values(evt.touches).forEach((touch) => {\n const node = getNodeByTouch(_root, evt.type, touch);\n // check if node is unmounted\n if (node.parent && !emitted.has(node)) {\n emitted.add(node);\n emitTouch(node, evt);\n }\n });\n }\n };\n\n public draw = (reflow = false) => {\n this._reflow = this._reflow || reflow;\n if (!this._ready) {\n this._next = true;\n return;\n }\n this._ready = false;\n const { _root, canvas } = this;\n if (canvas) {\n // if not unmounted\n if (this._reflow) {\n updateLayout(_root!)();\n this._reflow = false;\n }\n canvas.context.clearRect(0, 0, this.width, this.height);\n drawNode(canvas, _root!, this);\n requestAnimationFrame(this.ready);\n }\n };\n\n private ready = () => {\n this._ready = true;\n if (this._next) {\n this._next = false;\n this.draw();\n }\n };\n}\n","export class RevasCanvas {\n public readonly transform: Transform;\n constructor(context: CanvasRenderingContext2D) {\n this.transform = new Transform(context);\n }\n\n get context() {\n return this.transform.context;\n }\n\n get element() {\n return this.context.canvas;\n }\n}\n\nexport class Transform {\n _stack: DOMMatrix[] = [];\n\n _canGetTransform = false;\n\n constructor(public readonly context: CanvasRenderingContext2D) {\n this._canGetTransform = Boolean(context.getTransform);\n }\n\n save() {\n if (this._canGetTransform) {\n this._stack.push(this.context.getTransform());\n } else {\n this.context.save();\n }\n }\n\n restore() {\n if (this._canGetTransform) {\n if (this._stack.length > 0) {\n this.context.setTransform(this._stack.pop());\n }\n } else {\n this.context.restore();\n }\n }\n\n translate(x: number, y: number) {\n this.context.translate(x, y);\n }\n\n rotate(rad: number) {\n this.context.rotate(rad);\n }\n\n scale(sx: number, sy: number) {\n this.context.scale(sx, sy);\n }\n}\n"]}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import * as react_reconciler from 'react-reconciler';
|
|
4
|
+
|
|
5
|
+
declare class Frame {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
constructor(x?: number, y?: number, width?: number, height?: number);
|
|
11
|
+
}
|
|
12
|
+
declare class Node<T = any> {
|
|
13
|
+
readonly type: string;
|
|
14
|
+
props: NodeProps & T;
|
|
15
|
+
readonly children: Node[];
|
|
16
|
+
frame: Frame;
|
|
17
|
+
parent?: Node;
|
|
18
|
+
constructor(type: string, props: NodeProps & T);
|
|
19
|
+
get $ready(): boolean;
|
|
20
|
+
}
|
|
21
|
+
interface RevasTouch {
|
|
22
|
+
identifier: number;
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
}
|
|
26
|
+
type RevasTouchType = 'touchstart' | 'touchmove' | 'touchend';
|
|
27
|
+
interface RevasTouchEvent {
|
|
28
|
+
type: RevasTouchType;
|
|
29
|
+
touches: {
|
|
30
|
+
[key: string]: RevasTouch;
|
|
31
|
+
};
|
|
32
|
+
timestamp: number;
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}
|
|
35
|
+
type RevasTouchEventListener = (event: RevasTouchEvent) => any;
|
|
36
|
+
interface BaseProps {
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
style?: any | any[];
|
|
39
|
+
cache?: string | boolean;
|
|
40
|
+
forceCache?: boolean;
|
|
41
|
+
}
|
|
42
|
+
interface NodeProps extends BaseProps {
|
|
43
|
+
onTouchStart?: RevasTouchEventListener;
|
|
44
|
+
onTouchMove?: RevasTouchEventListener;
|
|
45
|
+
onTouchEnd?: RevasTouchEventListener;
|
|
46
|
+
onLayout?: (frame: Frame) => any;
|
|
47
|
+
pointerEvents?: 'auto' | 'none' | 'box-none';
|
|
48
|
+
$ready?: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
declare function View(props: NodeProps): React.ReactElement<NodeProps, string | React.JSXElementConstructor<any>>;
|
|
52
|
+
|
|
53
|
+
declare class RevasCanvas {
|
|
54
|
+
readonly transform: Transform;
|
|
55
|
+
constructor(context: CanvasRenderingContext2D);
|
|
56
|
+
get context(): CanvasRenderingContext2D;
|
|
57
|
+
get element(): HTMLCanvasElement;
|
|
58
|
+
}
|
|
59
|
+
declare class Transform {
|
|
60
|
+
readonly context: CanvasRenderingContext2D;
|
|
61
|
+
_stack: DOMMatrix[];
|
|
62
|
+
_canGetTransform: boolean;
|
|
63
|
+
constructor(context: CanvasRenderingContext2D);
|
|
64
|
+
save(): void;
|
|
65
|
+
restore(): void;
|
|
66
|
+
translate(x: number, y: number): void;
|
|
67
|
+
rotate(rad: number): void;
|
|
68
|
+
scale(sx: number, sy: number): void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface DrawTextOptions {
|
|
72
|
+
textStyle: any;
|
|
73
|
+
numberOfLines: number;
|
|
74
|
+
frame: Frame;
|
|
75
|
+
content: string;
|
|
76
|
+
}
|
|
77
|
+
type MeasureLine = {
|
|
78
|
+
width: number;
|
|
79
|
+
text: string;
|
|
80
|
+
};
|
|
81
|
+
type MeasureResult = [MeasureLine[], number];
|
|
82
|
+
|
|
83
|
+
type TextProps = {
|
|
84
|
+
numberOfLines?: number;
|
|
85
|
+
} & NodeProps;
|
|
86
|
+
declare class Text extends React.Component<TextProps> {
|
|
87
|
+
state: {
|
|
88
|
+
height: number;
|
|
89
|
+
};
|
|
90
|
+
_measured: MeasureResult;
|
|
91
|
+
_drawed?: DrawTextOptions;
|
|
92
|
+
drawText: (canvas: RevasCanvas, node: Node) => void;
|
|
93
|
+
render(): React.DOMElement<any, Element>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
declare function drawImage(canvas: RevasCanvas, node: Node, flags: any): void;
|
|
97
|
+
|
|
98
|
+
type ImageViewProps = {
|
|
99
|
+
src: string;
|
|
100
|
+
} & NodeProps;
|
|
101
|
+
declare function ImageView(props: ImageViewProps): React.ReactElement<{
|
|
102
|
+
style: any[];
|
|
103
|
+
$ready: boolean;
|
|
104
|
+
src: string;
|
|
105
|
+
onTouchStart?: RevasTouchEventListener;
|
|
106
|
+
onTouchMove?: RevasTouchEventListener;
|
|
107
|
+
onTouchEnd?: RevasTouchEventListener;
|
|
108
|
+
onLayout?: (frame: Frame) => any;
|
|
109
|
+
pointerEvents?: "auto" | "none" | "box-none";
|
|
110
|
+
children?: React.ReactNode;
|
|
111
|
+
cache?: string | boolean;
|
|
112
|
+
forceCache?: boolean;
|
|
113
|
+
customDrawer: typeof drawImage | undefined;
|
|
114
|
+
}, string | React.JSXElementConstructor<any>>;
|
|
115
|
+
|
|
116
|
+
declare abstract class AnimatedNode {
|
|
117
|
+
abstract getValue(observer?: Function): number;
|
|
118
|
+
interpolate(inRange: number[], outRange: number[], ease?: (t: number) => number): AnimatedInterpolate;
|
|
119
|
+
}
|
|
120
|
+
declare class AnimatedValue extends AnimatedNode {
|
|
121
|
+
private _value;
|
|
122
|
+
private _observer?;
|
|
123
|
+
constructor(_value: number);
|
|
124
|
+
setValue(value: number): void;
|
|
125
|
+
getValue(observer?: Function): number;
|
|
126
|
+
}
|
|
127
|
+
declare class AnimatedInterpolate extends AnimatedNode {
|
|
128
|
+
private source;
|
|
129
|
+
private inRange;
|
|
130
|
+
private outRange;
|
|
131
|
+
private ease;
|
|
132
|
+
constructor(source: AnimatedNode, inRange: number[], outRange: number[], ease: (t: number) => number);
|
|
133
|
+
getValue(observer?: Function): number;
|
|
134
|
+
}
|
|
135
|
+
type TimingConfig = {
|
|
136
|
+
to: number;
|
|
137
|
+
duration: number;
|
|
138
|
+
ease?: (t: number) => number;
|
|
139
|
+
};
|
|
140
|
+
declare class AnimatedTiming {
|
|
141
|
+
private value;
|
|
142
|
+
private config;
|
|
143
|
+
private _startTime;
|
|
144
|
+
private _startValue;
|
|
145
|
+
private _onEnd?;
|
|
146
|
+
private _next;
|
|
147
|
+
constructor(value: AnimatedValue, config: TimingConfig);
|
|
148
|
+
private get _ease();
|
|
149
|
+
start(onEnd?: Function): this;
|
|
150
|
+
stop(): this;
|
|
151
|
+
promise(): Promise<unknown>;
|
|
152
|
+
private _loop;
|
|
153
|
+
}
|
|
154
|
+
declare function timing(value: AnimatedValue, config: TimingConfig): AnimatedTiming;
|
|
155
|
+
declare const Easing: {
|
|
156
|
+
linear(t: number): number;
|
|
157
|
+
ease(t: number): number;
|
|
158
|
+
/**
|
|
159
|
+
* Runs an easing function forwards.
|
|
160
|
+
*/
|
|
161
|
+
in(easing?: (t: number) => number): (t: number) => number;
|
|
162
|
+
/**
|
|
163
|
+
* Runs an easing function backwards.
|
|
164
|
+
*/
|
|
165
|
+
out(easing?: (t: number) => number): (t: number) => number;
|
|
166
|
+
/**
|
|
167
|
+
* Makes any easing function symmetrical. The easing function will run
|
|
168
|
+
* forwards for half of the duration, then backwards for the rest of the
|
|
169
|
+
* duration.
|
|
170
|
+
*/
|
|
171
|
+
inOut(easing?: (t: number) => number): (t: number) => number;
|
|
172
|
+
bounce(t: number): number;
|
|
173
|
+
elastic(bounciness?: number): (t: number) => number;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
type TouchableProps = {
|
|
177
|
+
onPress: Function;
|
|
178
|
+
onPressIn?: Function;
|
|
179
|
+
onPressOut?: Function;
|
|
180
|
+
activeOpacity?: number;
|
|
181
|
+
} & BaseProps;
|
|
182
|
+
declare class Touchable extends React.Component<TouchableProps> {
|
|
183
|
+
static defaultProps: {
|
|
184
|
+
activeOpacity: number;
|
|
185
|
+
};
|
|
186
|
+
_style: {
|
|
187
|
+
opacity: AnimatedValue;
|
|
188
|
+
animated: boolean;
|
|
189
|
+
};
|
|
190
|
+
private _start?;
|
|
191
|
+
private _tid;
|
|
192
|
+
private _onTouchStart;
|
|
193
|
+
private _onTouchEnd;
|
|
194
|
+
render(): React.ReactElement<{
|
|
195
|
+
style: any[];
|
|
196
|
+
onPress: Function;
|
|
197
|
+
onPressIn?: Function;
|
|
198
|
+
onPressOut?: Function;
|
|
199
|
+
activeOpacity?: number;
|
|
200
|
+
children?: React.ReactNode;
|
|
201
|
+
cache?: string | boolean;
|
|
202
|
+
forceCache?: boolean;
|
|
203
|
+
onTouchStart: (e: RevasTouchEvent) => void;
|
|
204
|
+
onTouchEnd: (e: RevasTouchEvent) => void;
|
|
205
|
+
}, string | React.JSXElementConstructor<any>>;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
type RevasScrollEventType = 'start' | 'scroll' | 'end' | 'none';
|
|
209
|
+
interface RevasScrollEvent {
|
|
210
|
+
type: RevasScrollEventType;
|
|
211
|
+
x: number;
|
|
212
|
+
y: number;
|
|
213
|
+
vx: number;
|
|
214
|
+
vy: number;
|
|
215
|
+
timestamp: number;
|
|
216
|
+
tid: string;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
type ScrollViewOffset = {
|
|
220
|
+
x?: number;
|
|
221
|
+
y?: number;
|
|
222
|
+
};
|
|
223
|
+
type ScrollViewProps = {
|
|
224
|
+
horizontal?: boolean;
|
|
225
|
+
onScroll?: (e: RevasScrollEvent) => any;
|
|
226
|
+
onScrollStart?: (e: RevasScrollEvent) => any;
|
|
227
|
+
onScrollEnd?: (e: RevasScrollEvent) => any;
|
|
228
|
+
paging?: boolean | number;
|
|
229
|
+
offset?: ScrollViewOffset;
|
|
230
|
+
} & NodeProps;
|
|
231
|
+
declare class ScrollView extends React.Component<ScrollViewProps> {
|
|
232
|
+
private _height;
|
|
233
|
+
private _contentHeight;
|
|
234
|
+
private _width;
|
|
235
|
+
private _contentWidth;
|
|
236
|
+
private _innerStyle;
|
|
237
|
+
private _offset;
|
|
238
|
+
private _scroller;
|
|
239
|
+
componentWillUnmount(): void;
|
|
240
|
+
private _onLayout;
|
|
241
|
+
private _onContentLayout;
|
|
242
|
+
private _checkLayout;
|
|
243
|
+
render(): React.ReactElement<{
|
|
244
|
+
onLayout: (frame: Frame) => void;
|
|
245
|
+
onScroll?: (e: RevasScrollEvent) => any;
|
|
246
|
+
onScrollStart?: (e: RevasScrollEvent) => any;
|
|
247
|
+
onScrollEnd?: (e: RevasScrollEvent) => any;
|
|
248
|
+
paging?: boolean | number;
|
|
249
|
+
onTouchStart?: RevasTouchEventListener;
|
|
250
|
+
onTouchMove?: RevasTouchEventListener;
|
|
251
|
+
onTouchEnd?: RevasTouchEventListener;
|
|
252
|
+
pointerEvents?: "auto" | "none" | "box-none";
|
|
253
|
+
$ready?: boolean;
|
|
254
|
+
style?: any | any[];
|
|
255
|
+
cache?: string | boolean;
|
|
256
|
+
forceCache?: boolean;
|
|
257
|
+
}, string | React.JSXElementConstructor<any>>;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
type ListViewProps<T = any> = {
|
|
261
|
+
data: T[];
|
|
262
|
+
renderItem: (item: T, index: number, data: T[]) => React.ReactNode;
|
|
263
|
+
itemHeight: number;
|
|
264
|
+
} & ScrollViewProps;
|
|
265
|
+
declare class ListView extends React.Component<ListViewProps<any>> {
|
|
266
|
+
state: {
|
|
267
|
+
start: number;
|
|
268
|
+
end: number;
|
|
269
|
+
};
|
|
270
|
+
private _height;
|
|
271
|
+
componentDidMount(): void;
|
|
272
|
+
private checkVisible;
|
|
273
|
+
private _onScroll;
|
|
274
|
+
private _onLayout;
|
|
275
|
+
renderItem: (item: any, i: number) => React.FunctionComponentElement<React.FragmentProps>;
|
|
276
|
+
render(): React.CElement<ScrollViewProps, ScrollView>;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
type LinearGradientProps = {
|
|
280
|
+
start?: {
|
|
281
|
+
x: number;
|
|
282
|
+
y: number;
|
|
283
|
+
};
|
|
284
|
+
end?: {
|
|
285
|
+
x: number;
|
|
286
|
+
y: number;
|
|
287
|
+
};
|
|
288
|
+
colors: string[];
|
|
289
|
+
} & NodeProps;
|
|
290
|
+
declare function LinearGradient(props: LinearGradientProps): React.ReactElement<{
|
|
291
|
+
style: any[];
|
|
292
|
+
customDrawer: typeof drawGradient;
|
|
293
|
+
start?: {
|
|
294
|
+
x: number;
|
|
295
|
+
y: number;
|
|
296
|
+
};
|
|
297
|
+
end?: {
|
|
298
|
+
x: number;
|
|
299
|
+
y: number;
|
|
300
|
+
};
|
|
301
|
+
colors: string[];
|
|
302
|
+
onTouchStart?: RevasTouchEventListener;
|
|
303
|
+
onTouchMove?: RevasTouchEventListener;
|
|
304
|
+
onTouchEnd?: RevasTouchEventListener;
|
|
305
|
+
onLayout?: (frame: Frame) => any;
|
|
306
|
+
pointerEvents?: "auto" | "none" | "box-none";
|
|
307
|
+
$ready?: boolean;
|
|
308
|
+
children?: React.ReactNode;
|
|
309
|
+
cache?: string | boolean;
|
|
310
|
+
forceCache?: boolean;
|
|
311
|
+
}, string | React.JSXElementConstructor<any>>;
|
|
312
|
+
declare function drawGradient(canvas: RevasCanvas, node: Node): void;
|
|
313
|
+
|
|
314
|
+
interface AppContextType {
|
|
315
|
+
clientWidth: number;
|
|
316
|
+
clientHeight: number;
|
|
317
|
+
deviceRatio: number;
|
|
318
|
+
canvas?: RevasCanvas;
|
|
319
|
+
RTL?: boolean;
|
|
320
|
+
}
|
|
321
|
+
declare const AppContext: React.Context<AppContextType>;
|
|
322
|
+
declare function withContext<T>(comp: T): T;
|
|
323
|
+
declare function Root(props: AppContextType): React.FunctionComponentElement<React.ProviderProps<AppContextType>>;
|
|
324
|
+
|
|
325
|
+
declare class Container {
|
|
326
|
+
private _ready;
|
|
327
|
+
private _next;
|
|
328
|
+
private _reflow;
|
|
329
|
+
private _root?;
|
|
330
|
+
get canvas(): RevasCanvas | void;
|
|
331
|
+
get width(): number;
|
|
332
|
+
get height(): number;
|
|
333
|
+
get scale(): number;
|
|
334
|
+
setRoot(root?: Node<AppContextType>): void;
|
|
335
|
+
handleTouch: (evt: RevasTouchEvent) => void;
|
|
336
|
+
draw: (reflow?: boolean) => void;
|
|
337
|
+
private ready;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
declare const RevasReconciler: react_reconciler.Reconciler<Container, Node<any>, never, unknown, Node<any>>;
|
|
341
|
+
|
|
342
|
+
declare function noop(): any;
|
|
343
|
+
declare const EMPTY_OBJECT: any;
|
|
344
|
+
declare const EMPTY_ARRAY: any[];
|
|
345
|
+
declare function flatten(array: any[]): any[];
|
|
346
|
+
declare const now: () => number;
|
|
347
|
+
declare function applyAnimated(style: any, callback?: Function): any;
|
|
348
|
+
declare function getMergedStyleFromNode(node: Node, callback?: Function): any;
|
|
349
|
+
declare function getFrameFromNode(node: Node): Frame;
|
|
350
|
+
declare function sortByZIndexAscending(a: Node, b: Node): number;
|
|
351
|
+
declare function clamp(n: number, min: number, max: number): number;
|
|
352
|
+
declare function getChars(str: string): readonly string[];
|
|
353
|
+
declare function getWords(str: string): readonly string[];
|
|
354
|
+
declare function setShadow(canvas: RevasCanvas, color: string, x?: number, y?: number, blur?: number): () => void;
|
|
355
|
+
declare function pushOpacity(canvas: RevasCanvas, opacity: number): typeof noop;
|
|
356
|
+
type RevasAdapter = {
|
|
357
|
+
createImage: () => HTMLImageElement;
|
|
358
|
+
createOffscreenCanvas?: (width: number, height: number) => RevasCanvas;
|
|
359
|
+
resetOffscreenCanvas?: (ctx: RevasCanvas, width: number, height: number) => RevasCanvas;
|
|
360
|
+
};
|
|
361
|
+
declare const adapter: RevasAdapter;
|
|
362
|
+
|
|
363
|
+
export { AnimatedInterpolate, AnimatedNode, AnimatedTiming, AnimatedValue, AppContext, type AppContextType, type BaseProps, Container, EMPTY_ARRAY, EMPTY_OBJECT, Easing, Frame, ImageView as Image, type ImageViewProps, LinearGradient, type LinearGradientProps, ListView, type ListViewProps, Node, type NodeProps, type RevasAdapter, RevasCanvas, type RevasScrollEvent, type RevasScrollEventType, type RevasTouch, type RevasTouchEvent, type RevasTouchEventListener, type RevasTouchType, Root, ScrollView, type ScrollViewOffset, type ScrollViewProps, Text, type TextProps, type TimingConfig, Touchable, type TouchableProps, Transform, View, adapter, applyAnimated, clamp, flatten, getChars, getFrameFromNode, getMergedStyleFromNode, getWords, noop, now, pushOpacity, RevasReconciler as renderer, setShadow, sortByZIndexAscending, timing, withContext };
|