polpo 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/theme.ts +2 -2
- package/.turbo/turbo-lint.log +1 -1
- package/README.md +2 -5
- package/dist/chunk-CFYQBHH5.js +3 -0
- package/dist/chunk-CFYQBHH5.js.map +1 -0
- package/dist/chunk-MAWW6AA7.js +3 -0
- package/dist/chunk-MAWW6AA7.js.map +1 -0
- package/dist/get-modal-position-drle0OjP.d.cts +49 -0
- package/dist/get-modal-position-drle0OjP.d.ts +49 -0
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +9 -2
- package/dist/helpers.d.ts +9 -2
- package/dist/helpers.js +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +59 -21
- package/dist/hooks.d.ts +59 -21
- package/dist/hooks.js +1 -1
- package/dist/ui.cjs +601 -389
- package/dist/ui.cjs.map +1 -1
- package/dist/ui.d.cts +97 -77
- package/dist/ui.d.ts +97 -77
- package/dist/ui.js +585 -373
- package/dist/ui.js.map +1 -1
- package/dist/use-modal-in-container-DiNW1PE_.d.cts +34 -0
- package/dist/use-modal-in-container-neGo-kMk.d.ts +34 -0
- package/package.json +2 -2
- package/src/components/buttons/button/button.stories.tsx +4 -4
- package/src/components/buttons/button/button.style.ts +10 -5
- package/src/components/buttons/button/button.tsx +7 -19
- package/src/components/cards/flip-card/flip-card.tsx +1 -1
- package/src/components/cursor/cursor.stories.tsx +35 -0
- package/src/components/cursor/cursor.style.ts +73 -0
- package/src/components/cursor/cursor.tsx +49 -0
- package/src/components/cursor/index.ts +1 -0
- package/src/components/form/checkbox/checkbox.stories.tsx +51 -0
- package/src/components/form/checkbox/checkbox.style.ts +73 -37
- package/src/components/form/checkbox/checkbox.tsx +38 -4
- package/src/components/form/field/field.stories.tsx +5 -1
- package/src/components/form/field/field.style.ts +12 -0
- package/src/components/form/field/field.tsx +3 -1
- package/src/components/form/field/field.types.ts +6 -0
- package/src/components/form/input-color/input-color.style.ts +5 -4
- package/src/components/form/input-color/input-color.tsx +41 -44
- package/src/components/form/radio/radio.stories.tsx +29 -5
- package/src/components/form/radio/radio.style.ts +45 -24
- package/src/components/form/radio/radio.tsx +22 -3
- package/src/components/form/select/options.tsx +119 -67
- package/src/components/form/select/select.stories.tsx +103 -42
- package/src/components/form/select/select.style.ts +10 -92
- package/src/components/form/select/select.tsx +19 -42
- package/src/components/form/select/select.types.ts +4 -21
- package/src/components/form/slider/slider.style.ts +2 -0
- package/src/components/icon/icons/social.tsx +17 -1
- package/src/components/index.ts +1 -0
- package/src/components/infinity-scroll/infinity-scroll.tsx +1 -1
- package/src/components/line/line.stories.tsx +3 -4
- package/src/components/modals/action-modal/action-modal.stories.tsx +58 -39
- package/src/components/modals/action-modal/action-modal.style.ts +13 -25
- package/src/components/modals/action-modal/action-modal.tsx +68 -70
- package/src/components/modals/aside-modal/aside-modal.stories.tsx +11 -15
- package/src/components/modals/aside-modal/aside-modal.style.ts +17 -37
- package/src/components/modals/aside-modal/aside-modal.tsx +41 -43
- package/src/components/modals/confirmation-modal/confirmation-modal.stories.tsx +21 -9
- package/src/components/modals/index.ts +2 -0
- package/src/components/modals/menu/index.ts +1 -0
- package/src/components/modals/menu/menu.stories.tsx +69 -0
- package/src/components/modals/menu/menu.style.ts +62 -0
- package/src/components/modals/menu/menu.tsx +142 -0
- package/src/components/modals/modal/backdrop.tsx +70 -0
- package/src/components/modals/modal/index.ts +1 -0
- package/src/components/modals/modal/modal.stories.tsx +325 -0
- package/src/components/modals/modal/modal.style.ts +62 -2
- package/src/components/modals/modal/modal.tsx +82 -123
- package/src/components/modals/portal/index.ts +1 -0
- package/src/components/modals/portal/portal.tsx +18 -0
- package/src/components/tabs/tabs-list.tsx +13 -10
- package/src/components/tabs/tabs.style.ts +48 -43
- package/src/components/tag/tag.stories.tsx +11 -12
- package/src/components/tag/tag.style.ts +9 -4
- package/src/components/tag/tag.tsx +2 -12
- package/src/components/tooltips/tooltip/tooltip.stories.tsx +5 -2
- package/src/components/tooltips/tooltip/tooltip.style.ts +37 -6
- package/src/components/tooltips/tooltip/tooltip.tsx +33 -19
- package/src/components/typography/typography.stories.tsx +3 -1
- package/src/components/typography/typography.tsx +21 -0
- package/src/contexts/theme-context/theme.animations.ts +91 -2
- package/src/contexts/theme-context/theme.defaults.ts +1 -1
- package/src/core/http-client.ts +49 -47
- package/src/core/variants/color.ts +3 -30
- package/src/core/variants/radius.ts +12 -41
- package/src/core/variants/size.ts +8 -33
- package/src/helpers/get-modal-position-relative-to-screen.ts +86 -0
- package/src/helpers/get-modal-position.ts +173 -28
- package/src/helpers/index.ts +1 -0
- package/src/hooks/index.ts +9 -3
- package/src/hooks/use-click-outside.ts +32 -0
- package/src/hooks/use-cookie.ts +124 -0
- package/src/hooks/use-dimensions.ts +11 -14
- package/src/hooks/use-dom-container.ts +32 -0
- package/src/hooks/use-event-listener.ts +4 -4
- package/src/hooks/use-geolocation.ts +63 -0
- package/src/hooks/use-in-view.ts +9 -11
- package/src/hooks/use-intersection-observer.ts +19 -0
- package/src/hooks/use-modal-in-container.ts +60 -52
- package/src/hooks/use-modal-transition.ts +54 -0
- package/src/hooks/use-modal.ts +21 -0
- package/src/hooks/use-mouse-position.ts +55 -7
- package/src/hooks/use-resize-observer.ts +18 -0
- package/src/stories/GettingStarted.mdx +2 -6
- package/svg/Name=npm, Category=social.svg +3 -0
- package/dist/chunk-M4KRSYE7.js +0 -3
- package/dist/chunk-M4KRSYE7.js.map +0 -1
- package/dist/chunk-U5XSMSKZ.js +0 -3
- package/dist/chunk-U5XSMSKZ.js.map +0 -1
- package/dist/get-modal-position-DPftPoU2.d.cts +0 -28
- package/dist/get-modal-position-DPftPoU2.d.ts +0 -28
- package/src/components/form/select/select-option.tsx +0 -84
- package/src/hooks/use-observer.ts +0 -18
- package/src/hooks/use-on-click-outside-ref.ts +0 -17
package/dist/chunk-M4KRSYE7.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
var m=(t,o=2)=>{if(t===0)return"0 Bytes";let r=1e3,i=o<0?0:o,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],a=Math.floor(Math.log(t)/Math.log(r));return parseFloat((t/Math.pow(r,a)).toFixed(i))+" "+e[a]};import p from"moment/moment";var u=t=>Date.parse(t)?p(t,"YYYY-MM-DD").format("MMM YYYY"):t,b=(t,o)=>{let r=p(t);return Date.parse(o)?p(o).from(r,!0):r.fromNow()};var h=(e=>(e.top="top",e.left="left",e.right="right",e.bottom="bottom",e))(h||{}),M=({c:t,m:o,offset:r,windowOffset:i,position:e,distancePercentage:a=50})=>{let n=t.y+t.h+r,s=t.x-(o.w-t.w);switch(e){case"top":n=t.y-o.h-r,s=t.x-(o.w-t.w)*(a/100);break;case"bottom":n=t.y+t.h+r,s=t.x-(o.w-t.w)*(a/100);break;case"left":n=t.y-(o.h-t.h)*(a/100),s=t.x-o.w-r;break;case"right":n=t.y-(o.h-t.h)*(a/100),s=t.x+t.w+r;break}return{left:s+o.w+i>window.innerWidth?t.left-(s+o.w-window.innerWidth)-i:s,top:n+o.h+i>window.innerHeight?t.top-(n+o.h-window.innerHeight)-i:n}};var g=(t,o={})=>{let{separator:r=" ",variant:i="each-word",join:e=r}=o;return i==="first-word"?t[0].toUpperCase()+t.slice(1):t.split(r).map(n=>n[0].toUpperCase()+n.slice(1)).join(e)};export{m as a,u as b,b as c,h as d,M as e,g as f};
|
|
3
|
-
//# sourceMappingURL=chunk-M4KRSYE7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/helpers/format-bytes.ts","../src/helpers/format-dates.ts","../src/helpers/get-modal-position.ts","../src/helpers/text/to-capitalize.ts"],"sourcesContent":["export const formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1000;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n","import moment from 'moment/moment';\n\nexport const formatDate = (date: string) => {\n return Date.parse(date) ? moment(date, 'YYYY-MM-DD').format('MMM YYYY') : date;\n};\n\nexport const timeBetween = (date_start: string, date_end: string) => {\n const momentStart = moment(date_start);\n\n return Date.parse(date_end) ? moment(date_end).from(momentStart, true) : momentStart.fromNow();\n};\n","export enum POSITION {\n top = 'top',\n left = 'left',\n right = 'right',\n bottom = 'bottom',\n}\n\nexport type PositionObject = {\n x: number;\n y: number;\n top: number;\n left: number;\n w: number;\n h: number;\n};\n\nexport type GetModalPositionParams = {\n c: PositionObject;\n m: PositionObject;\n offset: number;\n windowOffset: number;\n position?: `${POSITION}`;\n distancePercentage?: number;\n};\n\nexport const getModalPosition = ({\n c,\n m,\n offset,\n windowOffset,\n position,\n distancePercentage = 50,\n}: GetModalPositionParams) => {\n // Default bottom\n let top = c.y + c.h + offset;\n let left = c.x - (m.w - c.w);\n\n switch (position) {\n case POSITION.top:\n top = c.y - m.h - offset;\n left = c.x - (m.w - c.w) * (distancePercentage / 100);\n\n break;\n case POSITION.bottom:\n top = c.y + c.h + offset;\n left = c.x - (m.w - c.w) * (distancePercentage / 100);\n\n break;\n case POSITION.left:\n top = c.y - (m.h - c.h) * (distancePercentage / 100);\n left = c.x - m.w - offset;\n\n break;\n case POSITION.right:\n top = c.y - (m.h - c.h) * (distancePercentage / 100);\n left = c.x + c.w + offset;\n\n break;\n }\n\n return {\n left:\n left + m.w + windowOffset > window.innerWidth ? c.left - (left + m.w - window.innerWidth) - windowOffset : left,\n top: top + m.h + windowOffset > window.innerHeight ? c.top - (top + m.h - window.innerHeight) - windowOffset : top,\n };\n};\n","export type ToCapitalizeOptions = Partial<{\n separator: string;\n join: string;\n variant: 'first-word' | 'each-word';\n}>;\n\nexport const toCapitalize = (text: string, options: ToCapitalizeOptions = {}) => {\n const { separator = ' ', variant = 'each-word', join = separator } = options;\n\n if (variant === 'first-word') {\n return text[0].toUpperCase() + text.slice(1);\n }\n\n const words = text.split(separator);\n\n return words.map(word => word[0].toUpperCase() + word.slice(1)).join(join);\n};\n"],"mappings":";AAAO,IAAMA,EAAc,CAACC,EAAeC,EAAW,IAAM,CAC1D,GAAID,IAAU,EAAG,MAAO,UAExB,IAAME,EAAI,IACJC,EAAKF,EAAW,EAAI,EAAIA,EACxBG,EAAQ,CAAC,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAEhEC,EAAI,KAAK,MAAM,KAAK,IAAIL,CAAK,EAAI,KAAK,IAAIE,CAAC,CAAC,EAElD,OAAO,YAAYF,EAAQ,KAAK,IAAIE,EAAGG,CAAC,GAAG,QAAQF,CAAE,CAAC,EAAI,IAAMC,EAAMC,CAAC,CACzE,ECVA,OAAOC,MAAY,gBAEZ,IAAMC,EAAcC,GAClB,KAAK,MAAMA,CAAI,EAAIF,EAAOE,EAAM,YAAY,EAAE,OAAO,UAAU,EAAIA,EAG/DC,EAAc,CAACC,EAAoBC,IAAqB,CACnE,IAAMC,EAAcN,EAAOI,CAAU,EAErC,OAAO,KAAK,MAAMC,CAAQ,EAAIL,EAAOK,CAAQ,EAAE,KAAKC,EAAa,EAAI,EAAIA,EAAY,QAAQ,CAC/F,ECVO,IAAKC,OACVA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAJCA,OAAA,IAyBCC,EAAmB,CAAC,CAC/B,EAAAC,EACA,EAAAC,EACA,OAAAC,EACA,aAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,EACvB,IAA8B,CAE5B,IAAIC,EAAMN,EAAE,EAAIA,EAAE,EAAIE,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,GAE1B,OAAQI,EAAU,CAChB,IAAK,MACHE,EAAMN,EAAE,EAAIC,EAAE,EAAIC,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAEjD,MACF,IAAK,SACHC,EAAMN,EAAE,EAAIA,EAAE,EAAIE,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAEjD,MACF,IAAK,OACHC,EAAMN,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAChDE,EAAOP,EAAE,EAAIC,EAAE,EAAIC,EAEnB,MACF,IAAK,QACHI,EAAMN,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAChDE,EAAOP,EAAE,EAAIA,EAAE,EAAIE,EAEnB,KACJ,CAEA,MAAO,CACL,KACEK,EAAON,EAAE,EAAIE,EAAe,OAAO,WAAaH,EAAE,MAAQO,EAAON,EAAE,EAAI,OAAO,YAAcE,EAAeI,EAC7G,IAAKD,EAAML,EAAE,EAAIE,EAAe,OAAO,YAAcH,EAAE,KAAOM,EAAML,EAAE,EAAI,OAAO,aAAeE,EAAeG,CACjH,CACF,EC3DO,IAAME,EAAe,CAACC,EAAcC,EAA+B,CAAC,IAAM,CAC/E,GAAM,CAAE,UAAAC,EAAY,IAAK,QAAAC,EAAU,YAAa,KAAAC,EAAOF,CAAU,EAAID,EAErE,OAAIE,IAAY,aACPH,EAAK,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAG/BA,EAAK,MAAME,CAAS,EAErB,IAAIG,GAAQA,EAAK,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,CAAC,EAAE,KAAKD,CAAI,CAC3E","names":["formatBytes","bytes","decimals","k","dm","sizes","i","moment","formatDate","date","timeBetween","date_start","date_end","momentStart","POSITION","getModalPosition","c","m","offset","windowOffset","position","distancePercentage","top","left","toCapitalize","text","options","separator","variant","join","word"]}
|
package/dist/chunk-U5XSMSKZ.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import{a as x,e as R}from"./chunk-M4KRSYE7.js";import{useCallback as p,useMemo as H,useReducer as C}from"react";import{useCallback as O,useLayoutEffect as N,useRef as P}from"react";var M=e=>{let t=P(!1);return N(()=>(t.current=!0,()=>{t.current=!1}),[]),O((...r)=>{t.current&&e(...r)},[e])};var k=(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)}`)}},Le=e=>{let[t,r]=C(k,{status:"idle",data:null,error:null,...e}),n=M(r),o=p(u=>{n({type:"pending"}),u.then(i=>{n({type:"resolved",data:i})},i=>{n({type:"rejected",error:i})})},[n]),s=p(u=>n({type:"resolved",data:u}),[n]),a=p(u=>n({type:"rejected",error:u}),[n]);return H(()=>({setData:s,setError:a,run:o,...t}),[t,o,s,a])};import{useMemo as I}from"react";var Se=e=>I(()=>Object.entries(e).reduce((t,[r,n])=>n?[...t,r]:t,[]).join(" "),[e]);import{useState as j}from"react";var De=e=>j(e)[0];import{useEffect as F,useState as V}from"react";var Pe=(e,t=500)=>{let[r,n]=V(e);return F(()=>{let o=setTimeout(()=>n(e),t);return()=>{clearTimeout(o)}},[e,t]),r};import{useEffect as G,useState as B}from"react";import{useEffect as z,useLayoutEffect as Q,useRef as W}from"react";function c(e,t,r,n){let o=W(t);z(()=>{o.current=t},[t]),Q(()=>{let s=r?.current??window;if(!(s&&s.addEventListener))return;let a=u=>o.current(u);return s.addEventListener(e,a,n),()=>{s.removeEventListener(e,a,n)}},[e,r,n])}import{useEffect as U}from"react";var f=(e,t)=>{U(()=>{let r=null;return t&&e.current&&(r=new ResizeObserver(t),r.observe(e.current)),()=>{r&&r.disconnect()}},[e,t])};var Ue=e=>{let[t,r]=B({width:0,height:0}),n=()=>{r({width:e.current?.offsetWidth??0,height:e.current?.offsetHeight??0})};return c("resize",n),f(e,n),G(n,[e]),t};import{useEffect as J,useState as X}from"react";var Y=(r=>(r.PNG="image/png",r.PDF="application/pdf",r))(Y||{}),Xe=e=>{let[t,r]=X([]);return J(()=>{let n=[],o=!1;if(!Array.isArray(e)||e.length===0)r([]);else{let s=e.map(a=>new Promise((u,i)=>{let m=new FileReader;n.push(m),m.onload=d=>{d.target?.result&&u({name:a.name,size:a.size,formatSize:x(a.size),type:a.type,url:d.target.result})},m.onabort=()=>{i(new Error("File reading aborted"))},m.onerror=()=>{i(new Error("Failed to read file"))},m.readAsDataURL(a)}));Promise.all(s).then(a=>{o||r(a)})}return()=>{o=!0,n.forEach(s=>{s.abort()})}},[e]),t};import{useEffect as _,useRef as $,useState as K}from"react";var $e=(e={})=>{let[t,r]=K(!1),n=$(null);return _(()=>{let o=new IntersectionObserver(([s])=>{r(s.isIntersecting)},e);return n.current&&o.observe(n.current),()=>{o.disconnect()}},[e]),{ref:n,inView:t}};import{useCallback as v,useState as Z}from"react";var et=({onBlur:e,onFocus:t,onChange:r}={})=>{let[n,o]=Z(!1),s=v(i=>{o(!0),t&&t(i)},[t]),a=v(i=>{o(!1),e&&e(i)},[e]),u=v(i=>{r&&r(i)},[r]);return{isFocus:n,handlers:{onFocus:s,onBlur:a,onChange:u}}};import{useEffect as q,useState as ee}from"react";var rt=e=>{let[t,r]=ee(!1);return q(()=>{let n=window.matchMedia(e);n.matches!==t&&r(n.matches);let o=()=>{r(n.matches)};return n.addEventListener("change",o),()=>{n.removeEventListener("change",o)}},[t,e]),t};import{useCallback as L,useEffect as te,useLayoutEffect as ne,useRef as h,useState as g}from"react";var b=(e,t)=>{c("keydown",r=>{r.key==="Escape"&&t()}),c("mousedown",r=>{e.current&&!e.current.contains(r.target)&&t()})};var S=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),Et=({closeOnClickOutside:e=!0,offset:t=5,windowOffset:r=10,position:n,distancePercentage:o=50}={})=>{let[s,a]=g(!1),[u,i]=g({}),m=h(null),d=h(null);te(()=>{e&&(document.documentElement.style.overflow=s?"hidden":"auto")},[s,e]),b(m,()=>{s&&e&&a(!1)});let E=L(A=>{let T=A.current?.getClientRects()[0],y=d.current?.getClientRects()[0];if(!y||!T){i({});return}let D=R({c:S(y),m:S(T),distancePercentage:o,windowOffset:r,position:n,offset:t});i(D)},[o,r,n,t]),l=L(()=>{s&&E(m)},[E,s]);return ne(l,[l]),f(d,l),f(m,l),c("resize",l),c("scroll",l,m),{isVisible:s,setIsVisible:a,modalStyle:u,containerRef:d,modalRef:m}};import{useState as re}from"react";var Mt=()=>{let[{x:e,y:t},r]=re({x:0,y:0});return c("mousemove",o=>{let{clientX:s,clientY:a}=o;r({x:s,y:a})}),[e,t]};import{useState as oe}from"react";var gt=()=>{let[e,t]=oe(navigator.onLine);return c("online",()=>t(navigator.onLine)),c("offline",()=>t(navigator.onLine)),e};import{useEffect as se,useRef as ae}from"react";var At=()=>{let e=ae(1);return se(()=>{e.current++}),e.current};import{useEffect as ie,useRef as ce,useState as ue}from"react";var Nt=()=>{let e=ce(null),[t,r]=ue([0,0]);return ie(()=>{let n=e.current,o=()=>{n&&r([n.scrollLeft,n.scrollTop])};return n&&n.addEventListener("scroll",o),()=>{n&&n.removeEventListener("scroll",o)}},[]),{ref:e,position:t}};import{useEffect as me,useState as w}from"react";function It(e){let[t,r]=w(e),[n,o]=w([]);return me(()=>{t!==void 0&&o(s=>[...s,t])},[t]),[t,r,n]}import{useCallback as de,useState as le}from"react";var Vt=(e=!1)=>{let[t,r]=le(e),n=de(()=>{r(o=>!o)},[]);return[t,n,r]};import{useCallback as fe,useState as pe}from"react";var Wt=(e,t=0)=>{let[r,n]=pe(t),o=fe(s=>{n(s!==void 0?s:a=>(a+1)%e.length)},[e.length]);return[e[r],o]};import{useEffect as ve,useState as Ee}from"react";var Jt=()=>{let e=()=>{let{innerWidth:n,innerHeight:o}=window;return{width:n,height:o,orientation:n>o?"landscape":"portrait"}},[t,r]=Ee(e);return c("resize",()=>{r(e())}),ve(()=>{r(e())},[]),t};export{M as a,Le as b,Se as c,De as d,Pe as e,c as f,f as g,Ue as h,Y as i,Xe as j,$e as k,et as l,rt as m,b as n,Et as o,Mt as p,gt as q,At as r,Nt as s,It as t,Vt as u,Wt as v,Jt as w};
|
|
3
|
-
//# sourceMappingURL=chunk-U5XSMSKZ.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-constant.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-observer.ts","../src/hooks/use-file-reader.ts","../src/hooks/use-in-view.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-on-click-outside-ref.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 { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\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 React, { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\nimport { useObserver } from './use-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n const getSize = () => {\n setDimensions({\n width: ref.current?.offsetWidth ?? 0,\n height: ref.current?.offsetHeight ?? 0,\n });\n };\n\n useEventListener('resize', getSize);\n useObserver(ref, getSize);\n\n useEffect(getSize, [ref]);\n\n return dimensions;\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>,\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>,\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>,\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>,\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 { useEffect } from 'react';\n\nexport const useObserver = <T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void) => {\n useEffect(() => {\n let observer = null;\n\n if (callback && ref.current) {\n observer = new ResizeObserver(callback);\n observer.observe(ref.current);\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }, [ref, callback]);\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\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n }, initOptions);\n\n ref.current && observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, [initOptions]);\n\n return { ref, inView };\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 React, { RefObject, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\nimport { useObserver } from './use-observer';\nimport { useOnClickOutsideRef } from './use-on-click-outside-ref';\n\nimport { getModalPosition, GetModalPositionParams, PositionObject } 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\ntype useModalInContainerParams = Partial<\n Pick<GetModalPositionParams, 'position' | 'distancePercentage' | 'offset' | 'windowOffset'>\n> & {\n closeOnClickOutside?: boolean;\n};\n\nexport const useModalInContainer = <Container extends HTMLElement, Modal extends HTMLElement = Container>({\n closeOnClickOutside = true,\n offset = 5,\n windowOffset = 10,\n position,\n distancePercentage = 50,\n}: useModalInContainerParams = {}) => {\n const [isVisible, setIsVisible] = useState<boolean>(false);\n const [modalStyle, setModalStyle] = useState<React.CSSProperties>({});\n\n const modalRef = useRef<Modal>(null);\n const containerRef = useRef<Container>(null);\n\n useEffect(() => {\n if (closeOnClickOutside) {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }\n }, [isVisible, closeOnClickOutside]);\n\n useOnClickOutsideRef<Modal>(modalRef, () => {\n if (isVisible && closeOnClickOutside) {\n setIsVisible(false);\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<HTMLElement>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!container || !modal) {\n setModalStyle({});\n\n return;\n }\n\n const nextStyles = getModalPosition({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n distancePercentage,\n windowOffset,\n position,\n offset,\n });\n\n setModalStyle(nextStyles);\n },\n [distancePercentage, windowOffset, position, offset],\n );\n\n const callback = useCallback(() => {\n if (isVisible) {\n getPosition(modalRef);\n }\n }, [getPosition, isVisible]);\n\n useLayoutEffect(callback, [callback]);\n\n useObserver<Container>(containerRef, callback);\n useObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n\n return {\n isVisible,\n setIsVisible,\n modalStyle,\n containerRef,\n modalRef,\n };\n};\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnClickOutsideRef = <T extends HTMLElement>(containerRef: RefObject<T>, callback: () => void) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n callback();\n }\n });\n};\n","import React, { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useMousePosition = () => {\n const [{ x, y }, setPosition] = useState({ x: 0, y: 0 });\n\n const mouseMove = (e: React.MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition({ x: clientX, y: clientY });\n };\n\n useEventListener('mousemove', mouseMove as unknown as EventListener);\n\n return [x, y];\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","useState","useConstant","initializer","useEffect","useState","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","useEffect","useState","useEffect","useLayoutEffect","useRef","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","useEffect","useObserver","ref","callback","observer","useDimensions","ref","dimensions","setDimensions","useState","getSize","useEventListener","useObserver","useEffect","useEffect","useState","FileTypeEnum","useFileReader","inputFiles","files","setFiles","useState","useEffect","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","useEffect","useRef","useState","useInView","initOptions","inView","setInView","ref","observer","entry","useCallback","useState","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","useEffect","useState","useMediaQuery","query","matches","setMatches","media","listener","useCallback","useEffect","useLayoutEffect","useRef","useState","useOnClickOutsideRef","containerRef","callback","useEventListener","e","event","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","distancePercentage","isVisible","setIsVisible","useState","modalStyle","setModalStyle","modalRef","useRef","containerRef","useEffect","useOnClickOutsideRef","getPosition","useCallback","modal","container","nextStyles","getModalPosition","callback","useLayoutEffect","useObserver","useEventListener","useState","useMousePosition","x","y","setPosition","useState","useEventListener","e","clientX","clientY","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"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
declare enum POSITION {
|
|
2
|
-
top = "top",
|
|
3
|
-
left = "left",
|
|
4
|
-
right = "right",
|
|
5
|
-
bottom = "bottom"
|
|
6
|
-
}
|
|
7
|
-
type PositionObject = {
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
|
-
top: number;
|
|
11
|
-
left: number;
|
|
12
|
-
w: number;
|
|
13
|
-
h: number;
|
|
14
|
-
};
|
|
15
|
-
type GetModalPositionParams = {
|
|
16
|
-
c: PositionObject;
|
|
17
|
-
m: PositionObject;
|
|
18
|
-
offset: number;
|
|
19
|
-
windowOffset: number;
|
|
20
|
-
position?: `${POSITION}`;
|
|
21
|
-
distancePercentage?: number;
|
|
22
|
-
};
|
|
23
|
-
declare const getModalPosition: ({ c, m, offset, windowOffset, position, distancePercentage, }: GetModalPositionParams) => {
|
|
24
|
-
left: number;
|
|
25
|
-
top: number;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { type GetModalPositionParams as G, POSITION as P, type PositionObject as a, getModalPosition as g };
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
declare enum POSITION {
|
|
2
|
-
top = "top",
|
|
3
|
-
left = "left",
|
|
4
|
-
right = "right",
|
|
5
|
-
bottom = "bottom"
|
|
6
|
-
}
|
|
7
|
-
type PositionObject = {
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
|
-
top: number;
|
|
11
|
-
left: number;
|
|
12
|
-
w: number;
|
|
13
|
-
h: number;
|
|
14
|
-
};
|
|
15
|
-
type GetModalPositionParams = {
|
|
16
|
-
c: PositionObject;
|
|
17
|
-
m: PositionObject;
|
|
18
|
-
offset: number;
|
|
19
|
-
windowOffset: number;
|
|
20
|
-
position?: `${POSITION}`;
|
|
21
|
-
distancePercentage?: number;
|
|
22
|
-
};
|
|
23
|
-
declare const getModalPosition: ({ c, m, offset, windowOffset, position, distancePercentage, }: GetModalPositionParams) => {
|
|
24
|
-
left: number;
|
|
25
|
-
top: number;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { type GetModalPositionParams as G, POSITION as P, type PositionObject as a, getModalPosition as g };
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import React, { useCallback } from 'react';
|
|
2
|
-
|
|
3
|
-
import { Icon } from '../../icon';
|
|
4
|
-
import { Checkbox } from '../checkbox';
|
|
5
|
-
|
|
6
|
-
import { OptionStyle } from './select.style';
|
|
7
|
-
import { SelectItem, SelectOptionProps, SelectOptionVariant } from './select.types';
|
|
8
|
-
|
|
9
|
-
import { useClassNames } from '@polpo/hooks';
|
|
10
|
-
|
|
11
|
-
export const SelectOption = <T extends SelectItem>({
|
|
12
|
-
id,
|
|
13
|
-
selected,
|
|
14
|
-
selectOption,
|
|
15
|
-
unselectOption,
|
|
16
|
-
data,
|
|
17
|
-
Component,
|
|
18
|
-
multiselect,
|
|
19
|
-
variant,
|
|
20
|
-
}: SelectOptionProps<T>) => {
|
|
21
|
-
const optionClassName = useClassNames({
|
|
22
|
-
'selected-option': selected,
|
|
23
|
-
'multiselect-icon': multiselect && variant === SelectOptionVariant.ICON,
|
|
24
|
-
'multiselect-checkbox': multiselect && variant === SelectOptionVariant.CHECKBOX,
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const handleKeyDown = useCallback(
|
|
28
|
-
(option: T) => (e: React.KeyboardEvent<HTMLLIElement>) => {
|
|
29
|
-
if (['Enter', ' '].includes(e.key)) {
|
|
30
|
-
e.preventDefault();
|
|
31
|
-
|
|
32
|
-
if (selected && multiselect) {
|
|
33
|
-
unselectOption(option);
|
|
34
|
-
} else {
|
|
35
|
-
selectOption(option);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
[multiselect, selectOption, selected, unselectOption],
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
const handleCheckboxChange = useCallback(
|
|
43
|
-
(option: T) => (checked: boolean | '') => {
|
|
44
|
-
if (checked !== '' && checked) selectOption(option);
|
|
45
|
-
else unselectOption(option);
|
|
46
|
-
},
|
|
47
|
-
[selectOption, unselectOption],
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
const handleClick = useCallback(
|
|
51
|
-
(option: T) => (e: React.MouseEvent) => {
|
|
52
|
-
e.stopPropagation();
|
|
53
|
-
|
|
54
|
-
if (multiselect) {
|
|
55
|
-
if (selected) unselectOption(option);
|
|
56
|
-
else selectOption(option);
|
|
57
|
-
} else {
|
|
58
|
-
selectOption(option);
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
[multiselect, selected, selectOption, unselectOption],
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<OptionStyle
|
|
66
|
-
id={id}
|
|
67
|
-
role='option'
|
|
68
|
-
aria-selected={selected}
|
|
69
|
-
tabIndex={-1}
|
|
70
|
-
onKeyDown={handleKeyDown(data)}
|
|
71
|
-
className={optionClassName}
|
|
72
|
-
onClick={handleClick(data)}
|
|
73
|
-
>
|
|
74
|
-
{multiselect && variant === SelectOptionVariant.CHECKBOX && (
|
|
75
|
-
<Checkbox name={id} value={selected} setValue={handleCheckboxChange(data)} />
|
|
76
|
-
)}
|
|
77
|
-
<section className='option-content'>
|
|
78
|
-
<Component data={data} isSelected={selected} multiselect={multiselect} />
|
|
79
|
-
</section>
|
|
80
|
-
{multiselect && selected && variant === SelectOptionVariant.ICON && <Icon name='checkmark' />}
|
|
81
|
-
{multiselect && !selected && variant === SelectOptionVariant.ICON && <span />}
|
|
82
|
-
</OptionStyle>
|
|
83
|
-
);
|
|
84
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useObserver = <T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void) => {
|
|
4
|
-
useEffect(() => {
|
|
5
|
-
let observer = null;
|
|
6
|
-
|
|
7
|
-
if (callback && ref.current) {
|
|
8
|
-
observer = new ResizeObserver(callback);
|
|
9
|
-
observer.observe(ref.current);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return () => {
|
|
13
|
-
if (observer) {
|
|
14
|
-
observer.disconnect();
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
}, [ref, callback]);
|
|
18
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { RefObject } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
|
|
5
|
-
export const useOnClickOutsideRef = <T extends HTMLElement>(containerRef: RefObject<T>, callback: () => void) => {
|
|
6
|
-
useEventListener('keydown', e => {
|
|
7
|
-
if (e.key === 'Escape') {
|
|
8
|
-
callback();
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
useEventListener('mousedown', event => {
|
|
13
|
-
if (containerRef.current && !containerRef.current.contains(event.target as Node)) {
|
|
14
|
-
callback();
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
};
|