@kurocado-studio/systemhaus-motion-react 1.0.0-develop.1 → 1.0.0-develop.2

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/dist/exports.js CHANGED
@@ -1 +1 @@
1
- import{get as z}from"lodash-es";var B=Symbol("ThemeProvider");var p="@kurocado:color-scheme",w="ph ph-moon-stars",x="ph ph-sun";var s=(function(r){return r.DARK="dark",r.LIGHT="light",r.SYSTEM="system",r})(s||{});function h(){return globalThis.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function T(){var r;return(r=localStorage.getItem(p))!==null&&r!==void 0?r:void 0}function _(r){var o=document.documentElement,e=s.DARK;r===e?o.classList.add(e):o.classList.remove(e)}function y(){var r=T();return r==="system"||!r?h():r}function k(r){localStorage.setItem(p,r),_(r==="system"?h():r)}function V(){var r=y(),o=r==="dark"?"light":"dark";return k(o),o}function A(){return y()==="dark"}var c={getStoredTheme:T,getSystemTheme:h,resolveEffectiveTheme:y,applyTheme:_,setTheme:k,toggleTheme:V,isDarkMode:A};import{useEffect as D,useState as I}from"react";function Y(){let[r,o]=I(()=>globalThis.window===void 0?s.LIGHT:c.resolveEffectiveTheme());D(()=>{if(globalThis.window===void 0)return;c.applyTheme(r);let n=globalThis.matchMedia("(prefers-color-scheme: dark)"),l=()=>{let i=c.getStoredTheme();if(i===s.SYSTEM||!i){let v=c.getSystemTheme();c.applyTheme(v),o(v)}};return n.addEventListener("change",l),()=>{n.removeEventListener("change",l)}},[r]);let e=()=>{let n=c.toggleTheme();o(n)},t=n=>{c.setTheme(n),o(c.resolveEffectiveTheme())},a=r===s.DARK?w:x;return{isDark:r===s.DARK,theme:r,toggle:e,iconSettings:a,setTheme:t}}import{get as M}from"lodash-es";function G(r,o,e,t){var a=r.getBoundingClientRect(),m=a.left+a.width/2,n=a.top+a.height/2,l=o-m,i=e-n,v=t.magneticModeActivationRadius,d=M(t,["maxDistance"],3e3),u=M(t,["intensity"],.1);if(globalThis.matchMedia("(prefers-reduced-motion: reduce)").matches)return{x:0,y:0};if(typeof v=="number"){var f=Math.hypot(Math.pow(l,2)+Math.pow(i,2));if(f>d)return{x:0,y:0};var g=0;return f<v&&(g=1-f/v),{x:l*g*u,y:i*g*u}}if(Math.abs(l)<d&&Math.abs(i)<d){var b=1-Math.max(Math.abs(l),Math.abs(i))/d;return{x:l*b*u,y:i*b*u}}return{x:0,y:0}}import{useMotionValue as E,useSpring as S}from"framer-motion";import{get as C}from"lodash-es";import{useEffect as O,useState as R}from"react";function $(r){let o=C(r,["damping"],100),e=C(r,["stiffness"],600),t=E(0),a=E(0),[m,n]=R(),l=S(t,{damping:o,stiffness:e}),i=S(a,{damping:o,stiffness:e});return O(()=>{let v=d=>{if(!m)return;let{x:u,y:f}=G(m,d.clientX,d.clientY,r);t.set(u),a.set(f)};return document.addEventListener("mousemove",v),()=>document.removeEventListener("mousemove",v)},[m,r,t,a]),{ref:n,x:l,y:i}}export{s as ThemeEnum,$ as useCursorFollow,Y as useDarkMode};
1
+ import{get as I}from"lodash-es";function A(r,o,i,n){var e=r.getBoundingClientRect(),t=e.left+e.width/2,s=e.top+e.height/2,a=o-t,m=i-s,p=n.magneticModeActivationRadius,c=I(n,["maxDistance"],3e3),f=I(n,["intensity"],.1);if(globalThis.matchMedia("(prefers-reduced-motion: reduce)").matches)return{x:0,y:0};if(typeof p=="number"){var u=Math.hypot(Math.pow(a,2)+Math.pow(m,2));if(u>c)return{x:0,y:0};var M=0;return u<p&&(M=1-u/p),{x:a*M*f,y:m*M*f}}if(Math.abs(a)<c&&Math.abs(m)<c){var C=1-Math.max(Math.abs(a),Math.abs(m))/c;return{x:a*C*f,y:m*C*f}}return{x:0,y:0}}var b=.4;var L="easeInOut",d=12;var w=12,v={isStatic:!1,fadeInSpeed:w,fadeDistance:d,transition:{duration:b,ease:L},reducedMotion:"user"};import{get as D}from"lodash-es";import O,{createContext as U,useContext as V,useMemo as B}from"react";var y=(e=>(e.TOP="TOP",e.BOTTOM="BOTTOM",e.LEFT="LEFT",e.RIGHT="RIGHT",e))(y||{});import{useMotionValue as x,useSpring as P,MotionConfig as h,AnimatePresence as F,motion as T}from"framer-motion";var l={...v,fadeInDirection:"TOP",fadeInDistance:d,viewport:{once:!1,amount:.2}},S=U(l),oe=({children:r,motionOverrides:o})=>{let i=B(()=>({...v,...o,viewport:D(o,["viewport"],l.viewport),fadeInDistance:D(o,["fadeInDistance"],l.fadeInDistance),fadeInDirection:D(o,["fadeInDirection"],l.fadeInDirection)}),[o]);return O.createElement(S.Provider,{value:i},O.createElement(h,{...i},r))},_=()=>V(S);import{get as g}from"lodash-es";import{useEffect as G,useState as X}from"react";function me(r){let o=g(r,["damping"],100),i=g(r,["stiffness"],600),n=x(0),e=x(0),[t,s]=X(),a=P(n,{damping:o,stiffness:i}),m=P(e,{damping:o,stiffness:i});return G(()=>{let p=c=>{if(!t)return;let{x:f,y:u}=A(t,c.clientX,c.clientY,r);n.set(f),e.set(u)};return document.addEventListener("mousemove",p),()=>document.removeEventListener("mousemove",p)},[t,r,n,e]),{ref:s,x:a,y:m}}import{get as E}from"lodash-es";var R=({onEnterDirection:r,onExitDirection:o}={})=>{let{viewport:i,transition:n,...e}=_(),t=Math.abs(E(e,["fadeInDistance"],d)),s={TOP:{hidden:{opacity:0,y:-t},visible:{opacity:1,y:0},exit:{opacity:0,y:-t}},BOTTOM:{hidden:{opacity:0,y:t},visible:{opacity:1,y:0},exit:{opacity:0,y:t}},LEFT:{hidden:{opacity:0,x:-t},visible:{opacity:1,x:0},exit:{opacity:0,x:-t}},RIGHT:{hidden:{opacity:0,x:t},visible:{opacity:1,x:0},exit:{opacity:0,x:t}}},a=E(s,[o??"BOTTOM","exit"],s.BOTTOM.exit);return{initial:"hidden",animate:"visible",exit:"exit",variants:{...E(s,[r??"TOP"],s.TOP),exit:a},transition:n,viewport:i}};import{get as q}from"lodash-es";import N from"react";import{cloneDeep as Y,merge as k}from"lodash-es";function H(...r){let o=r.map(i=>Y(i));return k({},...o)}function Ee(r){let{as:o,isVisible:i,onExitDirection:n,onEnterDirection:e,...t}=r,s=R({onEnterDirection:e,onExitDirection:n}),a=typeof i=="boolean"?i:!0,m=t;(n||e)&&(m=H(t,s));let p=q(T,[o??"div"],T.div);return N.createElement(F,null,a&&N.createElement(p,{...m}))}export{y as DirectionEnum,oe as MotionProvider,Ee as PolymorphicMotionElement,H as mergeMotionProperties,l as systemHausMotionConfiguration,me as useCursorFollow,R as useFadeIn,_ as useSystemHausMotionProvider};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
- import * as framer_motion from 'framer-motion';
2
- import * as react from 'react';
1
+ import * as Motion from 'framer-motion';
2
+ import { MotionProps } from 'framer-motion';
3
+ import { MotionProps as MotionProps_2 } from 'motion/react';
4
+ import * as React_2 from 'react';
5
+ import React__default from 'react';
6
+ import { ViewportOptions } from 'framer-motion';
3
7
 
4
8
  declare type CalculateCursorOffsetController = CursorFollowSettings;
5
9
 
@@ -11,26 +15,59 @@ declare interface CursorFollowSettings {
11
15
  magneticModeActivationRadius?: number;
12
16
  }
13
17
 
14
- export declare interface DarkModeController {
15
- isDark: boolean;
16
- theme: ThemeEnum;
17
- toggle: () => void;
18
- iconSettings: string;
19
- setTheme: (newTheme: ThemeEnum) => void;
18
+ export declare enum DirectionEnum {
19
+ TOP = "TOP",
20
+ BOTTOM = "BOTTOM",
21
+ LEFT = "LEFT",
22
+ RIGHT = "RIGHT"
20
23
  }
21
24
 
22
- export declare enum ThemeEnum {
23
- DARK = "dark",
24
- LIGHT = "light",
25
- SYSTEM = "system"
25
+ export declare function mergeMotionProperties(...motionProperties: MotionProps_2[]): MotionProps_2;
26
+
27
+ export declare const MotionProvider: React__default.FC<SystemHausMotionProviderProperties>;
28
+
29
+ export declare function PolymorphicMotionElement<T extends keyof React__default.JSX.IntrinsicElements = 'div'>(properties: React__default.PropsWithChildren<PolymorphicMotionProperties<T>>): React__default.ReactNode;
30
+
31
+ export declare type PolymorphicMotionProperties<T extends keyof React__default.JSX.IntrinsicElements = 'div'> = Omit<React__default.JSX.IntrinsicElements[T], keyof MotionProps | 'ref'> & MotionProps & UseFadeInProperties & {
32
+ as?: T;
33
+ isVisible?: boolean;
34
+ };
35
+
36
+ declare type ProvidedConfig = {
37
+ fadeInSpeed: number;
38
+ fadeDistance: number;
39
+ };
40
+
41
+ export declare const systemHausMotionConfiguration: SystemHausMotionProvider;
42
+
43
+ export declare interface SystemHausMotionProvider extends SystemHausMotionProviderConfig {
44
+ fadeInDistance: number;
45
+ fadeInDirection: DirectionEnum;
46
+ viewport: ViewportOptions;
47
+ }
48
+
49
+ declare type SystemHausMotionProviderConfig = ProvidedConfig & {
50
+ [K in keyof Motion.MotionConfigProps as Motion.MotionConfigProps[K] extends (...unknowns: unknown[]) => unknown ? never : K]: Motion.MotionConfigProps[K];
51
+ };
52
+
53
+ declare interface SystemHausMotionProviderProperties {
54
+ children?: React__default.ReactNode;
55
+ motionOverrides?: Partial<SystemHausMotionProvider>;
26
56
  }
27
57
 
28
58
  export declare function useCursorFollow(settings: CalculateCursorOffsetController): {
29
- ref: react.Dispatch<react.SetStateAction<HTMLDivElement | undefined>>;
30
- x: framer_motion.MotionValue<number>;
31
- y: framer_motion.MotionValue<number>;
59
+ ref: React_2.Dispatch<React_2.SetStateAction<HTMLDivElement | undefined>>;
60
+ x: Motion.MotionValue<number>;
61
+ y: Motion.MotionValue<number>;
32
62
  };
33
63
 
34
- export declare function useDarkMode(): DarkModeController;
64
+ export declare const useFadeIn: ({ onEnterDirection, onExitDirection, }?: UseFadeInProperties) => PolymorphicMotionProperties;
65
+
66
+ export declare interface UseFadeInProperties {
67
+ onEnterDirection?: DirectionEnum;
68
+ onExitDirection?: DirectionEnum;
69
+ }
70
+
71
+ export declare const useSystemHausMotionProvider: () => SystemHausMotionProvider;
35
72
 
36
73
  export { }
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.53.1"
8
+ "packageVersion": "7.53.3"
9
9
  }
10
10
  ]
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kurocado-studio/systemhaus-motion-react",
3
- "version": "1.0.0-develop.1",
3
+ "version": "1.0.0-develop.2",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -28,13 +28,10 @@
28
28
  ],
29
29
  "scripts": {
30
30
  "build:typings": "api-extractor run --local",
31
- "build": "rm -rf dist && tsup && pnpm build:typings && rm -rf dist/exports.d.ts",
31
+ "build": "tsup && pnpm build:typings && rm -rf dist/exports.d.ts",
32
32
  "prepublishOnly": "node ../../scripts/strip-workspaces.js .",
33
33
  "clean": "rm -rf .turbo node_modules dist",
34
34
  "dev": "tsup --watch",
35
- "dev:vite": "vite build --watch --mode development",
36
- "vite:watch": "vite build --watch --mode development",
37
- "build:vite": "rm -rf dist && vite build --mode production",
38
35
  "lint": "eslint --max-warnings=0 --no-warn-ignored",
39
36
  "lint:fix": "eslint --max-warnings=0 --fix --no-warn-ignored",
40
37
  "prettier:fix": "prettier --write . --ignore-path ../../.prettierignore",
@@ -42,10 +39,8 @@
42
39
  "typecheck": "tsc --noEmit --pretty"
43
40
  },
44
41
  "dependencies": {
45
- "@emotion/is-prop-valid": "^1.3.1",
46
- "framer-motion": "^12.23.6",
42
+ "framer-motion": "^12.23.24",
47
43
  "lodash-es": "^4.17.21",
48
- "motion": "^12.11.0",
49
44
  "react": "19"
50
45
  },
51
46
  "devDependencies": {
@@ -57,17 +52,11 @@
57
52
  "@types/node": "^22.15.19",
58
53
  "@types/react": "^19.1.10",
59
54
  "@types/react-dom": "^19.1.4",
60
- "@vitejs/plugin-react": "^4.4.1",
61
55
  "@vitest/coverage-v8": "^3.1.3",
62
- "copyfiles": "^2.4.1",
63
56
  "eslint": "^9.28.0",
64
57
  "prettier": "3.5.3",
65
58
  "tsup": "^8.5.0",
66
59
  "typescript": "5.8.3",
67
- "vite": "^5.2.8",
68
- "vite-node": "3.2.4",
69
- "vite-plugin-dts": "^4.5.3",
70
- "vite-tsconfig-paths": "^5.1.4",
71
60
  "vitest": "^3.1.3"
72
61
  }
73
62
  }