import * as scrawl from '../source/scrawl.js';
import { reportSpeed } from './utilities.js';import * as scrawl from '../source/scrawl.js';
import { reportSpeed } from './utilities.js';const canvas = scrawl.findCanvas('mycanvas');Namespacing boilerplate
const namespace = canvas.name;
const name = (n) => `${namespace}-${n}`;Get image
scrawl.importDomImage('.ohara-koson');First interaction - when user moves their mouse across the bird in its bough, wheels will spin
const spinFactory = function (namespace, radius, order, duration, clockwise) {
    const name = (n) => `${namespace}-${n}`;
    scrawl.makeGroup({
        name: name('group'),
        host: canvas.base,
        order,
    });
    const clipper = scrawl.makeWheel({
        name: name(`clip-${radius}`),
        group: name('group'),
        start: [200, 250],
        handle: ['center', 'center'],
        radius,
        method: 'clip',
        onEnter: () => !tween.isRunning() && tween.run(),
        onLeave: () => !tween.isRunning() && tween.run(),
    });
    const tween = scrawl.makeTween({
        name: name(`tween-${radius}`),
        targets: name(`clip-${radius}`),
        duration,
        definitions: [
            {
                attribute: 'roll',
                start: (clockwise) ? 0 : 360,
                end: (clockwise) ? 360 : 0,
                engine: 'easeOutIn',
            },
        ],
    });
    scrawl.makePicture({
        name: name(`hoop-${radius}`),
        group: name('group'),
        asset: 'songbird',
        pivot: name(`clip-${radius}`),
        addPivotRotation: true,
        lockTo: 'pivot',
        handle: ['center', 'center'],
        dimensions: [radius * 2, radius * 2],
        copyDimensions: [radius * 2, radius * 2],
        copyStart: [200 - radius, 250 - radius],
    });
    return clipper;
}
spinFactory(name('outer-ring'), 170, 1, '4s', true);
spinFactory(name('thin-ring'), 130, 2, '2.6s', true);
spinFactory(name('thick-ring'), 120, 3, '5.3s', false);
spinFactory(name('inner-ring'), 60, 4, '4s', true);
spinFactory(name('center'), 20, 5, '4s', false);Second interaction - when the user moves their mouse across the signature area, details about the painting will fade into view
scrawl.makeBlock({
    name: name('details-trigger'),
    start: ['5%', '70%'],
    dimensions: ['80%', '22%'],
    method: 'none',
    onEnter: () => !detailsTween.isRunning() && detailsTween.run(),
});
scrawl.makeEnhancedLabel({
    name: name('painting-details'),
    layoutTemplate: name('details-trigger'),
    fontString: '15px Arial, sans-serif',
    justifyLine: 'end',
    fillStyle: 'gray',
    globalAlpha: 0,
    order: 8,
    text: 'Songbird and flowering camellia (1910 - 1930) <span style="font-style: italic;">Ohara Koson (Japanese, 1877-1945)</span>',
});
const detailsTween = scrawl.makeTween({
    name: name('show-details'),
    targets: name('painting-details'),
    duration: 5000,
    cycles: 2,
    reverseOnCycleEnd: true,
    definitions: [
        {
            attribute: 'globalAlpha',
            start: 0,
            end: 1,
            engine: 'easeIn5',
        },
    ],
});Complete the painting by adding in the non-interactive bits
scrawl.makePicture({
    name: name('koson-songbird'),
    asset: 'songbird',
    dimensions: ['100%', '100%'],
    copyDimensions: ['100%', '100%'],
    globalCompositeOperation: 'destination-over',
    order: 10,
});Function to display frames-per-second data, and other information relevant to the demo
const report = reportSpeed('#reportmessage');Create the Display cycle animation
scrawl.makeRender({
    name: name('animation'),
    target: canvas,
    afterShow: report,
});scrawl.addListener('move', () => canvas.cascadeEventAction('move'), canvas.domElement);For this demo we will suppress touchmove functionality over the canvas
scrawl.addNativeListener('touchmove', (e) => {
    e.preventDefault();
    e.returnValue = false;
}, canvas.domElement);console.log(scrawl.library);