@xanui/core 1.2.63 → 1.2.65

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.
Files changed (61) hide show
  1. package/AppRoot/index.cjs +4 -4
  2. package/AppRoot/index.cjs.map +1 -1
  3. package/AppRoot/index.d.ts +1 -1
  4. package/AppRoot/index.js +4 -4
  5. package/AppRoot/index.js.map +1 -1
  6. package/Iframe/index.cjs +3 -2
  7. package/Iframe/index.cjs.map +1 -1
  8. package/Iframe/index.js +3 -2
  9. package/Iframe/index.js.map +1 -1
  10. package/Transition/index.cjs +75 -14
  11. package/Transition/index.cjs.map +1 -1
  12. package/Transition/index.d.ts +27 -4
  13. package/Transition/index.js +76 -15
  14. package/Transition/index.js.map +1 -1
  15. package/{hooks/useTransition → Transition}/variants.cjs +60 -20
  16. package/Transition/variants.cjs.map +1 -0
  17. package/{hooks/useTransition → Transition}/variants.d.ts +38 -10
  18. package/{hooks/useTransition → Transition}/variants.js +59 -21
  19. package/Transition/variants.js.map +1 -0
  20. package/hooks/useInterface.cjs +6 -1
  21. package/hooks/useInterface.cjs.map +1 -1
  22. package/hooks/useInterface.d.ts +2 -2
  23. package/hooks/useInterface.js +6 -1
  24. package/hooks/useInterface.js.map +1 -1
  25. package/index.cjs +9 -13
  26. package/index.cjs.map +1 -1
  27. package/index.d.ts +2 -4
  28. package/index.js +1 -3
  29. package/index.js.map +1 -1
  30. package/package.json +2 -2
  31. package/theme/ThemeDefaultOptions.cjs +0 -7
  32. package/theme/ThemeDefaultOptions.cjs.map +1 -1
  33. package/theme/ThemeDefaultOptions.js +1 -7
  34. package/theme/ThemeDefaultOptions.js.map +1 -1
  35. package/theme/ThemeProvider.cjs +6 -13
  36. package/theme/ThemeProvider.cjs.map +1 -1
  37. package/theme/ThemeProvider.d.ts +3 -2
  38. package/theme/ThemeProvider.js +7 -14
  39. package/theme/ThemeProvider.js.map +1 -1
  40. package/theme/core.cjs +28 -20
  41. package/theme/core.cjs.map +1 -1
  42. package/theme/core.d.ts +4 -8
  43. package/theme/core.js +28 -19
  44. package/theme/core.js.map +1 -1
  45. package/theme/index.cjs +7 -3
  46. package/theme/index.cjs.map +1 -1
  47. package/theme/index.js +7 -2
  48. package/theme/index.js.map +1 -1
  49. package/theme/types.d.ts +1 -0
  50. package/hooks/useTransition/index.cjs +0 -108
  51. package/hooks/useTransition/index.cjs.map +0 -1
  52. package/hooks/useTransition/index.d.ts +0 -36
  53. package/hooks/useTransition/index.js +0 -106
  54. package/hooks/useTransition/index.js.map +0 -1
  55. package/hooks/useTransition/variants.cjs.map +0 -1
  56. package/hooks/useTransition/variants.js.map +0 -1
  57. package/theme/createTheme.cjs +0 -29
  58. package/theme/createTheme.cjs.map +0 -1
  59. package/theme/createTheme.d.ts +0 -5
  60. package/theme/createTheme.js +0 -27
  61. package/theme/createTheme.js.map +0 -1
package/AppRoot/index.cjs CHANGED
@@ -4,11 +4,11 @@
4
4
  var tslib = require('tslib');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var React = require('react');
7
+ var ThemeProvider = require('../theme/ThemeProvider.cjs');
7
8
  require('../theme/core.cjs');
9
+ var BreakpointProvider = require('../breakpoint/BreakpointProvider.cjs');
8
10
  require('../css/getValue.cjs');
9
11
  require('oncss');
10
- var ThemeProvider = require('../theme/ThemeProvider.cjs');
11
- var BreakpointProvider = require('../breakpoint/BreakpointProvider.cjs');
12
12
  var Renderar = require('./Renderar.cjs');
13
13
  var index = require('../Document/index.cjs');
14
14
  var AppRootProvider = require('./AppRootProvider.cjs');
@@ -35,7 +35,7 @@ const AppRoot = React.forwardRef((_a, ref) => {
35
35
  React.useEffect(() => {
36
36
  if (typeof _document === 'undefined')
37
37
  return;
38
- _document.cookie = `xuitm=${theme};path=/`;
38
+ document.cookie = `xuitm=${theme.name};path=/`;
39
39
  const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));
40
40
  styles.forEach((style) => {
41
41
  _document.head.appendChild(style);
@@ -52,7 +52,7 @@ const AppRoot = React.forwardRef((_a, ref) => {
52
52
  }
53
53
  return (jsxRuntime.jsx(index.DocumentProvider, { value: _document ? { document: _document, id: docid } : undefined, children: jsxRuntime.jsx(CSSCacheProvider.CSSCacheProvider, { cacheId: CSSCacheId, children: jsxRuntime.jsx(AppRootProvider.AppRootProvider, { element: () => rootRef.current, children: jsxRuntime.jsx(ThemeProvider, Object.assign({ theme: theme, onThemeChange: (t) => {
54
54
  onThemeChange && onThemeChange(t);
55
- document.cookie = `xuitm=${t};path=/`;
55
+ document.cookie = `xuitm=${t.name};path=/`;
56
56
  } }, props, { ref: mergeRef, isRoot: true, sx: Object.assign(Object.assign(Object.assign({}, props.sx), (visibility === "hidden" ? { visibility: "hidden" } : {})), selection), children: jsxRuntime.jsxs(BreakpointProvider.BreakpointProvider, { defaultKey: defaultBreakpoint !== null && defaultBreakpoint !== void 0 ? defaultBreakpoint : "xl", children: [children, !disableRenderar && jsxRuntime.jsx(Renderar.RenderRenderar, {})] }) })) }) }) }));
57
57
  });
58
58
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/AppRoot/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { TagComponentType } from '../Tag/types';\nimport { ThemeProvider, ThemeProviderProps } from '../theme';\nimport { BreakpointProvider } from '../breakpoint';\nimport { RenderRenderar } from './Renderar';\nimport { DocumentProvider } from '../Document';\nimport { AppRootProvider } from './AppRootProvider';\nimport useMergeRefs from '../hooks/useMergeRefs';\nimport { CSSCacheProvider } from '../css/CSSCacheProvider';\nimport { BreakpointKeys } from '../css/types';\n\nexport type AppRootProps<T extends TagComponentType = \"div\"> = ThemeProviderProps<T> & {\n noScrollbarCss?: boolean;\n document?: Document;\n CSSCacheId?: string;\n disableRenderar?: boolean;\n defaultBreakpoint?: BreakpointKeys\n selectionColor?: \"default\" | \"brand\" | \"accent\" | \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nconst AppRoot = React.forwardRef(<T extends TagComponentType = \"div\">({ children, defaultBreakpoint, noScrollbarCss, CSSCacheId, theme, onThemeChange, disableRenderar, selectionColor, document: _document, ...props }: AppRootProps<T>, ref: React.Ref<any>) => {\n\n noScrollbarCss ??= false\n selectionColor ??= \"brand\"\n if (typeof window !== \"undefined\") {\n _document ??= document\n }\n disableRenderar ??= false\n const docid = useId()\n const csscacheId = useId()\n CSSCacheId ??= csscacheId\n\n const [visibility, setVisibility] = React.useState<string>(!defaultBreakpoint ? \"hidden\" : \"\");\n const rootRef = useRef(null)\n const mergeRef = useMergeRefs(rootRef, ref)\n\n useLayoutEffect(() => {\n !defaultBreakpoint && setVisibility(\"\");\n }, [])\n\n useEffect(() => {\n if (typeof _document === 'undefined') return;\n _document.cookie = `xuitm=${theme};path=/`\n const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));\n styles.forEach((style) => {\n _document.head.appendChild(style);\n });\n }, [])\n\n let selection: any = {}\n if (selectionColor && selectionColor !== 'default') {\n selection = {\n \"&::selection\": {\n bgcolor: `${selectionColor}.primary`,\n color: `${selectionColor}.text`\n }\n }\n }\n\n return (\n <DocumentProvider value={_document ? { document: _document, id: docid } : undefined}>\n <CSSCacheProvider cacheId={CSSCacheId}>\n <AppRootProvider element={() => rootRef.current}>\n <ThemeProvider\n theme={theme}\n onThemeChange={(t) => {\n onThemeChange && onThemeChange(t)\n document.cookie = `xuitm=${t};path=/`\n }}\n {...props}\n ref={mergeRef}\n isRoot\n sx={{\n ...props.sx,\n ...(visibility === \"hidden\" ? { visibility: \"hidden\" } : {}),\n ...selection\n }}\n >\n <BreakpointProvider defaultKey={defaultBreakpoint ?? \"xl\"}>\n {children}\n {!disableRenderar && <RenderRenderar />}\n </BreakpointProvider>\n </ThemeProvider>\n </AppRootProvider>\n </CSSCacheProvider>\n </DocumentProvider>\n )\n})\n\nexport default AppRoot\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqBA;;;;AAIG;;;;AAIA;AACA;;;AAIA;;;AAIG;;;;;AAKA;AACA;AACA;AACG;AACH;;;AAIH;AACG;AACG;;;AAGC;;;;AAWW;AACA;AACH;AAmBlB;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/AppRoot/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { TagComponentType } from '../Tag/types';\nimport { ThemeProvider, ThemeProviderProps } from '../theme';\nimport { BreakpointProvider } from '../breakpoint';\nimport { RenderRenderar } from './Renderar';\nimport { DocumentProvider } from '../Document';\nimport { AppRootProvider } from './AppRootProvider';\nimport useMergeRefs from '../hooks/useMergeRefs';\nimport { CSSCacheProvider } from '../css/CSSCacheProvider';\nimport { BreakpointKeys } from '../css/types';\n\nexport type AppRootProps<T extends TagComponentType = \"div\"> = ThemeProviderProps<T> & {\n noScrollbarCss?: boolean;\n document?: Document;\n CSSCacheId?: string;\n disableRenderar?: boolean;\n defaultBreakpoint?: BreakpointKeys\n selectionColor?: \"default\" | \"brand\" | \"accent\" | \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nconst AppRoot = React.forwardRef(<T extends TagComponentType = \"div\">({ children, defaultBreakpoint, noScrollbarCss, CSSCacheId, theme, onThemeChange, disableRenderar, selectionColor, document: _document, ...props }: AppRootProps<T>, ref: React.Ref<any>) => {\n\n noScrollbarCss ??= false\n selectionColor ??= \"brand\"\n if (typeof window !== \"undefined\") {\n _document ??= document\n }\n disableRenderar ??= false\n const docid = useId()\n const csscacheId = useId()\n CSSCacheId ??= csscacheId\n\n const [visibility, setVisibility] = React.useState<string>(!defaultBreakpoint ? \"hidden\" : \"\");\n const rootRef = useRef(null)\n const mergeRef = useMergeRefs(rootRef, ref)\n\n useLayoutEffect(() => {\n !defaultBreakpoint && setVisibility(\"\");\n }, [])\n\n useEffect(() => {\n if (typeof _document === 'undefined') return;\n document.cookie = `xuitm=${theme.name};path=/`\n const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));\n styles.forEach((style) => {\n _document.head.appendChild(style);\n });\n }, [])\n\n let selection: any = {}\n if (selectionColor && selectionColor !== 'default') {\n selection = {\n \"&::selection\": {\n bgcolor: `${selectionColor}.primary`,\n color: `${selectionColor}.text`\n }\n }\n }\n\n return (\n <DocumentProvider value={_document ? { document: _document, id: docid } : undefined}>\n <CSSCacheProvider cacheId={CSSCacheId}>\n <AppRootProvider element={() => rootRef.current}>\n <ThemeProvider\n theme={theme}\n onThemeChange={(t) => {\n onThemeChange && onThemeChange(t)\n document.cookie = `xuitm=${t.name};path=/`\n }}\n {...props}\n ref={mergeRef}\n isRoot\n sx={{\n ...props.sx,\n ...(visibility === \"hidden\" ? { visibility: \"hidden\" } : {}),\n ...selection\n }}\n >\n <BreakpointProvider defaultKey={defaultBreakpoint ?? \"xl\"}>\n {children}\n {!disableRenderar && <RenderRenderar />}\n </BreakpointProvider>\n </ThemeProvider>\n </AppRootProvider>\n </CSSCacheProvider>\n </DocumentProvider>\n )\n})\n\nexport default AppRoot\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqBA;;;;AAIG;;;;AAIA;AACA;;;AAIA;;;AAIG;;;;;;AAMA;AACA;AACG;AACH;;;AAIH;AACG;AACG;;;AAGC;;;;AAWW;;AAEH;AAmBlB;;"}
@@ -1,7 +1,7 @@
1
1
  import React__default from 'react';
2
2
  import { TagComponentType } from '../Tag/types.js';
3
- import { BreakpointKeys } from '../css/types.js';
4
3
  import { ThemeProviderProps } from '../theme/ThemeProvider.js';
4
+ import { BreakpointKeys } from '../css/types.js';
5
5
 
6
6
  type AppRootProps<T extends TagComponentType = "div"> = ThemeProviderProps<T> & {
7
7
  noScrollbarCss?: boolean;
package/AppRoot/index.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import { __rest } from 'tslib';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import React__default, { useId, useRef, useLayoutEffect, useEffect } from 'react';
5
+ import ThemeProvider from '../theme/ThemeProvider.js';
5
6
  import '../theme/core.js';
7
+ import { BreakpointProvider } from '../breakpoint/BreakpointProvider.js';
6
8
  import '../css/getValue.js';
7
9
  import 'oncss';
8
- import ThemeProvider from '../theme/ThemeProvider.js';
9
- import { BreakpointProvider } from '../breakpoint/BreakpointProvider.js';
10
10
  import { RenderRenderar } from './Renderar.js';
11
11
  import { DocumentProvider } from '../Document/index.js';
12
12
  import { AppRootProvider } from './AppRootProvider.js';
@@ -33,7 +33,7 @@ const AppRoot = React__default.forwardRef((_a, ref) => {
33
33
  useEffect(() => {
34
34
  if (typeof _document === 'undefined')
35
35
  return;
36
- _document.cookie = `xuitm=${theme};path=/`;
36
+ document.cookie = `xuitm=${theme.name};path=/`;
37
37
  const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));
38
38
  styles.forEach((style) => {
39
39
  _document.head.appendChild(style);
@@ -50,7 +50,7 @@ const AppRoot = React__default.forwardRef((_a, ref) => {
50
50
  }
51
51
  return (jsx(DocumentProvider, { value: _document ? { document: _document, id: docid } : undefined, children: jsx(CSSCacheProvider, { cacheId: CSSCacheId, children: jsx(AppRootProvider, { element: () => rootRef.current, children: jsx(ThemeProvider, Object.assign({ theme: theme, onThemeChange: (t) => {
52
52
  onThemeChange && onThemeChange(t);
53
- document.cookie = `xuitm=${t};path=/`;
53
+ document.cookie = `xuitm=${t.name};path=/`;
54
54
  } }, props, { ref: mergeRef, isRoot: true, sx: Object.assign(Object.assign(Object.assign({}, props.sx), (visibility === "hidden" ? { visibility: "hidden" } : {})), selection), children: jsxs(BreakpointProvider, { defaultKey: defaultBreakpoint !== null && defaultBreakpoint !== void 0 ? defaultBreakpoint : "xl", children: [children, !disableRenderar && jsx(RenderRenderar, {})] }) })) }) }) }));
55
55
  });
56
56
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/AppRoot/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { TagComponentType } from '../Tag/types';\nimport { ThemeProvider, ThemeProviderProps } from '../theme';\nimport { BreakpointProvider } from '../breakpoint';\nimport { RenderRenderar } from './Renderar';\nimport { DocumentProvider } from '../Document';\nimport { AppRootProvider } from './AppRootProvider';\nimport useMergeRefs from '../hooks/useMergeRefs';\nimport { CSSCacheProvider } from '../css/CSSCacheProvider';\nimport { BreakpointKeys } from '../css/types';\n\nexport type AppRootProps<T extends TagComponentType = \"div\"> = ThemeProviderProps<T> & {\n noScrollbarCss?: boolean;\n document?: Document;\n CSSCacheId?: string;\n disableRenderar?: boolean;\n defaultBreakpoint?: BreakpointKeys\n selectionColor?: \"default\" | \"brand\" | \"accent\" | \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nconst AppRoot = React.forwardRef(<T extends TagComponentType = \"div\">({ children, defaultBreakpoint, noScrollbarCss, CSSCacheId, theme, onThemeChange, disableRenderar, selectionColor, document: _document, ...props }: AppRootProps<T>, ref: React.Ref<any>) => {\n\n noScrollbarCss ??= false\n selectionColor ??= \"brand\"\n if (typeof window !== \"undefined\") {\n _document ??= document\n }\n disableRenderar ??= false\n const docid = useId()\n const csscacheId = useId()\n CSSCacheId ??= csscacheId\n\n const [visibility, setVisibility] = React.useState<string>(!defaultBreakpoint ? \"hidden\" : \"\");\n const rootRef = useRef(null)\n const mergeRef = useMergeRefs(rootRef, ref)\n\n useLayoutEffect(() => {\n !defaultBreakpoint && setVisibility(\"\");\n }, [])\n\n useEffect(() => {\n if (typeof _document === 'undefined') return;\n _document.cookie = `xuitm=${theme};path=/`\n const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));\n styles.forEach((style) => {\n _document.head.appendChild(style);\n });\n }, [])\n\n let selection: any = {}\n if (selectionColor && selectionColor !== 'default') {\n selection = {\n \"&::selection\": {\n bgcolor: `${selectionColor}.primary`,\n color: `${selectionColor}.text`\n }\n }\n }\n\n return (\n <DocumentProvider value={_document ? { document: _document, id: docid } : undefined}>\n <CSSCacheProvider cacheId={CSSCacheId}>\n <AppRootProvider element={() => rootRef.current}>\n <ThemeProvider\n theme={theme}\n onThemeChange={(t) => {\n onThemeChange && onThemeChange(t)\n document.cookie = `xuitm=${t};path=/`\n }}\n {...props}\n ref={mergeRef}\n isRoot\n sx={{\n ...props.sx,\n ...(visibility === \"hidden\" ? { visibility: \"hidden\" } : {}),\n ...selection\n }}\n >\n <BreakpointProvider defaultKey={defaultBreakpoint ?? \"xl\"}>\n {children}\n {!disableRenderar && <RenderRenderar />}\n </BreakpointProvider>\n </ThemeProvider>\n </AppRootProvider>\n </CSSCacheProvider>\n </DocumentProvider>\n )\n})\n\nexport default AppRoot\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqBA;;;;AAIG;;;;AAIA;AACA;;;AAIA;;;AAIG;;;;;AAKA;AACA;AACA;AACG;AACH;;;AAIH;AACG;AACG;;;AAGC;;;;AAWW;AACA;AACH;AAmBlB;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/AppRoot/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { TagComponentType } from '../Tag/types';\nimport { ThemeProvider, ThemeProviderProps } from '../theme';\nimport { BreakpointProvider } from '../breakpoint';\nimport { RenderRenderar } from './Renderar';\nimport { DocumentProvider } from '../Document';\nimport { AppRootProvider } from './AppRootProvider';\nimport useMergeRefs from '../hooks/useMergeRefs';\nimport { CSSCacheProvider } from '../css/CSSCacheProvider';\nimport { BreakpointKeys } from '../css/types';\n\nexport type AppRootProps<T extends TagComponentType = \"div\"> = ThemeProviderProps<T> & {\n noScrollbarCss?: boolean;\n document?: Document;\n CSSCacheId?: string;\n disableRenderar?: boolean;\n defaultBreakpoint?: BreakpointKeys\n selectionColor?: \"default\" | \"brand\" | \"accent\" | \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nconst AppRoot = React.forwardRef(<T extends TagComponentType = \"div\">({ children, defaultBreakpoint, noScrollbarCss, CSSCacheId, theme, onThemeChange, disableRenderar, selectionColor, document: _document, ...props }: AppRootProps<T>, ref: React.Ref<any>) => {\n\n noScrollbarCss ??= false\n selectionColor ??= \"brand\"\n if (typeof window !== \"undefined\") {\n _document ??= document\n }\n disableRenderar ??= false\n const docid = useId()\n const csscacheId = useId()\n CSSCacheId ??= csscacheId\n\n const [visibility, setVisibility] = React.useState<string>(!defaultBreakpoint ? \"hidden\" : \"\");\n const rootRef = useRef(null)\n const mergeRef = useMergeRefs(rootRef, ref)\n\n useLayoutEffect(() => {\n !defaultBreakpoint && setVisibility(\"\");\n }, [])\n\n useEffect(() => {\n if (typeof _document === 'undefined') return;\n document.cookie = `xuitm=${theme.name};path=/`\n const styles = Array.from(_document.querySelectorAll('body style[data-oncss]'));\n styles.forEach((style) => {\n _document.head.appendChild(style);\n });\n }, [])\n\n let selection: any = {}\n if (selectionColor && selectionColor !== 'default') {\n selection = {\n \"&::selection\": {\n bgcolor: `${selectionColor}.primary`,\n color: `${selectionColor}.text`\n }\n }\n }\n\n return (\n <DocumentProvider value={_document ? { document: _document, id: docid } : undefined}>\n <CSSCacheProvider cacheId={CSSCacheId}>\n <AppRootProvider element={() => rootRef.current}>\n <ThemeProvider\n theme={theme}\n onThemeChange={(t) => {\n onThemeChange && onThemeChange(t)\n document.cookie = `xuitm=${t.name};path=/`\n }}\n {...props}\n ref={mergeRef}\n isRoot\n sx={{\n ...props.sx,\n ...(visibility === \"hidden\" ? { visibility: \"hidden\" } : {}),\n ...selection\n }}\n >\n <BreakpointProvider defaultKey={defaultBreakpoint ?? \"xl\"}>\n {children}\n {!disableRenderar && <RenderRenderar />}\n </BreakpointProvider>\n </ThemeProvider>\n </AppRootProvider>\n </CSSCacheProvider>\n </DocumentProvider>\n )\n})\n\nexport default AppRoot\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqBA;;;;AAIG;;;;AAIA;AACA;;;AAIA;;;AAIG;;;;;;AAMA;AACA;AACG;AACH;;;AAIH;AACG;AACG;;;AAGC;;;;AAWW;;AAEH;AAmBlB;;"}
package/Iframe/index.cjs CHANGED
@@ -4,11 +4,12 @@
4
4
  var tslib = require('tslib');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var React = require('react');
7
+ var index$1 = require('../Tag/index.cjs');
7
8
  var core = require('../theme/core.cjs');
8
9
  require('../css/getValue.cjs');
9
10
  require('oncss');
10
- require('../theme/ThemeProvider.cjs');
11
- var index$1 = require('../Tag/index.cjs');
11
+ require('../Document/index.cjs');
12
+ require('../css/CSSCacheProvider.cjs');
12
13
  var reactDom = require('react-dom');
13
14
  var index$2 = require('../AppRoot/index.cjs');
14
15
  var useMergeRefs = require('../hooks/useMergeRefs.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/Iframe/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"../theme\";\nimport Tag from \"../Tag\";\nimport { createPortal } from \"react-dom\";\nimport AppRoot from \"../AppRoot\";\nimport { TagPropsRoot } from \"../Tag/types\";\nimport useMergeRefs from \"../hooks/useMergeRefs\";\n\nconst IframeContext = createContext<{ document: Document | null; window: Window | null; }>({\n document: null,\n window: null,\n});\n\n\nexport type IframeProps = Omit<TagPropsRoot<\"iframe\">, \"component\"> & {\n theme?: string;\n CSSCacheId?: string;\n}\n\nconst Iframe = ({ children, sxr, theme, CSSCacheId, ...props }: IframeProps, ref: React.Ref<HTMLIFrameElement>) => {\n const [doc, setDoc] = useState<Document | null>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const _ref = useMergeRefs(iframeRef, ref)\n const parentTheme = useTheme()\n theme ??= parentTheme.name\n\n useEffect(() => {\n if (!iframeRef.current) return;\n const iframe = iframeRef.current;\n const onLoad = () => setDoc(iframe.contentDocument);\n iframe.addEventListener(\"load\", onLoad);\n return () => iframe.removeEventListener(\"load\", onLoad);\n }, []);\n\n return (\n <>\n <Tag\n {...props}\n component={\"iframe\"}\n sxr={{\n border: 'none',\n width: \"100%\",\n height: \"100%\",\n p: 0,\n m: 0,\n ...sxr\n }}\n ref={_ref}\n srcDoc={\"<!DOCTYPE html><html><head></head><body></body></html>\"}\n />\n {doc &&\n createPortal(\n <IframeContext.Provider\n value={{\n document: doc,\n window: doc.defaultView,\n }}\n >\n <AppRoot disableRenderar theme={theme} document={doc as Document} CSSCacheId={CSSCacheId}>\n {children}\n </AppRoot>\n </IframeContext.Provider>,\n doc.body\n )}\n </>\n );\n}\n\nexport default React.forwardRef(Iframe)"],"names":[],"mappings":";;;;;;;;;;;;;;;AASA;AACG;AACA;AACF;AAQD;AAAgB;;AAEb;;AAEA;;;;;AAKG;;AAEA;;;;AAqBM;AAGS;;;AAYrB;AAEA;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/Iframe/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"../theme\";\nimport Tag from \"../Tag\";\nimport { createPortal } from \"react-dom\";\nimport AppRoot from \"../AppRoot\";\nimport { TagPropsRoot } from \"../Tag/types\";\nimport useMergeRefs from \"../hooks/useMergeRefs\";\n\nconst IframeContext = createContext<{ document: Document | null; window: Window | null; }>({\n document: null,\n window: null,\n});\n\n\nexport type IframeProps = Omit<TagPropsRoot<\"iframe\">, \"component\"> & {\n theme?: string;\n CSSCacheId?: string;\n}\n\nconst Iframe = ({ children, sxr, theme, CSSCacheId, ...props }: IframeProps, ref: React.Ref<HTMLIFrameElement>) => {\n const [doc, setDoc] = useState<Document | null>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const _ref = useMergeRefs(iframeRef, ref)\n const parentTheme = useTheme()\n theme ??= parentTheme.name\n\n useEffect(() => {\n if (!iframeRef.current) return;\n const iframe = iframeRef.current;\n const onLoad = () => setDoc(iframe.contentDocument);\n iframe.addEventListener(\"load\", onLoad);\n return () => iframe.removeEventListener(\"load\", onLoad);\n }, []);\n\n return (\n <>\n <Tag\n {...props}\n component={\"iframe\"}\n sxr={{\n border: 'none',\n width: \"100%\",\n height: \"100%\",\n p: 0,\n m: 0,\n ...sxr\n }}\n ref={_ref}\n srcDoc={\"<!DOCTYPE html><html><head></head><body></body></html>\"}\n />\n {doc &&\n createPortal(\n <IframeContext.Provider\n value={{\n document: doc,\n window: doc.defaultView,\n }}\n >\n <AppRoot disableRenderar theme={theme} document={doc as Document} CSSCacheId={CSSCacheId}>\n {children}\n </AppRoot>\n </IframeContext.Provider>,\n doc.body\n )}\n </>\n );\n}\n\nexport default React.forwardRef(Iframe)"],"names":[],"mappings":";;;;;;;;;;;;;;;;AASA;AACG;AACA;AACF;AAQD;AAAgB;;AAEb;;AAEA;;;;;AAKG;;AAEA;;;;AAqBM;AAGS;;;AAYrB;AAEA;;"}
package/Iframe/index.js CHANGED
@@ -2,11 +2,12 @@
2
2
  import { __rest } from 'tslib';
3
3
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
4
4
  import React__default, { createContext, useState, useRef, useEffect } from 'react';
5
+ import Tag from '../Tag/index.js';
5
6
  import { useTheme } from '../theme/core.js';
6
7
  import '../css/getValue.js';
7
8
  import 'oncss';
8
- import '../theme/ThemeProvider.js';
9
- import Tag from '../Tag/index.js';
9
+ import '../Document/index.js';
10
+ import '../css/CSSCacheProvider.js';
10
11
  import { createPortal } from 'react-dom';
11
12
  import AppRoot from '../AppRoot/index.js';
12
13
  import useMergeRefs from '../hooks/useMergeRefs.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/Iframe/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"../theme\";\nimport Tag from \"../Tag\";\nimport { createPortal } from \"react-dom\";\nimport AppRoot from \"../AppRoot\";\nimport { TagPropsRoot } from \"../Tag/types\";\nimport useMergeRefs from \"../hooks/useMergeRefs\";\n\nconst IframeContext = createContext<{ document: Document | null; window: Window | null; }>({\n document: null,\n window: null,\n});\n\n\nexport type IframeProps = Omit<TagPropsRoot<\"iframe\">, \"component\"> & {\n theme?: string;\n CSSCacheId?: string;\n}\n\nconst Iframe = ({ children, sxr, theme, CSSCacheId, ...props }: IframeProps, ref: React.Ref<HTMLIFrameElement>) => {\n const [doc, setDoc] = useState<Document | null>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const _ref = useMergeRefs(iframeRef, ref)\n const parentTheme = useTheme()\n theme ??= parentTheme.name\n\n useEffect(() => {\n if (!iframeRef.current) return;\n const iframe = iframeRef.current;\n const onLoad = () => setDoc(iframe.contentDocument);\n iframe.addEventListener(\"load\", onLoad);\n return () => iframe.removeEventListener(\"load\", onLoad);\n }, []);\n\n return (\n <>\n <Tag\n {...props}\n component={\"iframe\"}\n sxr={{\n border: 'none',\n width: \"100%\",\n height: \"100%\",\n p: 0,\n m: 0,\n ...sxr\n }}\n ref={_ref}\n srcDoc={\"<!DOCTYPE html><html><head></head><body></body></html>\"}\n />\n {doc &&\n createPortal(\n <IframeContext.Provider\n value={{\n document: doc,\n window: doc.defaultView,\n }}\n >\n <AppRoot disableRenderar theme={theme} document={doc as Document} CSSCacheId={CSSCacheId}>\n {children}\n </AppRoot>\n </IframeContext.Provider>,\n doc.body\n )}\n </>\n );\n}\n\nexport default React.forwardRef(Iframe)"],"names":[],"mappings":";;;;;;;;;;;;;AASA;AACG;AACA;AACF;AAQD;AAAgB;;AAEb;;AAEA;;;;;AAKG;;AAEA;;;;AAqBM;AAGS;;;AAYrB;AAEA;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/Iframe/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"../theme\";\nimport Tag from \"../Tag\";\nimport { createPortal } from \"react-dom\";\nimport AppRoot from \"../AppRoot\";\nimport { TagPropsRoot } from \"../Tag/types\";\nimport useMergeRefs from \"../hooks/useMergeRefs\";\n\nconst IframeContext = createContext<{ document: Document | null; window: Window | null; }>({\n document: null,\n window: null,\n});\n\n\nexport type IframeProps = Omit<TagPropsRoot<\"iframe\">, \"component\"> & {\n theme?: string;\n CSSCacheId?: string;\n}\n\nconst Iframe = ({ children, sxr, theme, CSSCacheId, ...props }: IframeProps, ref: React.Ref<HTMLIFrameElement>) => {\n const [doc, setDoc] = useState<Document | null>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const _ref = useMergeRefs(iframeRef, ref)\n const parentTheme = useTheme()\n theme ??= parentTheme.name\n\n useEffect(() => {\n if (!iframeRef.current) return;\n const iframe = iframeRef.current;\n const onLoad = () => setDoc(iframe.contentDocument);\n iframe.addEventListener(\"load\", onLoad);\n return () => iframe.removeEventListener(\"load\", onLoad);\n }, []);\n\n return (\n <>\n <Tag\n {...props}\n component={\"iframe\"}\n sxr={{\n border: 'none',\n width: \"100%\",\n height: \"100%\",\n p: 0,\n m: 0,\n ...sxr\n }}\n ref={_ref}\n srcDoc={\"<!DOCTYPE html><html><head></head><body></body></html>\"}\n />\n {doc &&\n createPortal(\n <IframeContext.Provider\n value={{\n document: doc,\n window: doc.defaultView,\n }}\n >\n <AppRoot disableRenderar theme={theme} document={doc as Document} CSSCacheId={CSSCacheId}>\n {children}\n </AppRoot>\n </IframeContext.Provider>,\n doc.body\n )}\n </>\n );\n}\n\nexport default React.forwardRef(Iframe)"],"names":[],"mappings":";;;;;;;;;;;;;;AASA;AACG;AACA;AACF;AAQD;AAAgB;;AAEb;;AAEA;;;;;AAKG;;AAEA;;;;AAqBM;AAGS;;;AAYrB;AAEA;;"}
@@ -2,27 +2,88 @@
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 [rect, setRect] = React.useState();
23
+ const [isDisableInitial, setIsDisableInitial] = React.useState(disableInitialTransition);
24
+ const ref = React.useRef(null);
25
+ const doc = index.useDocument();
26
+ const cacheId = CSSCacheProvider.useCSSCacheId();
27
+ let _ease = ease || useAnimation.animationEases[easing] || useAnimation.animationEases.bounce;
28
+ const style = (obj = {}) => {
29
+ return index$1.css(obj, { container: doc === null || doc === void 0 ? void 0 : doc.document, cacheId }).classname;
30
+ };
31
+ let [cls, setCls] = React.useState(() => {
32
+ let props = {};
33
+ if (!isDisableInitial) {
34
+ props.visibility = 'hidden';
35
+ }
36
+ else if (isDisableInitial && !open) {
37
+ props.visibility = 'hidden';
38
+ }
39
+ return style(props);
40
+ });
20
41
  React.useEffect(() => {
21
- setMounted(true);
42
+ var _a;
43
+ const rect = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
44
+ const v = getVariant(rect, variant);
45
+ setCls(style(open ? v.from : v.to));
46
+ setRect(rect);
22
47
  }, []);
23
- if (!mounted)
24
- return null;
25
- return jsxRuntime.jsx(TransitionBase, Object.assign({}, options, { children: children }));
48
+ React.useLayoutEffect(() => {
49
+ if (rect) {
50
+ const v = getVariant(rect, variant);
51
+ let _css = open ? v.to : v.from;
52
+ let trans = ` ${duration}ms ${_ease} ${delay || 0}ms`;
53
+ if (isDisableInitial) {
54
+ trans = '';
55
+ setIsDisableInitial(false);
56
+ }
57
+ let _ = Object.assign(Object.assign({}, _css), { transition: Object.keys(_css || {}).map(k => oncss.formatCSSProp(k)).join(trans + ", ") + trans });
58
+ setCls(style(_));
59
+ const ele = ref.current;
60
+ let stimer = null;
61
+ let etimer = null;
62
+ ele.ontransitionstart = () => {
63
+ clearTimeout(stimer);
64
+ stimer = setTimeout(() => {
65
+ (onOpen && open) && onOpen();
66
+ (onClose && !open) && onClose();
67
+ onState && onState(open ? "open" : "close");
68
+ }, 1);
69
+ };
70
+ ele.ontransitionend = () => {
71
+ clearTimeout(etimer);
72
+ etimer = setTimeout(() => {
73
+ if (onOpened && open)
74
+ onOpened();
75
+ if (onClosed && !open)
76
+ onClosed();
77
+ onState && onState(open ? "opened" : "closed");
78
+ }, 1);
79
+ };
80
+ }
81
+ }, [rect, open, variant]);
82
+ const clone = React.Children.only(children);
83
+ return React.cloneElement(clone, {
84
+ className: cls,
85
+ ref
86
+ });
26
87
  }
27
88
 
28
89
  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, useLayoutEffect, 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 [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) {\n props.visibility = 'hidden'\n } else if (isDisableInitial && !open) {\n props.visibility = 'hidden'\n }\n return style(props)\n })\n\n\n useEffect(() => {\n const rect = ref.current?.getBoundingClientRect() as DOMRect\n const v = getVariant(rect, variant)\n setCls(style(open ? v.from : v.to))\n setRect(rect)\n }, [])\n\n useLayoutEffect(() => {\n if (rect) {\n const v = getVariant(rect, variant)\n let _css: any = open ? v.to : v.from\n let trans = ` ${duration}ms ${_ease} ${delay || 0}ms`\n if (isDisableInitial) {\n trans = ''\n setIsDisableInitial(false)\n }\n let _ = {\n ..._css,\n transition: Object.keys(_css || {}).map(k => formatCSSProp(k)).join(trans + \", \") + trans,\n }\n\n setCls(style(_))\n\n const ele = ref.current as HTMLElement\n let stimer: any = null\n let etimer: any = null\n ele.ontransitionstart = () => {\n clearTimeout(stimer)\n stimer = setTimeout(() => {\n (onOpen && open) && onOpen();\n (onClose && !open) && onClose()\n onState && onState(open ? \"open\" : \"close\")\n }, 1)\n }\n ele.ontransitionend = () => {\n clearTimeout(etimer)\n etimer = setTimeout(() => {\n if (onOpened && open) onOpened();\n if (onClosed && !open) onClosed();\n onState && onState(open ? \"opened\" : \"closed\")\n }, 1)\n }\n }\n }, [rect, open, variant])\n\n const clone: any = Children.only(children);\n return cloneElement(clone, {\n className: cls,\n ref\n });\n}\n\nexport default Transition"],"names":[],"mappings":";;;;;;;;;;;;AA8BA;AACI;AACA;AAAS;AACT;AACJ;AAEA;AAAoB;AAChB;;;AAiBA;AACA;AACA;AACA;AAEA;;AAEA;;;;AAKQ;;AACG;AACH;;AAEJ;AACJ;;;;;AAMI;;;;;;AAOI;;;;;;AAMA;AAKA;AAEA;;;AAGA;;AAEI;AACI;;AAEA;;AAER;AACA;;AAEI;;AAC0B;;AACC;AACvB;;AAER;;;;;AAMJ;;AAEH;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: React__default.RefObject<HTMLElement | null>;
30
+ }, HTMLElement>;
8
31
 
9
32
  export { Transition as default };
10
- export type { TransitionProps };
33
+ export type { TransitionProps, TransitionState, TransitionVariant, TransitionVariantTypes };
@@ -1,26 +1,87 @@
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 { useState, useRef, useEffect, useLayoutEffect, 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 [rect, setRect] = useState();
21
+ const [isDisableInitial, setIsDisableInitial] = useState(disableInitialTransition);
22
+ const ref = useRef(null);
23
+ const doc = useDocument();
24
+ const cacheId = useCSSCacheId();
25
+ let _ease = ease || animationEases[easing] || animationEases.bounce;
26
+ const style = (obj = {}) => {
27
+ return css(obj, { container: doc === null || doc === void 0 ? void 0 : doc.document, cacheId }).classname;
28
+ };
29
+ let [cls, setCls] = useState(() => {
30
+ let props = {};
31
+ if (!isDisableInitial) {
32
+ props.visibility = 'hidden';
33
+ }
34
+ else if (isDisableInitial && !open) {
35
+ props.visibility = 'hidden';
36
+ }
37
+ return style(props);
38
+ });
18
39
  useEffect(() => {
19
- setMounted(true);
40
+ var _a;
41
+ const rect = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
42
+ const v = getVariant(rect, variant);
43
+ setCls(style(open ? v.from : v.to));
44
+ setRect(rect);
20
45
  }, []);
21
- if (!mounted)
22
- return null;
23
- return jsx(TransitionBase, Object.assign({}, options, { children: children }));
46
+ useLayoutEffect(() => {
47
+ if (rect) {
48
+ const v = getVariant(rect, variant);
49
+ let _css = open ? v.to : v.from;
50
+ let trans = ` ${duration}ms ${_ease} ${delay || 0}ms`;
51
+ if (isDisableInitial) {
52
+ trans = '';
53
+ setIsDisableInitial(false);
54
+ }
55
+ let _ = Object.assign(Object.assign({}, _css), { transition: Object.keys(_css || {}).map(k => formatCSSProp(k)).join(trans + ", ") + trans });
56
+ setCls(style(_));
57
+ const ele = ref.current;
58
+ let stimer = null;
59
+ let etimer = null;
60
+ ele.ontransitionstart = () => {
61
+ clearTimeout(stimer);
62
+ stimer = setTimeout(() => {
63
+ (onOpen && open) && onOpen();
64
+ (onClose && !open) && onClose();
65
+ onState && onState(open ? "open" : "close");
66
+ }, 1);
67
+ };
68
+ ele.ontransitionend = () => {
69
+ clearTimeout(etimer);
70
+ etimer = setTimeout(() => {
71
+ if (onOpened && open)
72
+ onOpened();
73
+ if (onClosed && !open)
74
+ onClosed();
75
+ onState && onState(open ? "opened" : "closed");
76
+ }, 1);
77
+ };
78
+ }
79
+ }, [rect, open, variant]);
80
+ const clone = Children.only(children);
81
+ return cloneElement(clone, {
82
+ className: cls,
83
+ ref
84
+ });
24
85
  }
25
86
 
26
87
  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, useLayoutEffect, 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 [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) {\n props.visibility = 'hidden'\n } else if (isDisableInitial && !open) {\n props.visibility = 'hidden'\n }\n return style(props)\n })\n\n\n useEffect(() => {\n const rect = ref.current?.getBoundingClientRect() as DOMRect\n const v = getVariant(rect, variant)\n setCls(style(open ? v.from : v.to))\n setRect(rect)\n }, [])\n\n useLayoutEffect(() => {\n if (rect) {\n const v = getVariant(rect, variant)\n let _css: any = open ? v.to : v.from\n let trans = ` ${duration}ms ${_ease} ${delay || 0}ms`\n if (isDisableInitial) {\n trans = ''\n setIsDisableInitial(false)\n }\n let _ = {\n ..._css,\n transition: Object.keys(_css || {}).map(k => formatCSSProp(k)).join(trans + \", \") + trans,\n }\n\n setCls(style(_))\n\n const ele = ref.current as HTMLElement\n let stimer: any = null\n let etimer: any = null\n ele.ontransitionstart = () => {\n clearTimeout(stimer)\n stimer = setTimeout(() => {\n (onOpen && open) && onOpen();\n (onClose && !open) && onClose()\n onState && onState(open ? \"open\" : \"close\")\n }, 1)\n }\n ele.ontransitionend = () => {\n clearTimeout(etimer)\n etimer = setTimeout(() => {\n if (onOpened && open) onOpened();\n if (onClosed && !open) onClosed();\n onState && onState(open ? \"opened\" : \"closed\")\n }, 1)\n }\n }\n }, [rect, open, variant])\n\n const clone: any = Children.only(children);\n return cloneElement(clone, {\n className: cls,\n ref\n });\n}\n\nexport default Transition"],"names":[],"mappings":";;;;;;;;;;AA8BA;AACI;AACA;AAAS;AACT;AACJ;AAEA;AAAoB;AAChB;;;AAiBA;AACA;AACA;AACA;AAEA;;AAEA;;;;AAKQ;;AACG;AACH;;AAEJ;AACJ;;;;;AAMI;;;;;;AAOI;;;;;;AAMA;AAKA;AAEA;;;AAGA;;AAEI;AACI;;AAEA;;AAER;AACA;;AAEI;;AAC0B;;AACC;AACvB;;AAER;;;;;AAMJ;;AAEH;AACL;;"}