@sohanemon/utils 6.3.2 → 6.3.3

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.
@@ -0,0 +1 @@
1
+ "use client";const e=require(`../hooks-DpuuIz9k.cjs`),t=require(`../functions-BSYagwi9.cjs`);let n=require(`react`);n=e.T(n);let r=require(`@iconify/react`),i=require(`react/jsx-runtime`);function a({className:e,html:r,sanitize:a=!1,executeScripts:o=!0,...s}){let c=n.useRef([]),l=n.useRef(null);n.useEffect(()=>{if(c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.current=[],!(!o||!r))try{let e=document.createElement(`div`);e.innerHTML=r,e.querySelectorAll(`script`).forEach(e=>{let t=document.createElement(`script`);e.textContent&&(t.textContent=e.textContent),Array.from(e.attributes).forEach(e=>{t.setAttribute(e.name,e.value)}),t.onerror=e=>{console.error(`Script injection error:`,e)},document.body.appendChild(t),c.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[r,o]),n.useEffect(()=>()=>{c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let u=n.useMemo(()=>{if(!r)return``;if(a){let e=document.createElement(`div`);e.innerHTML=r,e.querySelectorAll(`script`).forEach(e=>e.remove());let t=[`onclick`,`onload`,`onerror`,`onmouseover`];return e.querySelectorAll(`*`).forEach(e=>{t.forEach(t=>{e.hasAttribute(t)&&e.removeAttribute(t)})}),e.innerHTML}return r},[r,a]);return r?(0,i.jsx)(`div`,{ref:l,className:t.a(e),dangerouslySetInnerHTML:{__html:u},...s}):null}function o({breakpoint:t,as:r=`div`,fallback:a=n.Fragment,classNameFallback:o,className:s,...c}){let l=e.m(t.split(`-`).pop())===t.startsWith(`max`);return(0,i.jsx)(l?a:r,{className:l?o:s,...c})}const s=()=>{let[e,r]=n.useState(t.m?0:window.innerWidth),[a,o]=n.useState(0);n.useEffect(()=>{let e=()=>{r(window.innerWidth)};return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[]);let s=()=>{o(e=>(e+1)%4)},c=``;c=e<640?`xs`:e>=640&&e<768?`sm`:e>=768&&e<1024?`md`:e>=1024&&e<1280?`lg`:e>=1280&&e<1536?`xl`:`2xl`;let l={position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,width:`2.5rem`,borderRadius:`50%`,placeContent:`center`,backgroundColor:`#2d3748`,fontFamily:`Courier New, Courier, monospace`,fontSize:`1rem`,color:`#ffffff`,border:`2px solid #4a5568`,boxShadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)`,padding:`0.5rem`,transition:`all 0.2s ease-in-out`,...[{bottom:`2rem`,left:`2rem`},{bottom:`2rem`,right:`2rem`},{top:`2rem`,right:`2rem`},{top:`2rem`,left:`2rem`}][a]};return process.env.NODE_ENV===`production`?null:(0,i.jsx)(`button`,{type:`button`,style:l,onClick:s,children:c})};function c(){return e.S(()=>{let e=document.body;if(!e)return;let t=e=>{let t=getComputedStyle(e);if(t.overflow===`hidden`&&t.overflowY===`hidden`&&t.overflowX===`hidden`)return!1;let n=(t.overflowY===`auto`||t.overflowY===`scroll`)&&e.scrollHeight>e.clientHeight,r=(t.overflowX===`auto`||t.overflowX===`scroll`)&&e.scrollWidth>e.clientWidth;return n||r},n=e=>{t(e)?e.dataset.scrollable=`true`:delete e.dataset.scrollable},r=e=>{n(e);for(let t=0;t<e.children.length;t++){let n=e.children[t];r(n)}};requestIdleCallback(()=>r(e));let i=new MutationObserver(e=>{for(let t of e)t.type===`childList`?t.addedNodes.forEach(e=>{e instanceof HTMLElement&&r(e)}):t.type===`attributes`&&t.target instanceof HTMLElement&&n(t.target)});return i.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`style`,`class`]}),()=>i.disconnect()},[]),null}exports.HtmlInjector=a,Object.defineProperty(exports,`Iconify`,{enumerable:!0,get:function(){return r.Icon}}),exports.MediaWrapper=o,exports.ResponsiveIndicator=s,exports.TailwindIndicator=s,exports.ScrollableMarker=c;
@@ -0,0 +1,84 @@
1
+ import { Icon as Iconify } from "@iconify/react";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import * as React from "react";
4
+
5
+ //#region src/components/html-injector.d.ts
6
+ /**
7
+ * Props for the HtmlInjector component
8
+ */
9
+ type HtmlInjectorProps = Omit<React.ComponentProps<'div'>, 'dangerouslySetInnerHTML'> & {
10
+ /** The HTML content to inject and render */
11
+ html: string;
12
+ /**
13
+ * Whether to sanitize the HTML content by removing potentially dangerous elements and attributes
14
+ * @default false
15
+ */
16
+ sanitize?: boolean;
17
+ /**
18
+ * Whether to execute script tags found in the HTML content
19
+ * @default true
20
+ */
21
+ executeScripts?: boolean;
22
+ };
23
+ /**
24
+ * A robust component for safely injecting and rendering HTML content with optional script execution.
25
+ *
26
+ * This component provides a safe way to render dynamic HTML content with the following features:
27
+ * - Optional HTML sanitization to remove dangerous elements and attributes
28
+ * - Controlled script execution with proper cleanup
29
+ * - Memory leak prevention by tracking and removing injected scripts
30
+ * - Error handling for malformed HTML and script execution failures
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * // Basic HTML injection
35
+ * <HtmlInjector html="<p>Hello <strong>World</strong></p>" />
36
+ *
37
+ * // With sanitization enabled
38
+ * <HtmlInjector
39
+ * html="<p>Safe content</p><script>alert('removed')</script>"
40
+ * sanitize={true}
41
+ * />
42
+ *
43
+ * // Disable script execution
44
+ * <HtmlInjector
45
+ * html="<p>Content</p><script>console.log('not executed')</script>"
46
+ * executeScripts={false}
47
+ * />
48
+ * ```
49
+ *
50
+ * @param props - The component props
51
+ * @returns A div element containing the injected HTML content, or null if no HTML is provided
52
+ */
53
+ declare function HtmlInjector({
54
+ className,
55
+ html,
56
+ sanitize,
57
+ executeScripts,
58
+ ...props
59
+ }: HtmlInjectorProps): react_jsx_runtime0.JSX.Element | null;
60
+ //#endregion
61
+ //#region src/components/media-wrapper.d.ts
62
+ type BreakPoints = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'max-sm' | 'max-md' | 'max-lg' | 'max-xl' | 'max-2xl';
63
+ type MediaWrapperProps = React.ComponentProps<'div'> & {
64
+ breakpoint: BreakPoints;
65
+ as?: React.ElementType;
66
+ fallback?: React.ElementType;
67
+ classNameFallback?: string;
68
+ };
69
+ declare function MediaWrapper({
70
+ breakpoint,
71
+ as,
72
+ fallback,
73
+ classNameFallback,
74
+ className: classNameOriginal,
75
+ ...props
76
+ }: MediaWrapperProps): react_jsx_runtime0.JSX.Element;
77
+ //#endregion
78
+ //#region src/components/responsive-indicator.d.ts
79
+ declare const ResponsiveIndicator: React.FC;
80
+ //#endregion
81
+ //#region src/components/scrollable-marker.d.ts
82
+ declare function ScrollableMarker(): null;
83
+ //#endregion
84
+ export { HtmlInjector, Iconify, MediaWrapper, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollableMarker };
@@ -1 +1 @@
1
- "use client";import{E as e,S as t,T as n,m as r}from"../hooks-hkNH7WgA.js";import*as i from"react";import{Icon as a}from"@iconify/react";import{jsx as o}from"react/jsx-runtime";function s({className:e,html:t,sanitize:r=!1,executeScripts:a=!0,...s}){let c=i.useRef([]),l=i.useRef(null);i.useEffect(()=>{if(c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.current=[],!(!a||!t))try{let e=document.createElement(`div`);e.innerHTML=t,e.querySelectorAll(`script`).forEach(e=>{let t=document.createElement(`script`);e.textContent&&(t.textContent=e.textContent),Array.from(e.attributes).forEach(e=>{t.setAttribute(e.name,e.value)}),t.onerror=e=>{console.error(`Script injection error:`,e)},document.body.appendChild(t),c.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[t,a]),i.useEffect(()=>()=>{c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let u=i.useMemo(()=>{if(!t)return``;if(r){let e=document.createElement(`div`);e.innerHTML=t,e.querySelectorAll(`script`).forEach(e=>e.remove());let n=[`onclick`,`onload`,`onerror`,`onmouseover`];return e.querySelectorAll(`*`).forEach(e=>{n.forEach(t=>{e.hasAttribute(t)&&e.removeAttribute(t)})}),e.innerHTML}return t},[t,r]);return t?o(`div`,{ref:l,className:n(e),dangerouslySetInnerHTML:{__html:u},...s}):null}function c({breakpoint:e,as:t=`div`,fallback:n=i.Fragment,classNameFallback:a,className:s,...c}){let l=r(e.split(`-`).pop())===e.startsWith(`max`);return o(l?n:t,{className:l?a:s,...c})}const l=()=>{let[t,n]=i.useState(e?0:window.innerWidth),[r,a]=i.useState(0);return i.useEffect(()=>{let e=()=>{n(window.innerWidth)};return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[]),{...[{bottom:`2rem`,left:`2rem`},{bottom:`2rem`,right:`2rem`},{top:`2rem`,right:`2rem`},{top:`2rem`,left:`2rem`}][r]},null};function u(){return t(()=>{let e=document.body;if(!e)return;let t=e=>{let t=getComputedStyle(e);if(t.overflow===`hidden`&&t.overflowY===`hidden`&&t.overflowX===`hidden`)return!1;let n=(t.overflowY===`auto`||t.overflowY===`scroll`)&&e.scrollHeight>e.clientHeight,r=(t.overflowX===`auto`||t.overflowX===`scroll`)&&e.scrollWidth>e.clientWidth;return n||r},n=e=>{t(e)?e.dataset.scrollable=`true`:delete e.dataset.scrollable},r=e=>{n(e);for(let t=0;t<e.children.length;t++){let n=e.children[t];r(n)}};requestIdleCallback(()=>r(e));let i=new MutationObserver(e=>{for(let t of e)t.type===`childList`?t.addedNodes.forEach(e=>{e instanceof HTMLElement&&r(e)}):t.type===`attributes`&&t.target instanceof HTMLElement&&n(t.target)});return i.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`style`,`class`]}),()=>i.disconnect()},[]),null}export{s as HtmlInjector,a as Iconify,c as MediaWrapper,l as ResponsiveIndicator,l as TailwindIndicator,u as ScrollableMarker};
1
+ "use client";import{a as e,m as t}from"../functions-DdPaJAsm.js";import{S as n,m as r}from"../hooks-lvIWocNb.js";import*as i from"react";import{Icon as a}from"@iconify/react";import{jsx as o}from"react/jsx-runtime";function s({className:t,html:n,sanitize:r=!1,executeScripts:a=!0,...s}){let c=i.useRef([]),l=i.useRef(null);i.useEffect(()=>{if(c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.current=[],!(!a||!n))try{let e=document.createElement(`div`);e.innerHTML=n,e.querySelectorAll(`script`).forEach(e=>{let t=document.createElement(`script`);e.textContent&&(t.textContent=e.textContent),Array.from(e.attributes).forEach(e=>{t.setAttribute(e.name,e.value)}),t.onerror=e=>{console.error(`Script injection error:`,e)},document.body.appendChild(t),c.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[n,a]),i.useEffect(()=>()=>{c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let u=i.useMemo(()=>{if(!n)return``;if(r){let e=document.createElement(`div`);e.innerHTML=n,e.querySelectorAll(`script`).forEach(e=>e.remove());let t=[`onclick`,`onload`,`onerror`,`onmouseover`];return e.querySelectorAll(`*`).forEach(e=>{t.forEach(t=>{e.hasAttribute(t)&&e.removeAttribute(t)})}),e.innerHTML}return n},[n,r]);return n?o(`div`,{ref:l,className:e(t),dangerouslySetInnerHTML:{__html:u},...s}):null}function c({breakpoint:e,as:t=`div`,fallback:n=i.Fragment,classNameFallback:a,className:s,...c}){let l=r(e.split(`-`).pop())===e.startsWith(`max`);return o(l?n:t,{className:l?a:s,...c})}const l=()=>{let[e,n]=i.useState(t?0:window.innerWidth),[r,a]=i.useState(0);i.useEffect(()=>{let e=()=>{n(window.innerWidth)};return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[]);let s=()=>{a(e=>(e+1)%4)},c=``;c=e<640?`xs`:e>=640&&e<768?`sm`:e>=768&&e<1024?`md`:e>=1024&&e<1280?`lg`:e>=1280&&e<1536?`xl`:`2xl`;let l={position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,width:`2.5rem`,borderRadius:`50%`,placeContent:`center`,backgroundColor:`#2d3748`,fontFamily:`Courier New, Courier, monospace`,fontSize:`1rem`,color:`#ffffff`,border:`2px solid #4a5568`,boxShadow:`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)`,padding:`0.5rem`,transition:`all 0.2s ease-in-out`,...[{bottom:`2rem`,left:`2rem`},{bottom:`2rem`,right:`2rem`},{top:`2rem`,right:`2rem`},{top:`2rem`,left:`2rem`}][r]};return process.env.NODE_ENV===`production`?null:o(`button`,{type:`button`,style:l,onClick:s,children:c})};function u(){return n(()=>{let e=document.body;if(!e)return;let t=e=>{let t=getComputedStyle(e);if(t.overflow===`hidden`&&t.overflowY===`hidden`&&t.overflowX===`hidden`)return!1;let n=(t.overflowY===`auto`||t.overflowY===`scroll`)&&e.scrollHeight>e.clientHeight,r=(t.overflowX===`auto`||t.overflowX===`scroll`)&&e.scrollWidth>e.clientWidth;return n||r},n=e=>{t(e)?e.dataset.scrollable=`true`:delete e.dataset.scrollable},r=e=>{n(e);for(let t=0;t<e.children.length;t++){let n=e.children[t];r(n)}};requestIdleCallback(()=>r(e));let i=new MutationObserver(e=>{for(let t of e)t.type===`childList`?t.addedNodes.forEach(e=>{e instanceof HTMLElement&&r(e)}):t.type===`attributes`&&t.target instanceof HTMLElement&&n(t.target)});return i.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`style`,`class`]}),()=>i.disconnect()},[]),null}export{s as HtmlInjector,a as Iconify,c as MediaWrapper,l as ResponsiveIndicator,l as TailwindIndicator,u as ScrollableMarker};
@@ -0,0 +1 @@
1
+ const e=require(`./hooks-DpuuIz9k.cjs`);let t=require(`clsx`),n=require(`tailwind-merge`);const r=(e,t,n,r=`/`)=>{let i=``;if(n){let e=new Date;e.setTime(e.getTime()+n*24*60*60*1e3),i=`; expires=${e.toUTCString()}`}document.cookie=`${e}=${t||``}${i}; path=${r}`},i=(e,t=`/`)=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${t}`},a=e=>document.cookie.split(`; `).some(t=>t.startsWith(`${e}=`)),o=e=>({value:document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`))?.split(`=`)[1]}),s=e=>!e,c=e=>e==null,l=e=>{if(e==null)return!0;switch(typeof e){case`string`:case`number`:case`bigint`:case`boolean`:case`symbol`:return!0;default:return!1}};function u(e){if(typeof e!=`object`||!e||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function d(e,...t){let n,r={},i=t[t.length-1];i&&typeof i==`object`&&!Array.isArray(i)&&(i.arrayMerge!==void 0||i.clone!==void 0||i.customMerge!==void 0||i.maxDepth!==void 0)?(r={...r,...i},n=t.slice(0,-1)):n=t;let{arrayMerge:a=`replace`,clone:o=!0,customMerge:s,maxDepth:c=100}=r,l=new WeakMap;return d(e,n,0);function d(e,t,n){if(n>=c)return console.warn(`[deepmerge] Maximum depth ${c} exceeded. Returning target as-is.`),e;if(!u(e)&&!Array.isArray(e)){for(let e of t)if(e!==void 0)return e;return e}let r=o?Array.isArray(e)?[...e]:{...e}:e;for(let e of t)if(e!=null&&!l.has(e))if(l.set(e,r),Array.isArray(r)&&Array.isArray(e))r=f(r,e,a);else if(u(r)&&u(e)){let t=new Set([...Object.keys(r),...Object.keys(e),...Object.getOwnPropertySymbols(r),...Object.getOwnPropertySymbols(e)]);for(let i of t){let t=r[i],o=e[i];s&&s(i,t,o)!==void 0?r[i]=s(i,t,o):u(t)&&u(o)?r[i]=d(t,[o],n+1):Array.isArray(t)&&Array.isArray(o)?r[i]=f(t,o,a):o!==void 0&&(r[i]=o)}}else r=e;return r}function f(e,t,n){if(typeof n==`function`)return n(e,t);switch(n){case`concat`:return[...e,...t];case`merge`:let n=Math.max(e.length,t.length),r=[];for(let i=0;i<n;i++)i<e.length&&i<t.length?u(e[i])&&u(t[i])?r[i]=d(e[i],[t[i]],0):r[i]=t[i]:i<e.length?r[i]=e[i]:r[i]=t[i];return r;case`replace`:default:return[...t]}}}function f(e){return p(e)}function p(e){if(e!==null){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(p);if(u(e)){let t={};for(let n in e)t[n]=p(e[n]);return t}return e}}function m(e,t,n){if(typeof t!=`string`&&!Array.isArray(t))return n;let r=(()=>Array.isArray(t)?t:t===``?[]:String(t).split(`.`).filter(e=>e!==``))();if(!Array.isArray(r))return n;let i=e;for(let e of r){if(i==null)return n;let t=typeof e==`string`&&Array.isArray(i)&&/^\d+$/.test(e)?Number.parseInt(e,10):e;i=i[t]}return i===void 0?n:i}function h(e,t){return Object.assign(e,t)}function g(...e){return(0,n.twMerge)((0,t.clsx)(e))}function _(e,t){return console.warn(`isNavActive is deprecated. Use isLinkActive instead.`),RegExp(`^/?${e}(/|$)`).test(t)}function v({path:e,currentPath:t,locales:n=[`en`,`es`,`de`,`zh`,`bn`,`fr`,`it`,`nl`],exact:r=!0}){let i=RegExp(`^/?(${n.join(`|`)})/`),a=e=>e.replace(i,``).replace(/^\/+|\/+$/g,``),o=a(e),s=a(t);return r?o===s:s.startsWith(o)}function y(e){let t=e;return e.includes(`/public/`)&&(t=e.replace(`/public/`,`/`)),t.trim()}const b=(e,t)=>{let n;if(typeof e==`string`)n=document.querySelector(e);else if(e.current)n=e.current;else return;n&&n.scrollTo({top:t===`top`?0:n.scrollHeight-n.clientHeight,behavior:`smooth`})},x=(e,t=()=>{})=>{typeof window>`u`||!navigator.clipboard?.writeText||e&&navigator.clipboard.writeText(e).then(t)};function S(e){return(e.split(`.`).pop()||e).replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[-_|�\s]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const C=`àáãäâèéëêìíïîòóöôùúüûñç·/_,:;`,w=`aaaaaeeeeiiiioooouuuunc------`,T=e=>{if(typeof e!=`string`)throw TypeError(`Input must be a string`);let t=e.trim().toLowerCase(),n={};for(let e=0;e<29;e++)n[C.charAt(e)]=`aaaaaeeeeiiiioooouuuunc------`.charAt(e);return t=t.replace(RegExp(`[${C}]`,`g`),e=>n[e]||e),t.replace(/[^a-z0-9 -]/g,``).replace(/\s+/g,`-`).replace(/-+/g,`-`).replace(/^-+/,``).replace(/-+$/,``)||``},E=typeof window>`u`,D=e=>E?Buffer.from(e).toString(`base64`):window.btoa(e),O=(e=1e3,t)=>new Promise(n=>{if(t?.aborted)return n();let r=setTimeout(()=>{a(),n()},e);function i(){clearTimeout(r),a(),n()}function a(){t?.removeEventListener(`abort`,i)}t&&t.addEventListener(`abort`,i,{once:!0})});function k(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.immediate??!1,i,a,o,s;function c(){return s=e.apply(o,a),a=void 0,o=void 0,s}let l=function(...e){return a=e,o=this,i===void 0&&r&&(s=c.call(this)),i!==void 0&&clearTimeout(i),i=setTimeout(c.bind(this),t),s};return Object.defineProperty(l,`isPending`,{get(){return i!==void 0}}),l}function A(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.leading??!0,i=n?.trailing??!0,a,o,s,c,l;function u(){c=Date.now(),l=e.apply(s,o),o=void 0,s=void 0}function d(){a=void 0,i&&o&&u()}let f=function(...e){let n=c?Date.now()-c:1/0;return o=e,s=this,n>=t?r?u():a=setTimeout(d,t):!a&&i&&(a=setTimeout(d,t-n)),l};return Object.defineProperty(f,`isPending`,{get(){return a!==void 0}}),f}function j(e,...t){let n=t.length===1&&Array.isArray(t[0])?t[0]:t,r=0;return e.replace(/%s/g,()=>{let e=n[r++];return e===void 0?``:String(e)})}const M=(...e)=>t=>{for(let n of e)n&&(typeof n==`function`?n(t):n.current=t)};function N(e,t){let n=document.getElementById(e);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`,...t}),window.history.pushState(null,``,`#${e}`))}function P(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function F(e,t={}){if(!e)return``;let{lowercase:n=!0,removeAccents:r=!0,removeNonAlphanumeric:i=!0}=t,a=e.normalize(`NFC`);return r&&(a=a.normalize(`NFD`).replace(/\p{M}/gu,``)),i&&(a=a.replace(/^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$/gu,``)),n&&(a=a.toLocaleLowerCase()),a}async function I(e,{interval:t=5e3,timeout:n=300*1e3,jitter:r=!0,signal:i}={}){let a=Date.now(),o=i?.aborted??!1,s=()=>{o=!0};i?.addEventListener(`abort`,s,{once:!0});try{for(let s=0;;s++){if(o)throw Error(`Polling aborted`);let s=await e();if(s)return s;if(Date.now()-a>=n)throw Error(`Polling timed out`,{cause:`Polling timed out after ${n}ms`});await O(r?t+(Math.random()-.5)*t*.2:t,i)}}catch(e){throw e}finally{i?.removeEventListener(`abort`,s)}}function L(e,t={}){let{retry:n=0,delay:r=0}=t,i=Date.now(),a=async t=>{try{await e();let t=Date.now()-i;console.log(`⚡[schedule.ts] Completed in ${t}ms`)}catch(e){if(console.log(`⚡[schedule.ts] err:`,e),t>0)console.log(`⚡[schedule.ts] Retrying in ${r}ms...`),setTimeout(()=>a(t-1),r);else{let e=Date.now()-i;console.log(`⚡[schedule.ts] Failed after ${e}ms`)}}};setTimeout(()=>a(n),0)}function R(e){if(e instanceof Promise)return e.then(e=>[null,e]).catch(e=>[e,null]);try{return[null,e()]}catch(t){return console.log(`\x1b[31m🛡 [shield]\x1b[0m ${e.name} failed →`,t),[t,null]}}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return O}});
@@ -0,0 +1 @@
1
+ import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";const n=(e,t,n,r=`/`)=>{let i=``;if(n){let e=new Date;e.setTime(e.getTime()+n*24*60*60*1e3),i=`; expires=${e.toUTCString()}`}document.cookie=`${e}=${t||``}${i}; path=${r}`},r=(e,t=`/`)=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${t}`},i=e=>document.cookie.split(`; `).some(t=>t.startsWith(`${e}=`)),a=e=>({value:document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`))?.split(`=`)[1]}),o=e=>!e,s=e=>e==null,c=e=>{if(e==null)return!0;switch(typeof e){case`string`:case`number`:case`bigint`:case`boolean`:case`symbol`:return!0;default:return!1}};function l(e){if(typeof e!=`object`||!e||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function u(e,...t){let n,r={},i=t[t.length-1];i&&typeof i==`object`&&!Array.isArray(i)&&(i.arrayMerge!==void 0||i.clone!==void 0||i.customMerge!==void 0||i.maxDepth!==void 0)?(r={...r,...i},n=t.slice(0,-1)):n=t;let{arrayMerge:a=`replace`,clone:o=!0,customMerge:s,maxDepth:c=100}=r,u=new WeakMap;return d(e,n,0);function d(e,t,n){if(n>=c)return console.warn(`[deepmerge] Maximum depth ${c} exceeded. Returning target as-is.`),e;if(!l(e)&&!Array.isArray(e)){for(let e of t)if(e!==void 0)return e;return e}let r=o?Array.isArray(e)?[...e]:{...e}:e;for(let e of t)if(e!=null&&!u.has(e))if(u.set(e,r),Array.isArray(r)&&Array.isArray(e))r=f(r,e,a);else if(l(r)&&l(e)){let t=new Set([...Object.keys(r),...Object.keys(e),...Object.getOwnPropertySymbols(r),...Object.getOwnPropertySymbols(e)]);for(let i of t){let t=r[i],o=e[i];s&&s(i,t,o)!==void 0?r[i]=s(i,t,o):l(t)&&l(o)?r[i]=d(t,[o],n+1):Array.isArray(t)&&Array.isArray(o)?r[i]=f(t,o,a):o!==void 0&&(r[i]=o)}}else r=e;return r}function f(e,t,n){if(typeof n==`function`)return n(e,t);switch(n){case`concat`:return[...e,...t];case`merge`:let n=Math.max(e.length,t.length),r=[];for(let i=0;i<n;i++)i<e.length&&i<t.length?l(e[i])&&l(t[i])?r[i]=d(e[i],[t[i]],0):r[i]=t[i]:i<e.length?r[i]=e[i]:r[i]=t[i];return r;case`replace`:default:return[...t]}}}function d(e){return f(e)}function f(e){if(e!==null){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(f);if(l(e)){let t={};for(let n in e)t[n]=f(e[n]);return t}return e}}function p(e,t,n){if(typeof t!=`string`&&!Array.isArray(t))return n;let r=(()=>Array.isArray(t)?t:t===``?[]:String(t).split(`.`).filter(e=>e!==``))();if(!Array.isArray(r))return n;let i=e;for(let e of r){if(i==null)return n;let t=typeof e==`string`&&Array.isArray(i)&&/^\d+$/.test(e)?Number.parseInt(e,10):e;i=i[t]}return i===void 0?n:i}function m(e,t){return Object.assign(e,t)}function h(...n){return t(e(n))}function g(e,t){return console.warn(`isNavActive is deprecated. Use isLinkActive instead.`),RegExp(`^/?${e}(/|$)`).test(t)}function _({path:e,currentPath:t,locales:n=[`en`,`es`,`de`,`zh`,`bn`,`fr`,`it`,`nl`],exact:r=!0}){let i=RegExp(`^/?(${n.join(`|`)})/`),a=e=>e.replace(i,``).replace(/^\/+|\/+$/g,``),o=a(e),s=a(t);return r?o===s:s.startsWith(o)}function v(e){let t=e;return e.includes(`/public/`)&&(t=e.replace(`/public/`,`/`)),t.trim()}const y=(e,t)=>{let n;if(typeof e==`string`)n=document.querySelector(e);else if(e.current)n=e.current;else return;n&&n.scrollTo({top:t===`top`?0:n.scrollHeight-n.clientHeight,behavior:`smooth`})},b=(e,t=()=>{})=>{typeof window>`u`||!navigator.clipboard?.writeText||e&&navigator.clipboard.writeText(e).then(t)};function x(e){return(e.split(`.`).pop()||e).replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[-_|�\s]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const S=`àáãäâèéëêìíïîòóöôùúüûñç·/_,:;`,C=e=>{if(typeof e!=`string`)throw TypeError(`Input must be a string`);let t=e.trim().toLowerCase(),n={};for(let e=0;e<29;e++)n[S.charAt(e)]=`aaaaaeeeeiiiioooouuuunc------`.charAt(e);return t=t.replace(RegExp(`[${S}]`,`g`),e=>n[e]||e),t.replace(/[^a-z0-9 -]/g,``).replace(/\s+/g,`-`).replace(/-+/g,`-`).replace(/^-+/,``).replace(/-+$/,``)||``},w=typeof window>`u`,T=e=>w?Buffer.from(e).toString(`base64`):window.btoa(e),E=(e=1e3,t)=>new Promise(n=>{if(t?.aborted)return n();let r=setTimeout(()=>{a(),n()},e);function i(){clearTimeout(r),a(),n()}function a(){t?.removeEventListener(`abort`,i)}t&&t.addEventListener(`abort`,i,{once:!0})});function D(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.immediate??!1,i,a,o,s;function c(){return s=e.apply(o,a),a=void 0,o=void 0,s}let l=function(...e){return a=e,o=this,i===void 0&&r&&(s=c.call(this)),i!==void 0&&clearTimeout(i),i=setTimeout(c.bind(this),t),s};return Object.defineProperty(l,`isPending`,{get(){return i!==void 0}}),l}function O(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.leading??!0,i=n?.trailing??!0,a,o,s,c,l;function u(){c=Date.now(),l=e.apply(s,o),o=void 0,s=void 0}function d(){a=void 0,i&&o&&u()}let f=function(...e){let n=c?Date.now()-c:1/0;return o=e,s=this,n>=t?r?u():a=setTimeout(d,t):!a&&i&&(a=setTimeout(d,t-n)),l};return Object.defineProperty(f,`isPending`,{get(){return a!==void 0}}),f}function k(e,...t){let n=t.length===1&&Array.isArray(t[0])?t[0]:t,r=0;return e.replace(/%s/g,()=>{let e=n[r++];return e===void 0?``:String(e)})}const A=(...e)=>t=>{for(let n of e)n&&(typeof n==`function`?n(t):n.current=t)};function j(e,t){let n=document.getElementById(e);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`,...t}),window.history.pushState(null,``,`#${e}`))}function M(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function N(e,t={}){if(!e)return``;let{lowercase:n=!0,removeAccents:r=!0,removeNonAlphanumeric:i=!0}=t,a=e.normalize(`NFC`);return r&&(a=a.normalize(`NFD`).replace(/\p{M}/gu,``)),i&&(a=a.replace(/^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$/gu,``)),n&&(a=a.toLocaleLowerCase()),a}async function P(e,{interval:t=5e3,timeout:n=300*1e3,jitter:r=!0,signal:i}={}){let a=Date.now(),o=i?.aborted??!1,s=()=>{o=!0};i?.addEventListener(`abort`,s,{once:!0});try{for(let s=0;;s++){if(o)throw Error(`Polling aborted`);let s=await e();if(s)return s;if(Date.now()-a>=n)throw Error(`Polling timed out`,{cause:`Polling timed out after ${n}ms`});await E(r?t+(Math.random()-.5)*t*.2:t,i)}}catch(e){throw e}finally{i?.removeEventListener(`abort`,s)}}function F(e,t={}){let{retry:n=0,delay:r=0}=t,i=Date.now(),a=async t=>{try{await e();let t=Date.now()-i;console.log(`⚡[schedule.ts] Completed in ${t}ms`)}catch(e){if(console.log(`⚡[schedule.ts] err:`,e),t>0)console.log(`⚡[schedule.ts] Retrying in ${r}ms...`),setTimeout(()=>a(t-1),r);else{let e=Date.now()-i;console.log(`⚡[schedule.ts] Failed after ${e}ms`)}}};setTimeout(()=>a(n),0)}function I(e){if(e instanceof Promise)return e.then(e=>[null,e]).catch(e=>[e,null]);try{return[null,e()]}catch(t){return console.log(`\x1b[31m🛡 [shield]\x1b[0m ${e.name} failed →`,t),[t,null]}}export{r as A,p as C,s as D,o as E,i as M,n as N,l as O,m as S,u as T,k as _,h as a,T as b,b as c,j as d,_ as f,N as g,A as h,v as i,a as j,c as k,D as l,w as m,F as n,x as o,g as p,P as r,C as s,I as t,M as u,y as v,d as w,O as x,E as y};
@@ -0,0 +1 @@
1
+ "use client";const e=require(`../hooks-DpuuIz9k.cjs`);require(`../functions-BSYagwi9.cjs`),exports.useAction=e.w,exports.useAsync=e.C,exports.useClickOutside=e.t,exports.useCopyToClipboard=e.n,exports.useDebounce=e.r,exports.useDomCalculation=e.i,exports.useEffectOnce=e.a,exports.useHeightCalculation=e.o,exports.useIntersection=e.s,exports.useIsAtTop=e.c,exports.useIsClient=e.l,exports.useIsScrolling=e.u,exports.useIsomorphicEffect=e.d,exports.useLocalStorage=e.f,exports.useLockScroll=e.p,exports.useMediaQuery=e.m,exports.useQuerySelector=e.h,exports.useSchedule=e.x,exports.useScheduledEffect=e.S,exports.useSessionStorage=e.g,exports.useTimeout=e._,exports.useUpdateEffect=e.v,exports.useUrlParams=e.y,exports.useWindowEvent=e.b;
@@ -0,0 +1,301 @@
1
+ import { n as Task, t as ScheduleOpts } from "../schedule-CRsY0oqG.cjs";
2
+ import * as React from "react";
3
+
4
+ //#region src/hooks/action.d.ts
5
+ type ActionType<Input, Result> = (input: Input) => Promise<Result>;
6
+ interface UseActionOptions<_Input, Result> {
7
+ onSuccess?: (data: Result) => void;
8
+ onError?: (error: Error) => void;
9
+ onSettled?: () => void;
10
+ }
11
+ declare const useAction: <Input, Result>(action: ActionType<Input, Result>, options?: UseActionOptions<Input, Result>) => {
12
+ execute: (input: Input) => void;
13
+ executeAsync: (input: Input) => Promise<Result>;
14
+ reset: () => void;
15
+ useExecute: (input: Input) => void;
16
+ data: Result | null;
17
+ error: Error | null;
18
+ input: Input | undefined;
19
+ isIdle: boolean;
20
+ isLoading: boolean;
21
+ isSuccess: boolean;
22
+ isError: boolean;
23
+ };
24
+ //#endregion
25
+ //#region src/hooks/async.d.ts
26
+ type AsyncStatus = 'idle' | 'pending' | 'success' | 'error';
27
+ type OnSuccess<TData> = (data: TData) => void | Promise<void>;
28
+ type OnError<TError extends Error = Error> = (error: TError) => void | Promise<void>;
29
+ type OnSettled<TData, TError extends Error = Error> = (data: TData | undefined, error: TError | undefined) => void | Promise<void>;
30
+ interface UseAsyncOptions<TData = unknown, TError extends Error = Error> {
31
+ mode?: 'auto' | 'manual';
32
+ deps?: React.DependencyList;
33
+ onSuccess?: OnSuccess<TData>;
34
+ onError?: OnError<TError>;
35
+ onSettled?: OnSettled<TData, TError>;
36
+ }
37
+ interface UseAsyncReturn<TData, TError extends Error = Error> {
38
+ data: TData | undefined;
39
+ error: TError | undefined;
40
+ status: AsyncStatus;
41
+ isIdle: boolean;
42
+ isPending: boolean;
43
+ isSuccess: boolean;
44
+ isError: boolean;
45
+ execute: () => Promise<TData>;
46
+ }
47
+ /**
48
+ * A fully typesafe async hook inspired by TanStack Query
49
+ * @param asyncFn - Async function that returns data
50
+ * @param options - Configuration options including callbacks
51
+ * @returns Object with data, error, status and helper methods
52
+ */
53
+ declare function useAsync<TData, TError extends Error = Error>(asyncFn: (signal: AbortSignal) => Promise<TData>, options?: UseAsyncOptions<TData, TError>): UseAsyncReturn<TData, TError>;
54
+ //#endregion
55
+ //#region src/hooks/schedule.d.ts
56
+ /**
57
+ * useSchedule — run non-urgent work later, without blocking UI.
58
+ */
59
+ declare function useSchedule(options?: ScheduleOpts): (task: Task) => void;
60
+ /**
61
+ * useScheduledEffect — Runs a non-urgent task in a React component without blocking UI rendering.
62
+ *
63
+ * This hook is like `useEffect`, but the provided task is executed
64
+ * with low priority using `requestIdleCallback` (if available)
65
+ * or a fallback scheduler. Useful for heavy computations, logging,
66
+ * analytics, or background work that doesn't need to block render.
67
+ *
68
+ * @param {Function} effect - The function to run later. Can be synchronous or return a Promise.
69
+ * @param {React.DependencyList[]} deps - Dependency array; task will re-run whenever these change.
70
+ * @param {ScheduleOpts} [options] - Optional scheduling options.
71
+ * @param {number} [options.timeout] - Max time (ms) to wait before executing the task. Defaults to 10000.
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * import React from 'react';
76
+ * import { useScheduledEffect } from './hooks/useScheduledEffect';
77
+ *
78
+ * function MyComponent({ userId }: { userId: string }) {
79
+ * useScheduledEffect(() => {
80
+ * // non-blocking analytics or heavy work
81
+ * console.log('Sending analytics for user:', userId);
82
+ * }, [userId], { timeout: 5000 });
83
+ *
84
+ * return <div>Component loaded. Task will run later 😎</div>;
85
+ * }
86
+ * ```
87
+ */
88
+ declare function useScheduledEffect(effect: () => void | (() => void), deps?: React.DependencyList, options?: ScheduleOpts): void;
89
+ //#endregion
90
+ //#region src/hooks/index.d.ts
91
+ /**
92
+ * Hook to detect clicks outside of a referenced element.
93
+ * @param callback - A function to invoke when a click outside is detected.
94
+ * @returns A React ref object to attach to the target element.
95
+ */
96
+ declare const useClickOutside: (callback?: () => void) => React.RefObject<HTMLDivElement | null>;
97
+ /**
98
+ * Hook to match a media query based on Tailwind CSS breakpoints or custom queries.
99
+ * @param tailwindBreakpoint - The Tailwind breakpoint or custom query string.
100
+ * @returns A boolean indicating whether the media query matches.
101
+ */
102
+ declare function useMediaQuery(tailwindBreakpoint: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | `(${string})`): boolean;
103
+ /**
104
+ * Runs an effect only once when the component mounts.
105
+ * @param effect - The effect callback function.
106
+ */
107
+ declare function useEffectOnce(effect: React.EffectCallback): void;
108
+ /**
109
+ * Runs an effect only when dependencies update, excluding the initial render.
110
+ * @param effect - The effect callback function.
111
+ * @param deps - Dependency array for the effect.
112
+ */
113
+ declare function useUpdateEffect(effect: React.EffectCallback, deps: React.DependencyList): void;
114
+ /**
115
+ * Debounces a state value with a specified delay.
116
+ * @param state - The state value to debounce.
117
+ * @param delay - The debounce delay in milliseconds (default: 500ms).
118
+ * @returns The debounced state value.
119
+ */
120
+ declare function useDebounce<T>(state: T, delay?: number): T;
121
+ /**
122
+ * Hook to handle effects with layout synchronization in the browser.
123
+ */
124
+ declare const useIsomorphicEffect: typeof React.useLayoutEffect;
125
+ /**
126
+ * Hook to invoke a callback after a specified timeout.
127
+ * @param callback - The callback function to invoke.
128
+ * @param delay - The timeout delay in milliseconds (default: 1000ms).
129
+ */
130
+ declare function useTimeout(callback: () => void, delay?: number | null): void;
131
+ /**
132
+ * Hook to add and remove a window event listener.
133
+ * @param type - The type of the event to listen for.
134
+ * @param listener - The event listener callback.
135
+ * @param options - Options for the event listener.
136
+ */
137
+ declare function useWindowEvent<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
138
+ /**
139
+ * Tuple type for session storage value and updater.
140
+ */
141
+ type SessionStorageValue<T> = [T, React.Dispatch<React.SetStateAction<T>>];
142
+ /**
143
+ * Hook to persist state in session storage.
144
+ * @param key - The key for session storage.
145
+ * @param defaultValue - The default value if no value is found in session storage.
146
+ * @returns A tuple of the stored value and an updater function.
147
+ */
148
+ declare const useSessionStorage: <T extends Record<string, any>>(key: string, defaultValue: T) => SessionStorageValue<T>;
149
+ /**
150
+ * Tuple type for local storage value and updater.
151
+ */
152
+ type LocalStorageValue<T> = [T, React.Dispatch<React.SetStateAction<T>>];
153
+ /**
154
+ * Hook to persist state in local storage.
155
+ * @param key - The key for local storage.
156
+ * @param defaultValue - The default value if no value is found in local storage.
157
+ * @returns A tuple of the stored value and an updater function.
158
+ */
159
+ declare const useLocalStorage: <T extends Record<string, any>>(key: string, defaultValue: T) => LocalStorageValue<T>;
160
+ /**
161
+ * Hook to manage URL parameters as state.
162
+ * @param key - The URL parameter key.
163
+ * @param defaultValue - The default value if the parameter is not present.
164
+ * @returns A tuple of the parameter value and a setter function.
165
+ */
166
+ declare const useUrlParams: <T extends string | number | boolean>(key: string, defaultValue: T) => [T, (value: T) => void];
167
+ /**
168
+ * Hook to select a DOM element by CSS selector.
169
+ * @param selector - The CSS selector string.
170
+ * @returns The selected DOM element or null if not found.
171
+ */
172
+ declare const useQuerySelector: <T extends Element>(selector: string) => T | null;
173
+ /**
174
+ * Hook to detect if the code is running on the client side.
175
+ * @returns A boolean indicating whether the code is running on the client.
176
+ */
177
+ declare function useIsClient(): boolean;
178
+ /**
179
+ * Hook to lock scroll by disabling body overflow.
180
+ */
181
+ declare function useLockScroll(): void;
182
+ /**
183
+ * Hook to copy text to the clipboard and track the copy status.
184
+ * @param timeout - The timeout duration in milliseconds to reset the copy status (default: 2000ms).
185
+ * @returns An object with the `isCopied` state and `copy` function.
186
+ */
187
+ declare function useCopyToClipboard({
188
+ timeout
189
+ }: {
190
+ timeout?: number;
191
+ }): {
192
+ isCopied: boolean;
193
+ copy: (value: string) => void;
194
+ };
195
+ /**
196
+ * Properties for height calculation.
197
+ */
198
+ type CalculationProps2 = {
199
+ blockIds: string[];
200
+ dynamic?: boolean | string;
201
+ margin?: number;
202
+ substract?: boolean;
203
+ };
204
+ /**
205
+ *
206
+ * Hook to calculate the height of an element based on viewport and other block heights.
207
+ * @param params - Configuration object for height calculation.
208
+ * @returns The calculated height.
209
+ */
210
+ declare const useHeightCalculation: ({
211
+ blockIds,
212
+ margin,
213
+ substract,
214
+ dynamic
215
+ }: CalculationProps2) => number;
216
+ /**
217
+ * Properties for DOM calculation.
218
+ */
219
+ type CalculationProps = {
220
+ blockIds: string[];
221
+ dynamic?: boolean | string;
222
+ margin?: number;
223
+ substract?: boolean;
224
+ onChange?: (results: {
225
+ blocksHeight: number;
226
+ blocksWidth: number;
227
+ remainingWidth: number;
228
+ remainingHeight: number;
229
+ }) => void;
230
+ };
231
+ /**
232
+ * Hook to calculate dimensions (height and width) of an element based on viewport and other block dimensions.
233
+ * @param params - Configuration object for dimension calculation.
234
+ * @returns An object containing the calculated height and width.
235
+ */
236
+ declare const useDomCalculation: ({
237
+ blockIds,
238
+ margin,
239
+ substract,
240
+ dynamic,
241
+ onChange
242
+ }: CalculationProps) => {
243
+ height: number;
244
+ width: number;
245
+ };
246
+ /**
247
+ * Hook to detect if the user is scrolling.
248
+ * @returns An object containing the isScrolling state and a ref to the scrollable container.
249
+ */
250
+ declare const useIsScrolling: () => {
251
+ isScrolling: boolean;
252
+ scrollableContainerRef: React.RefObject<HTMLElement | null>;
253
+ };
254
+ /**
255
+ * Hook to detect if the user is at the top of the page.
256
+ * @returns An object containing the isAtTop state and a ref to the scrollable container.
257
+ */
258
+ declare const useIsAtTop: ({
259
+ offset
260
+ }?: {
261
+ offset?: number;
262
+ }) => {
263
+ scrollableContainerRef: React.RefObject<HTMLElement | null>;
264
+ isAtTop: boolean;
265
+ };
266
+ interface UseIntersectionOptions extends IntersectionObserverInit {
267
+ onInteractionStart?: () => void;
268
+ onInteractionEnd?: () => void;
269
+ }
270
+ /**
271
+ * React hook that tracks when an element enters or leaves the viewport
272
+ * using the Intersection Observer API.
273
+ *
274
+ * @example
275
+ * ```tsx
276
+ * const { ref, isIntersecting } = useIntersection({
277
+ * threshold: 0.1,
278
+ * onInteractionStart: () => console.log('👀 Element entered viewport'),
279
+ * onInteractionEnd: () => console.log('🙈 Element left viewport'),
280
+ * });
281
+ *
282
+ * return <div ref={ref}>Watch me</div>;
283
+ * ```
284
+ *
285
+ * @param options - Configuration for the intersection observer.
286
+ * @returns Object containing:
287
+ * - `ref`: React ref to attach to the observed element.
288
+ * - `isIntersecting`: Whether the element is currently visible.
289
+ */
290
+ declare const useIntersection: ({
291
+ threshold,
292
+ root,
293
+ rootMargin,
294
+ onInteractionStart,
295
+ onInteractionEnd
296
+ }?: UseIntersectionOptions) => {
297
+ ref: React.RefObject<null>;
298
+ isIntersecting: boolean;
299
+ };
300
+ //#endregion
301
+ export { useAction, useAsync, useClickOutside, useCopyToClipboard, useDebounce, useDomCalculation, useEffectOnce, useHeightCalculation, useIntersection, useIsAtTop, useIsClient, useIsScrolling, useIsomorphicEffect, useLocalStorage, useLockScroll, useMediaQuery, useQuerySelector, useSchedule, useScheduledEffect, useSessionStorage, useTimeout, useUpdateEffect, useUrlParams, useWindowEvent };
@@ -1,5 +1,5 @@
1
+ import { S as Task, x as ScheduleOpts } from "../index-BZaFEd2-.js";
1
2
  import * as React from "react";
2
- import "clsx";
3
3
 
4
4
  //#region src/hooks/action.d.ts
5
5
  type ActionType<Input, Result> = (input: Input) => Promise<Result>;
@@ -52,14 +52,6 @@ interface UseAsyncReturn<TData, TError extends Error = Error> {
52
52
  */
53
53
  declare function useAsync<TData, TError extends Error = Error>(asyncFn: (signal: AbortSignal) => Promise<TData>, options?: UseAsyncOptions<TData, TError>): UseAsyncReturn<TData, TError>;
54
54
  //#endregion
55
- //#region src/functions/schedule.d.ts
56
- type Task = () => Promise<void> | void;
57
- interface ScheduleOpts {
58
- retry?: number;
59
- delay?: number;
60
- timeout?: number;
61
- }
62
- //#endregion
63
55
  //#region src/hooks/schedule.d.ts
64
56
  /**
65
57
  * useSchedule — run non-urgent work later, without blocking UI.
@@ -1 +1 @@
1
- "use client";import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,w as x,x as S,y as C}from"../hooks-hkNH7WgA.js";export{x as useAction,e as useAsync,v as useClickOutside,p as useCopyToClipboard,g as useDebounce,u as useDomCalculation,r as useEffectOnce,m as useHeightCalculation,_ as useIntersection,a as useIsAtTop,d as useIsClient,y as useIsScrolling,o as useIsomorphicEffect,s as useLocalStorage,h as useLockScroll,f as useMediaQuery,l as useQuerySelector,S as useSchedule,t as useScheduledEffect,c as useSessionStorage,n as useTimeout,b as useUpdateEffect,C as useUrlParams,i as useWindowEvent};
1
+ "use client";import"../functions-DdPaJAsm.js";import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,w as x,x as S,y as C}from"../hooks-lvIWocNb.js";export{x as useAction,e as useAsync,v as useClickOutside,p as useCopyToClipboard,g as useDebounce,u as useDomCalculation,r as useEffectOnce,m as useHeightCalculation,_ as useIntersection,a as useIsAtTop,d as useIsClient,y as useIsScrolling,o as useIsomorphicEffect,s as useLocalStorage,h as useLockScroll,f as useMediaQuery,l as useQuerySelector,S as useSchedule,t as useScheduledEffect,c as useSessionStorage,n as useTimeout,b as useUpdateEffect,C as useUrlParams,i as useWindowEvent};
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./functions-BSYagwi9.cjs`);let l=require(`react`);l=s(l);const u=(e,t)=>{let[n,r]=l.useState(`idle`),[i,a]=l.useState(null),[o,s]=l.useState(null),[c,u]=l.useState(void 0),[d,f]=l.useTransition(),p=n===`idle`,m=n===`loading`||d,h=n===`success`,g=n===`error`,_=l.useCallback(e=>{a(e),r(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),v=l.useCallback(e=>{s(e),r(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=l.useCallback(t=>{u(t),r(`loading`),s(null),f(()=>{e(t).then(_).catch(v)})},[e,_,v]);return{execute:b,executeAsync:l.useCallback(t=>new Promise((n,i)=>{u(t),r(`loading`),s(null),f(()=>{e(t).then(e=>{_(e),n(e)}).catch(e=>{v(e),i(e)})})}),[e,_,v]),reset:l.useCallback(()=>{r(`idle`),a(null),s(null),u(void 0)},[]),useExecute:e=>{y(()=>{b(e)},[])},data:i,error:o,input:c,isIdle:p,isLoading:m,isSuccess:h,isError:g}};function d(e,t={}){let{mode:n=`manual`,deps:r,onSuccess:i,onError:a,onSettled:o}=t,[s,c]=l.useState(void 0),[u,d]=l.useState(void 0),[f,p]=l.useState(`idle`),m=l.useRef(null),h=l.useCallback(i||(()=>{}),[i]),g=l.useCallback(a||(()=>{}),[a]),_=l.useCallback(o||(()=>{}),[o]),v=l.useCallback(async()=>{m.current&&m.current.abort(),m.current=new AbortController;let t=m.current.signal;p(`pending`),d(void 0);try{let n=await e(t);return t.aborted||(c(n),p(`success`),await h(n),await _(n,void 0)),n}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let n=e instanceof Error?e:Error(String(e)),r=n;throw t.aborted||(d(r),p(`error`),await g(r),await _(void 0,r)),n}},[e,h,g,_]);return l.useEffect(()=>{n===`auto`&&!r&&v()},[e,n,v,r]),l.useEffect(()=>{r&&n===`auto`&&v()},r||[]),l.useEffect(()=>()=>{m.current&&m.current.abort()},[]),{data:s,error:u,status:f,isIdle:f===`idle`,isPending:f===`pending`,isSuccess:f===`success`,isError:f===`error`,execute:v}}function f(e={}){let{timeout:t=1e4}=e;return l.useCallback(e=>{let n=()=>{try{l.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?requestIdleCallback(n,{timeout:t}):c.n(n)},[t])}function p(e,t=[],n={}){let r=f(n);l.useEffect(()=>{let t;return r(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[r,...t])}const m=(e=()=>alert(`clicked outside`))=>{let t=l.useRef(null),n=n=>{t.current&&!t.current.contains(n.target)&&e()};return l.useEffect(()=>(document.addEventListener(`mousedown`,n),document.addEventListener(`touchstart`,n),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`touchstart`,n)})),t};function h(e){let t=l.useMemo(()=>{switch(e){case`sm`:return`(min-width: 640px)`;case`md`:return`(min-width: 768px)`;case`lg`:return`(min-width: 1024px)`;case`xl`:return`(min-width: 1280px)`;case`2xl`:return`(min-width: 1536px)`;default:return e}},[e]),n=e=>typeof window<`u`?window.matchMedia(e).matches:!1,[r,i]=l.useState(n(t)),a=()=>{i(n(t))};return y(()=>{let e=window.matchMedia(t);return a(),e.addEventListener(`change`,a),()=>{e.removeEventListener(`change`,a)}},[t]),r}function g(e){l.useEffect(e,[])}function _(e,t){let n=l.useRef(!0);l.useEffect(()=>{if(n.current)n.current=!1;else return e()},t)}function v(e,t=500){let[n,r]=l.useState(e);return l.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>{clearTimeout(n)}},[e,t]),n}const y=typeof window<`u`?l.useLayoutEffect:l.useEffect;function b(e,t=1e3){let n=l.useRef(e);y(()=>{n.current=e},[e]),l.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>n.current(),t);return()=>clearTimeout(e)},[t])}function x(e,t,n){l.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t,n])}const S=(e,t)=>{let[n,r]=l.useState(t);return l.useEffect(()=>{let t=sessionStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,l.useCallback(t=>{r(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},C=(e,t)=>{let[n,r]=l.useState(t);return l.useEffect(()=>{let t=localStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,l.useCallback(t=>{let i;i=typeof t==`function`?t(n):t,localStorage.setItem(e,JSON.stringify(i)),r(i)},[e])]},w=(e,t)=>{let[n,r]=l.useState(t);return l.useEffect(()=>{let t=new URLSearchParams(window.location.search).get(e);t!==null&&r(t)},[e]),[n,t=>{let n=new URLSearchParams(window.location.search);n.set(e,String(t)),window.history.pushState({},``,`${window.location.pathname}?${n}`),r(t)}]},T=e=>{let[t,n]=l.useState(null),r=l.useRef(null);return l.useLayoutEffect(()=>{let t=document.querySelector(e);if(!t)return;r.current!==t&&(r.current=t,n(t));let i=new ResizeObserver(()=>{r.current!==t&&(r.current=t,n(t))});return i.observe(t),()=>{i.disconnect()}},[e]),t};function E(){let[e,t]=l.useState(!1);return l.useEffect(()=>{t(!0)},[]),e}function D(){l.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function O({timeout:e=2e3}){let[t,n]=l.useState(!1);return{isCopied:t,copy:t=>{c.c(t,()=>{n(!0),setTimeout(()=>{n(!1)},e)})}}}const k=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1})=>{let[i,a]=l.useState(500),o=()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0);a(n?window.innerHeight-r-t:r+t)};return y(()=>{if(o(),r){if(typeof r==`string`){let e=document.getElementById(r),t=new ResizeObserver(e=>{for(let t of e)o()});return e&&t.observe(e),()=>t?.disconnect()}return window.addEventListener(`resize`,o),()=>window.removeEventListener(`resize`,o)}},[]),i},A=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1,onChange:i})=>{let[a,o]=l.useState({height:500,width:500}),s=l.useCallback(()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0),a=e.reduce((e,t)=>e+(document.getElementById(t)?.clientWidth||0),0),s=n?window.innerHeight-r-t:r+t,c=n?window.innerWidth-a-t:a+t;o(e=>e.height===s&&e.width===c?e:{height:s,width:c}),i?.({blocksWidth:a,blocksHeight:r,remainingWidth:c,remainingHeight:s})},[e,t,n,i]);return y(()=>{s();let t=[];if(e.length>0){let n=new MutationObserver(t=>{let n=!1;for(let r of t){for(let t of Array.from(r.addedNodes))if(t instanceof Element&&(e.includes(t.id)||e.some(e=>t.querySelector(`#${CSS.escape(e)}`)))){n=!0;break}if(n)break;for(let t of Array.from(r.removedNodes))if(t instanceof Element&&(e.includes(t.id)||e.some(e=>t.querySelector(`#${CSS.escape(e)}`)))){n=!0;break}if(n)break}n&&s()});n.observe(document.body,{childList:!0,subtree:!0}),t.push(()=>n.disconnect())}if(r)if(typeof r==`string`){let e=document.getElementById(r);if(e){let n=new ResizeObserver(s);n.observe(e),t.push(()=>n.unobserve(e)),t.push(()=>n.disconnect())}}else window.addEventListener(`resize`,s),t.push(()=>window.removeEventListener(`resize`,s));return()=>{for(let e of t)e()}},[s,r,e.join(`,`)]),a},j=()=>{let[e,t]=l.useState(!1),n=l.useRef(null),r=l.useRef(null);return g(()=>{let e=r.current;if(!e)return;let i=()=>{t(!0),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{t(!1)},150)};return i(),e.addEventListener(`scroll`,i),()=>{e.removeEventListener(`scroll`,i),n.current&&clearTimeout(n.current)}}),{isScrolling:e,scrollableContainerRef:r}},M=({offset:e}={})=>{let[t,n]=l.useState(!0),r=l.useRef(null);return g(()=>{let t=r.current;if(!t)return;let i=()=>{n(!(t.scrollTop>(e??10)))};return i(),t.addEventListener(`scroll`,i),()=>{t.removeEventListener(`scroll`,i)}}),{scrollableContainerRef:r,isAtTop:t}},N=({threshold:e=.1,root:t=null,rootMargin:n,onInteractionStart:r,onInteractionEnd:i}={})=>{let[a,o]=l.useState(!1),s=l.useRef(null);return l.useEffect(()=>{if(!s.current)return;let c=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting?a||(r?.(),o(!0)):a&&(i?.(),o(!1))},{threshold:e,root:t,...n&&{rootMargin:n}});return c.observe(s.current),()=>{c.disconnect()}},[e,t,n,r,i,a]),{ref:s,isIntersecting:a}};Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return w}});
@@ -0,0 +1 @@
1
+ import{c as e,n as t}from"./functions-DdPaJAsm.js";import*as n from"react";const r=(e,t)=>{let[r,i]=n.useState(`idle`),[a,o]=n.useState(null),[s,c]=n.useState(null),[l,u]=n.useState(void 0),[d,p]=n.useTransition(),m=r===`idle`,h=r===`loading`||d,g=r===`success`,_=r===`error`,v=n.useCallback(e=>{o(e),i(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),y=n.useCallback(e=>{c(e),i(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=n.useCallback(t=>{u(t),i(`loading`),c(null),p(()=>{e(t).then(v).catch(y)})},[e,v,y]);return{execute:b,executeAsync:n.useCallback(t=>new Promise((n,r)=>{u(t),i(`loading`),c(null),p(()=>{e(t).then(e=>{v(e),n(e)}).catch(e=>{y(e),r(e)})})}),[e,v,y]),reset:n.useCallback(()=>{i(`idle`),o(null),c(null),u(void 0)},[]),useExecute:e=>{f(()=>{b(e)},[])},data:a,error:s,input:l,isIdle:m,isLoading:h,isSuccess:g,isError:_}};function i(e,t={}){let{mode:r=`manual`,deps:i,onSuccess:a,onError:o,onSettled:s}=t,[c,l]=n.useState(void 0),[u,d]=n.useState(void 0),[f,p]=n.useState(`idle`),m=n.useRef(null),h=n.useCallback(a||(()=>{}),[a]),g=n.useCallback(o||(()=>{}),[o]),_=n.useCallback(s||(()=>{}),[s]),v=n.useCallback(async()=>{m.current&&m.current.abort(),m.current=new AbortController;let t=m.current.signal;p(`pending`),d(void 0);try{let n=await e(t);return t.aborted||(l(n),p(`success`),await h(n),await _(n,void 0)),n}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let n=e instanceof Error?e:Error(String(e)),r=n;throw t.aborted||(d(r),p(`error`),await g(r),await _(void 0,r)),n}},[e,h,g,_]);return n.useEffect(()=>{r===`auto`&&!i&&v()},[e,r,v,i]),n.useEffect(()=>{i&&r===`auto`&&v()},i||[]),n.useEffect(()=>()=>{m.current&&m.current.abort()},[]),{data:c,error:u,status:f,isIdle:f===`idle`,isPending:f===`pending`,isSuccess:f===`success`,isError:f===`error`,execute:v}}function a(e={}){let{timeout:r=1e4}=e;return n.useCallback(e=>{let i=()=>{try{n.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?requestIdleCallback(i,{timeout:r}):t(i)},[r])}function o(e,t=[],r={}){let i=a(r);n.useEffect(()=>{let t;return i(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[i,...t])}const s=(e=()=>alert(`clicked outside`))=>{let t=n.useRef(null),r=n=>{t.current&&!t.current.contains(n.target)&&e()};return n.useEffect(()=>(document.addEventListener(`mousedown`,r),document.addEventListener(`touchstart`,r),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`touchstart`,r)})),t};function c(e){let t=n.useMemo(()=>{switch(e){case`sm`:return`(min-width: 640px)`;case`md`:return`(min-width: 768px)`;case`lg`:return`(min-width: 1024px)`;case`xl`:return`(min-width: 1280px)`;case`2xl`:return`(min-width: 1536px)`;default:return e}},[e]),r=e=>typeof window<`u`?window.matchMedia(e).matches:!1,[i,a]=n.useState(r(t)),o=()=>{a(r(t))};return f(()=>{let e=window.matchMedia(t);return o(),e.addEventListener(`change`,o),()=>{e.removeEventListener(`change`,o)}},[t]),i}function l(e){n.useEffect(e,[])}function u(e,t){let r=n.useRef(!0);n.useEffect(()=>{if(r.current)r.current=!1;else return e()},t)}function d(e,t=500){let[r,i]=n.useState(e);return n.useEffect(()=>{let n=setTimeout(()=>i(e),t);return()=>{clearTimeout(n)}},[e,t]),r}const f=typeof window<`u`?n.useLayoutEffect:n.useEffect;function p(e,t=1e3){let r=n.useRef(e);f(()=>{r.current=e},[e]),n.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>r.current(),t);return()=>clearTimeout(e)},[t])}function m(e,t,r){n.useEffect(()=>(window.addEventListener(e,t,r),()=>window.removeEventListener(e,t,r)),[e,t,r])}const h=(e,t)=>{let[r,i]=n.useState(t);return n.useEffect(()=>{let t=sessionStorage.getItem(e);t&&i(JSON.parse(t))},[e]),[r,n.useCallback(t=>{i(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},g=(e,t)=>{let[r,i]=n.useState(t);return n.useEffect(()=>{let t=localStorage.getItem(e);t&&i(JSON.parse(t))},[e]),[r,n.useCallback(t=>{let n;n=typeof t==`function`?t(r):t,localStorage.setItem(e,JSON.stringify(n)),i(n)},[e])]},_=(e,t)=>{let[r,i]=n.useState(t);return n.useEffect(()=>{let t=new URLSearchParams(window.location.search).get(e);t!==null&&i(t)},[e]),[r,t=>{let n=new URLSearchParams(window.location.search);n.set(e,String(t)),window.history.pushState({},``,`${window.location.pathname}?${n}`),i(t)}]},v=e=>{let[t,r]=n.useState(null),i=n.useRef(null);return n.useLayoutEffect(()=>{let t=document.querySelector(e);if(!t)return;i.current!==t&&(i.current=t,r(t));let n=new ResizeObserver(()=>{i.current!==t&&(i.current=t,r(t))});return n.observe(t),()=>{n.disconnect()}},[e]),t};function y(){let[e,t]=n.useState(!1);return n.useEffect(()=>{t(!0)},[]),e}function b(){n.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function x({timeout:t=2e3}){let[r,i]=n.useState(!1);return{isCopied:r,copy:n=>{e(n,()=>{i(!0),setTimeout(()=>{i(!1)},t)})}}}const S=({blockIds:e=[],margin:t=0,substract:r=!0,dynamic:i=!1})=>{let[a,o]=n.useState(500),s=()=>{let n=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0);o(r?window.innerHeight-n-t:n+t)};return f(()=>{if(s(),i){if(typeof i==`string`){let e=document.getElementById(i),t=new ResizeObserver(e=>{for(let t of e)s()});return e&&t.observe(e),()=>t?.disconnect()}return window.addEventListener(`resize`,s),()=>window.removeEventListener(`resize`,s)}},[]),a},C=({blockIds:e=[],margin:t=0,substract:r=!0,dynamic:i=!1,onChange:a})=>{let[o,s]=n.useState({height:500,width:500}),c=n.useCallback(()=>{let n=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0),i=e.reduce((e,t)=>e+(document.getElementById(t)?.clientWidth||0),0),o=r?window.innerHeight-n-t:n+t,c=r?window.innerWidth-i-t:i+t;s(e=>e.height===o&&e.width===c?e:{height:o,width:c}),a?.({blocksWidth:i,blocksHeight:n,remainingWidth:c,remainingHeight:o})},[e,t,r,a]);return f(()=>{c();let t=[];if(e.length>0){let n=new MutationObserver(t=>{let n=!1;for(let r of t){for(let t of Array.from(r.addedNodes))if(t instanceof Element&&(e.includes(t.id)||e.some(e=>t.querySelector(`#${CSS.escape(e)}`)))){n=!0;break}if(n)break;for(let t of Array.from(r.removedNodes))if(t instanceof Element&&(e.includes(t.id)||e.some(e=>t.querySelector(`#${CSS.escape(e)}`)))){n=!0;break}if(n)break}n&&c()});n.observe(document.body,{childList:!0,subtree:!0}),t.push(()=>n.disconnect())}if(i)if(typeof i==`string`){let e=document.getElementById(i);if(e){let n=new ResizeObserver(c);n.observe(e),t.push(()=>n.unobserve(e)),t.push(()=>n.disconnect())}}else window.addEventListener(`resize`,c),t.push(()=>window.removeEventListener(`resize`,c));return()=>{for(let e of t)e()}},[c,i,e.join(`,`)]),o},w=()=>{let[e,t]=n.useState(!1),r=n.useRef(null),i=n.useRef(null);return l(()=>{let e=i.current;if(!e)return;let n=()=>{t(!0),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{t(!1)},150)};return n(),e.addEventListener(`scroll`,n),()=>{e.removeEventListener(`scroll`,n),r.current&&clearTimeout(r.current)}}),{isScrolling:e,scrollableContainerRef:i}},T=({offset:e}={})=>{let[t,r]=n.useState(!0),i=n.useRef(null);return l(()=>{let t=i.current;if(!t)return;let n=()=>{r(!(t.scrollTop>(e??10)))};return n(),t.addEventListener(`scroll`,n),()=>{t.removeEventListener(`scroll`,n)}}),{scrollableContainerRef:i,isAtTop:t}},E=({threshold:e=.1,root:t=null,rootMargin:r,onInteractionStart:i,onInteractionEnd:a}={})=>{let[o,s]=n.useState(!1),c=n.useRef(null);return n.useEffect(()=>{if(!c.current)return;let n=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting?o||(i?.(),s(!0)):o&&(a?.(),s(!1))},{threshold:e,root:t,...r&&{rootMargin:r}});return n.observe(c.current),()=>{n.disconnect()}},[e,t,r,i,a,o]),{ref:c,isIntersecting:o}};export{i as C,o as S,p as _,l as a,m as b,T as c,f as d,g as f,h as g,v as h,C as i,y as l,c as m,x as n,S as o,b as p,d as r,E as s,s as t,w as u,u as v,r as w,a as x,_ as y};