polpo 0.1.2 → 0.1.4
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/.turbo/turbo-lint.log +1 -1
- package/dist/chunk-LWUSFVRE.js +3 -0
- package/dist/chunk-LWUSFVRE.js.map +1 -0
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +2 -2
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +1 -1
- package/dist/ui.cjs +53 -53
- package/dist/ui.cjs.map +1 -1
- package/dist/ui.d.cts +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +57 -57
- package/dist/ui.js.map +1 -1
- package/package.json +6 -4
- package/src/components/cursor/cursor.stories.tsx +3 -2
- package/src/components/form/checkbox/checkbox.stories.tsx +1 -2
- package/src/components/form/field/field.stories.tsx +1 -2
- package/src/components/form/select/select.style.ts +1 -1
- package/src/components/modals/action-modal/action-modal.stories.tsx +6 -2
- package/src/components/modals/aside-modal/aside-modal.stories.tsx +4 -1
- package/src/components/modals/aside-modal/aside-modal.style.ts +1 -1
- package/src/components/modals/menu/menu.stories.tsx +1 -1
- package/src/components/modals/menu/menu.style.ts +1 -1
- package/src/components/modals/menu/menu.tsx +7 -10
- package/src/components/modals/modal/modal.stories.tsx +4 -1
- package/src/components/modals/modal/modal.tsx +2 -1
- package/src/components/modals/portal/portal.tsx +7 -3
- package/src/components/tabs/tabs-list.tsx +1 -1
- package/src/components/tooltips/tooltip/tooltip.style.ts +1 -1
- package/src/hooks/use-dom-container.ts +13 -17
- package/tsconfig.json +0 -1
- package/.turbo/turbo-build.log +0 -0
- package/dist/chunk-CFYQBHH5.js +0 -3
- package/dist/chunk-CFYQBHH5.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polpo",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"imports": {
|
|
8
|
-
"@
|
|
9
|
-
"@
|
|
10
|
-
"@
|
|
8
|
+
"@polpo/ui": "./src",
|
|
9
|
+
"@polpo/hooks": "./src/hooks",
|
|
10
|
+
"@polpo/helpers": "./src/helpers"
|
|
11
11
|
},
|
|
12
12
|
"exports": {
|
|
13
13
|
".": null,
|
|
@@ -45,7 +45,9 @@
|
|
|
45
45
|
"build-storybook": "storybook build"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
+
"@juanmsl/eslint-config": "*",
|
|
48
49
|
"@juanmsl/svg-to-react": "*",
|
|
50
|
+
"@juanmsl/tsconfig": "*",
|
|
49
51
|
"@storybook/addon-essentials": "^8.5.2",
|
|
50
52
|
"@storybook/addon-interactions": "^8.5.2",
|
|
51
53
|
"@storybook/addon-links": "^8.5.2",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SectionLayout } from '../../layouts';
|
|
2
|
+
import { Typography } from '../typography';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
+
import { Cursor } from './cursor';
|
|
4
5
|
|
|
5
6
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
6
7
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import { ColorVariants } from '../../../core/variants';
|
|
4
|
+
import { SectionLayout } from '../../../layouts';
|
|
4
5
|
import { IconNames } from '../../icon';
|
|
5
6
|
import { UnControlledComponentArgTypes } from '../form.stories.types';
|
|
6
7
|
|
|
7
8
|
import { Checkbox } from './checkbox';
|
|
8
9
|
|
|
9
|
-
import { SectionLayout } from '@polpo/ui';
|
|
10
|
-
|
|
11
10
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
12
11
|
|
|
13
12
|
const meta: Meta<typeof Checkbox> = {
|
|
@@ -2,8 +2,7 @@ import { IconNames } from '../../icon';
|
|
|
2
2
|
import { ContainerDecorator } from '../form.stories.types';
|
|
3
3
|
|
|
4
4
|
import { Field } from './field';
|
|
5
|
-
|
|
6
|
-
import { FieldOrientation, FieldVariant } from '@polpo/ui';
|
|
5
|
+
import { FieldOrientation, FieldVariant } from './field.types';
|
|
7
6
|
|
|
8
7
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
9
8
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { Grid } from '../../../layouts';
|
|
4
|
+
import { Button } from '../../buttons';
|
|
5
|
+
import { IconNames } from '../../icon';
|
|
6
|
+
import { Line } from '../../line';
|
|
7
|
+
import { Typography } from '../../typography';
|
|
4
8
|
|
|
5
|
-
import {
|
|
9
|
+
import { ActionModal } from './action-modal';
|
|
6
10
|
|
|
7
11
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
8
12
|
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
|
|
3
|
+
import { Button } from '../../buttons';
|
|
4
|
+
import { Image } from '../../image';
|
|
5
|
+
import { Typography } from '../../typography';
|
|
6
|
+
|
|
3
7
|
import { AsideModal } from './aside-modal';
|
|
4
8
|
|
|
5
9
|
import { PositionContainer } from '@polpo/helpers';
|
|
6
|
-
import { Button, Image, Typography } from '@polpo/ui';
|
|
7
10
|
|
|
8
11
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
9
12
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Button } from '../../buttons';
|
|
2
|
+
import { ModalBackdrop } from '../modal';
|
|
2
3
|
|
|
3
4
|
import { Menu } from './menu';
|
|
4
5
|
|
|
5
6
|
import { PositionContainer } from '@polpo/helpers';
|
|
6
7
|
import { useModal } from '@polpo/hooks';
|
|
7
|
-
import { ModalBackdrop } from '@polpo/ui';
|
|
8
8
|
|
|
9
9
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
10
10
|
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from 'react';
|
|
2
2
|
|
|
3
|
+
import { Checkbox } from '../../form';
|
|
4
|
+
import { Icon, IconNameT } from '../../icon';
|
|
5
|
+
import { InfinityScroll, InfinityScrollProps } from '../../infinity-scroll';
|
|
6
|
+
import { Line } from '../../line';
|
|
7
|
+
import { Typography } from '../../typography';
|
|
8
|
+
import { ModalProps } from '../modal';
|
|
9
|
+
|
|
3
10
|
import { MenuModalStyle, MenuOptionStyle } from './menu.style';
|
|
4
11
|
|
|
5
12
|
import { useClassNames } from '@polpo/hooks';
|
|
6
|
-
import {
|
|
7
|
-
Checkbox,
|
|
8
|
-
Icon,
|
|
9
|
-
IconNameT,
|
|
10
|
-
InfinityScroll,
|
|
11
|
-
InfinityScrollProps,
|
|
12
|
-
Line,
|
|
13
|
-
ModalProps,
|
|
14
|
-
Typography,
|
|
15
|
-
} from '@polpo/ui';
|
|
16
13
|
|
|
17
14
|
export type MenuOptionProps = {
|
|
18
15
|
id?: string;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { Grid } from '../../../layouts';
|
|
1
2
|
import { Button } from '../../buttons';
|
|
3
|
+
import { Line } from '../../line';
|
|
4
|
+
import { Typography } from '../../typography';
|
|
2
5
|
|
|
6
|
+
import { ModalBackdrop } from './backdrop';
|
|
3
7
|
import { Modal as ModalComponent, ModalProps } from './modal';
|
|
4
8
|
|
|
5
9
|
import { PositionContainer } from '@polpo/helpers';
|
|
6
10
|
import { useModal } from '@polpo/hooks';
|
|
7
|
-
import { Grid, Line, ModalBackdrop, Typography } from '@polpo/ui';
|
|
8
11
|
|
|
9
12
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
10
13
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { CSSProperties, useLayoutEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
+
import { Portal } from '../portal';
|
|
4
|
+
|
|
3
5
|
import { Backdrop, BackdropProps } from './backdrop';
|
|
4
6
|
import { ModalContentStyle, ModalStyle } from './modal.style';
|
|
5
7
|
|
|
6
8
|
import { ModalState, useClassNames, useModalInContainer, UseModalInContainerParams } from '@polpo/hooks';
|
|
7
|
-
import { Portal } from '@polpo/ui';
|
|
8
9
|
|
|
9
10
|
export type ModalProps = Omit<BackdropProps, 'modalState'> &
|
|
10
11
|
Omit<UseModalInContainerParams, 'modalRef' | 'onClose'> & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { forwardRef, ReactNode, useMemo } from 'react';
|
|
2
2
|
import { createPortal } from 'react-dom';
|
|
3
3
|
|
|
4
4
|
import { useDomContainer } from '@polpo/hooks';
|
|
@@ -8,9 +8,13 @@ type PortalProps = {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
const PortalComponent = ({ children, id }: PortalProps
|
|
11
|
+
const PortalComponent = ({ children, id }: PortalProps) => {
|
|
12
12
|
const uuid = useMemo(() => crypto.randomUUID(), []);
|
|
13
|
-
const root = useDomContainer(`${id}-${uuid}
|
|
13
|
+
const root = useDomContainer(`${id}-${uuid}`);
|
|
14
|
+
|
|
15
|
+
if (root === null) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
14
18
|
|
|
15
19
|
return createPortal(children, root);
|
|
16
20
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { useTheme } from 'styled-components';
|
|
3
3
|
|
|
4
|
+
import { ThemeColor } from '../../contexts';
|
|
4
5
|
import { RadiusVariants, SizeVariants } from '../../core/variants';
|
|
5
6
|
|
|
6
7
|
import { Tabs } from './tabs';
|
|
7
8
|
import { TabListStyle, TabListColorStyle } from './tabs.style';
|
|
8
9
|
|
|
9
10
|
import { useClassNames } from '@polpo/hooks';
|
|
10
|
-
import { ThemeColor } from '@polpo/ui';
|
|
11
11
|
|
|
12
12
|
const DefaultRect = {
|
|
13
13
|
top: 0,
|
|
@@ -1,32 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect, useMemo } from 'react';
|
|
2
2
|
|
|
3
|
-
export const useDomContainer = (containerID: string
|
|
3
|
+
export const useDomContainer = (containerID: string) => {
|
|
4
4
|
useEffect(() => {
|
|
5
|
-
|
|
6
|
-
const domContainer = document.getElementById(containerID);
|
|
5
|
+
const domContainer = document.getElementById(containerID);
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
if (domContainer === null) {
|
|
8
|
+
return () => {
|
|
9
|
+
if (domContainer) {
|
|
10
|
+
document.body.removeChild(domContainer);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}, [containerID]);
|
|
13
15
|
|
|
14
16
|
return useMemo(() => {
|
|
15
17
|
let domContainer = document.getElementById(containerID);
|
|
16
18
|
|
|
17
|
-
if (
|
|
19
|
+
if (domContainer === null) {
|
|
18
20
|
domContainer = document.createElement('div');
|
|
19
21
|
domContainer.setAttribute('id', containerID);
|
|
20
22
|
|
|
21
|
-
if (typeof ref === 'function') {
|
|
22
|
-
ref(domContainer);
|
|
23
|
-
} else if (ref) {
|
|
24
|
-
ref.current = domContainer;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
23
|
document.body.appendChild(domContainer);
|
|
28
24
|
}
|
|
29
25
|
|
|
30
26
|
return domContainer;
|
|
31
|
-
}, [containerID
|
|
27
|
+
}, [containerID]);
|
|
32
28
|
};
|
package/tsconfig.json
CHANGED
package/.turbo/turbo-build.log
DELETED
|
File without changes
|
package/dist/chunk-CFYQBHH5.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import{a as R,h as O,i as S}from"./chunk-MAWW6AA7.js";import{useCallback as p,useMemo as $,useReducer as X}from"react";import{useCallback as U,useLayoutEffect as z,useRef as V}from"react";var C=e=>{let t=V(!1);return z(()=>(t.current=!0,()=>{t.current=!1}),[]),U((...n)=>{t.current&&e(...n)},[e])};var Y=(e,t)=>{switch(t.type){case"pending":return{status:"pending",data:null,error:null};case"resolved":return{status:"resolved",data:t.data,error:null};case"rejected":return{status:"rejected",data:null,error:t.error};default:throw new Error(`Unhandled action: ${JSON.stringify(t)}`)}},_e=e=>{let[t,n]=X(Y,{status:"idle",data:null,error:null,...e}),o=C(n),r=p(a=>{o({type:"pending"}),a.then(c=>{o({type:"resolved",data:c})},c=>{o({type:"rejected",error:c})})},[o]),s=p(a=>o({type:"resolved",data:a}),[o]),i=p(a=>o({type:"rejected",error:a}),[o]);return $(()=>({setData:s,setError:i,run:r,...t}),[t,r,s,i])};import{useMemo as Q}from"react";var Ze=e=>Q(()=>Object.entries(e).reduce((t,[n,o])=>o?[...t,n]:t,[]).join(" "),[e]);import{useEffect as W,useLayoutEffect as B,useRef as J}from"react";function l(e,t,n,o){let r=J(t);W(()=>{r.current=t},[t]),B(()=>{let s=n?.current??window;if(!(s&&s.addEventListener))return;let i=a=>r.current(a);return s.addEventListener(e,i,o),()=>{s.removeEventListener(e,i,o)}},[e,n,o])}var _=(e,t)=>e.current&&!e.current.contains(t),h=(e,t)=>{l("keydown",n=>{n.key==="Escape"&&t()}),l("mousedown",n=>{let o=n.target;if(!o?.isConnected)return;(Array.isArray(e)?e:[e]).every(s=>_(s,o))&&t()})};import{useState as q}from"react";var at=e=>q(e)[0];import{useState as K,useCallback as L}from"react";var Z=e=>{let t=[];if(e.expires instanceof Date)t.push(`expires=${e.expires.toUTCString()}`);else if(typeof e.days=="number"){let n=new Date;n.setTime(n.getTime()+e.days*24*60*60*1e3),t.push(`expires=${n.toUTCString()}`)}return typeof e.maxAge=="number"&&t.push(`max-age=${e.maxAge}`),t.push(`path=${e.path??"/"}`),e.domain&&t.push(`domain=${e.domain}`),e.secure&&t.push("secure"),e.sameSite&&t.push(`SameSite=${e.sameSite}`),t.length>0?`; ${t.join("; ")}`:""},A=(e,t,n={})=>{if(typeof document>"u")return;let o=encodeURIComponent(t),r=Z(n);document.cookie=`${e}=${o}${r}`},ee=e=>{if(typeof document>"u")return null;let t=`${e}=`,n=document.cookie?document.cookie.split(";"):[];for(let o of n){let r=o.trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null},te=(e,t={})=>{typeof document>"u"||A(e,"",{...t,days:-1})},lt=(e,t,n={})=>{let[o,r]=K(()=>{let a=ee(e);if(a!==null)try{return JSON.parse(a)}catch{return t}return t}),s=L((a,c={})=>{let u={...n,...c},m=JSON.stringify(a);A(e,m,u),r(a)},[e,n]),i=L(()=>{te(e,n),r(t)},[e,t,n]);return[o,s,i]};import{useEffect as ne,useState as oe}from"react";var ft=(e,t=500)=>{let[n,o]=oe(e);return ne(()=>{let r=setTimeout(()=>o(e),t);return()=>{clearTimeout(r)}},[e,t]),n};import{useState as se}from"react";import{useEffect as re}from"react";var f=(e,t)=>{re(()=>{let n=Array.isArray(e)?e:[e],o=new ResizeObserver(t);return n.forEach(r=>r.current&&o.observe(r.current)),()=>{o.disconnect()}},[e,t])};var gt=e=>{let[t,n]=se({width:0,height:0});return f(e,([o])=>{if((o?.borderBoxSize??[])[0]){let{inlineSize:r,blockSize:s}=o.borderBoxSize[0];n({width:r,height:s})}else if(o.contentRect){let{width:r,height:s}=o.contentRect;n({width:r,height:s})}}),t};import{useEffect as ie,useMemo as ae}from"react";var Ot=(e,t)=>(ie(()=>()=>{let n=document.getElementById(e);n?.parentNode===document.body&&document.body.removeChild(n)},[e,t]),ae(()=>{let n=document.getElementById(e);return n||(n=document.createElement("div"),n.setAttribute("id",e),typeof t=="function"?t(n):t&&(t.current=n),document.body.appendChild(n)),n},[e,t]));import{useEffect as ce,useState as ue}from"react";var le=(n=>(n.PNG="image/png",n.PDF="application/pdf",n))(le||{}),Lt=e=>{let[t,n]=ue([]);return ce(()=>{let o=[],r=!1;if(!Array.isArray(e)||e.length===0)n([]);else{let s=e.map(i=>new Promise((a,c)=>{let u=new FileReader;o.push(u),u.onload=m=>{m.target?.result&&a({name:i.name,size:i.size,formatSize:R(i.size),type:i.type,url:m.target.result})},u.onabort=()=>{c(new Error("File reading aborted"))},u.onerror=()=>{c(new Error("Failed to read file"))},u.readAsDataURL(i)}));Promise.all(s).then(i=>{r||n(i)})}return()=>{r=!0,o.forEach(s=>{s.abort()})}},[e]),t};import{useEffect as me,useRef as de,useState as E}from"react";var kt=()=>{let[e,t]=E(null),[n,o]=E(null),[r,s]=E(!0),i=de(null);return me(()=>{if(!navigator.geolocation){o({code:0,message:"Geolocation is not supported by your browser."}),s(!1);return}let a=u=>{t({...u.coords,timestamp:u.timestamp}),s(!1)},c=u=>{o({code:u.code,message:u.message}),s(!1)};return navigator.geolocation.getCurrentPosition(a,c),i.current=navigator.geolocation.watchPosition(a,c),()=>{i.current!==null&&navigator.geolocation.clearWatch(i.current)}},[]),{data:e,error:n,isLoading:r}};import{useCallback as P,useRef as fe,useState as pe}from"react";var It=()=>{let[e,t]=pe(!1),n=fe(null),o=P(()=>t(!0),[]),r=P(()=>t(!1),[]);return l("mouseenter",o,n),l("mouseleave",r,n),e};import{useRef as ve,useState as Te}from"react";import{useEffect as Ee}from"react";var k=(e,t,n={})=>{Ee(()=>{let o=Array.isArray(e)?e:[e],r=new IntersectionObserver(t,n);return o.forEach(s=>s.current&&r.observe(s.current)),()=>{r.disconnect()}},[t,n,e])};var Vt=(e={})=>{let[t,n]=Te(!1),o=ve(null);return k(o,([r])=>{n(r.isIntersecting)},e),{ref:o,inView:t}};import{useCallback as v,useState as ye}from"react";var Qt=({onBlur:e,onFocus:t,onChange:n}={})=>{let[o,r]=ye(!1),s=v(c=>{r(!0),t&&t(c)},[t]),i=v(c=>{r(!1),e&&e(c)},[e]),a=v(c=>{n&&n(c)},[n]);return{isFocus:o,handlers:{onFocus:s,onBlur:i,onChange:a}}};import{useEffect as be,useState as ge}from"react";var Jt=e=>{let[t,n]=ge(!1);return be(()=>{let o=window.matchMedia(e);o.matches!==t&&n(o.matches);let r=()=>{n(o.matches)};return o.addEventListener("change",r),()=>{o.removeEventListener("change",r)}},[t,e]),t};import{useRef as xe,useState as Me}from"react";var Kt=()=>{let e=xe(null),[t,n]=Me(!1);return{containerRef:e,isOpen:t,openModal:()=>{n(!0)},closeModal:()=>{n(!1)}}};import{useCallback as D,useLayoutEffect as he,useRef as Le}from"react";import Re,{useCallback as w,useEffect as Oe,useMemo as Se}from"react";var Ce=(r=>(r.OPENING="OPENING",r.OPEN="OPEN",r.CLOSING="CLOSING",r.CLOSED="CLOSED",r))(Ce||{}),N=(e=0,t=()=>null)=>{let[n,o]=Re.useState("CLOSED"),r=Se(()=>n!=="CLOSED",[n]);Oe(()=>{document.documentElement.style.overflow=r?"hidden":"auto"},[r]);let s=w(()=>{["OPENING","OPEN"].includes(n)&&(e>0?(o("CLOSING"),setTimeout(()=>{o("CLOSED"),t()},e)):o("CLOSED"))},[t,n,e]),i=w(()=>{["CLOSING","CLOSED"].includes(n)&&(e>0?(o("OPENING"),setTimeout(()=>{o("OPEN")},e)):o("OPEN"))},[n,e]);return{isVisible:r,closeModal:s,openModal:i,modalState:n}};var I=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),dn=({closeOnClickOutside:e=!0,offset:t=0,windowOffset:n=0,position:o="bottom",transitionDuration:r=0,modalRef:s,containerRef:i,onClose:a})=>{let c=Le(null),u=N(r,a),{isVisible:m,closeModal:G}=u;h(s,()=>{m&&e&&G()});let T=D((y,F)=>{let b=y.current?.getClientRects()[0],g=F.current?.getClientRects()[0];if(!b)return;let x=g?O({c:I(g),m:I(b),offset:t,windowOffset:n,position:o}):S({position:o,windowOffset:n});Object.keys(x).forEach(M=>{y.current?.style.setProperty(M,x[M])})},[o,n,t]),d=D(()=>{m&&T(s,i??c)},[T,m,i,s]);return he(d,[d]),f(i??c,d),f(s,d),l("resize",d),l("scroll",d,s),u};import{useRef as Ae,useState as Pe}from"react";var H=(e,t)=>{let{left:n,top:o}=e,r=n+window.scrollX,s=o+window.scrollY,i=t.pageX-r,a=t.pageY-s;return{x:t.pageX,y:t.pageY,elementX:i,elementY:a,elementPositionX:r,elementPositionY:s}},Tn=e=>{let t=Ae(null),[n,o]=Pe({x:null,y:null,elementX:null,elementY:null,elementPositionX:null,elementPositionY:null});return l("mousemove",s=>{let{clientX:i,clientY:a}=s;if(o(c=>({...c,x:i,y:a})),e?.current instanceof Element){let c=H(e.current.getBoundingClientRect(),s);o(u=>({...u,...c}))}else if(t.current instanceof Element){let c=H(t.current.getBoundingClientRect(),s);o(u=>({...u,...c}))}}),{...n,ref:t}};import{useState as ke}from"react";var xn=()=>{let[e,t]=ke(navigator.onLine);return l("online",()=>t(navigator.onLine)),l("offline",()=>t(navigator.onLine)),e};import{useEffect as we,useRef as Ne}from"react";var On=()=>{let e=Ne(1);return we(()=>{e.current++}),e.current};import{useEffect as De,useRef as Ie,useState as He}from"react";var hn=()=>{let e=Ie(null),[t,n]=He([0,0]);return De(()=>{let o=e.current,r=()=>{o&&n([o.scrollLeft,o.scrollTop])};return o&&o.addEventListener("scroll",r),()=>{o&&o.removeEventListener("scroll",r)}},[]),{ref:e,position:t}};import{useEffect as je,useState as j}from"react";function wn(e){let[t,n]=j(e),[o,r]=j([]);return je(()=>{t!==void 0&&r(s=>[...s,t])},[t]),[t,n,o]}import{useCallback as Ge,useState as Fe}from"react";var In=(e=!1)=>{let[t,n]=Fe(e),o=Ge(()=>{n(r=>!r)},[]);return[t,o,n]};import{useCallback as Ue,useState as ze}from"react";var Gn=(e,t=0)=>{let[n,o]=ze(t),r=Ue(s=>{o(s!==void 0?s:i=>(i+1)%e.length)},[e.length]);return[e[n],r]};import{useEffect as Ve,useState as $e}from"react";var Vn=()=>{let e=()=>{let{innerWidth:o,innerHeight:r}=window;return{width:o,height:r,orientation:o>r?"landscape":"portrait"}},[t,n]=$e(e);return l("resize",()=>{n(e())}),Ve(()=>{n(e())},[]),t};export{C as a,_e as b,Ze as c,l as d,h as e,at as f,lt as g,ft as h,f as i,gt as j,Ot as k,le as l,Lt as m,kt as n,It as o,k as p,Vt as q,Qt as r,Jt as s,Kt as t,Ce as u,N as v,dn as w,Tn as x,xn as y,On as z,hn as A,wn as B,In as C,Gn as D,Vn as E};
|
|
3
|
-
//# sourceMappingURL=chunk-CFYQBHH5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-async.ts","../src/hooks/use-safe-dispatch.ts","../src/hooks/use-classnames.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-click-outside.ts","../src/hooks/use-constant.ts","../src/hooks/use-cookie.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-resize-observer.ts","../src/hooks/use-dom-container.ts","../src/hooks/use-file-reader.ts","../src/hooks/use-geolocation.ts","../src/hooks/use-hover.ts","../src/hooks/use-in-view.ts","../src/hooks/use-intersection-observer.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-modal-transition.ts","../src/hooks/use-mouse-position.ts","../src/hooks/use-online-status.ts","../src/hooks/use-render-count.ts","../src/hooks/use-scroll.ts","../src/hooks/use-state-history.ts","../src/hooks/use-toggle.ts","../src/hooks/use-toggle-values.ts","../src/hooks/use-viewport.ts"],"sourcesContent":["import React, { useCallback, useMemo, useReducer } from 'react';\n\nimport { useSafeDispatch } from './use-safe-dispatch';\n\ntype AsyncState<T> =\n | {\n status: 'idle' | 'pending';\n data?: null;\n error?: null;\n }\n | {\n status: 'resolved';\n data: T;\n error: null;\n }\n | {\n status: 'rejected';\n data: null;\n error: Error;\n };\n\ntype AsyncAction<T> =\n | { type: 'reset' }\n | { type: 'pending' }\n | { type: 'resolved'; data: T }\n | { type: 'rejected'; error: Error };\n\nconst asyncReducer = <T>(_state: AsyncState<T>, action: AsyncAction<T>): AsyncState<T> => {\n switch (action.type) {\n case 'pending': {\n return { status: 'pending' as const, data: null, error: null };\n }\n case 'resolved': {\n return { status: 'resolved' as const, data: action.data, error: null };\n }\n case 'rejected': {\n return { status: 'rejected' as const, data: null, error: action.error };\n }\n default: {\n throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n }\n }\n};\n\nexport const useAsync = <T>(\n initialState?: AsyncState<T>,\n): AsyncState<T> & {\n setData: (data: T) => void;\n setError: (error: Error) => void;\n run: (promise: Promise<T>) => void;\n} => {\n const [asyncState, unsafeDispatch] = useReducer<React.Reducer<AsyncState<T>, AsyncAction<T>>>(asyncReducer, {\n status: 'idle',\n data: null,\n error: null,\n ...initialState,\n });\n const dispatch = useSafeDispatch(unsafeDispatch);\n\n const run = useCallback(\n (promise: Promise<T>) => {\n dispatch({ type: 'pending' });\n promise.then(\n data => {\n dispatch({ type: 'resolved', data });\n },\n (error: Error) => {\n dispatch({ type: 'rejected', error });\n },\n );\n },\n [dispatch],\n );\n\n const setData = useCallback((data: T) => dispatch({ type: 'resolved', data }), [dispatch]);\n\n const setError = useCallback((error: Error) => dispatch({ type: 'rejected', error }), [dispatch]);\n\n return useMemo(\n () => ({\n setData,\n setError,\n run,\n ...asyncState,\n }),\n [asyncState, run, setData, setError],\n );\n};\n","import React, { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {\n const mounted = useRef(false);\n\n useLayoutEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<React.Dispatch<T>>) => {\n if (mounted.current) {\n dispatch(...args);\n }\n },\n [dispatch],\n );\n};\n","import { useMemo } from 'react';\n\nexport const useClassNames = (classes: Record<string, boolean>): string =>\n useMemo<string>(\n () =>\n Object.entries(classes)\n .reduce<Array<string>>(\n (compiledClassNames, [classname, value]) => (value ? [...compiledClassNames, classname] : compiledClassNames),\n [],\n )\n .join(' '),\n [classes],\n );\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nfunction useEventListener<EventName extends keyof MediaQueryListEventMap>(\n eventName: EventName,\n callback: (event: MediaQueryListEventMap[EventName]) => void,\n element: RefObject<MediaQueryList> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof WindowEventMap>(\n eventName: EventName,\n callback: (event: WindowEventMap[EventName]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof HTMLElementEventMap, ElementRef extends HTMLElement = HTMLDivElement>(\n eventName: EventName,\n callback: (event: HTMLElementEventMap[EventName]) => void,\n element: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof DocumentEventMap>(\n eventName: EventName,\n callback: (event: DocumentEventMap[EventName]) => void,\n element: RefObject<Document> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n MediaQueryEventName extends keyof MediaQueryListEventMap,\n WindowEventName extends keyof WindowEventMap,\n ElementEventName extends keyof HTMLElementEventMap,\n DocumentEventName extends keyof DocumentEventMap,\n ElementRef extends HTMLElement | MediaQueryList | Document | Window | void = void,\n>(\n eventName: WindowEventName | DocumentEventName | ElementEventName | MediaQueryEventName,\n callback: (\n event:\n | MediaQueryListEventMap[MediaQueryEventName]\n | WindowEventMap[WindowEventName]\n | HTMLElementEventMap[ElementEventName]\n | DocumentEventMap[DocumentEventName]\n | Event,\n ) => void,\n element?: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n) {\n const callbackRef = useRef<EventListener>(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const targetElement = element?.current ?? window;\n\n if (!(targetElement && targetElement.addEventListener)) return;\n\n const listener: typeof callback = event => callbackRef.current(event);\n\n targetElement.addEventListener(eventName, listener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nconst checkIsOutside = (ref: RefObject<HTMLElement>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: () => void,\n) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n const target = event.target as Node;\n\n if (!target?.isConnected) {\n return;\n }\n\n const isOutside = (Array.isArray(ref) ? ref : [ref]).every(r => checkIsOutside(r, target));\n\n if (isOutside) {\n callback();\n }\n });\n};\n","import { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\n","import { useState, useCallback } from 'react';\n\nexport type CookieOptions = {\n days?: number;\n expires?: Date;\n maxAge?: number;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n};\n\nconst generateCookieAttributes = (options: CookieOptions): string => {\n const parts: Array<string> = [];\n\n if (options.expires instanceof Date) {\n parts.push(`expires=${options.expires.toUTCString()}`);\n } else if (typeof options.days === 'number') {\n const date = new Date();\n date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000);\n parts.push(`expires=${date.toUTCString()}`);\n }\n\n if (typeof options.maxAge === 'number') {\n parts.push(`max-age=${options.maxAge}`);\n }\n\n parts.push(`path=${options.path ?? '/'}`);\n\n if (options.domain) {\n parts.push(`domain=${options.domain}`);\n }\n\n if (options.secure) {\n parts.push('secure');\n }\n\n if (options.sameSite) {\n parts.push(`SameSite=${options.sameSite}`);\n }\n\n return parts.length > 0 ? `; ${parts.join('; ')}` : '';\n};\n\nconst setCookie = (name: string, value: string, options: CookieOptions = {}): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const encodedValue = encodeURIComponent(value);\n const attributes = generateCookieAttributes(options);\n document.cookie = `${name}=${encodedValue}${attributes}`;\n};\n\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEq = `${name}=`;\n const cookies = document.cookie ? document.cookie.split(';') : [];\n\n for (const cookie of cookies) {\n const cookieTrimmed = cookie.trim();\n\n if (cookieTrimmed.indexOf(nameEq) === 0) {\n return decodeURIComponent(cookieTrimmed.substring(nameEq.length));\n }\n }\n\n return null;\n};\n\nconst deleteCookie = (name: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // Ensure the same path/domain so that the deletion matches the existing cookie.\n setCookie(name, '', {\n ...options,\n days: -1,\n });\n};\n\ntype UpdateCookie<T> = (value: T, overrideOptions?: CookieOptions) => void;\ntype RemoveCookie = () => void;\n\nexport const useCookie = <T = unknown>(\n cookieName: string,\n defaultValue?: T,\n options: CookieOptions = {},\n): [T, UpdateCookie<T>, RemoveCookie] => {\n const [cookieValue, setCookieValue] = useState<T>(() => {\n const rawCookie = getCookie(cookieName);\n\n if (rawCookie !== null) {\n try {\n return JSON.parse(rawCookie) as T;\n } catch {\n return defaultValue as T;\n }\n }\n\n return defaultValue as T;\n });\n\n const updateCookie = useCallback<UpdateCookie<T>>(\n (value: T, overrideOptions: CookieOptions = {}) => {\n const mergedOptions = { ...options, ...overrideOptions };\n const stringValue = JSON.stringify(value);\n setCookie(cookieName, stringValue, mergedOptions);\n setCookieValue(value);\n },\n [cookieName, options],\n );\n\n const removeCookie = useCallback<RemoveCookie>(() => {\n deleteCookie(cookieName, options);\n setCookieValue(defaultValue as T);\n }, [cookieName, defaultValue, options]);\n\n return [cookieValue, updateCookie, removeCookie];\n};\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number = 500): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState } from 'react';\n\nimport { useResizeObserver } from './use-resize-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n useResizeObserver(ref, ([entry]) => {\n if ((entry?.borderBoxSize ?? [])[0]) {\n const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0];\n setDimensions({ width, height });\n } else if (entry.contentRect) {\n const { width, height } = entry.contentRect;\n setDimensions({ width, height });\n }\n });\n\n return dimensions;\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: ResizeObserverCallback,\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new ResizeObserver(callback);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [ref, callback]);\n};\n","import { ForwardedRef, useEffect, useMemo } from 'react';\n\nexport const useDomContainer = (containerID: string, ref?: ForwardedRef<HTMLElement>) => {\n useEffect(() => {\n return () => {\n const domContainer = document.getElementById(containerID);\n\n if (domContainer?.parentNode === document.body) {\n document.body.removeChild(domContainer);\n }\n };\n }, [containerID, ref]);\n\n return useMemo(() => {\n let domContainer = document.getElementById(containerID);\n\n if (!domContainer) {\n domContainer = document.createElement('div');\n domContainer.setAttribute('id', containerID);\n\n if (typeof ref === 'function') {\n ref(domContainer);\n } else if (ref) {\n ref.current = domContainer;\n }\n\n document.body.appendChild(domContainer);\n }\n\n return domContainer;\n }, [containerID, ref]);\n};\n","import { useEffect, useState } from 'react';\n\nimport { formatBytes } from '@polpo/helpers';\n\nexport enum FileTypeEnum {\n PNG = 'image/png',\n PDF = 'application/pdf',\n}\n\nexport type FileResolvedT = {\n name: string;\n size: number;\n formatSize: string;\n type: FileTypeEnum;\n url: FileReader['result'];\n};\n\nexport const useFileReader = (inputFiles: Array<File>) => {\n const [files, setFiles] = useState<Array<FileResolvedT>>([]);\n\n useEffect(() => {\n const fileReaders: Array<FileReader> = [];\n let isCancel = false;\n\n if (!Array.isArray(inputFiles) || inputFiles.length === 0) {\n setFiles([]);\n } else {\n const promises = inputFiles.map(file => {\n return new Promise<FileResolvedT>((resolve, reject) => {\n const fileReader = new FileReader();\n fileReaders.push(fileReader);\n fileReader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target?.result) {\n resolve({\n name: file.name,\n size: file.size,\n formatSize: formatBytes(file.size),\n type: file.type as FileTypeEnum,\n url: e.target.result,\n });\n }\n };\n fileReader.onabort = () => {\n reject(new Error('File reading aborted'));\n };\n fileReader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n fileReader.readAsDataURL(file);\n });\n });\n\n Promise.all(promises).then(files => {\n if (!isCancel) {\n setFiles(files);\n }\n });\n }\n\n return () => {\n isCancel = true;\n fileReaders.forEach(fileReader => {\n fileReader.abort();\n });\n };\n }, [inputFiles]);\n\n return files;\n};\n","import { useEffect, useRef, useState } from 'react';\n\ntype GeolocationData = GeolocationPosition['coords'] & {\n timestamp: GeolocationPosition['timestamp'];\n};\n\ninterface GeolocationError {\n code: number;\n message: string;\n}\n\ntype UseGeolocationReturn = {\n data: GeolocationData | null;\n error: GeolocationError | null;\n isLoading: boolean;\n};\n\nexport const useGeolocation = (): UseGeolocationReturn => {\n const [data, setData] = useState<GeolocationData | null>(null);\n const [error, setError] = useState<GeolocationError | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const watchIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!navigator.geolocation) {\n setError({\n code: 0,\n message: 'Geolocation is not supported by your browser.',\n });\n setIsLoading(false);\n\n return;\n }\n\n const handleSuccess = (position: GeolocationPosition) => {\n setData({\n ...position.coords,\n timestamp: position.timestamp,\n });\n setIsLoading(false);\n };\n\n const handleError = (geolocationError: GeolocationPositionError) => {\n setError({\n code: geolocationError.code,\n message: geolocationError.message,\n });\n setIsLoading(false);\n };\n\n navigator.geolocation.getCurrentPosition(handleSuccess, handleError);\n\n watchIdRef.current = navigator.geolocation.watchPosition(handleSuccess, handleError);\n\n return () => {\n if (watchIdRef.current !== null) {\n navigator.geolocation.clearWatch(watchIdRef.current);\n }\n };\n }, []);\n\n return { data, error, isLoading };\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useHover = () => {\n const [isHovered, setIsHovered] = useState(false);\n const ref = useRef<HTMLElement>(null);\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\n\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\n useEventListener('mouseenter', handleMouseEnter, ref);\n useEventListener('mouseleave', handleMouseLeave, ref);\n\n return isHovered;\n};\n","import { useRef, useState } from 'react';\n\nimport { useIntersectionObserver } from './use-intersection-observer';\n\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useIntersectionObserver(\n ref,\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n initOptions,\n );\n\n return { ref, inView };\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useIntersectionObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: IntersectionObserverCallback,\n initOptions: IntersectionObserverInit = {},\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new IntersectionObserver(callback, initOptions);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [callback, initOptions, ref]);\n};\n","import React, { useCallback, useState } from 'react';\n\ntype InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ntype UseInputHandlersProps<T extends InputTypes> = {\n onBlur?: (e: React.FocusEvent<T>) => void;\n onFocus?: (e: React.FocusEvent<T>) => void;\n onChange?: (e: React.ChangeEvent<T>) => void;\n};\n\nexport const useInputHandlers = <T extends InputTypes>({\n onBlur,\n onFocus,\n onChange,\n}: UseInputHandlersProps<T> = {}) => {\n const [isFocus, setIsFocus] = useState(false);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(true);\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n onChange && onChange(e);\n },\n [onChange],\n );\n\n return {\n isFocus,\n handlers: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n },\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n\n const listener = () => {\n setMatches(media.matches);\n };\n\n media.addEventListener('change', listener);\n\n return () => {\n media.removeEventListener('change', listener);\n };\n }, [matches, query]);\n\n return matches;\n};\n","import { useRef, useState } from 'react';\n\nexport const useModal = <T extends HTMLElement>() => {\n const containerRef = useRef<T>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openModal = () => {\n setIsOpen(true);\n };\n\n const closeModal = () => {\n setIsOpen(false);\n };\n\n return {\n containerRef,\n isOpen,\n openModal,\n closeModal,\n };\n};\n","import { RefObject, useCallback, useLayoutEffect, useRef } from 'react';\n\nimport { useClickOutside } from './use-click-outside';\nimport { useEventListener } from './use-event-listener';\nimport { useModalTransition } from './use-modal-transition';\nimport { useResizeObserver } from './use-resize-observer';\n\nimport {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '@polpo/helpers';\n\nconst convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n top: rect.top,\n left: rect.left,\n});\n\nexport type UseModalInContainerParams<\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n> = {\n closeOnClickOutside?: boolean;\n transitionDuration?: number;\n windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal>;\n containerRef?: RefObject<Container>;\n onClose?: () => void;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n closeOnClickOutside = true,\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n transitionDuration = 0,\n modalRef,\n containerRef,\n onClose,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n const modalState = useModalTransition(transitionDuration, onClose);\n\n const { isVisible, closeModal } = modalState;\n\n useClickOutside<Modal>(modalRef, () => {\n if (isVisible && closeOnClickOutside) {\n closeModal();\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal>, containerRef: RefObject<Container>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!modal) {\n return;\n }\n\n const modalStyle: Record<string, string> = !container\n ? getModalPositionRelativeToScreen({ position: position as PositionContainer, windowOffset })\n : getModalPositionRelativeToContainer({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n offset,\n windowOffset,\n position: position as PositionContainer,\n });\n\n Object.keys(modalStyle).forEach(key => {\n modalRef.current?.style.setProperty(key, modalStyle[key]);\n });\n },\n [position, windowOffset, offset],\n );\n\n const callback = useCallback(() => {\n if (isVisible) {\n getPosition(modalRef, containerRef ?? containerTemporalRef);\n }\n }, [getPosition, isVisible, containerRef, modalRef]);\n\n useLayoutEffect(callback, [callback]);\n\n useResizeObserver<Container>(containerRef ?? containerTemporalRef, callback);\n useResizeObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n\n return modalState;\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nexport enum ModalState {\n OPENING = 'OPENING',\n OPEN = 'OPEN',\n CLOSING = 'CLOSING',\n CLOSED = 'CLOSED',\n}\n\nexport const useModalTransition = (transitionDuration: number = 0, onClose: () => void = () => null) => {\n const [modalState, setModalState] = React.useState<ModalState>(ModalState.CLOSED);\n\n const isVisible = useMemo(() => {\n return modalState !== ModalState.CLOSED;\n }, [modalState]);\n\n useEffect(() => {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }, [isVisible]);\n\n const closeModal = useCallback(() => {\n if ([ModalState.OPENING, ModalState.OPEN].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.CLOSING);\n setTimeout(() => {\n setModalState(ModalState.CLOSED);\n onClose();\n }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [onClose, modalState, transitionDuration]);\n\n const openModal = useCallback(() => {\n if ([ModalState.CLOSING, ModalState.CLOSED].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.OPENING);\n setTimeout(() => {\n setModalState(ModalState.OPEN);\n }, transitionDuration);\n } else {\n setModalState(ModalState.OPEN);\n }\n }\n }, [modalState, transitionDuration]);\n\n return {\n isVisible,\n closeModal,\n openModal,\n modalState,\n };\n};\n","import React, { useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\ntype MousePosition = {\n x: null | number;\n y: null | number;\n elementX: number | null;\n elementY: number | null;\n elementPositionX: number | null;\n elementPositionY: number | null;\n};\n\nconst getMousePosition = (domRect: DOMRect, e: MouseEvent) => {\n const { left, top } = domRect;\n const containerPositionX = left + window.scrollX;\n const containerPositionY = top + window.scrollY;\n const containerX = e.pageX - containerPositionX;\n const containerY = e.pageY - containerPositionY;\n\n return {\n x: e.pageX,\n y: e.pageY,\n elementX: containerX,\n elementY: containerY,\n elementPositionX: containerPositionX,\n elementPositionY: containerPositionY,\n };\n};\n\nexport const useMousePosition = (containerRef?: React.RefObject<HTMLElement | SVGElement | null>) => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState<MousePosition>({\n x: null,\n y: null,\n elementX: null,\n elementY: null,\n elementPositionX: null,\n elementPositionY: null,\n });\n\n const mouseMove = (e: MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition(prev => ({ ...prev, x: clientX, y: clientY }));\n\n if (containerRef?.current instanceof Element) {\n const newState = getMousePosition(containerRef.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n } else if (ref.current instanceof Element) {\n const newState = getMousePosition(ref.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n }\n };\n\n useEventListener('mousemove', mouseMove);\n\n return { ...position, ref };\n};\n","import { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnlineStatus = () => {\n const [online, setOnline] = useState(navigator.onLine);\n\n useEventListener('online', () => setOnline(navigator.onLine));\n useEventListener('offline', () => setOnline(navigator.onLine));\n\n return online;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useRenderCount = () => {\n const count = useRef(1);\n\n useEffect(() => {\n count.current++;\n });\n\n return count.current;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScroll = () => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState([0, 0]);\n\n useEffect(() => {\n const element = ref.current;\n\n const handleScroll = () => {\n if (!element) return;\n\n setPosition([element.scrollLeft, element.scrollTop]);\n };\n\n if (element) {\n element.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return {\n ref,\n position,\n };\n};\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\n\nfunction useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(\n initialState?: T | (() => T) | undefined,\n): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {\n const [state, setState] = useState<T | undefined>(initialState);\n const [history, setHistory] = useState<Array<T>>([]);\n\n useEffect(() => {\n if (state !== undefined) {\n setHistory(prevHistory => [...prevHistory, state]);\n }\n }, [state]);\n\n return [state, setState, history];\n}\n\nexport { useStateHistory };\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (defaultValue: boolean = false) => {\n const [value, setValue] = useState<boolean>(defaultValue);\n\n const toggle = useCallback(() => {\n setValue(prev => !prev);\n }, []);\n\n return [value, toggle, setValue];\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {\n const [index, setIndex] = useState(defaultIndex);\n\n const toggle = useCallback(\n (index?: number) => {\n setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);\n },\n [values.length],\n );\n\n return [values[index], toggle];\n};\n","import { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nenum ScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape',\n}\n\ntype UseViewportData = {\n width: number;\n height: number;\n orientation: ScreenOrientation;\n};\n\nexport const useViewport = (): UseViewportData => {\n const getData = (): UseViewportData => {\n const { innerWidth, innerHeight } = window;\n\n return {\n width: innerWidth,\n height: innerHeight,\n orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,\n };\n };\n\n const [data, setData] = useState<UseViewportData>(getData);\n\n useEventListener('resize', () => {\n setData(getData());\n });\n\n useEffect(() => {\n setData(getData());\n }, []);\n\n return data;\n};\n"],"mappings":"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","names":["useCallback","useMemo","useReducer","useCallback","useLayoutEffect","useRef","useSafeDispatch","dispatch","mounted","args","asyncReducer","_state","action","useAsync","initialState","asyncState","unsafeDispatch","useReducer","dispatch","useSafeDispatch","run","useCallback","promise","data","error","setData","setError","useMemo","useMemo","useClassNames","classes","compiledClassNames","classname","value","useEffect","useLayoutEffect","useRef","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","checkIsOutside","ref","target","useClickOutside","callback","useEventListener","e","event","r","useState","useConstant","initializer","useState","useCallback","generateCookieAttributes","options","parts","date","setCookie","name","value","encodedValue","attributes","getCookie","nameEq","cookies","cookie","cookieTrimmed","deleteCookie","useCookie","cookieName","defaultValue","cookieValue","setCookieValue","rawCookie","updateCookie","overrideOptions","mergedOptions","stringValue","removeCookie","useEffect","useState","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","useState","useEffect","useResizeObserver","ref","callback","refs","observer","useDimensions","ref","dimensions","setDimensions","useState","useResizeObserver","entry","width","height","useEffect","useMemo","useDomContainer","containerID","ref","domContainer","useEffect","useState","FileTypeEnum","useFileReader","inputFiles","files","setFiles","useState","useEffect","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","useEffect","useRef","useState","useGeolocation","data","setData","error","setError","isLoading","setIsLoading","watchIdRef","handleSuccess","position","handleError","geolocationError","useCallback","useRef","useState","useHover","isHovered","setIsHovered","useState","ref","useRef","handleMouseEnter","useCallback","handleMouseLeave","useEventListener","useRef","useState","useEffect","useIntersectionObserver","ref","callback","initOptions","refs","observer","r","useInView","initOptions","inView","setInView","useState","ref","useRef","useIntersectionObserver","entry","useCallback","useState","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","useEffect","useState","useMediaQuery","query","matches","setMatches","media","listener","useRef","useState","useModal","containerRef","isOpen","setIsOpen","useCallback","useLayoutEffect","useRef","React","useCallback","useEffect","useMemo","ModalState","useModalTransition","transitionDuration","onClose","modalState","setModalState","isVisible","closeModal","openModal","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","transitionDuration","modalRef","containerRef","onClose","containerTemporalRef","useRef","modalState","useModalTransition","isVisible","closeModal","useClickOutside","getPosition","useCallback","modal","container","modalStyle","getModalPositionRelativeToContainer","getModalPositionRelativeToScreen","key","callback","useLayoutEffect","useResizeObserver","useEventListener","useRef","useState","getMousePosition","domRect","e","left","top","containerPositionX","containerPositionY","containerX","containerY","useMousePosition","containerRef","ref","useRef","position","setPosition","useState","useEventListener","clientX","clientY","prev","newState","useState","useOnlineStatus","online","setOnline","useState","useEventListener","useEffect","useRef","useRenderCount","count","useEffect","useRef","useState","useScroll","ref","position","setPosition","element","handleScroll","useEffect","useState","useStateHistory","initialState","state","setState","history","setHistory","prevHistory","useCallback","useState","useToggle","defaultValue","value","setValue","toggle","prev","useCallback","useState","useToggleValues","values","defaultIndex","index","setIndex","toggle","prev","useEffect","useState","useViewport","getData","innerWidth","innerHeight","data","setData","useState","useEventListener","useEffect"]}
|