1.1.6 • Published 3 years ago

svelte-free-transform v1.1.6

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

svelte-free-transform

A freely user-transformable container component for Svelte.

Wraps arbitrary content in a frame for users to drag, resize and rotate via handles or multi-touch gestures.

Try out a demo!

Installation

npm install --save svelte-free-transform

Usage

Wrap any components or markup in a <FreeTransform /> element. The container element should be positioned.

Set an initial position using the position prop.

<script>
  import FreeTransform from 'svelte-free-transform';

</script>

<div class="transform-area">
  <FreeTransform
    position={{
      x: 0,
      y: 0,
      w: 100,
      h: 100,
      r: 0
    }}
    handleMode="resize"
    rotatorEnabled
    rotatorBar
  >
    <content />
    <!-- override corner handle  (optional)-->
    <div slot="handle" />
    <!-- override rotation handle  (optional)-->
    <div slot="rotator" />
  </FreeTransform>
</div>

<style>
  .transform-area {
    position: relative;
  }
</style>

We can also wrap the <FreeTransform /> element in another div (for example, if we want to apply Svelte animations), and instead transform that wrapper element:

<script>
  import FreeTransform from 'svelte-free-transform';

</script>

<div class="transform-area">
  <div
    bind:this={wrapper}
    style={myPosition.style}
  >
    <FreeTransform
      bind:position={myPosition}
      target={wrapper}
      handleMode="resize"
      rotatorEnabled
      rotatorBar
    >
      <content />
    </FreeTransform>
  </div>
</div>

<style>
  .transform-area {
    position: relative;
  }
</style>

Props

PropTypePossible ValuesDefault
position{x, y, w, h, r, style }x, y, w, h = position, width and height in pixels. r = rotation in radians. style = css inline style string representing the applied transform{ x: 0, y: 0, w: 100, h: 100, r: 0 }
targetDOM Elementthe element to transformthis element
containerDOM Elementnearest positioned ancestor of the target elementimmediate parent of the target element
handleModeString'resize' or 'rotate''resize'
rotatorEnabledBooleanShow a separate handle for rotation?false
rotatorBarBooleanDraw a line from the rotation handle to the frame?false
lockAspectBooleanKeep a fixed aspect ratio?false
lockTouchResizeBooleanAllow resizing via multitouch gesture?false

Styling

Style the frame border by overriding the --frameBorder CSS variable:

<style>
  .transform-area {
    --frameBorder: 1px solid lime;
  }
</style>

License

MIT

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago