@xanui/core 1.2.64 → 1.2.66

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.
@@ -2,27 +2,134 @@
2
2
  'use strict';
3
3
 
4
4
  var tslib = require('tslib');
5
- var jsxRuntime = require('react/jsx-runtime');
6
5
  var React = require('react');
7
- var index = require('../hooks/useTransition/index.cjs');
6
+ var variants = require('./variants.cjs');
7
+ var index$1 = require('../css/index.cjs');
8
+ var index = require('../Document/index.cjs');
9
+ var CSSCacheProvider = require('../css/CSSCacheProvider.cjs');
10
+ var useAnimation = require('../hooks/useAnimation.cjs');
11
+ var oncss = require('oncss');
8
12
 
9
- const TransitionBase = (_a) => {
10
- var { children } = _a, options = tslib.__rest(_a, ["children"]);
11
- const { props, exited } = index(options);
12
- if (exited)
13
- return null;
14
- const clone = React.Children.only(children);
15
- return React.cloneElement(clone, props);
13
+ const getVariant = (rect, variant) => {
14
+ let fn = typeof variant === 'string' ? variants[variant] : variant;
15
+ if (!fn)
16
+ throw new Error(`Transition variant "${variant}" not found.`);
17
+ return fn(rect);
16
18
  };
17
19
  function Transition(_a) {
18
20
  var { children } = _a, options = tslib.__rest(_a, ["children"]);
19
- const [mounted, setMounted] = React.useState(false);
21
+ let { disableInitialTransition = false, variant = "fade", duration = 400, delay, ease, easing, open, onOpen, onOpened, onClose, onClosed, onState } = options;
22
+ const endTimer = React.useRef(null);
23
+ const animId = React.useRef(0);
24
+ const [rect, setRect] = React.useState();
25
+ const [isDisableInitial, setIsDisableInitial] = React.useState(disableInitialTransition);
26
+ const ref = React.useRef(null);
27
+ const doc = index.useDocument();
28
+ const cacheId = CSSCacheProvider.useCSSCacheId();
29
+ let _ease = ease || useAnimation.animationEases[easing] || useAnimation.animationEases.bounce;
30
+ const style = (obj = {}) => {
31
+ return index$1.css(obj, { container: doc === null || doc === void 0 ? void 0 : doc.document, cacheId }).classname;
32
+ };
33
+ let [cls, setCls] = React.useState(() => {
34
+ let props = {};
35
+ if (!isDisableInitial || (isDisableInitial && !open)) {
36
+ props.opacity = 0;
37
+ props.pointerEvents = 'none';
38
+ }
39
+ return style(props);
40
+ });
41
+ // useEffect(() => {
42
+ // const node = ref.current
43
+ // if (!node) return
44
+ // const observer = new ResizeObserver(() => {
45
+ // const rect = node.getBoundingClientRect()
46
+ // setRect(rect)
47
+ // })
48
+ // observer.observe(node)
49
+ // return () => observer.disconnect()
50
+ // }, [])
20
51
  React.useEffect(() => {
21
- setMounted(true);
52
+ let frame;
53
+ const measure = () => {
54
+ const node = ref.current;
55
+ if (!node) {
56
+ frame = requestAnimationFrame(measure); // ⬅️ retry next frame
57
+ return;
58
+ }
59
+ const rect = node.getBoundingClientRect();
60
+ const v = getVariant(rect, variant);
61
+ if (isDisableInitial) {
62
+ setCls(style(open ? v.to : v.from));
63
+ }
64
+ else {
65
+ setCls(style(open ? v.from : v.to));
66
+ }
67
+ setRect(rect);
68
+ };
69
+ frame = requestAnimationFrame(measure);
70
+ return () => {
71
+ if (endTimer.current) {
72
+ clearTimeout(endTimer.current);
73
+ }
74
+ cancelAnimationFrame(frame);
75
+ };
22
76
  }, []);
23
- if (!mounted)
24
- return null;
25
- return jsxRuntime.jsx(TransitionBase, Object.assign({}, options, { children: children }));
77
+ React.useEffect(() => {
78
+ if (rect) {
79
+ let _duration = isDisableInitial ? 0 : duration;
80
+ let _delay = isDisableInitial ? 0 : (delay || 0);
81
+ if (isDisableInitial) {
82
+ setIsDisableInitial(false);
83
+ }
84
+ const v = getVariant(rect, variant);
85
+ let _css = open ? v.to : v.from;
86
+ let _ = Object.assign(Object.assign({}, _css), { transition: Object.keys(_css || {})
87
+ .map(k => `${oncss.formatCSSProp(k)} ${_duration}ms ${_ease} ${_delay}ms`)
88
+ .join(", "), willChange: Object.keys(_css || {})
89
+ .map(oncss.formatCSSProp)
90
+ .join(", ") });
91
+ if (open) {
92
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
93
+ onState === null || onState === void 0 ? void 0 : onState("open");
94
+ }
95
+ else {
96
+ onClose === null || onClose === void 0 ? void 0 : onClose();
97
+ onState === null || onState === void 0 ? void 0 : onState("close");
98
+ }
99
+ setCls(style(_));
100
+ if (endTimer.current) {
101
+ clearTimeout(endTimer.current);
102
+ }
103
+ animId.current++;
104
+ const id = animId.current;
105
+ endTimer.current = setTimeout(() => {
106
+ if (id !== animId.current)
107
+ return;
108
+ if (open) {
109
+ onOpened === null || onOpened === void 0 ? void 0 : onOpened();
110
+ onState === null || onState === void 0 ? void 0 : onState("opened");
111
+ }
112
+ else {
113
+ onClosed === null || onClosed === void 0 ? void 0 : onClosed();
114
+ onState === null || onState === void 0 ? void 0 : onState("closed");
115
+ }
116
+ }, _duration + _delay);
117
+ }
118
+ }, [rect, open, variant]);
119
+ const clone = React.Children.only(children);
120
+ return React.cloneElement(clone, {
121
+ className: cls,
122
+ ref: (node) => {
123
+ ref.current = node;
124
+ const childRef = clone.ref;
125
+ if (typeof childRef === "function") {
126
+ childRef(node);
127
+ }
128
+ else if (childRef) {
129
+ childRef.current = node;
130
+ }
131
+ }
132
+ });
26
133
  }
27
134
 
28
135
  module.exports = Transition;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/Transition/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { cloneElement, Children, useEffect, useState } from 'react';\nimport useTransition, { UseTransitionProps } from '../hooks/useTransition';\n\nexport type TransitionProps = UseTransitionProps & {\n children: React.ReactElement;\n}\n\nconst TransitionBase = ({ children, ...options }: TransitionProps) => {\n const { props, exited } = useTransition(options);\n if (exited) return null;\n const clone: any = Children.only(children);\n return cloneElement(clone, props);\n}\n\nfunction Transition({ children, ...options }: TransitionProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return <TransitionBase {...options} >{children}</TransitionBase>\n}\n\n\nexport default Transition"],"names":[],"mappings":";;;;;;;;AAQA;AAAwB;;AAEpB;AAAY;;AAEZ;AACJ;AAEA;AAAoB;;;;;AAOhB;AAAc;AACd;AACJ;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/Transition/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { cloneElement, Children, useState, useEffect, useRef } from 'react';\nimport * as variants from './variants'\nimport { css } from '../css';\nimport { useDocument } from '../Document';\nimport { useCSSCacheId } from '../css/CSSCacheProvider';\nimport { animationEases } from '../hooks/useAnimation';\nimport { formatCSSProp } from 'oncss';\nimport { CSSProps } from '../css/types';\n\nexport type TransitionVariantTypes = keyof typeof variants\nexport type TransitionVariant = TransitionVariantTypes | ((rect: DOMRect) => ({ from: CSSProps, to: CSSProps }))\nexport type TransitionState = \"open\" | \"opened\" | \"close\" | \"closed\"\n\nexport type TransitionProps = {\n children: React.ReactElement;\n open: boolean;\n variant: TransitionVariant\n ease?: string;\n easing?: keyof typeof animationEases;\n duration?: number;\n delay?: number;\n disableInitialTransition?: boolean;\n onOpen?: () => void;\n onOpened?: () => void;\n onClose?: () => void;\n onClosed?: () => void;\n onState?: (state: TransitionState) => void;\n}\n\nconst getVariant = (rect: DOMRect, variant: TransitionVariant) => {\n let fn = typeof variant === 'string' ? variants[variant] : variant\n if (!fn) throw new Error(`Transition variant \"${variant}\" not found.`)\n return fn(rect as DOMRect);\n}\n\nfunction Transition({ children, ...options }: TransitionProps) {\n let {\n disableInitialTransition = false,\n variant = \"fade\",\n duration = 400,\n delay,\n ease,\n easing,\n open,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n onState\n } = options\n\n const endTimer = useRef<any>(null)\n const animId = useRef(0)\n const [rect, setRect] = useState<DOMRect>()\n const [isDisableInitial, setIsDisableInitial] = useState(disableInitialTransition)\n const ref = useRef<HTMLElement>(null)\n const doc = useDocument();\n const cacheId = useCSSCacheId()\n let _ease = ease || (animationEases as any)[easing as any] || animationEases.bounce\n\n const style = (obj = {}) => {\n return css(obj, { container: doc?.document, cacheId }).classname;\n }\n\n let [cls, setCls] = useState(() => {\n let props: any = {}\n if (!isDisableInitial || (isDisableInitial && !open)) {\n props.opacity = 0\n props.pointerEvents = 'none'\n }\n return style(props)\n })\n\n // useEffect(() => {\n // const node = ref.current\n // if (!node) return\n // const observer = new ResizeObserver(() => {\n // const rect = node.getBoundingClientRect()\n // setRect(rect)\n // })\n // observer.observe(node)\n // return () => observer.disconnect()\n // }, [])\n\n useEffect(() => {\n let frame: any\n\n const measure = () => {\n const node = ref.current\n if (!node) {\n frame = requestAnimationFrame(measure) // ⬅️ retry next frame\n return\n }\n\n const rect = node.getBoundingClientRect()\n const v = getVariant(rect, variant)\n\n if (isDisableInitial) {\n setCls(style(open ? v.to : v.from))\n } else {\n setCls(style(open ? v.from : v.to))\n }\n\n setRect(rect)\n }\n\n frame = requestAnimationFrame(measure)\n\n return () => {\n if (endTimer.current) {\n clearTimeout(endTimer.current)\n }\n cancelAnimationFrame(frame)\n }\n\n }, [])\n\n useEffect(() => {\n if (rect) {\n let _duration = isDisableInitial ? 0 : duration\n let _delay = isDisableInitial ? 0 : (delay || 0)\n\n if (isDisableInitial) {\n setIsDisableInitial(false)\n }\n const v = getVariant(rect, variant)\n let _css: any = open ? v.to : v.from\n\n let _ = {\n ..._css,\n transition: Object.keys(_css || {})\n .map(k => `${formatCSSProp(k)} ${_duration}ms ${_ease} ${_delay}ms`)\n .join(\", \"),\n willChange: Object.keys(_css || {})\n .map(formatCSSProp)\n .join(\", \"),\n }\n\n if (open) {\n onOpen?.();\n onState?.(\"open\");\n } else {\n onClose?.();\n onState?.(\"close\");\n }\n\n setCls(style(_))\n if (endTimer.current) {\n clearTimeout(endTimer.current)\n }\n animId.current++\n const id = animId.current\n endTimer.current = setTimeout(() => {\n if (id !== animId.current) return\n if (open) {\n onOpened?.();\n onState?.(\"opened\");\n } else {\n onClosed?.();\n onState?.(\"closed\");\n }\n }, _duration + _delay)\n }\n }, [rect, open, variant])\n\n const clone: any = Children.only(children);\n\n return cloneElement(clone, {\n className: cls,\n ref: (node: HTMLElement) => {\n ref.current = node;\n\n const childRef = (clone as any).ref;\n if (typeof childRef === \"function\") {\n childRef(node);\n } else if (childRef) {\n childRef.current = node;\n }\n }\n });\n}\n\nexport default Transition"],"names":[],"mappings":";;;;;;;;;;;;AA8BA;AACI;AACA;AAAS;AACT;AACJ;AAEA;AAAoB;AAChB;AAeA;AACA;;;AAGA;AACA;AACA;AACA;AAEA;;AAEA;;;;AAKQ;AACA;;AAEJ;AACJ;;;;;;;;;;;;AAcI;;AAGI;;AAEI;;;AAIJ;;;AAII;;;AAEA;;;AAIR;AAEA;AAEA;AACI;AACI;;;AAGR;;;;;AAOI;;;;;AAMA;AAEA;AAGS;AACA;;AAGA;;AAIL;AACA;;;AAEA;AACA;;AAGJ;AACA;AACI;;;AAGJ;AACA;AACI;;;AAEI;AACA;;;AAEA;AACA;;AAER;;;;;AAOJ;AACA;AACI;AAEA;AACA;;;;AAGI;;;AAGX;AACL;;"}
@@ -1,10 +1,33 @@
1
1
  import React__default from 'react';
2
- import { UseTransitionProps } from '../hooks/useTransition/index.js';
2
+ import * as variants from './variants.js';
3
+ import { animationEases } from '../hooks/useAnimation.js';
4
+ import { CSSProps } from '../css/types.js';
3
5
 
4
- type TransitionProps = UseTransitionProps & {
6
+ type TransitionVariantTypes = keyof typeof variants;
7
+ type TransitionVariant = TransitionVariantTypes | ((rect: DOMRect) => ({
8
+ from: CSSProps;
9
+ to: CSSProps;
10
+ }));
11
+ type TransitionState = "open" | "opened" | "close" | "closed";
12
+ type TransitionProps = {
5
13
  children: React__default.ReactElement;
14
+ open: boolean;
15
+ variant: TransitionVariant;
16
+ ease?: string;
17
+ easing?: keyof typeof animationEases;
18
+ duration?: number;
19
+ delay?: number;
20
+ disableInitialTransition?: boolean;
21
+ onOpen?: () => void;
22
+ onOpened?: () => void;
23
+ onClose?: () => void;
24
+ onClosed?: () => void;
25
+ onState?: (state: TransitionState) => void;
6
26
  };
7
- declare function Transition({ children, ...options }: TransitionProps): React__default.JSX.Element | null;
27
+ declare function Transition({ children, ...options }: TransitionProps): React__default.DetailedReactHTMLElement<{
28
+ className: string;
29
+ ref: (node: HTMLElement) => void;
30
+ }, HTMLElement>;
8
31
 
9
32
  export { Transition as default };
10
- export type { TransitionProps };
33
+ export type { TransitionProps, TransitionState, TransitionVariant, TransitionVariantTypes };
@@ -1,26 +1,133 @@
1
1
  "use client";
2
2
  import { __rest } from 'tslib';
3
- import { jsx } from 'react/jsx-runtime';
4
- import { useState, useEffect, Children, cloneElement } from 'react';
5
- import useTransition from '../hooks/useTransition/index.js';
3
+ import { useRef, useState, useEffect, Children, cloneElement } from 'react';
4
+ import * as variants from './variants.js';
5
+ import { css } from '../css/index.js';
6
+ import { useDocument } from '../Document/index.js';
7
+ import { useCSSCacheId } from '../css/CSSCacheProvider.js';
8
+ import { animationEases } from '../hooks/useAnimation.js';
9
+ import { formatCSSProp } from 'oncss';
6
10
 
7
- const TransitionBase = (_a) => {
8
- var { children } = _a, options = __rest(_a, ["children"]);
9
- const { props, exited } = useTransition(options);
10
- if (exited)
11
- return null;
12
- const clone = Children.only(children);
13
- return cloneElement(clone, props);
11
+ const getVariant = (rect, variant) => {
12
+ let fn = typeof variant === 'string' ? variants[variant] : variant;
13
+ if (!fn)
14
+ throw new Error(`Transition variant "${variant}" not found.`);
15
+ return fn(rect);
14
16
  };
15
17
  function Transition(_a) {
16
18
  var { children } = _a, options = __rest(_a, ["children"]);
17
- const [mounted, setMounted] = useState(false);
19
+ let { disableInitialTransition = false, variant = "fade", duration = 400, delay, ease, easing, open, onOpen, onOpened, onClose, onClosed, onState } = options;
20
+ const endTimer = useRef(null);
21
+ const animId = useRef(0);
22
+ const [rect, setRect] = useState();
23
+ const [isDisableInitial, setIsDisableInitial] = useState(disableInitialTransition);
24
+ const ref = useRef(null);
25
+ const doc = useDocument();
26
+ const cacheId = useCSSCacheId();
27
+ let _ease = ease || animationEases[easing] || animationEases.bounce;
28
+ const style = (obj = {}) => {
29
+ return css(obj, { container: doc === null || doc === void 0 ? void 0 : doc.document, cacheId }).classname;
30
+ };
31
+ let [cls, setCls] = useState(() => {
32
+ let props = {};
33
+ if (!isDisableInitial || (isDisableInitial && !open)) {
34
+ props.opacity = 0;
35
+ props.pointerEvents = 'none';
36
+ }
37
+ return style(props);
38
+ });
39
+ // useEffect(() => {
40
+ // const node = ref.current
41
+ // if (!node) return
42
+ // const observer = new ResizeObserver(() => {
43
+ // const rect = node.getBoundingClientRect()
44
+ // setRect(rect)
45
+ // })
46
+ // observer.observe(node)
47
+ // return () => observer.disconnect()
48
+ // }, [])
18
49
  useEffect(() => {
19
- setMounted(true);
50
+ let frame;
51
+ const measure = () => {
52
+ const node = ref.current;
53
+ if (!node) {
54
+ frame = requestAnimationFrame(measure); // ⬅️ retry next frame
55
+ return;
56
+ }
57
+ const rect = node.getBoundingClientRect();
58
+ const v = getVariant(rect, variant);
59
+ if (isDisableInitial) {
60
+ setCls(style(open ? v.to : v.from));
61
+ }
62
+ else {
63
+ setCls(style(open ? v.from : v.to));
64
+ }
65
+ setRect(rect);
66
+ };
67
+ frame = requestAnimationFrame(measure);
68
+ return () => {
69
+ if (endTimer.current) {
70
+ clearTimeout(endTimer.current);
71
+ }
72
+ cancelAnimationFrame(frame);
73
+ };
20
74
  }, []);
21
- if (!mounted)
22
- return null;
23
- return jsx(TransitionBase, Object.assign({}, options, { children: children }));
75
+ useEffect(() => {
76
+ if (rect) {
77
+ let _duration = isDisableInitial ? 0 : duration;
78
+ let _delay = isDisableInitial ? 0 : (delay || 0);
79
+ if (isDisableInitial) {
80
+ setIsDisableInitial(false);
81
+ }
82
+ const v = getVariant(rect, variant);
83
+ let _css = open ? v.to : v.from;
84
+ let _ = Object.assign(Object.assign({}, _css), { transition: Object.keys(_css || {})
85
+ .map(k => `${formatCSSProp(k)} ${_duration}ms ${_ease} ${_delay}ms`)
86
+ .join(", "), willChange: Object.keys(_css || {})
87
+ .map(formatCSSProp)
88
+ .join(", ") });
89
+ if (open) {
90
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
91
+ onState === null || onState === void 0 ? void 0 : onState("open");
92
+ }
93
+ else {
94
+ onClose === null || onClose === void 0 ? void 0 : onClose();
95
+ onState === null || onState === void 0 ? void 0 : onState("close");
96
+ }
97
+ setCls(style(_));
98
+ if (endTimer.current) {
99
+ clearTimeout(endTimer.current);
100
+ }
101
+ animId.current++;
102
+ const id = animId.current;
103
+ endTimer.current = setTimeout(() => {
104
+ if (id !== animId.current)
105
+ return;
106
+ if (open) {
107
+ onOpened === null || onOpened === void 0 ? void 0 : onOpened();
108
+ onState === null || onState === void 0 ? void 0 : onState("opened");
109
+ }
110
+ else {
111
+ onClosed === null || onClosed === void 0 ? void 0 : onClosed();
112
+ onState === null || onState === void 0 ? void 0 : onState("closed");
113
+ }
114
+ }, _duration + _delay);
115
+ }
116
+ }, [rect, open, variant]);
117
+ const clone = Children.only(children);
118
+ return cloneElement(clone, {
119
+ className: cls,
120
+ ref: (node) => {
121
+ ref.current = node;
122
+ const childRef = clone.ref;
123
+ if (typeof childRef === "function") {
124
+ childRef(node);
125
+ }
126
+ else if (childRef) {
127
+ childRef.current = node;
128
+ }
129
+ }
130
+ });
24
131
  }
25
132
 
26
133
  export { Transition as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/Transition/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { cloneElement, Children, useEffect, useState } from 'react';\nimport useTransition, { UseTransitionProps } from '../hooks/useTransition';\n\nexport type TransitionProps = UseTransitionProps & {\n children: React.ReactElement;\n}\n\nconst TransitionBase = ({ children, ...options }: TransitionProps) => {\n const { props, exited } = useTransition(options);\n if (exited) return null;\n const clone: any = Children.only(children);\n return cloneElement(clone, props);\n}\n\nfunction Transition({ children, ...options }: TransitionProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return <TransitionBase {...options} >{children}</TransitionBase>\n}\n\n\nexport default Transition"],"names":[],"mappings":";;;;;;AAQA;AAAwB;;AAEpB;AAAY;;AAEZ;AACJ;AAEA;AAAoB;;;;;AAOhB;AAAc;AACd;AACJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/Transition/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { cloneElement, Children, useState, useEffect, useRef } from 'react';\nimport * as variants from './variants'\nimport { css } from '../css';\nimport { useDocument } from '../Document';\nimport { useCSSCacheId } from '../css/CSSCacheProvider';\nimport { animationEases } from '../hooks/useAnimation';\nimport { formatCSSProp } from 'oncss';\nimport { CSSProps } from '../css/types';\n\nexport type TransitionVariantTypes = keyof typeof variants\nexport type TransitionVariant = TransitionVariantTypes | ((rect: DOMRect) => ({ from: CSSProps, to: CSSProps }))\nexport type TransitionState = \"open\" | \"opened\" | \"close\" | \"closed\"\n\nexport type TransitionProps = {\n children: React.ReactElement;\n open: boolean;\n variant: TransitionVariant\n ease?: string;\n easing?: keyof typeof animationEases;\n duration?: number;\n delay?: number;\n disableInitialTransition?: boolean;\n onOpen?: () => void;\n onOpened?: () => void;\n onClose?: () => void;\n onClosed?: () => void;\n onState?: (state: TransitionState) => void;\n}\n\nconst getVariant = (rect: DOMRect, variant: TransitionVariant) => {\n let fn = typeof variant === 'string' ? variants[variant] : variant\n if (!fn) throw new Error(`Transition variant \"${variant}\" not found.`)\n return fn(rect as DOMRect);\n}\n\nfunction Transition({ children, ...options }: TransitionProps) {\n let {\n disableInitialTransition = false,\n variant = \"fade\",\n duration = 400,\n delay,\n ease,\n easing,\n open,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n onState\n } = options\n\n const endTimer = useRef<any>(null)\n const animId = useRef(0)\n const [rect, setRect] = useState<DOMRect>()\n const [isDisableInitial, setIsDisableInitial] = useState(disableInitialTransition)\n const ref = useRef<HTMLElement>(null)\n const doc = useDocument();\n const cacheId = useCSSCacheId()\n let _ease = ease || (animationEases as any)[easing as any] || animationEases.bounce\n\n const style = (obj = {}) => {\n return css(obj, { container: doc?.document, cacheId }).classname;\n }\n\n let [cls, setCls] = useState(() => {\n let props: any = {}\n if (!isDisableInitial || (isDisableInitial && !open)) {\n props.opacity = 0\n props.pointerEvents = 'none'\n }\n return style(props)\n })\n\n // useEffect(() => {\n // const node = ref.current\n // if (!node) return\n // const observer = new ResizeObserver(() => {\n // const rect = node.getBoundingClientRect()\n // setRect(rect)\n // })\n // observer.observe(node)\n // return () => observer.disconnect()\n // }, [])\n\n useEffect(() => {\n let frame: any\n\n const measure = () => {\n const node = ref.current\n if (!node) {\n frame = requestAnimationFrame(measure) // ⬅️ retry next frame\n return\n }\n\n const rect = node.getBoundingClientRect()\n const v = getVariant(rect, variant)\n\n if (isDisableInitial) {\n setCls(style(open ? v.to : v.from))\n } else {\n setCls(style(open ? v.from : v.to))\n }\n\n setRect(rect)\n }\n\n frame = requestAnimationFrame(measure)\n\n return () => {\n if (endTimer.current) {\n clearTimeout(endTimer.current)\n }\n cancelAnimationFrame(frame)\n }\n\n }, [])\n\n useEffect(() => {\n if (rect) {\n let _duration = isDisableInitial ? 0 : duration\n let _delay = isDisableInitial ? 0 : (delay || 0)\n\n if (isDisableInitial) {\n setIsDisableInitial(false)\n }\n const v = getVariant(rect, variant)\n let _css: any = open ? v.to : v.from\n\n let _ = {\n ..._css,\n transition: Object.keys(_css || {})\n .map(k => `${formatCSSProp(k)} ${_duration}ms ${_ease} ${_delay}ms`)\n .join(\", \"),\n willChange: Object.keys(_css || {})\n .map(formatCSSProp)\n .join(\", \"),\n }\n\n if (open) {\n onOpen?.();\n onState?.(\"open\");\n } else {\n onClose?.();\n onState?.(\"close\");\n }\n\n setCls(style(_))\n if (endTimer.current) {\n clearTimeout(endTimer.current)\n }\n animId.current++\n const id = animId.current\n endTimer.current = setTimeout(() => {\n if (id !== animId.current) return\n if (open) {\n onOpened?.();\n onState?.(\"opened\");\n } else {\n onClosed?.();\n onState?.(\"closed\");\n }\n }, _duration + _delay)\n }\n }, [rect, open, variant])\n\n const clone: any = Children.only(children);\n\n return cloneElement(clone, {\n className: cls,\n ref: (node: HTMLElement) => {\n ref.current = node;\n\n const childRef = (clone as any).ref;\n if (typeof childRef === \"function\") {\n childRef(node);\n } else if (childRef) {\n childRef.current = node;\n }\n }\n });\n}\n\nexport default Transition"],"names":[],"mappings":";;;;;;;;;;AA8BA;AACI;AACA;AAAS;AACT;AACJ;AAEA;AAAoB;AAChB;AAeA;AACA;;;AAGA;AACA;AACA;AACA;AAEA;;AAEA;;;;AAKQ;AACA;;AAEJ;AACJ;;;;;;;;;;;;AAcI;;AAGI;;AAEI;;;AAIJ;;;AAII;;;AAEA;;;AAIR;AAEA;AAEA;AACI;AACI;;;AAGR;;;;;AAOI;;;;;AAMA;AAEA;AAGS;AACA;;AAGA;;AAIL;AACA;;;AAEA;AACA;;AAGJ;AACA;AACI;;;AAGJ;AACA;AACI;;;AAEI;AACA;;;AAEA;AACA;;AAER;;;;;AAOJ;AACA;AACI;AAEA;AACA;;;;AAGI;;;AAGX;AACL;;"}
@@ -1,9 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ const getY = (rect) => rect ? Math.min(rect.height / 2, 40) : 20;
4
+ const getX = (rect) => rect ? Math.min(rect.width / 2, 40) : 20;
3
5
  const slideDown = (rect) => {
6
+ const y = getY(rect);
4
7
  return {
5
8
  from: {
6
- transform: `translateY(-${rect.height}px)`,
9
+ transform: `translateY(-${y}px)`,
7
10
  },
8
11
  to: {
9
12
  transform: `translateY(0)`,
@@ -11,9 +14,10 @@ const slideDown = (rect) => {
11
14
  };
12
15
  };
13
16
  const slideUp = (rect) => {
17
+ const y = getY(rect);
14
18
  return {
15
19
  from: {
16
- transform: `translateY(${rect.height}px)`,
20
+ transform: `translateY(${y}px)`,
17
21
  },
18
22
  to: {
19
23
  transform: `translateY(0)`,
@@ -21,9 +25,10 @@ const slideUp = (rect) => {
21
25
  };
22
26
  };
23
27
  const slideRight = (rect) => {
28
+ const x = getX(rect);
24
29
  return {
25
30
  from: {
26
- transform: `translateX(-${rect.width}px)`,
31
+ transform: `translateX(-${x}px)`,
27
32
  },
28
33
  to: {
29
34
  transform: `translateX(0)`,
@@ -31,69 +36,105 @@ const slideRight = (rect) => {
31
36
  };
32
37
  };
33
38
  const slideLeft = (rect) => {
39
+ const x = getX(rect);
34
40
  return {
35
41
  from: {
36
- transform: `translateX(${rect.width}px)`,
42
+ transform: `translateX(${x}px)`,
37
43
  },
38
44
  to: {
39
45
  transform: `translateX(0)`,
40
46
  }
41
47
  };
42
48
  };
49
+ const scaleYDown = () => ({
50
+ from: {
51
+ transform: "scaleY(0.8)",
52
+ opacity: 0,
53
+ pointerEvents: 'none',
54
+ transformOrigin: "top"
55
+ },
56
+ to: {
57
+ transform: "scaleY(1)",
58
+ opacity: 1,
59
+ transformOrigin: "top"
60
+ }
61
+ });
62
+ const scaleYUp = () => ({
63
+ from: {
64
+ transform: "scaleY(0.8)",
65
+ transformOrigin: "bottom",
66
+ opacity: 0,
67
+ pointerEvents: 'none'
68
+ },
69
+ to: {
70
+ transform: "scaleY(1)",
71
+ transformOrigin: "bottom",
72
+ opacity: 1
73
+ }
74
+ });
43
75
  const fade = () => {
44
76
  return {
45
77
  from: {
46
- opacity: 0
78
+ opacity: 0,
79
+ pointerEvents: 'none'
47
80
  },
48
81
  to: {
49
82
  opacity: 1
50
83
  }
51
84
  };
52
85
  };
53
- const fadeDown = () => {
86
+ const fadeDown = (rect) => {
87
+ const y = getY(rect);
54
88
  return {
55
89
  from: {
56
- transform: `translateY(-30px)`,
57
- opacity: 0
90
+ transform: `translateY(-${y}px) scale(0.98)`,
91
+ opacity: 0,
92
+ pointerEvents: 'none'
58
93
  },
59
94
  to: {
60
- transform: `translateY(0)`,
95
+ transform: `translateY(0) scale(1)`,
61
96
  opacity: 1
62
97
  }
63
98
  };
64
99
  };
65
- const fadeUp = () => {
100
+ const fadeUp = (rect) => {
101
+ const y = getY(rect);
66
102
  return {
67
103
  from: {
68
- transform: `translateY(30px)`,
69
- opacity: 0
104
+ transform: `translateY(${y}px) scale(0.98)`,
105
+ opacity: 0,
106
+ pointerEvents: 'none'
70
107
  },
71
108
  to: {
72
- transform: `translateY(0)`,
109
+ transform: `translateY(0) scale(1)`,
73
110
  opacity: 1
74
111
  }
75
112
  };
76
113
  };
77
- const fadeRight = () => {
114
+ const fadeRight = (rect) => {
115
+ const x = getX(rect);
78
116
  return {
79
117
  from: {
80
- transform: `translateX(-30px)`,
81
- opacity: 0
118
+ transform: `translateX(-${x}px) scale(0.98)`,
119
+ opacity: 0,
120
+ pointerEvents: 'none'
82
121
  },
83
122
  to: {
84
- transform: `translateX(0)`,
123
+ transform: `translateX(0) scale(1)`,
85
124
  opacity: 1
86
125
  }
87
126
  };
88
127
  };
89
- const fadeLeft = () => {
128
+ const fadeLeft = (rect) => {
129
+ const x = getX(rect);
90
130
  return {
91
131
  from: {
92
- transform: `translateX(30px)`,
93
- opacity: 0
132
+ transform: `translateX(${x}px) scale(0.98)`,
133
+ opacity: 0,
134
+ pointerEvents: 'none'
94
135
  },
95
136
  to: {
96
- transform: `translateX(0)`,
137
+ transform: `translateX(0) scale(1)`,
97
138
  opacity: 1
98
139
  }
99
140
  };
@@ -102,7 +143,8 @@ const grow = () => {
102
143
  return {
103
144
  from: {
104
145
  transform: "scale(.8, .6)",
105
- opacity: 0
146
+ opacity: 0,
147
+ pointerEvents: 'none'
106
148
  },
107
149
  to: {
108
150
  transform: "scale(1)",
@@ -114,10 +156,13 @@ const zoom = () => {
114
156
  return {
115
157
  from: {
116
158
  transform: "scale(.8)",
117
- opacity: 0
159
+ transformOrigin: "center",
160
+ opacity: 0,
161
+ pointerEvents: 'none'
118
162
  },
119
163
  to: {
120
164
  transform: "scale(1)",
165
+ transformOrigin: "center",
121
166
  opacity: 1
122
167
  }
123
168
  };
@@ -126,10 +171,13 @@ const zoomOver = () => {
126
171
  return {
127
172
  from: {
128
173
  transform: "scale(1.2)",
129
- opacity: 0
174
+ transformOrigin: "center",
175
+ opacity: 0,
176
+ pointerEvents: 'none'
130
177
  },
131
178
  to: {
132
179
  transform: "scale(1)",
180
+ transformOrigin: "center",
133
181
  opacity: 1
134
182
  }
135
183
  };
@@ -137,11 +185,11 @@ const zoomOver = () => {
137
185
  const collapseVertical = (rect) => {
138
186
  return {
139
187
  from: {
140
- maxHeight: 0 + "px",
188
+ maxHeight: "0px",
141
189
  overflow: "hidden"
142
190
  },
143
191
  to: {
144
- maxHeight: rect.height,
192
+ maxHeight: rect.height + "px",
145
193
  overflow: "hidden"
146
194
  }
147
195
  };
@@ -149,11 +197,11 @@ const collapseVertical = (rect) => {
149
197
  const collapseHorizontal = (rect) => {
150
198
  return {
151
199
  from: {
152
- width: 0 + "px",
200
+ width: "0px",
153
201
  overflow: "hidden"
154
202
  },
155
203
  to: {
156
- width: (rect === null || rect === void 0 ? void 0 : rect.width) ? (rect === null || rect === void 0 ? void 0 : rect.width) + "px" : "auto",
204
+ width: rect.width + "px",
157
205
  overflow: "hidden"
158
206
  }
159
207
  };
@@ -167,6 +215,8 @@ exports.fadeLeft = fadeLeft;
167
215
  exports.fadeRight = fadeRight;
168
216
  exports.fadeUp = fadeUp;
169
217
  exports.grow = grow;
218
+ exports.scaleYDown = scaleYDown;
219
+ exports.scaleYUp = scaleYUp;
170
220
  exports.slideDown = slideDown;
171
221
  exports.slideLeft = slideLeft;
172
222
  exports.slideRight = slideRight;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.cjs","sources":["../../src/Transition/variants.ts"],"sourcesContent":["\nconst getY = (rect?: DOMRect) =>\n rect ? Math.min(rect.height / 2, 40) : 20\n\nconst getX = (rect?: DOMRect) =>\n rect ? Math.min(rect.width / 2, 40) : 20\n\n\n\nexport const slideDown = (rect?: DOMRect) => {\n const y = getY(rect)\n\n return {\n from: {\n transform: `translateY(-${y}px)`,\n },\n to: {\n transform: `translateY(0)`,\n }\n }\n}\n\nexport const slideUp = (rect?: DOMRect) => {\n const y = getY(rect)\n\n return {\n from: {\n transform: `translateY(${y}px)`,\n },\n to: {\n transform: `translateY(0)`,\n }\n }\n}\n\nexport const slideRight = (rect?: DOMRect) => {\n const x = getX(rect)\n\n return {\n from: {\n transform: `translateX(-${x}px)`,\n },\n to: {\n transform: `translateX(0)`,\n }\n }\n}\n\nexport const slideLeft = (rect?: DOMRect) => {\n const x = getX(rect)\n\n return {\n from: {\n transform: `translateX(${x}px)`,\n },\n to: {\n transform: `translateX(0)`,\n }\n }\n}\n\nexport const scaleYDown = () => ({\n from: {\n transform: \"scaleY(0.8)\",\n opacity: 0,\n pointerEvents: 'none',\n transformOrigin: \"top\"\n },\n to: {\n transform: \"scaleY(1)\",\n opacity: 1,\n transformOrigin: \"top\"\n }\n})\n\nexport const scaleYUp = () => ({\n from: {\n transform: \"scaleY(0.8)\",\n transformOrigin: \"bottom\",\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: \"scaleY(1)\",\n transformOrigin: \"bottom\",\n opacity: 1\n }\n})\n\nexport const fade = () => {\n return {\n from: {\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n opacity: 1\n }\n }\n}\n\n\nexport const fadeDown = (rect?: DOMRect) => {\n const y = getY(rect)\n\n return {\n from: {\n transform: `translateY(-${y}px) scale(0.98)`,\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: `translateY(0) scale(1)`,\n opacity: 1\n }\n }\n}\n\nexport const fadeUp = (rect?: DOMRect) => {\n const y = getY(rect)\n\n return {\n from: {\n transform: `translateY(${y}px) scale(0.98)`,\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: `translateY(0) scale(1)`,\n opacity: 1\n }\n }\n}\n\nexport const fadeRight = (rect?: DOMRect) => {\n const x = getX(rect)\n\n return {\n from: {\n transform: `translateX(-${x}px) scale(0.98)`,\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: `translateX(0) scale(1)`,\n opacity: 1\n }\n }\n}\n\nexport const fadeLeft = (rect?: DOMRect) => {\n const x = getX(rect)\n\n return {\n from: {\n transform: `translateX(${x}px) scale(0.98)`,\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: `translateX(0) scale(1)`,\n opacity: 1\n }\n }\n}\n\nexport const grow = () => {\n return {\n from: {\n transform: \"scale(.8, .6)\",\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: \"scale(1)\",\n opacity: 1\n }\n }\n}\n\nexport const zoom = () => {\n return {\n from: {\n transform: \"scale(.8)\",\n transformOrigin: \"center\",\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: \"scale(1)\",\n transformOrigin: \"center\",\n opacity: 1\n }\n }\n}\n\nexport const zoomOver = () => {\n return {\n from: {\n transform: \"scale(1.2)\",\n transformOrigin: \"center\",\n opacity: 0,\n pointerEvents: 'none'\n },\n to: {\n transform: \"scale(1)\",\n transformOrigin: \"center\",\n opacity: 1\n }\n }\n}\n\nexport const collapseVertical = (rect: DOMRect) => {\n return {\n from: {\n maxHeight: \"0px\",\n overflow: \"hidden\"\n },\n to: {\n maxHeight: rect.height + \"px\",\n overflow: \"hidden\"\n }\n }\n}\n\n\nexport const collapseHorizontal = (rect: DOMRect) => {\n return {\n from: {\n width: \"0px\",\n overflow: \"hidden\"\n },\n to: {\n width: rect.width + \"px\",\n overflow: \"hidden\"\n }\n }\n}\n\n\n\n\n"],"names":[],"mappings":"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"}