@jojovms/tilt-card-core 0.0.1
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 +28 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.mjs +58 -0
- package/dist/index.umd.js +6 -0
- package/dist/tilt.d.ts +20 -0
- package/package.json +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @jojovms/tilt-card-core
|
|
2
|
+
|
|
3
|
+
A premium 3D tilt effect library for your UI.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
```bash
|
|
7
|
+
npm install @jojovms/tilt-card-core
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
```javascript
|
|
12
|
+
import { Tiltō } from '@jojovms/tilt-card-core';
|
|
13
|
+
|
|
14
|
+
new Tiltō('#my-card', {
|
|
15
|
+
max: 15,
|
|
16
|
+
scale: 1.05,
|
|
17
|
+
glare: true
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
| Option | Type | Default | Description |
|
|
23
|
+
|--------|------|---------|-------------|
|
|
24
|
+
| `max` | number | 15 | Max tilt rotation (deg) |
|
|
25
|
+
| `perspective` | number | 1000 | Transform perspective |
|
|
26
|
+
| `scale` | number | 1.05 | Element scale on hover |
|
|
27
|
+
| `glare` | boolean | false | Enable glare effect |
|
|
28
|
+
| `glareMaxOpacity` | number | 0.5 | Max opacity of glare |
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";var g=Object.defineProperty;var y=(i,e,t)=>e in i?g(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var s=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class u{constructor(e,t={}){s(this,"element");s(this,"options");s(this,"glareElement",null);s(this,"bounds",null);s(this,"onMouseEnter",()=>{var e;this.bounds=this.element.getBoundingClientRect(),this.element.style.transition="none",(e=this.glareElement)!=null&&e.firstChild&&(this.glareElement.firstChild.style.transition="opacity 100ms")});s(this,"onMouseMove",e=>{var r;if(!this.bounds)return;const t=e.clientX-this.bounds.left,h=e.clientY-this.bounds.top,n=t/this.bounds.width,l=h/this.bounds.height,o=this.options.max||15,m=(.5-l)*o*2,d=(n-.5)*o*2;if(this.element.style.transform=`
|
|
2
|
+
perspective(${this.options.perspective}px)
|
|
3
|
+
rotateX(${m}deg)
|
|
4
|
+
rotateY(${d}deg)
|
|
5
|
+
scale3d(${this.options.scale}, ${this.options.scale}, ${this.options.scale})
|
|
6
|
+
`,this.options.glare&&((r=this.glareElement)!=null&&r.firstChild)){const a=this.glareElement.firstChild,p=Math.atan2(e.clientX-(this.bounds.left+this.bounds.width/2),-(e.clientY-(this.bounds.top+this.bounds.height/2)))*(180/Math.PI),c=Math.sqrt(Math.pow(n-.5,2)+Math.pow(l-.5,2))*2;a.style.transform=`translate(-50%, -50%) rotate(${p}deg)`,a.style.opacity=(c*(this.options.glareMaxOpacity||.5)).toString()}});s(this,"onMouseLeave",()=>{var e;if(this.element.style.transition="transform 300ms ease-out",this.element.style.transform=`perspective(${this.options.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`,this.options.glare&&((e=this.glareElement)!=null&&e.firstChild)){const t=this.glareElement.firstChild;t.style.opacity="0",t.style.transition="opacity 300ms"}});this.element=typeof e=="string"?document.querySelector(e):e,this.options={max:15,perspective:1e3,scale:1.05,glare:!1,glareMaxOpacity:.5,...t},this.element&&this.init()}init(){this.element.style.transformStyle="preserve-3d",this.element.style.transform=`perspective(${this.options.perspective}px)`,this.options.glare&&this.addGlare(),this.element.addEventListener("mouseenter",this.onMouseEnter),this.element.addEventListener("mousemove",this.onMouseMove),this.element.addEventListener("mouseleave",this.onMouseLeave)}addGlare(){this.glareElement=document.createElement("div"),this.glareElement.style.position="absolute",this.glareElement.style.top="0",this.glareElement.style.left="0",this.glareElement.style.width="100%",this.glareElement.style.height="100%",this.glareElement.style.overflow="hidden",this.glareElement.style.pointerEvents="none",this.glareElement.style.borderRadius=getComputedStyle(this.element).borderRadius;const e=document.createElement("div");e.style.position="absolute",e.style.top="50%",e.style.left="50%",e.style.pointerEvents="none",e.style.backgroundImage="linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)",e.style.width="200%",e.style.height="200%",e.style.transform="translate(-50%, -50%) rotate(0deg)",e.style.opacity="0",e.style.transition="opacity 300ms",this.glareElement.appendChild(e),this.element.appendChild(this.glareElement)}destroy(){this.element.removeEventListener("mouseenter",this.onMouseEnter),this.element.removeEventListener("mousemove",this.onMouseMove),this.element.removeEventListener("mouseleave",this.onMouseLeave),this.glareElement&&this.glareElement.remove()}}exports.Tiltō=u;
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var g = Object.defineProperty;
|
|
2
|
+
var y = (i, e, t) => e in i ? g(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t;
|
|
3
|
+
var s = (i, e, t) => y(i, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
class v {
|
|
5
|
+
constructor(e, t = {}) {
|
|
6
|
+
s(this, "element");
|
|
7
|
+
s(this, "options");
|
|
8
|
+
s(this, "glareElement", null);
|
|
9
|
+
s(this, "bounds", null);
|
|
10
|
+
s(this, "onMouseEnter", () => {
|
|
11
|
+
var e;
|
|
12
|
+
this.bounds = this.element.getBoundingClientRect(), this.element.style.transition = "none", (e = this.glareElement) != null && e.firstChild && (this.glareElement.firstChild.style.transition = "opacity 100ms");
|
|
13
|
+
});
|
|
14
|
+
s(this, "onMouseMove", (e) => {
|
|
15
|
+
var r;
|
|
16
|
+
if (!this.bounds) return;
|
|
17
|
+
const t = e.clientX - this.bounds.left, h = e.clientY - this.bounds.top, n = t / this.bounds.width, l = h / this.bounds.height, o = this.options.max || 15, m = (0.5 - l) * o * 2, d = (n - 0.5) * o * 2;
|
|
18
|
+
if (this.element.style.transform = `
|
|
19
|
+
perspective(${this.options.perspective}px)
|
|
20
|
+
rotateX(${m}deg)
|
|
21
|
+
rotateY(${d}deg)
|
|
22
|
+
scale3d(${this.options.scale}, ${this.options.scale}, ${this.options.scale})
|
|
23
|
+
`, this.options.glare && ((r = this.glareElement) != null && r.firstChild)) {
|
|
24
|
+
const a = this.glareElement.firstChild, p = Math.atan2(e.clientX - (this.bounds.left + this.bounds.width / 2), -(e.clientY - (this.bounds.top + this.bounds.height / 2))) * (180 / Math.PI), c = Math.sqrt(Math.pow(n - 0.5, 2) + Math.pow(l - 0.5, 2)) * 2;
|
|
25
|
+
a.style.transform = `translate(-50%, -50%) rotate(${p}deg)`, a.style.opacity = (c * (this.options.glareMaxOpacity || 0.5)).toString();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
s(this, "onMouseLeave", () => {
|
|
29
|
+
var e;
|
|
30
|
+
if (this.element.style.transition = "transform 300ms ease-out", this.element.style.transform = `perspective(${this.options.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`, this.options.glare && ((e = this.glareElement) != null && e.firstChild)) {
|
|
31
|
+
const t = this.glareElement.firstChild;
|
|
32
|
+
t.style.opacity = "0", t.style.transition = "opacity 300ms";
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
this.element = typeof e == "string" ? document.querySelector(e) : e, this.options = {
|
|
36
|
+
max: 15,
|
|
37
|
+
perspective: 1e3,
|
|
38
|
+
scale: 1.05,
|
|
39
|
+
glare: !1,
|
|
40
|
+
glareMaxOpacity: 0.5,
|
|
41
|
+
...t
|
|
42
|
+
}, this.element && this.init();
|
|
43
|
+
}
|
|
44
|
+
init() {
|
|
45
|
+
this.element.style.transformStyle = "preserve-3d", this.element.style.transform = `perspective(${this.options.perspective}px)`, this.options.glare && this.addGlare(), this.element.addEventListener("mouseenter", this.onMouseEnter), this.element.addEventListener("mousemove", this.onMouseMove), this.element.addEventListener("mouseleave", this.onMouseLeave);
|
|
46
|
+
}
|
|
47
|
+
addGlare() {
|
|
48
|
+
this.glareElement = document.createElement("div"), this.glareElement.style.position = "absolute", this.glareElement.style.top = "0", this.glareElement.style.left = "0", this.glareElement.style.width = "100%", this.glareElement.style.height = "100%", this.glareElement.style.overflow = "hidden", this.glareElement.style.pointerEvents = "none", this.glareElement.style.borderRadius = getComputedStyle(this.element).borderRadius;
|
|
49
|
+
const e = document.createElement("div");
|
|
50
|
+
e.style.position = "absolute", e.style.top = "50%", e.style.left = "50%", e.style.pointerEvents = "none", e.style.backgroundImage = "linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)", e.style.width = "200%", e.style.height = "200%", e.style.transform = "translate(-50%, -50%) rotate(0deg)", e.style.opacity = "0", e.style.transition = "opacity 300ms", this.glareElement.appendChild(e), this.element.appendChild(this.glareElement);
|
|
51
|
+
}
|
|
52
|
+
destroy() {
|
|
53
|
+
this.element.removeEventListener("mouseenter", this.onMouseEnter), this.element.removeEventListener("mousemove", this.onMouseMove), this.element.removeEventListener("mouseleave", this.onMouseLeave), this.glareElement && this.glareElement.remove();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
v as Tiltō
|
|
58
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
(function(s,t){typeof exports=="object"&&typeof module<"u"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):(s=typeof globalThis<"u"?globalThis:s||self,t(s.TiltCardCore={}))})(this,function(s){"use strict";var y=Object.defineProperty;var f=(s,t,o)=>t in s?y(s,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[t]=o;var i=(s,t,o)=>f(s,typeof t!="symbol"?t+"":t,o);class t{constructor(e,n={}){i(this,"element");i(this,"options");i(this,"glareElement",null);i(this,"bounds",null);i(this,"onMouseEnter",()=>{var e;this.bounds=this.element.getBoundingClientRect(),this.element.style.transition="none",(e=this.glareElement)!=null&&e.firstChild&&(this.glareElement.firstChild.style.transition="opacity 100ms")});i(this,"onMouseMove",e=>{var h;if(!this.bounds)return;const n=e.clientX-this.bounds.left,m=e.clientY-this.bounds.top,l=n/this.bounds.width,r=m/this.bounds.height,a=this.options.max||15,p=(.5-r)*a*2,c=(l-.5)*a*2;if(this.element.style.transform=`
|
|
2
|
+
perspective(${this.options.perspective}px)
|
|
3
|
+
rotateX(${p}deg)
|
|
4
|
+
rotateY(${c}deg)
|
|
5
|
+
scale3d(${this.options.scale}, ${this.options.scale}, ${this.options.scale})
|
|
6
|
+
`,this.options.glare&&((h=this.glareElement)!=null&&h.firstChild)){const d=this.glareElement.firstChild,g=Math.atan2(e.clientX-(this.bounds.left+this.bounds.width/2),-(e.clientY-(this.bounds.top+this.bounds.height/2)))*(180/Math.PI),u=Math.sqrt(Math.pow(l-.5,2)+Math.pow(r-.5,2))*2;d.style.transform=`translate(-50%, -50%) rotate(${g}deg)`,d.style.opacity=(u*(this.options.glareMaxOpacity||.5)).toString()}});i(this,"onMouseLeave",()=>{var e;if(this.element.style.transition="transform 300ms ease-out",this.element.style.transform=`perspective(${this.options.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`,this.options.glare&&((e=this.glareElement)!=null&&e.firstChild)){const n=this.glareElement.firstChild;n.style.opacity="0",n.style.transition="opacity 300ms"}});this.element=typeof e=="string"?document.querySelector(e):e,this.options={max:15,perspective:1e3,scale:1.05,glare:!1,glareMaxOpacity:.5,...n},this.element&&this.init()}init(){this.element.style.transformStyle="preserve-3d",this.element.style.transform=`perspective(${this.options.perspective}px)`,this.options.glare&&this.addGlare(),this.element.addEventListener("mouseenter",this.onMouseEnter),this.element.addEventListener("mousemove",this.onMouseMove),this.element.addEventListener("mouseleave",this.onMouseLeave)}addGlare(){this.glareElement=document.createElement("div"),this.glareElement.style.position="absolute",this.glareElement.style.top="0",this.glareElement.style.left="0",this.glareElement.style.width="100%",this.glareElement.style.height="100%",this.glareElement.style.overflow="hidden",this.glareElement.style.pointerEvents="none",this.glareElement.style.borderRadius=getComputedStyle(this.element).borderRadius;const e=document.createElement("div");e.style.position="absolute",e.style.top="50%",e.style.left="50%",e.style.pointerEvents="none",e.style.backgroundImage="linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)",e.style.width="200%",e.style.height="200%",e.style.transform="translate(-50%, -50%) rotate(0deg)",e.style.opacity="0",e.style.transition="opacity 300ms",this.glareElement.appendChild(e),this.element.appendChild(this.glareElement)}destroy(){this.element.removeEventListener("mouseenter",this.onMouseEnter),this.element.removeEventListener("mousemove",this.onMouseMove),this.element.removeEventListener("mouseleave",this.onMouseLeave),this.glareElement&&this.glareElement.remove()}}s.Tiltō=t,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
|
package/dist/tilt.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface TiltOptions {
|
|
2
|
+
max?: number;
|
|
3
|
+
perspective?: number;
|
|
4
|
+
scale?: number;
|
|
5
|
+
glare?: boolean;
|
|
6
|
+
glareMaxOpacity?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class Tiltō {
|
|
9
|
+
private element;
|
|
10
|
+
private options;
|
|
11
|
+
private glareElement;
|
|
12
|
+
private bounds;
|
|
13
|
+
constructor(target: string | HTMLElement, options?: TiltOptions);
|
|
14
|
+
private init;
|
|
15
|
+
private addGlare;
|
|
16
|
+
private onMouseEnter;
|
|
17
|
+
private onMouseMove;
|
|
18
|
+
private onMouseLeave;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jojovms/tilt-card-core",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Tiltō: A premium 3D tilt interaction effect for your cards.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"tilto",
|
|
7
|
+
"tilt-card",
|
|
8
|
+
"3d",
|
|
9
|
+
"hover",
|
|
10
|
+
"ui",
|
|
11
|
+
"framework",
|
|
12
|
+
"jojovms"
|
|
13
|
+
],
|
|
14
|
+
"author": "Shijo Shaji (https://shijoshaji.in)",
|
|
15
|
+
"homepage": "https://shijoshaji.in",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/shijoshaji/tilt-card.git",
|
|
19
|
+
"directory": "core"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/shijoshaji/tilt-card/issues"
|
|
23
|
+
},
|
|
24
|
+
"main": "dist/index.js",
|
|
25
|
+
"module": "dist/index.mjs",
|
|
26
|
+
"types": "dist/index.d.ts",
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "vite build"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"typescript": "^5.3.3",
|
|
35
|
+
"vite": "^5.0.10",
|
|
36
|
+
"vite-plugin-dts": "^3.6.4"
|
|
37
|
+
}
|
|
38
|
+
}
|