fuse-open / fuselibs

Fuselibs is the Uno-libraries that provide the UI framework used in Fuse apps
https://npmjs.com/package/@fuse-open/fuselibs
MIT License
176 stars 72 forks source link

Draggable Enhancement #1373

Closed ichan-mb closed 3 years ago

ichan-mb commented 3 years ago

Example of Drag & Drop:

<App>
    <JavaScript>
        var Observable = require("FuseJS/Observable");
        var dataToTransfer = new Observable("Data to transfer");
        module.exports = { dataToTransfer, dataReceived: function (args) { console.dir(args.data.value); } }
    </JavaScript>
    <ClientPanel>
        <Panel ux:Name="source" X="140" Y="80" Size="80">
            <Rectangle Layer="Background" Color="#afa" ux:Name="bg" />
            <Draggable />
            <Shadow Distance="0" Size="0" ux:Name="shadow" />
            <WhilePressed>
                <Scale Vector="1.2" Duration="0.2" />
                <Change shadow.Size="5" Duration="0.2" />
                <Change shadow.Distance="3" Duration="0.2" />
                <Change shadow.Color="#666" Duration="0.1" />
            </WhilePressed>
            <WhileDragging>
                <Change shadow.Size="10" Duration="0.1" />
                <Change shadow.Distance="6" Duration="0.1" />
                <Change shadow.Color="#333" Duration="0.1" />
                <Change source.ZOffset="2" />
            </WhileDragging>
            <WhileDraggingOver Target="dropPanel">
                <Change bg.Color="#0f0" />
                <Change bg.StrokeWidth="2" Duration="0.2" />
                <Change bg.StrokeColor="#f00" Duration="0.2" />
            </WhileDraggingOver>
            <WhileDraggingOver Target="dropPanel" Invert="True">
                <Set source.Size="80" />
            </WhileDraggingOver>
            <Dropped To="dropPanel" Data="{dataToTransfer}" TargetMissAction="Return">
                <Set source.Size="50" />
            </Dropped>
        </Panel>

        <Panel Size="80" X="80" Y="500" Color="#ccc" ux:Name="dropPanel">
            <WhileDroppingBy Source="source">
                <Change dropPanel.Color="#0ff" Duration="0.2" />
            </WhileDroppingBy>
            <Dropped By="source" Handler="{dataReceived}">
                <Scale Vector="1.2" Duration="0.2" />
            </Dropped>
        </Panel>
    </ClientPanel>
</App>

This PR contains:

ichan-mb commented 3 years ago

Hold on!, I have some refactoring to do to implement one more feature