@sohanemon/utils 7.3.2 → 7.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  - **Cookie Management**: Functions to set, get, delete, and check for cookies.
18
18
  - **Class Name Merging**: A utility to merge class names with Tailwind CSS and custom logic.
19
19
  - **React Hooks**: Hooks for media queries, effects, state management (local/session storage, URL params), DOM calculations, async operations, scheduling, and more.
20
- - **UI Components**: React components for HTML injection, media wrapping, responsive indicators, scrollable markers, and Iconify icons.
20
+ - **UI Components**: React components for HTML injection, media wrapping, responsive indicators, scrollable markers, mount-after delays, and Iconify icons.
21
21
  - **TypeScript Types**: Advanced utility types for deep partials, requireds, readonly, guards, and type-level logic gates.
22
22
  - **Browser Utilities**: Clipboard operations, scroll management, SSR detection, and more.
23
23
 
@@ -186,9 +186,12 @@ const { scrolledPast, direction } = useScrollTracker({ threshold: 300 });
186
186
 
187
187
  #### UI Components
188
188
  ```tsx
189
- import { HtmlInjector, ResponsiveIndicator, Portal, Iconify } from '@sohanemon/utils';
189
+ import { HtmlInjector, MountAfter, ResponsiveIndicator, Portal, Iconify } from '@sohanemon/utils';
190
190
 
191
191
  <HtmlInjector html="<p>Injected HTML</p>" />
192
+ <MountAfter delay={300} fallback={<Spinner />}>
193
+ <ExpensiveComponent />
194
+ </MountAfter>
192
195
  <ResponsiveIndicator />
193
196
  <Portal container="#modal-root">
194
197
  <Modal />
@@ -429,6 +432,16 @@ useIntersection(options?: UseIntersectionOptions): {
429
432
  isIntersecting: boolean;
430
433
  }
431
434
 
435
+ useInView<T extends Element = Element>(
436
+ options?: InViewOptions
437
+ ): [React.RefObject<T | null>, boolean]
438
+
439
+ useViewEffect<T extends Element = Element>(
440
+ event: 'in' | 'out',
441
+ callback: () => void,
442
+ options?: InViewOptions
443
+ ): React.RefObject<T | null>
444
+
432
445
  useIsScrolling(): {
433
446
  isScrolling: boolean;
434
447
  scrollableContainerRef: React.RefObject<HTMLElement>;
@@ -485,6 +498,12 @@ ResponsiveIndicator: React.Component<{
485
498
  showText?: boolean;
486
499
  }>
487
500
 
501
+ MountAfter: React.Component<{
502
+ delay?: number;
503
+ fallback?: React.ReactNode;
504
+ children: React.ReactNode;
505
+ }>
506
+
488
507
  ScrollableMarker: React.Component<{
489
508
  className?: string;
490
509
  children?: React.ReactNode;
@@ -494,6 +513,14 @@ Portal: React.Component<{
494
513
  children: React.ReactNode;
495
514
  container: `#${string}` | `.${string}` | `[${string}]` | React.RefObject<HTMLElement>;
496
515
  }>
516
+
517
+ RenderInView: React.Component<{
518
+ children: React.ReactNode;
519
+ fallback?: React.ReactNode;
520
+ mode?: 'persist' | 'unmount';
521
+ preserveSpace?: boolean;
522
+ options?: InViewOptions;
523
+ }>
497
524
  ```
498
525
 
499
526
  ### Types
@@ -1 +1 @@
1
- "use client";const e=require(`../hooks-B_cSW9vB.cjs`),t=require(`../functions-Dp2CwvmB.cjs`);let n=require(`react`);n=e.A(n);let r=require(`@radix-ui/react-slot`),i=require(`react/jsx-runtime`),a=require(`@iconify/react`),o=require(`react-dom`);function s({selector:e,children:t}){let a=(0,n.useRef)(null),[o,s]=(0,n.useState)(!1),[c,l]=(0,n.useState)({hasClosest:!1,closestElement:null});return(0,n.useLayoutEffect)(()=>{if(a.current){let t=a.current.closest(e);l({hasClosest:t!==null,closestElement:t})}s(!0)},[e]),o?(0,i.jsx)(r.Slot,{ref:a,children:t(c)}):(0,i.jsx)(`span`,{ref:a})}function c({className:r,html:a,sanitize:o=!1,executeScripts:s=!0,...c}){let l=n.useRef([]),u=n.useRef(null);e.k(()=>{if(l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),l.current=[],!(!s||!a))try{let e=document.createElement(`div`);e.innerHTML=a,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),l.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[a,s]),n.useEffect(()=>()=>{l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let d=n.useMemo(()=>{if(!a)return``;if(o){let e=document.createElement(`div`);e.innerHTML=a,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 a},[a,o]);return a?(0,i.jsx)(`div`,{ref:u,className:t.r(r),dangerouslySetInnerHTML:{__html:d},...c}):null}function l({breakpoint:t,as:r=`div`,fallback:a=n.Fragment,className:o,classNameFallback:s,...c}){let l=e.T(t.split(`-`).pop())===t.startsWith(`max`),u=l?a:r,d=l?s:o;return u===n.Fragment?(0,i.jsx)(u,{ref:c.ref,children:c.children},c.key):(0,i.jsx)(u,{className:d,...c})}function u({children:e,container:t}){let r=(0,n.useRef)(null),[i,a]=(0,n.useState)(!1);return(0,n.useLayoutEffect)(()=>{t?r.current=typeof t==`string`?document.querySelector(t):t.current:r.current=document.body,a(!0)},[]),!i||!r.current?null:(0,o.createPortal)(e,r.current)}const d=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],f=({side:t,offset:r=2,unit:a=`rem`})=>{let[o,s]=n.useState(t??`bottom-left`),c=e.T({DEFAULT:`xs`,sm:`sm`,md:`md`,lg:`lg`,xl:`xl`,"2xl":`2xl`}),[l,u]=n.useState(typeof window<`u`?window.innerWidth:0);n.useEffect(()=>{if(typeof window>`u`)return;let e=()=>u(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let f=c===`2xl`&&l>=1792?a===`rem`?`${(l/16).toFixed(1)}rem`:`${l}${a}`:c,p={"bottom-left":{bottom:`${r}${a}`,left:`${r}${a}`},"bottom-right":{bottom:`${r}${a}`,right:`${r}${a}`},"top-right":{top:`${r}${a}`,right:`${r}${a}`},"top-left":{top:`${r}${a}`,left:`${r}${a}`}};return(0,i.jsx)(`button`,{type:`button`,onClick:()=>{s(d[(d.indexOf(o)+1)%d.length])},style:{position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,minWidth:`2.5rem`,borderRadius:`30px`,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`,...p[o]},children:f})};function p(){return e.k(()=>{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`in window?window.requestIdleCallback(()=>r(e)):setTimeout(()=>r(e),0);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=c,Object.defineProperty(exports,`Iconify`,{enumerable:!0,get:function(){return a.Icon}}),exports.MediaWrapper=l,exports.Portal=u,exports.ResponsiveIndicator=f,exports.TailwindIndicator=f,exports.ScrollTracker=e.C,exports.ScrollableMarker=p,exports.WithClosest=s;
1
+ "use client";const e=require(`../hooks-CbZNFdxc.cjs`),t=require(`../functions-BFt6Bpb5.cjs`);let n=require(`react`);n=e.N(n);let r=require(`@radix-ui/react-slot`),i=require(`react/jsx-runtime`),a=require(`@iconify/react`),o=require(`react-dom`);function s({selector:e,children:t}){let a=(0,n.useRef)(null),[o,s]=(0,n.useState)(!1),[c,l]=(0,n.useState)({hasClosest:!1,closestElement:null});return(0,n.useLayoutEffect)(()=>{if(a.current){let t=a.current.closest(e);l({hasClosest:t!==null,closestElement:t})}s(!0)},[e]),o?(0,i.jsx)(r.Slot,{ref:a,children:t(c)}):(0,i.jsx)(`span`,{ref:a})}function c({className:r,html:a,sanitize:o=!1,executeScripts:s=!0,...c}){let l=n.useRef([]),u=n.useRef(null);e.M(()=>{if(l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),l.current=[],!(!s||!a))try{let e=document.createElement(`div`);e.innerHTML=a,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),l.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[a,s]),n.useEffect(()=>()=>{l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let d=n.useMemo(()=>{if(!a)return``;if(o){let e=document.createElement(`div`);e.innerHTML=a,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 a},[a,o]);return a?(0,i.jsx)(`div`,{ref:u,className:t.r(r),dangerouslySetInnerHTML:{__html:d},...c}):null}function l({breakpoint:t,as:r=`div`,fallback:a=n.Fragment,className:o,classNameFallback:s,...c}){let l=e.T(t.split(`-`).pop())===t.startsWith(`max`),u=l?a:r,d=l?s:o;return u===n.Fragment?(0,i.jsx)(u,{ref:c.ref,children:c.children},c.key):(0,i.jsx)(u,{className:d,...c})}function u({delay:e=0,fallback:t=null,children:r}){let[a,o]=(0,n.useState)(e===0?`mounted`:`pending`),s=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(e!==0)return s.current=setTimeout(()=>o(`mounted`),e),()=>{s.current&&clearTimeout(s.current)}},[e]),a===`pending`?(0,i.jsx)(i.Fragment,{children:t}):(0,i.jsx)(i.Fragment,{children:r})}function d({children:e,container:t}){let r=(0,n.useRef)(null),[i,a]=(0,n.useState)(!1);return(0,n.useLayoutEffect)(()=>{t?r.current=typeof t==`string`?document.querySelector(t):t.current:r.current=document.body,a(!0)},[]),!i||!r.current?null:(0,o.createPortal)(e,r.current)}function f({children:t,fallback:r=null,mode:a=`persist`,preserveSpace:o=!1,options:s={}}){let c=(0,n.useRef)(null),l=(0,n.useRef)(null),u=(0,n.useRef)(null),[d,f]=(0,n.useState)(!1),[p,m]=(0,n.useState)(!1),[h,g]=(0,n.useState)(null);e.E(c,e=>{f(e),e&&!p&&m(!0)},s),(0,n.useLayoutEffect)(()=>{if(!o||!l.current||u.current!==null)return;let e=l.current.getBoundingClientRect().height;e>0&&(u.current=e,g(e))});let _=a===`unmount`?d:p,v=o&&h!==null?(0,i.jsx)(`span`,{"aria-hidden":!0,style:{display:`block`,height:h,contain:`strict`}}):r;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{ref:c,"aria-hidden":!0,style:{display:`block`,width:0,height:0,overflow:`hidden`,contain:`strict`}}),_?(0,i.jsx)(`span`,{ref:l,style:{display:`contents`},children:t}):v]})}const p=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],m=({side:t,offset:r=2,unit:a=`rem`})=>{let[o,s]=n.useState(t??`bottom-left`),c=e.T({DEFAULT:`xs`,sm:`sm`,md:`md`,lg:`lg`,xl:`xl`,"2xl":`2xl`}),[l,u]=n.useState(typeof window<`u`?window.innerWidth:0);n.useEffect(()=>{if(typeof window>`u`)return;let e=()=>u(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let d=c===`2xl`&&l>=1792?a===`rem`?`${(l/16).toFixed(1)}rem`:`${l}${a}`:c,f={"bottom-left":{bottom:`${r}${a}`,left:`${r}${a}`},"bottom-right":{bottom:`${r}${a}`,right:`${r}${a}`},"top-right":{top:`${r}${a}`,right:`${r}${a}`},"top-left":{top:`${r}${a}`,left:`${r}${a}`}};return(0,i.jsx)(`button`,{type:`button`,onClick:()=>{s(p[(p.indexOf(o)+1)%p.length])},style:{position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,minWidth:`2.5rem`,borderRadius:`30px`,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`,...f[o]},children:d})};function h(){return e.M(()=>{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`in window?window.requestIdleCallback(()=>r(e)):setTimeout(()=>r(e),0);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=c,Object.defineProperty(exports,`Iconify`,{enumerable:!0,get:function(){return a.Icon}}),exports.MediaWrapper=l,exports.MountAfter=u,exports.Portal=d,exports.RenderInView=f,exports.ResponsiveIndicator=m,exports.TailwindIndicator=m,exports.ScrollTracker=e.C,exports.ScrollableMarker=h,exports.WithClosest=s;
@@ -1,3 +1,4 @@
1
+ import { t as InViewOptions } from "../in-view-CKQ15_tl.cjs";
1
2
  import { Icon as Iconify } from "@iconify/react";
2
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
4
  import * as React$1 from "react";
@@ -154,6 +155,54 @@ declare function MediaWrapper({
154
155
  ...props
155
156
  }: MediaWrapperProps): react_jsx_runtime0.JSX.Element;
156
157
  //#endregion
158
+ //#region src/components/mount-after.d.ts
159
+ /**
160
+ * Props for the <MountAfter> component.
161
+ */
162
+ interface MountAfterProps {
163
+ /**
164
+ * Delay in milliseconds before mounting children.
165
+ * @default 0
166
+ */
167
+ delay?: number;
168
+ /**
169
+ * Content shown while in pending (pre-mount) state.
170
+ * @default null
171
+ */
172
+ fallback?: React.ReactNode;
173
+ /** Content rendered after delay elapses. */
174
+ children: React.ReactNode;
175
+ }
176
+ /**
177
+ * Delays rendering of children by a configurable timeout.
178
+ *
179
+ * Useful for preventing content flash, coordinating staggered
180
+ * animations, or deferring render-heavy trees until after
181
+ * the initial paint. When `delay` is 0 (default), children
182
+ * mount immediately with no pending state.
183
+ *
184
+ * @param props - The component props
185
+ * @returns The fallback during the pending state, then children once mounted
186
+ *
187
+ * @example
188
+ * ```tsx
189
+ * // Mount immediately (no delay)
190
+ * <MountAfter>
191
+ * <ExpensiveComponent />
192
+ * </MountAfter>
193
+ *
194
+ * // Mount after 500ms with a loading indicator
195
+ * <MountAfter delay={500} fallback={<Spinner />}>
196
+ * <ExpensiveComponent />
197
+ * </MountAfter>
198
+ * ```
199
+ */
200
+ declare function MountAfter({
201
+ delay,
202
+ fallback,
203
+ children
204
+ }: MountAfterProps): react_jsx_runtime0.JSX.Element;
205
+ //#endregion
157
206
  //#region src/components/portal.d.ts
158
207
  /**
159
208
  * Renders children into a DOM element at the specified container.
@@ -193,6 +242,41 @@ declare function Portal({
193
242
  container
194
243
  }: PortalProps): React$1.ReactPortal | null;
195
244
  //#endregion
245
+ //#region src/components/render-in-view.d.ts
246
+ type RenderInViewMode = 'persist' | 'unmount';
247
+ interface RenderInViewProps {
248
+ children: React.ReactNode;
249
+ fallback?: React.ReactNode;
250
+ /**
251
+ * - `"persist"` — once mounted, stays mounted (default)
252
+ * - `"unmount"` — unmounts when scrolled out of view
253
+ * @default "persist"
254
+ */
255
+ mode?: RenderInViewMode;
256
+ /**
257
+ * Reserves measured height before mounting to prevent layout shift.
258
+ * @default false
259
+ */
260
+ preserveSpace?: boolean;
261
+ options?: InViewOptions;
262
+ }
263
+ /**
264
+ * Renders children only when the sentinel enters the viewport.
265
+ * Uses a zero-size sentinel so it never wraps or affects layout.
266
+ *
267
+ * @example
268
+ * <RenderInView options={{ rootMargin: '200px 0px' }}>
269
+ * <HeavyComponent />
270
+ * </RenderInView>
271
+ */
272
+ declare function RenderInView({
273
+ children,
274
+ fallback,
275
+ mode,
276
+ preserveSpace,
277
+ options
278
+ }: RenderInViewProps): react_jsx_runtime0.JSX.Element;
279
+ //#endregion
196
280
  //#region src/components/responsive-indicator.d.ts
197
281
  type Side = 'bottom-left' | 'bottom-right' | 'top-right' | 'top-left';
198
282
  /**
@@ -277,4 +361,4 @@ declare const ScrollTracker: ({
277
361
  */
278
362
  declare function ScrollableMarker(): null;
279
363
  //#endregion
280
- export { HtmlInjector, Iconify, MediaWrapper, Portal, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker, WithClosest };
364
+ export { HtmlInjector, Iconify, MediaWrapper, MountAfter, Portal, RenderInView, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker, WithClosest };
@@ -1,3 +1,4 @@
1
+ import { t as InViewOptions } from "../in-view-DJxQrkQf.js";
1
2
  import * as React$1 from "react";
2
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
4
  import { Icon as Iconify } from "@iconify/react";
@@ -154,6 +155,54 @@ declare function MediaWrapper({
154
155
  ...props
155
156
  }: MediaWrapperProps): react_jsx_runtime0.JSX.Element;
156
157
  //#endregion
158
+ //#region src/components/mount-after.d.ts
159
+ /**
160
+ * Props for the <MountAfter> component.
161
+ */
162
+ interface MountAfterProps {
163
+ /**
164
+ * Delay in milliseconds before mounting children.
165
+ * @default 0
166
+ */
167
+ delay?: number;
168
+ /**
169
+ * Content shown while in pending (pre-mount) state.
170
+ * @default null
171
+ */
172
+ fallback?: React.ReactNode;
173
+ /** Content rendered after delay elapses. */
174
+ children: React.ReactNode;
175
+ }
176
+ /**
177
+ * Delays rendering of children by a configurable timeout.
178
+ *
179
+ * Useful for preventing content flash, coordinating staggered
180
+ * animations, or deferring render-heavy trees until after
181
+ * the initial paint. When `delay` is 0 (default), children
182
+ * mount immediately with no pending state.
183
+ *
184
+ * @param props - The component props
185
+ * @returns The fallback during the pending state, then children once mounted
186
+ *
187
+ * @example
188
+ * ```tsx
189
+ * // Mount immediately (no delay)
190
+ * <MountAfter>
191
+ * <ExpensiveComponent />
192
+ * </MountAfter>
193
+ *
194
+ * // Mount after 500ms with a loading indicator
195
+ * <MountAfter delay={500} fallback={<Spinner />}>
196
+ * <ExpensiveComponent />
197
+ * </MountAfter>
198
+ * ```
199
+ */
200
+ declare function MountAfter({
201
+ delay,
202
+ fallback,
203
+ children
204
+ }: MountAfterProps): react_jsx_runtime0.JSX.Element;
205
+ //#endregion
157
206
  //#region src/components/portal.d.ts
158
207
  /**
159
208
  * Renders children into a DOM element at the specified container.
@@ -193,6 +242,41 @@ declare function Portal({
193
242
  container
194
243
  }: PortalProps): React$1.ReactPortal | null;
195
244
  //#endregion
245
+ //#region src/components/render-in-view.d.ts
246
+ type RenderInViewMode = 'persist' | 'unmount';
247
+ interface RenderInViewProps {
248
+ children: React.ReactNode;
249
+ fallback?: React.ReactNode;
250
+ /**
251
+ * - `"persist"` — once mounted, stays mounted (default)
252
+ * - `"unmount"` — unmounts when scrolled out of view
253
+ * @default "persist"
254
+ */
255
+ mode?: RenderInViewMode;
256
+ /**
257
+ * Reserves measured height before mounting to prevent layout shift.
258
+ * @default false
259
+ */
260
+ preserveSpace?: boolean;
261
+ options?: InViewOptions;
262
+ }
263
+ /**
264
+ * Renders children only when the sentinel enters the viewport.
265
+ * Uses a zero-size sentinel so it never wraps or affects layout.
266
+ *
267
+ * @example
268
+ * <RenderInView options={{ rootMargin: '200px 0px' }}>
269
+ * <HeavyComponent />
270
+ * </RenderInView>
271
+ */
272
+ declare function RenderInView({
273
+ children,
274
+ fallback,
275
+ mode,
276
+ preserveSpace,
277
+ options
278
+ }: RenderInViewProps): react_jsx_runtime0.JSX.Element;
279
+ //#endregion
196
280
  //#region src/components/responsive-indicator.d.ts
197
281
  type Side = 'bottom-left' | 'bottom-right' | 'top-right' | 'top-left';
198
282
  /**
@@ -277,4 +361,4 @@ declare const ScrollTracker: ({
277
361
  */
278
362
  declare function ScrollableMarker(): null;
279
363
  //#endregion
280
- export { HtmlInjector, Iconify, MediaWrapper, Portal, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker, WithClosest };
364
+ export { HtmlInjector, Iconify, MediaWrapper, MountAfter, Portal, RenderInView, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker, WithClosest };
@@ -1 +1 @@
1
- "use client";import{r as e}from"../functions-CTMT4m8K.js";import{C as t,T as n,k as r}from"../hooks-CCFEDyEO.js";import*as i from"react";import{useLayoutEffect as a,useRef as o,useState as s}from"react";import{Slot as c}from"@radix-ui/react-slot";import{jsx as l}from"react/jsx-runtime";import{Icon as u}from"@iconify/react";import{createPortal as d}from"react-dom";function f({selector:e,children:t}){let n=o(null),[r,i]=s(!1),[u,d]=s({hasClosest:!1,closestElement:null});return a(()=>{if(n.current){let t=n.current.closest(e);d({hasClosest:t!==null,closestElement:t})}i(!0)},[e]),r?l(c,{ref:n,children:t(u)}):l(`span`,{ref:n})}function p({className:t,html:n,sanitize:a=!1,executeScripts:o=!0,...s}){let c=i.useRef([]),u=i.useRef(null);r(()=>{if(c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.current=[],!(!o||!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,o]),i.useEffect(()=>()=>{c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let d=i.useMemo(()=>{if(!n)return``;if(a){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,a]);return n?l(`div`,{ref:u,className:e(t),dangerouslySetInnerHTML:{__html:d},...s}):null}function m({breakpoint:e,as:t=`div`,fallback:r=i.Fragment,className:a,classNameFallback:o,...s}){let c=n(e.split(`-`).pop())===e.startsWith(`max`),u=c?r:t,d=c?o:a;return u===i.Fragment?l(u,{ref:s.ref,children:s.children},s.key):l(u,{className:d,...s})}function h({children:e,container:t}){let n=o(null),[r,i]=s(!1);return a(()=>{t?n.current=typeof t==`string`?document.querySelector(t):t.current:n.current=document.body,i(!0)},[]),!r||!n.current?null:d(e,n.current)}const g=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],_=({side:e,offset:t=2,unit:r=`rem`})=>{let[a,o]=i.useState(e??`bottom-left`),s=n({DEFAULT:`xs`,sm:`sm`,md:`md`,lg:`lg`,xl:`xl`,"2xl":`2xl`}),[c,u]=i.useState(typeof window<`u`?window.innerWidth:0);i.useEffect(()=>{if(typeof window>`u`)return;let e=()=>u(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let d=s===`2xl`&&c>=1792?r===`rem`?`${(c/16).toFixed(1)}rem`:`${c}${r}`:s;return l(`button`,{type:`button`,onClick:()=>{o(g[(g.indexOf(a)+1)%g.length])},style:{position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,minWidth:`2.5rem`,borderRadius:`30px`,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-left":{bottom:`${t}${r}`,left:`${t}${r}`},"bottom-right":{bottom:`${t}${r}`,right:`${t}${r}`},"top-right":{top:`${t}${r}`,right:`${t}${r}`},"top-left":{top:`${t}${r}`,left:`${t}${r}`}}[a]},children:d})};function v(){return r(()=>{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`in window?window.requestIdleCallback(()=>r(e)):setTimeout(()=>r(e),0);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{p as HtmlInjector,u as Iconify,m as MediaWrapper,h as Portal,_ as ResponsiveIndicator,_ as TailwindIndicator,t as ScrollTracker,v as ScrollableMarker,f as WithClosest};
1
+ "use client";import{r as e}from"../functions-CTMT4m8K.js";import{C as t,E as n,M as r,T as i}from"../hooks-C5hYyCOD.js";import*as a from"react";import{useEffect as o,useLayoutEffect as s,useRef as c,useState as l}from"react";import{Slot as u}from"@radix-ui/react-slot";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";import{Icon as m}from"@iconify/react";import{createPortal as h}from"react-dom";function g({selector:e,children:t}){let n=c(null),[r,i]=l(!1),[a,o]=l({hasClosest:!1,closestElement:null});return s(()=>{if(n.current){let t=n.current.closest(e);o({hasClosest:t!==null,closestElement:t})}i(!0)},[e]),r?f(u,{ref:n,children:t(a)}):f(`span`,{ref:n})}function _({className:t,html:n,sanitize:i=!1,executeScripts:o=!0,...s}){let c=a.useRef([]),l=a.useRef(null);r(()=>{if(c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.current=[],!(!o||!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,o]),a.useEffect(()=>()=>{c.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let u=a.useMemo(()=>{if(!n)return``;if(i){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,i]);return n?f(`div`,{ref:l,className:e(t),dangerouslySetInnerHTML:{__html:u},...s}):null}function v({breakpoint:e,as:t=`div`,fallback:n=a.Fragment,className:r,classNameFallback:o,...s}){let c=i(e.split(`-`).pop())===e.startsWith(`max`),l=c?n:t,u=c?o:r;return l===a.Fragment?f(l,{ref:s.ref,children:s.children},s.key):f(l,{className:u,...s})}function y({delay:e=0,fallback:t=null,children:n}){let[r,i]=l(e===0?`mounted`:`pending`),a=c(null);return o(()=>{if(e!==0)return a.current=setTimeout(()=>i(`mounted`),e),()=>{a.current&&clearTimeout(a.current)}},[e]),r===`pending`?f(d,{children:t}):f(d,{children:n})}function b({children:e,container:t}){let n=c(null),[r,i]=l(!1);return s(()=>{t?n.current=typeof t==`string`?document.querySelector(t):t.current:n.current=document.body,i(!0)},[]),!r||!n.current?null:h(e,n.current)}function x({children:e,fallback:t=null,mode:r=`persist`,preserveSpace:i=!1,options:a={}}){let o=c(null),u=c(null),m=c(null),[h,g]=l(!1),[_,v]=l(!1),[y,b]=l(null);n(o,e=>{g(e),e&&!_&&v(!0)},a),s(()=>{if(!i||!u.current||m.current!==null)return;let e=u.current.getBoundingClientRect().height;e>0&&(m.current=e,b(e))});let x=r===`unmount`?h:_,S=i&&y!==null?f(`span`,{"aria-hidden":!0,style:{display:`block`,height:y,contain:`strict`}}):t;return p(d,{children:[f(`span`,{ref:o,"aria-hidden":!0,style:{display:`block`,width:0,height:0,overflow:`hidden`,contain:`strict`}}),x?f(`span`,{ref:u,style:{display:`contents`},children:e}):S]})}const S=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],C=({side:e,offset:t=2,unit:n=`rem`})=>{let[r,o]=a.useState(e??`bottom-left`),s=i({DEFAULT:`xs`,sm:`sm`,md:`md`,lg:`lg`,xl:`xl`,"2xl":`2xl`}),[c,l]=a.useState(typeof window<`u`?window.innerWidth:0);a.useEffect(()=>{if(typeof window>`u`)return;let e=()=>l(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let u=s===`2xl`&&c>=1792?n===`rem`?`${(c/16).toFixed(1)}rem`:`${c}${n}`:s;return f(`button`,{type:`button`,onClick:()=>{o(S[(S.indexOf(r)+1)%S.length])},style:{position:`fixed`,zIndex:50,display:`grid`,height:`2.5rem`,minWidth:`2.5rem`,borderRadius:`30px`,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-left":{bottom:`${t}${n}`,left:`${t}${n}`},"bottom-right":{bottom:`${t}${n}`,right:`${t}${n}`},"top-right":{top:`${t}${n}`,right:`${t}${n}`},"top-left":{top:`${t}${n}`,left:`${t}${n}`}}[r]},children:u})};function w(){return r(()=>{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`in window?window.requestIdleCallback(()=>r(e)):setTimeout(()=>r(e),0);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{_ as HtmlInjector,m as Iconify,v as MediaWrapper,y as MountAfter,b as Portal,x as RenderInView,C as ResponsiveIndicator,C as TailwindIndicator,t as ScrollTracker,w as ScrollableMarker,g as WithClosest};
@@ -1,4 +1,4 @@
1
- const e=require(`./hooks-B_cSW9vB.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]});function s(...e){return(0,n.twMerge)((0,t.clsx)(e))}function c(e,t){return console.warn(`isNavActive is deprecated. Use isLinkActive instead.`),RegExp(`^/?${e}(/|$)`).test(t)}function l({targetPath: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(/[?#].*$/,``).replace(i,``).replace(/^\/+|\/+$/g,``),o=a(t);if(e instanceof RegExp)return e.test(o);let s=a(e);return r?s===o:o.startsWith(s)}function u(e){let t=e;return e.includes(`/public/`)&&(t=e.replace(`/public/`,`/`)),t.trim()}const d=(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`})},f=(e,t=()=>{})=>{typeof window>`u`||!navigator.clipboard?.writeText||e&&navigator.clipboard.writeText(e).then(t)},p=typeof window>`u`,m=e=>p?Buffer.from(e).toString(`base64`):window.btoa(e),h=(...e)=>t=>{for(let n of e)n&&(typeof n==`function`?n(t):n.current=t)};function g(e,t){let n=document.getElementById(e);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`,...t}),window.history.pushState(null,``,`#${e}`))}function _(e){let t=`
1
+ const e=require(`./hooks-CbZNFdxc.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]});function s(...e){return(0,n.twMerge)((0,t.clsx)(e))}function c(e,t){return console.warn(`isNavActive is deprecated. Use isLinkActive instead.`),RegExp(`^/?${e}(/|$)`).test(t)}function l({targetPath: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(/[?#].*$/,``).replace(i,``).replace(/^\/+|\/+$/g,``),o=a(t);if(e instanceof RegExp)return e.test(o);let s=a(e);return r?s===o:o.startsWith(s)}function u(e){let t=e;return e.includes(`/public/`)&&(t=e.replace(`/public/`,`/`)),t.trim()}const d=(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`})},f=(e,t=()=>{})=>{typeof window>`u`||!navigator.clipboard?.writeText||e&&navigator.clipboard.writeText(e).then(t)},p=typeof window>`u`,m=e=>p?Buffer.from(e).toString(`base64`):window.btoa(e),h=(...e)=>t=>{for(let n of e)n&&(typeof n==`function`?n(t):n.current=t)};function g(e,t){let n=document.getElementById(e);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`,...t}),window.history.pushState(null,``,`#${e}`))}function _(e){let t=`
2
2
  self.onmessage = async (e) => {
3
3
  try {
4
4
  const fn = ${e.toString()};
@@ -1 +1 @@
1
- "use client";const e=require(`../hooks-B_cSW9vB.cjs`);require(`../functions-Dp2CwvmB.cjs`),exports.BREAKPOINTS=e.w,exports.useAction=e.D,exports.useAsync=e.E,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.T,exports.useQuerySelector=e.m,exports.useSchedule=e.O,exports.useScheduledEffect=e.k,exports.useScrollTracker=e.S,exports.useSessionStorage=e.h,exports.useTimeout=e.g,exports.useUpdateEffect=e._,exports.useUrlParams=e.v,exports.useWindowEvent=e.y,exports.useWorker=e.b,exports.useWorkerEffect=e.x;
1
+ "use client";const e=require(`../hooks-CbZNFdxc.cjs`);require(`../functions-BFt6Bpb5.cjs`),exports.BREAKPOINTS=e.w,exports.createObserver=e.E,exports.useAction=e.A,exports.useAsync=e.k,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.useInView=e.D,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.T,exports.useQuerySelector=e.m,exports.useSchedule=e.j,exports.useScheduledEffect=e.M,exports.useScrollTracker=e.S,exports.useSessionStorage=e.h,exports.useTimeout=e.g,exports.useUpdateEffect=e._,exports.useUrlParams=e.v,exports.useViewEffect=e.O,exports.useWindowEvent=e.y,exports.useWorker=e.b,exports.useWorkerEffect=e.x;
@@ -1,3 +1,4 @@
1
+ import { i as useViewEffect, n as createObserver, r as useInView, t as InViewOptions } from "../in-view-CKQ15_tl.cjs";
1
2
  import * as React from "react";
2
3
  import { ScheduleOpts, Task } from "@ts-utilities/core";
3
4
 
@@ -716,4 +717,4 @@ declare const useIntersection: ({
716
717
  isIntersecting: boolean;
717
718
  };
718
719
  //#endregion
719
- export { BREAKPOINTS, type MediaQueryMap, useAction, useAsync, useClickOutside, useCopyToClipboard, useDebounce, useDomCalculation, useEffectOnce, useHeightCalculation, useIntersection, useIsAtTop, useIsClient, useIsScrolling, useIsomorphicEffect, useLocalStorage, useLockScroll, useMediaQuery, useQuerySelector, useSchedule, useScheduledEffect, useScrollTracker, useSessionStorage, useTimeout, useUpdateEffect, useUrlParams, useWindowEvent, useWorker, useWorkerEffect };
720
+ export { BREAKPOINTS, InViewOptions, type MediaQueryMap, createObserver, useAction, useAsync, useClickOutside, useCopyToClipboard, useDebounce, useDomCalculation, useEffectOnce, useHeightCalculation, useInView, useIntersection, useIsAtTop, useIsClient, useIsScrolling, useIsomorphicEffect, useLocalStorage, useLockScroll, useMediaQuery, useQuerySelector, useSchedule, useScheduledEffect, useScrollTracker, useSessionStorage, useTimeout, useUpdateEffect, useUrlParams, useViewEffect, useWindowEvent, useWorker, useWorkerEffect };
@@ -1,3 +1,4 @@
1
+ import { i as useViewEffect, n as createObserver, r as useInView, t as InViewOptions } from "../in-view-DJxQrkQf.js";
1
2
  import { ScheduleOpts, Task } from "@ts-utilities/core";
2
3
  import * as React from "react";
3
4
 
@@ -716,4 +717,4 @@ declare const useIntersection: ({
716
717
  isIntersecting: boolean;
717
718
  };
718
719
  //#endregion
719
- export { BREAKPOINTS, type MediaQueryMap, useAction, useAsync, useClickOutside, useCopyToClipboard, useDebounce, useDomCalculation, useEffectOnce, useHeightCalculation, useIntersection, useIsAtTop, useIsClient, useIsScrolling, useIsomorphicEffect, useLocalStorage, useLockScroll, useMediaQuery, useQuerySelector, useSchedule, useScheduledEffect, useScrollTracker, useSessionStorage, useTimeout, useUpdateEffect, useUrlParams, useWindowEvent, useWorker, useWorkerEffect };
720
+ export { BREAKPOINTS, InViewOptions, type MediaQueryMap, createObserver, useAction, useAsync, useClickOutside, useCopyToClipboard, useDebounce, useDomCalculation, useEffectOnce, useHeightCalculation, useInView, useIntersection, useIsAtTop, useIsClient, useIsScrolling, useIsomorphicEffect, useLocalStorage, useLockScroll, useMediaQuery, useQuerySelector, useSchedule, useScheduledEffect, useScrollTracker, useSessionStorage, useTimeout, useUpdateEffect, useUrlParams, useViewEffect, useWindowEvent, useWorker, useWorkerEffect };
@@ -1 +1 @@
1
- "use client";import"../functions-CTMT4m8K.js";import{D as e,E as t,O as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,f as u,g as d,h as f,i as p,k as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C,v as w,w as T,x as E,y as D}from"../hooks-CCFEDyEO.js";export{T as BREAKPOINTS,e as useAction,t as useAsync,S as useClickOutside,_ as useCopyToClipboard,b as useDebounce,p as useDomCalculation,o as useEffectOnce,v as useHeightCalculation,x as useIntersection,c as useIsAtTop,h as useIsClient,C as useIsScrolling,l as useIsomorphicEffect,u as useLocalStorage,y as useLockScroll,i as useMediaQuery,g as useQuerySelector,n as useSchedule,m as useScheduledEffect,r as useScrollTracker,f as useSessionStorage,d as useTimeout,a as useUpdateEffect,w as useUrlParams,D as useWindowEvent,s as useWorker,E as useWorkerEffect};
1
+ "use client";import"../functions-CTMT4m8K.js";import{A as e,D as t,E as n,M as r,O as i,S as a,T as o,_ as s,a as c,b as l,c as u,d,f,g as p,h as m,i as h,j as g,k as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as T,u as E,v as D,w as O,x as k,y as A}from"../hooks-C5hYyCOD.js";export{O as BREAKPOINTS,n as createObserver,e as useAction,_ as useAsync,T as useClickOutside,b as useCopyToClipboard,C as useDebounce,h as useDomCalculation,c as useEffectOnce,x as useHeightCalculation,t as useInView,w as useIntersection,u as useIsAtTop,v as useIsClient,E as useIsScrolling,d as useIsomorphicEffect,f as useLocalStorage,S as useLockScroll,o as useMediaQuery,y as useQuerySelector,g as useSchedule,r as useScheduledEffect,a as useScrollTracker,m as useSessionStorage,p as useTimeout,s as useUpdateEffect,D as useUrlParams,i as useViewEffect,A as useWindowEvent,l as useWorker,k as useWorkerEffect};
@@ -0,0 +1 @@
1
+ import{c as e,i as t,t as n}from"./functions-CTMT4m8K.js";import{schedule as r}from"@ts-utilities/core";import*as i from"react";import{useEffect as a,useRef as o,useState as s}from"react";import{Slot as c}from"@radix-ui/react-slot";import{jsx as l}from"react/jsx-runtime";function u(e={}){let{timeout:t=1e4}=e;return i.useCallback(e=>{let n=()=>{try{i.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?window.requestIdleCallback(n,{timeout:t}):r(n)},[t])}function d(e,t=[],n={}){let r=u(n);i.useEffect(()=>{let t;return r(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[r,...t])}const f=(e,t)=>{let[n,r]=i.useState(`idle`),[a,o]=i.useState(null),[s,c]=i.useState(null),[l,u]=i.useState(void 0),[f,p]=i.useTransition(),m=n===`idle`,h=n===`loading`||f,g=n===`success`,_=n===`error`,v=i.useCallback(e=>{o(e),r(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),y=i.useCallback(e=>{c(e),r(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=i.useCallback(t=>{u(t),r(`loading`),c(null),p(()=>{e(t).then(v).catch(y)})},[e,v,y]);return{execute:b,executeAsync:i.useCallback(t=>new Promise((n,i)=>{u(t),r(`loading`),c(null),p(()=>{e(t).then(e=>{v(e),n(e)}).catch(e=>{y(e),i(e)})})}),[e,v,y]),reset:i.useCallback(()=>{r(`idle`),o(null),c(null),u(void 0)},[]),useExecute:e=>{d(()=>{b(e)},[])},data:a,error:s,input:l,isIdle:m,isLoading:h,isSuccess:g,isError:_}};function p(e,t={}){let{mode:n=`manual`,deps:r,onSuccess:a,onError:o,onSettled:s}=t,[c,l]=i.useState(void 0),[u,d]=i.useState(void 0),[f,p]=i.useState(`idle`),m=i.useRef(null),h=i.useCallback(a||(()=>{}),[a]),g=i.useCallback(o||(()=>{}),[o]),_=i.useCallback(s||(()=>{}),[s]),v=i.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 i.useEffect(()=>{n===`auto`&&!r&&v()},[e,n,v,r]),i.useEffect(()=>{r&&n===`auto`&&v()},r||[]),i.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 m(e,t,n){let{rootMargin:r=`0px`,once:i=!1}=n;a(()=>{let n=e.current;if(!n)return;let a=new IntersectionObserver(([e])=>{if(e){let n=e.isIntersecting;t(n),n&&i&&a.disconnect()}},{rootMargin:r});return a.observe(n),()=>a.disconnect()},[r,i])}function h(e={}){let t=o(null),[n,r]=s(!1);return m(t,r,e),[t,n]}function g(e,t,n={}){let r=o(null),i=o(t);return a(()=>{i.current=t}),m(r,t=>{e===`in`&&t&&i.current(),e===`out`&&!t&&i.current()},n),r}const _={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},v=[`2xl`,`xl`,`lg`,`md`,`sm`,`max-2xl`,`max-xl`,`max-lg`,`max-md`,`max-sm`],y=e=>typeof e==`object`&&!!e&&`DEFAULT`in e,b=e=>e.startsWith(`max-`)?`(max-width: ${_[e.slice(4)]-1}px)`:`(min-width: ${_[e]}px)`,x=e=>v.filter(t=>t in e).map(t=>`${t}:${String(e[t])}`).join(`,`)+`:DEFAULT:${String(e.DEFAULT)}`;function S(t){if(y(t)){let n=x(t),r=i.useMemo(()=>{let e=Object.keys(t).filter(e=>e!==`DEFAULT`);return v.filter(t=>e.includes(t)).map(e=>({bp:e,query:b(e),value:t[e]}))},[n]),a=i.useCallback(e=>{for(let t=0;t<e.length;t++)if(e[t].matches)return r[t].value;return t.DEFAULT},[r,t.DEFAULT]),[o,s]=i.useState(()=>{if(e)return t.DEFAULT;for(let{query:e,value:t}of r)if(window.matchMedia(e).matches)return t;return t.DEFAULT});return i.useEffect(()=>{let e=r.map(({query:e})=>window.matchMedia(e)),t=()=>s(a(e));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[r,a]),o}let n=Array.isArray(t)?t:[t],r=n.join(`||`),a=i.useMemo(()=>n.map(e=>e.startsWith(`(`)?e:b(e)),[r]),[o,s]=i.useState(()=>e?!1:a.every(e=>window.matchMedia(e).matches));return d(()=>{let e=a.map(e=>window.matchMedia(e)),t=()=>s(e.every(e=>e.matches));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[a]),o}const C=i.createContext(null),w=({children:e})=>{let t=i.useRef(null);return l(C.Provider,{value:t,children:l(c,{ref:t,children:e})})},T=({threshold:e=300,container:t}={})=>{let n=i.useContext(C),[r,a]=i.useState({scrolledPast:!1,direction:`forward`}),o=i.useRef(0),s=t=>{let n=t>o.current?`forward`:`backward`;a({scrolledPast:t>e,direction:n}),o.current=t};return d(()=>{let e=null;typeof t==`string`?e=document.querySelector(t):t?.current?e=t.current:n?.current&&(e=n.current);let r=e||window,i=e?`scrollTop`:`scrollY`,a=()=>{let e=r[i];s(e)};return r.addEventListener(`scroll`,a),a(),()=>r.removeEventListener(`scroll`,a)},[t,n,e]),r};function E(e){let[t,r]=i.useState(void 0),[a,o]=i.useState(null),[s,c]=i.useState(!1),l=i.useMemo(()=>n(e),[]);return{execute:i.useCallback((...e)=>{(async()=>{c(!0),o(null);try{r(await l(...e))}catch(e){o(e instanceof Error?e:Error(String(e)))}finally{c(!1)}})()},[l]),data:t,error:a,isLoading:s}}function D(e,t=[]){let{execute:n}=E(e);i.useEffect(()=>{n()},[n,...t])}const O=(e=()=>alert(`clicked outside`))=>{let t=i.useRef(null),n=n=>{t.current&&!t.current.contains(n.target)&&e()};return i.useEffect(()=>(document.addEventListener(`mousedown`,n),document.addEventListener(`touchstart`,n),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`touchstart`,n)})),t};function k(e){i.useEffect(e,[])}function A(e,t){let n=i.useRef(!0);i.useEffect(()=>{if(n.current)n.current=!1;else return e()},t)}function j(e,t=500){let[n,r]=i.useState(e);return i.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>{clearTimeout(n)}},[e,t]),n}const M=typeof window<`u`?i.useLayoutEffect:i.useEffect;function N(e,t=1e3){let n=i.useRef(e);d(()=>{n.current=e},[e]),i.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>n.current(),t);return()=>clearTimeout(e)},[t])}function P(e,t,n){i.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t,n])}const F=(e,t)=>{let[n,r]=i.useState(t);return i.useEffect(()=>{let t=sessionStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,i.useCallback(t=>{r(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},I=(e,t)=>{let[n,r]=i.useState(()=>{try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return A(()=>{try{localStorage.setItem(e,JSON.stringify(n))}catch(t){console.error(`Error writing to localStorage key "${e}":`,t)}},[e,n]),[n,r]},L=(e,t)=>{let[n,r]=i.useState(t);return i.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)}]},R=e=>{let[t,n]=i.useState(null),r=i.useRef(null);return i.useEffect(()=>{let t=null;if(typeof e==`string`?t=document.querySelector(e):e?.current&&(t=e.current),!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 z(){let[e,t]=i.useState(!1);return i.useEffect(()=>{t(!0)},[]),e}function B(){i.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function V({timeout:e=2e3}){let[n,r]=i.useState(!1);return{isCopied:n,copy:n=>{t(n,()=>{r(!0),setTimeout(()=>{r(!1)},e)})}}}const H=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1})=>{let[a,o]=i.useState(500),s=()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0);o(n?window.innerHeight-r-t:r+t)};return i.useEffect(()=>{if(s(),r){if(typeof r==`string`){let e=document.getElementById(r),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},U=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1,onChange:a})=>{let[o,s]=i.useState({height:500,width:500}),c=i.useCallback(()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0),i=e.reduce((e,t)=>e+(document.getElementById(t)?.clientWidth||0),0),o=n?window.innerHeight-r-t:r+t,c=n?window.innerWidth-i-t:i+t;s(e=>e.height===o&&e.width===c?e:{height:o,width:c}),a?.({blocksWidth:i,blocksHeight:r,remainingWidth:c,remainingHeight:o})},[e,t,n,a]);return i.useEffect(()=>{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(r)if(typeof r==`string`){let e=document.getElementById(r);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,r,e.join(`,`)]),o},W=()=>{let[e,t]=i.useState(!1),n=i.useRef(null),r=i.useRef(null);return k(()=>{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}},G=({offset:e}={})=>{let[t,n]=i.useState(!0),r=i.useRef(null);return k(()=>{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}},K=({threshold:e=.1,root:t=null,rootMargin:n,onInteractionStart:r,onInteractionEnd:a}={})=>{let[o,s]=i.useState(!1),c=i.useRef(null);return i.useEffect(()=>{if(!c.current)return;let i=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting?o||(r?.(),s(!0)):o&&(a?.(),s(!1))},{threshold:e,root:t,...n&&{rootMargin:n}});return i.observe(c.current),()=>{i.disconnect()}},[e,t,n,r,a,o]),{ref:c,isIntersecting:o}};export{f as A,w as C,h as D,m as E,d as M,g as O,T as S,S as T,A as _,k as a,E as b,G as c,M as d,I as f,N as g,F as h,U as i,u as j,p as k,z as l,R as m,V as n,H as o,B as p,j as r,K as s,O as t,W as u,L as v,_ as w,D as x,P as y};
@@ -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-BFt6Bpb5.cjs`);let l=require(`@ts-utilities/core`),u=require(`react`);u=s(u);let d=require(`@radix-ui/react-slot`),f=require(`react/jsx-runtime`);function p(e={}){let{timeout:t=1e4}=e;return u.useCallback(e=>{let n=()=>{try{u.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?window.requestIdleCallback(n,{timeout:t}):(0,l.schedule)(n)},[t])}function m(e,t=[],n={}){let r=p(n);u.useEffect(()=>{let t;return r(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[r,...t])}const h=(e,t)=>{let[n,r]=u.useState(`idle`),[i,a]=u.useState(null),[o,s]=u.useState(null),[c,l]=u.useState(void 0),[d,f]=u.useTransition(),p=n===`idle`,h=n===`loading`||d,g=n===`success`,_=n===`error`,v=u.useCallback(e=>{a(e),r(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),y=u.useCallback(e=>{s(e),r(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=u.useCallback(t=>{l(t),r(`loading`),s(null),f(()=>{e(t).then(v).catch(y)})},[e,v,y]);return{execute:b,executeAsync:u.useCallback(t=>new Promise((n,i)=>{l(t),r(`loading`),s(null),f(()=>{e(t).then(e=>{v(e),n(e)}).catch(e=>{y(e),i(e)})})}),[e,v,y]),reset:u.useCallback(()=>{r(`idle`),a(null),s(null),l(void 0)},[]),useExecute:e=>{m(()=>{b(e)},[])},data:i,error:o,input:c,isIdle:p,isLoading:h,isSuccess:g,isError:_}};function g(e,t={}){let{mode:n=`manual`,deps:r,onSuccess:i,onError:a,onSettled:o}=t,[s,c]=u.useState(void 0),[l,d]=u.useState(void 0),[f,p]=u.useState(`idle`),m=u.useRef(null),h=u.useCallback(i||(()=>{}),[i]),g=u.useCallback(a||(()=>{}),[a]),_=u.useCallback(o||(()=>{}),[o]),v=u.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 u.useEffect(()=>{n===`auto`&&!r&&v()},[e,n,v,r]),u.useEffect(()=>{r&&n===`auto`&&v()},r||[]),u.useEffect(()=>()=>{m.current&&m.current.abort()},[]),{data:s,error:l,status:f,isIdle:f===`idle`,isPending:f===`pending`,isSuccess:f===`success`,isError:f===`error`,execute:v}}function _(e,t,n){let{rootMargin:r=`0px`,once:i=!1}=n;(0,u.useEffect)(()=>{let n=e.current;if(!n)return;let a=new IntersectionObserver(([e])=>{if(e){let n=e.isIntersecting;t(n),n&&i&&a.disconnect()}},{rootMargin:r});return a.observe(n),()=>a.disconnect()},[r,i])}function v(e={}){let t=(0,u.useRef)(null),[n,r]=(0,u.useState)(!1);return _(t,r,e),[t,n]}function y(e,t,n={}){let r=(0,u.useRef)(null),i=(0,u.useRef)(t);return(0,u.useEffect)(()=>{i.current=t}),_(r,t=>{e===`in`&&t&&i.current(),e===`out`&&!t&&i.current()},n),r}const b={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},x=[`2xl`,`xl`,`lg`,`md`,`sm`,`max-2xl`,`max-xl`,`max-lg`,`max-md`,`max-sm`],S=e=>typeof e==`object`&&!!e&&`DEFAULT`in e,C=e=>e.startsWith(`max-`)?`(max-width: ${b[e.slice(4)]-1}px)`:`(min-width: ${b[e]}px)`,w=e=>x.filter(t=>t in e).map(t=>`${t}:${String(e[t])}`).join(`,`)+`:DEFAULT:${String(e.DEFAULT)}`;function T(e){if(S(e)){let t=w(e),n=u.useMemo(()=>{let t=Object.keys(e).filter(e=>e!==`DEFAULT`);return x.filter(e=>t.includes(e)).map(t=>({bp:t,query:C(t),value:e[t]}))},[t]),r=u.useCallback(t=>{for(let e=0;e<t.length;e++)if(t[e].matches)return n[e].value;return e.DEFAULT},[n,e.DEFAULT]),[i,a]=u.useState(()=>{if(c.c)return e.DEFAULT;for(let{query:e,value:t}of n)if(window.matchMedia(e).matches)return t;return e.DEFAULT});return u.useEffect(()=>{let e=n.map(({query:e})=>window.matchMedia(e)),t=()=>a(r(e));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[n,r]),i}let t=Array.isArray(e)?e:[e],n=t.join(`||`),r=u.useMemo(()=>t.map(e=>e.startsWith(`(`)?e:C(e)),[n]),[i,a]=u.useState(()=>c.c?!1:r.every(e=>window.matchMedia(e).matches));return m(()=>{let e=r.map(e=>window.matchMedia(e)),t=()=>a(e.every(e=>e.matches));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[r]),i}const E=u.createContext(null),D=({children:e})=>{let t=u.useRef(null);return(0,f.jsx)(E.Provider,{value:t,children:(0,f.jsx)(d.Slot,{ref:t,children:e})})},O=({threshold:e=300,container:t}={})=>{let n=u.useContext(E),[r,i]=u.useState({scrolledPast:!1,direction:`forward`}),a=u.useRef(0),o=t=>{let n=t>a.current?`forward`:`backward`;i({scrolledPast:t>e,direction:n}),a.current=t};return m(()=>{let e=null;typeof t==`string`?e=document.querySelector(t):t?.current?e=t.current:n?.current&&(e=n.current);let r=e||window,i=e?`scrollTop`:`scrollY`,a=()=>{let e=r[i];o(e)};return r.addEventListener(`scroll`,a),a(),()=>r.removeEventListener(`scroll`,a)},[t,n,e]),r};function k(e){let[t,n]=u.useState(void 0),[r,i]=u.useState(null),[a,o]=u.useState(!1),s=u.useMemo(()=>c.t(e),[]);return{execute:u.useCallback((...e)=>{(async()=>{o(!0),i(null);try{n(await s(...e))}catch(e){i(e instanceof Error?e:Error(String(e)))}finally{o(!1)}})()},[s]),data:t,error:r,isLoading:a}}function A(e,t=[]){let{execute:n}=k(e);u.useEffect(()=>{n()},[n,...t])}const j=(e=()=>alert(`clicked outside`))=>{let t=u.useRef(null),n=n=>{t.current&&!t.current.contains(n.target)&&e()};return u.useEffect(()=>(document.addEventListener(`mousedown`,n),document.addEventListener(`touchstart`,n),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`touchstart`,n)})),t};function M(e){u.useEffect(e,[])}function N(e,t){let n=u.useRef(!0);u.useEffect(()=>{if(n.current)n.current=!1;else return e()},t)}function P(e,t=500){let[n,r]=u.useState(e);return u.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>{clearTimeout(n)}},[e,t]),n}const F=typeof window<`u`?u.useLayoutEffect:u.useEffect;function I(e,t=1e3){let n=u.useRef(e);m(()=>{n.current=e},[e]),u.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>n.current(),t);return()=>clearTimeout(e)},[t])}function L(e,t,n){u.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t,n])}const R=(e,t)=>{let[n,r]=u.useState(t);return u.useEffect(()=>{let t=sessionStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,u.useCallback(t=>{r(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},z=(e,t)=>{let[n,r]=u.useState(()=>{try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return N(()=>{try{localStorage.setItem(e,JSON.stringify(n))}catch(t){console.error(`Error writing to localStorage key "${e}":`,t)}},[e,n]),[n,r]},B=(e,t)=>{let[n,r]=u.useState(t);return u.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)}]},V=e=>{let[t,n]=u.useState(null),r=u.useRef(null);return u.useEffect(()=>{let t=null;if(typeof e==`string`?t=document.querySelector(e):e?.current&&(t=e.current),!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 H(){let[e,t]=u.useState(!1);return u.useEffect(()=>{t(!0)},[]),e}function U(){u.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function W({timeout:e=2e3}){let[t,n]=u.useState(!1);return{isCopied:t,copy:t=>{c.i(t,()=>{n(!0),setTimeout(()=>{n(!1)},e)})}}}const G=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1})=>{let[i,a]=u.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 u.useEffect(()=>{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},K=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1,onChange:i})=>{let[a,o]=u.useState({height:500,width:500}),s=u.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 u.useEffect(()=>{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},q=()=>{let[e,t]=u.useState(!1),n=u.useRef(null),r=u.useRef(null);return M(()=>{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}},J=({offset:e}={})=>{let[t,n]=u.useState(!0),r=u.useRef(null);return M(()=>{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}},Y=({threshold:e=.1,root:t=null,rootMargin:n,onInteractionStart:r,onInteractionEnd:i}={})=>{let[a,o]=u.useState(!1),s=u.useRef(null);return u.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,`A`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return L}});
@@ -0,0 +1,40 @@
1
+ import { RefObject } from "react";
2
+
3
+ //#region src/hooks/in-view.d.ts
4
+ interface InViewOptions {
5
+ /**
6
+ * IntersectionObserver rootMargin.
7
+ * @example "200px 0px" — trigger 200px before entering viewport
8
+ * @default "0px"
9
+ */
10
+ rootMargin?: string;
11
+ /**
12
+ * Stop observing after first intersection.
13
+ * @default false
14
+ */
15
+ once?: boolean;
16
+ }
17
+ declare function createObserver(ref: RefObject<Element | null>, onIntersect: (inView: boolean) => void, options: InViewOptions): void;
18
+ /**
19
+ * Returns a ref and a boolean indicating whether the element is in view.
20
+ *
21
+ * @example
22
+ * const [ref, inView] = useInView({ once: true });
23
+ * <div ref={ref}>{inView ? 'visible' : 'hidden'}</div>
24
+ */
25
+ declare function useInView<T extends Element = Element>(options?: InViewOptions): [RefObject<T | null>, boolean];
26
+ type ViewEvent = 'in' | 'out';
27
+ /**
28
+ * Runs a callback when the element enters or exits the viewport.
29
+ *
30
+ * @param event - `"in"` fires when entering, `"out"` fires when exiting
31
+ * @param callback - Side effect to run on the event
32
+ * @param options - IntersectionObserver options
33
+ *
34
+ * @example
35
+ * const ref = useViewEffect('in', () => startAnimation(), { once: true });
36
+ * <div ref={ref} />
37
+ */
38
+ declare function useViewEffect<T extends Element = Element>(event: ViewEvent, callback: () => void, options?: InViewOptions): RefObject<T | null>;
39
+ //#endregion
40
+ export { useViewEffect as i, createObserver as n, useInView as r, InViewOptions as t };
@@ -0,0 +1,40 @@
1
+ import { RefObject } from "react";
2
+
3
+ //#region src/hooks/in-view.d.ts
4
+ interface InViewOptions {
5
+ /**
6
+ * IntersectionObserver rootMargin.
7
+ * @example "200px 0px" — trigger 200px before entering viewport
8
+ * @default "0px"
9
+ */
10
+ rootMargin?: string;
11
+ /**
12
+ * Stop observing after first intersection.
13
+ * @default false
14
+ */
15
+ once?: boolean;
16
+ }
17
+ declare function createObserver(ref: RefObject<Element | null>, onIntersect: (inView: boolean) => void, options: InViewOptions): void;
18
+ /**
19
+ * Returns a ref and a boolean indicating whether the element is in view.
20
+ *
21
+ * @example
22
+ * const [ref, inView] = useInView({ once: true });
23
+ * <div ref={ref}>{inView ? 'visible' : 'hidden'}</div>
24
+ */
25
+ declare function useInView<T extends Element = Element>(options?: InViewOptions): [RefObject<T | null>, boolean];
26
+ type ViewEvent = 'in' | 'out';
27
+ /**
28
+ * Runs a callback when the element enters or exits the viewport.
29
+ *
30
+ * @param event - `"in"` fires when entering, `"out"` fires when exiting
31
+ * @param callback - Side effect to run on the event
32
+ * @param options - IntersectionObserver options
33
+ *
34
+ * @example
35
+ * const ref = useViewEffect('in', () => startAnimation(), { once: true });
36
+ * <div ref={ref} />
37
+ */
38
+ declare function useViewEffect<T extends Element = Element>(event: ViewEvent, callback: () => void, options?: InViewOptions): RefObject<T | null>;
39
+ //#endregion
40
+ export { useViewEffect as i, createObserver as n, useInView as r, InViewOptions as t };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./functions-Dp2CwvmB.cjs`);exports.cleanSrc=e.n,exports.cn=e.r,exports.copyToClipboard=e.i,exports.deleteClientSideCookie=e.f,exports.getClientSideCookie=e.p,exports.goToClientSideHash=e.a,exports.hasClientSideCookie=e.m,exports.isLinkActive=e.o,exports.isNavActive=e.s,exports.isSSR=e.c,exports.mergeRefs=e.l,exports.scrollTo=e.u,exports.setClientSideCookie=e.h,exports.svgToBase64=e.d,exports.workerize=e.t;var t=require(`@ts-utilities/core`);Object.keys(t).forEach(function(e){e!==`default`&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})});
1
+ const e=require(`./functions-BFt6Bpb5.cjs`);exports.cleanSrc=e.n,exports.cn=e.r,exports.copyToClipboard=e.i,exports.deleteClientSideCookie=e.f,exports.getClientSideCookie=e.p,exports.goToClientSideHash=e.a,exports.hasClientSideCookie=e.m,exports.isLinkActive=e.o,exports.isNavActive=e.s,exports.isSSR=e.c,exports.mergeRefs=e.l,exports.scrollTo=e.u,exports.setClientSideCookie=e.h,exports.svgToBase64=e.d,exports.workerize=e.t;var t=require(`@ts-utilities/core`);Object.keys(t).forEach(function(e){e!==`default`&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sohanemon/utils",
3
- "version": "7.3.2",
3
+ "version": "7.3.4",
4
4
  "author": "Sohan Emon <sohanemon@outlook.com>",
5
5
  "description": "",
6
6
  "type": "module",
@@ -1 +0,0 @@
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-Dp2CwvmB.cjs`);let l=require(`@ts-utilities/core`),u=require(`react`);u=s(u);let d=require(`@radix-ui/react-slot`),f=require(`react/jsx-runtime`);function p(e={}){let{timeout:t=1e4}=e;return u.useCallback(e=>{let n=()=>{try{u.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?window.requestIdleCallback(n,{timeout:t}):(0,l.schedule)(n)},[t])}function m(e,t=[],n={}){let r=p(n);u.useEffect(()=>{let t;return r(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[r,...t])}const h=(e,t)=>{let[n,r]=u.useState(`idle`),[i,a]=u.useState(null),[o,s]=u.useState(null),[c,l]=u.useState(void 0),[d,f]=u.useTransition(),p=n===`idle`,h=n===`loading`||d,g=n===`success`,_=n===`error`,v=u.useCallback(e=>{a(e),r(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),y=u.useCallback(e=>{s(e),r(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=u.useCallback(t=>{l(t),r(`loading`),s(null),f(()=>{e(t).then(v).catch(y)})},[e,v,y]);return{execute:b,executeAsync:u.useCallback(t=>new Promise((n,i)=>{l(t),r(`loading`),s(null),f(()=>{e(t).then(e=>{v(e),n(e)}).catch(e=>{y(e),i(e)})})}),[e,v,y]),reset:u.useCallback(()=>{r(`idle`),a(null),s(null),l(void 0)},[]),useExecute:e=>{m(()=>{b(e)},[])},data:i,error:o,input:c,isIdle:p,isLoading:h,isSuccess:g,isError:_}};function g(e,t={}){let{mode:n=`manual`,deps:r,onSuccess:i,onError:a,onSettled:o}=t,[s,c]=u.useState(void 0),[l,d]=u.useState(void 0),[f,p]=u.useState(`idle`),m=u.useRef(null),h=u.useCallback(i||(()=>{}),[i]),g=u.useCallback(a||(()=>{}),[a]),_=u.useCallback(o||(()=>{}),[o]),v=u.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 u.useEffect(()=>{n===`auto`&&!r&&v()},[e,n,v,r]),u.useEffect(()=>{r&&n===`auto`&&v()},r||[]),u.useEffect(()=>()=>{m.current&&m.current.abort()},[]),{data:s,error:l,status:f,isIdle:f===`idle`,isPending:f===`pending`,isSuccess:f===`success`,isError:f===`error`,execute:v}}const _={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},v=[`2xl`,`xl`,`lg`,`md`,`sm`,`max-2xl`,`max-xl`,`max-lg`,`max-md`,`max-sm`],y=e=>typeof e==`object`&&!!e&&`DEFAULT`in e,b=e=>e.startsWith(`max-`)?`(max-width: ${_[e.slice(4)]-1}px)`:`(min-width: ${_[e]}px)`,x=e=>v.filter(t=>t in e).map(t=>`${t}:${String(e[t])}`).join(`,`)+`:DEFAULT:${String(e.DEFAULT)}`;function S(e){if(y(e)){let t=x(e),n=u.useMemo(()=>{let t=Object.keys(e).filter(e=>e!==`DEFAULT`);return v.filter(e=>t.includes(e)).map(t=>({bp:t,query:b(t),value:e[t]}))},[t]),r=u.useCallback(t=>{for(let e=0;e<t.length;e++)if(t[e].matches)return n[e].value;return e.DEFAULT},[n,e.DEFAULT]),[i,a]=u.useState(()=>{if(c.c)return e.DEFAULT;for(let{query:e,value:t}of n)if(window.matchMedia(e).matches)return t;return e.DEFAULT});return u.useEffect(()=>{let e=n.map(({query:e})=>window.matchMedia(e)),t=()=>a(r(e));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[n,r]),i}let t=Array.isArray(e)?e:[e],n=t.join(`||`),r=u.useMemo(()=>t.map(e=>e.startsWith(`(`)?e:b(e)),[n]),[i,a]=u.useState(()=>c.c?!1:r.every(e=>window.matchMedia(e).matches));return m(()=>{let e=r.map(e=>window.matchMedia(e)),t=()=>a(e.every(e=>e.matches));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[r]),i}const C=u.createContext(null),w=({children:e})=>{let t=u.useRef(null);return(0,f.jsx)(C.Provider,{value:t,children:(0,f.jsx)(d.Slot,{ref:t,children:e})})},T=({threshold:e=300,container:t}={})=>{let n=u.useContext(C),[r,i]=u.useState({scrolledPast:!1,direction:`forward`}),a=u.useRef(0),o=t=>{let n=t>a.current?`forward`:`backward`;i({scrolledPast:t>e,direction:n}),a.current=t};return m(()=>{let e=null;typeof t==`string`?e=document.querySelector(t):t?.current?e=t.current:n?.current&&(e=n.current);let r=e||window,i=e?`scrollTop`:`scrollY`,a=()=>{let e=r[i];o(e)};return r.addEventListener(`scroll`,a),a(),()=>r.removeEventListener(`scroll`,a)},[t,n,e]),r};function E(e){let[t,n]=u.useState(void 0),[r,i]=u.useState(null),[a,o]=u.useState(!1),s=u.useMemo(()=>c.t(e),[]);return{execute:u.useCallback((...e)=>{(async()=>{o(!0),i(null);try{n(await s(...e))}catch(e){i(e instanceof Error?e:Error(String(e)))}finally{o(!1)}})()},[s]),data:t,error:r,isLoading:a}}function D(e,t=[]){let{execute:n}=E(e);u.useEffect(()=>{n()},[n,...t])}const O=(e=()=>alert(`clicked outside`))=>{let t=u.useRef(null),n=n=>{t.current&&!t.current.contains(n.target)&&e()};return u.useEffect(()=>(document.addEventListener(`mousedown`,n),document.addEventListener(`touchstart`,n),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`touchstart`,n)})),t};function k(e){u.useEffect(e,[])}function A(e,t){let n=u.useRef(!0);u.useEffect(()=>{if(n.current)n.current=!1;else return e()},t)}function j(e,t=500){let[n,r]=u.useState(e);return u.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>{clearTimeout(n)}},[e,t]),n}const M=typeof window<`u`?u.useLayoutEffect:u.useEffect;function N(e,t=1e3){let n=u.useRef(e);m(()=>{n.current=e},[e]),u.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>n.current(),t);return()=>clearTimeout(e)},[t])}function P(e,t,n){u.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t,n])}const F=(e,t)=>{let[n,r]=u.useState(t);return u.useEffect(()=>{let t=sessionStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,u.useCallback(t=>{r(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},I=(e,t)=>{let[n,r]=u.useState(()=>{try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return A(()=>{try{localStorage.setItem(e,JSON.stringify(n))}catch(t){console.error(`Error writing to localStorage key "${e}":`,t)}},[e,n]),[n,r]},L=(e,t)=>{let[n,r]=u.useState(t);return u.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)}]},R=e=>{let[t,n]=u.useState(null),r=u.useRef(null);return u.useEffect(()=>{let t=null;if(typeof e==`string`?t=document.querySelector(e):e?.current&&(t=e.current),!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 z(){let[e,t]=u.useState(!1);return u.useEffect(()=>{t(!0)},[]),e}function B(){u.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function V({timeout:e=2e3}){let[t,n]=u.useState(!1);return{isCopied:t,copy:t=>{c.i(t,()=>{n(!0),setTimeout(()=>{n(!1)},e)})}}}const H=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1})=>{let[i,a]=u.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 u.useEffect(()=>{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},U=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1,onChange:i})=>{let[a,o]=u.useState({height:500,width:500}),s=u.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 u.useEffect(()=>{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},W=()=>{let[e,t]=u.useState(!1),n=u.useRef(null),r=u.useRef(null);return k(()=>{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}},G=({offset:e}={})=>{let[t,n]=u.useState(!0),r=u.useRef(null);return k(()=>{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}},K=({threshold:e=.1,root:t=null,rootMargin:n,onInteractionStart:r,onInteractionEnd:i}={})=>{let[a,o]=u.useState(!1),s=u.useRef(null);return u.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,`A`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return P}});
@@ -1 +0,0 @@
1
- import{c as e,i as t,t as n}from"./functions-CTMT4m8K.js";import{schedule as r}from"@ts-utilities/core";import*as i from"react";import{Slot as a}from"@radix-ui/react-slot";import{jsx as o}from"react/jsx-runtime";function s(e={}){let{timeout:t=1e4}=e;return i.useCallback(e=>{let n=()=>{try{i.startTransition(()=>{e()})}catch(e){console.log(`⚡[schedule.tsx] Failed: `,e)}};`requestIdleCallback`in window?window.requestIdleCallback(n,{timeout:t}):r(n)},[t])}function c(e,t=[],n={}){let r=s(n);i.useEffect(()=>{let t;return r(()=>{t=e()}),()=>{typeof t==`function`&&t?.()}},[r,...t])}const l=(e,t)=>{let[n,r]=i.useState(`idle`),[a,o]=i.useState(null),[s,l]=i.useState(null),[u,d]=i.useState(void 0),[f,p]=i.useTransition(),m=n===`idle`,h=n===`loading`||f,g=n===`success`,_=n===`error`,v=i.useCallback(e=>{o(e),r(`success`),t?.onSuccess?.(e),t?.onSettled?.()},[t]),y=i.useCallback(e=>{l(e),r(`error`),t?.onError?.(e),t?.onSettled?.()},[t]),b=i.useCallback(t=>{d(t),r(`loading`),l(null),p(()=>{e(t).then(v).catch(y)})},[e,v,y]);return{execute:b,executeAsync:i.useCallback(t=>new Promise((n,i)=>{d(t),r(`loading`),l(null),p(()=>{e(t).then(e=>{v(e),n(e)}).catch(e=>{y(e),i(e)})})}),[e,v,y]),reset:i.useCallback(()=>{r(`idle`),o(null),l(null),d(void 0)},[]),useExecute:e=>{c(()=>{b(e)},[])},data:a,error:s,input:u,isIdle:m,isLoading:h,isSuccess:g,isError:_}};function u(e,t={}){let{mode:n=`manual`,deps:r,onSuccess:a,onError:o,onSettled:s}=t,[c,l]=i.useState(void 0),[u,d]=i.useState(void 0),[f,p]=i.useState(`idle`),m=i.useRef(null),h=i.useCallback(a||(()=>{}),[a]),g=i.useCallback(o||(()=>{}),[o]),_=i.useCallback(s||(()=>{}),[s]),v=i.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 i.useEffect(()=>{n===`auto`&&!r&&v()},[e,n,v,r]),i.useEffect(()=>{r&&n===`auto`&&v()},r||[]),i.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}}const d={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},f=[`2xl`,`xl`,`lg`,`md`,`sm`,`max-2xl`,`max-xl`,`max-lg`,`max-md`,`max-sm`],p=e=>typeof e==`object`&&!!e&&`DEFAULT`in e,m=e=>e.startsWith(`max-`)?`(max-width: ${d[e.slice(4)]-1}px)`:`(min-width: ${d[e]}px)`,h=e=>f.filter(t=>t in e).map(t=>`${t}:${String(e[t])}`).join(`,`)+`:DEFAULT:${String(e.DEFAULT)}`;function g(t){if(p(t)){let n=h(t),r=i.useMemo(()=>{let e=Object.keys(t).filter(e=>e!==`DEFAULT`);return f.filter(t=>e.includes(t)).map(e=>({bp:e,query:m(e),value:t[e]}))},[n]),a=i.useCallback(e=>{for(let t=0;t<e.length;t++)if(e[t].matches)return r[t].value;return t.DEFAULT},[r,t.DEFAULT]),[o,s]=i.useState(()=>{if(e)return t.DEFAULT;for(let{query:e,value:t}of r)if(window.matchMedia(e).matches)return t;return t.DEFAULT});return i.useEffect(()=>{let e=r.map(({query:e})=>window.matchMedia(e)),t=()=>s(a(e));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[r,a]),o}let n=Array.isArray(t)?t:[t],r=n.join(`||`),a=i.useMemo(()=>n.map(e=>e.startsWith(`(`)?e:m(e)),[r]),[o,s]=i.useState(()=>e?!1:a.every(e=>window.matchMedia(e).matches));return c(()=>{let e=a.map(e=>window.matchMedia(e)),t=()=>s(e.every(e=>e.matches));for(let n of e)n.addEventListener(`change`,t);return t(),()=>{for(let n of e)n.removeEventListener(`change`,t)}},[a]),o}const _=i.createContext(null),v=({children:e})=>{let t=i.useRef(null);return o(_.Provider,{value:t,children:o(a,{ref:t,children:e})})},y=({threshold:e=300,container:t}={})=>{let n=i.useContext(_),[r,a]=i.useState({scrolledPast:!1,direction:`forward`}),o=i.useRef(0),s=t=>{let n=t>o.current?`forward`:`backward`;a({scrolledPast:t>e,direction:n}),o.current=t};return c(()=>{let e=null;typeof t==`string`?e=document.querySelector(t):t?.current?e=t.current:n?.current&&(e=n.current);let r=e||window,i=e?`scrollTop`:`scrollY`,a=()=>{let e=r[i];s(e)};return r.addEventListener(`scroll`,a),a(),()=>r.removeEventListener(`scroll`,a)},[t,n,e]),r};function b(e){let[t,r]=i.useState(void 0),[a,o]=i.useState(null),[s,c]=i.useState(!1),l=i.useMemo(()=>n(e),[]);return{execute:i.useCallback((...e)=>{(async()=>{c(!0),o(null);try{r(await l(...e))}catch(e){o(e instanceof Error?e:Error(String(e)))}finally{c(!1)}})()},[l]),data:t,error:a,isLoading:s}}function x(e,t=[]){let{execute:n}=b(e);i.useEffect(()=>{n()},[n,...t])}const S=(e=()=>alert(`clicked outside`))=>{let t=i.useRef(null),n=n=>{t.current&&!t.current.contains(n.target)&&e()};return i.useEffect(()=>(document.addEventListener(`mousedown`,n),document.addEventListener(`touchstart`,n),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`touchstart`,n)})),t};function C(e){i.useEffect(e,[])}function w(e,t){let n=i.useRef(!0);i.useEffect(()=>{if(n.current)n.current=!1;else return e()},t)}function T(e,t=500){let[n,r]=i.useState(e);return i.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>{clearTimeout(n)}},[e,t]),n}const E=typeof window<`u`?i.useLayoutEffect:i.useEffect;function D(e,t=1e3){let n=i.useRef(e);c(()=>{n.current=e},[e]),i.useEffect(()=>{if(!t&&t!==0)return;let e=setTimeout(()=>n.current(),t);return()=>clearTimeout(e)},[t])}function O(e,t,n){i.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t,n])}const k=(e,t)=>{let[n,r]=i.useState(t);return i.useEffect(()=>{let t=sessionStorage.getItem(e);t&&r(JSON.parse(t))},[e]),[n,i.useCallback(t=>{r(n=>{let r=typeof t==`function`?t(n):t;return sessionStorage.setItem(e,JSON.stringify(r)),r})},[e])]},A=(e,t)=>{let[n,r]=i.useState(()=>{try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return w(()=>{try{localStorage.setItem(e,JSON.stringify(n))}catch(t){console.error(`Error writing to localStorage key "${e}":`,t)}},[e,n]),[n,r]},j=(e,t)=>{let[n,r]=i.useState(t);return i.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)}]},M=e=>{let[t,n]=i.useState(null),r=i.useRef(null);return i.useEffect(()=>{let t=null;if(typeof e==`string`?t=document.querySelector(e):e?.current&&(t=e.current),!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 N(){let[e,t]=i.useState(!1);return i.useEffect(()=>{t(!0)},[]),e}function P(){i.useLayoutEffect(()=>{let e=window.getComputedStyle(document.body).overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[])}function F({timeout:e=2e3}){let[n,r]=i.useState(!1);return{isCopied:n,copy:n=>{t(n,()=>{r(!0),setTimeout(()=>{r(!1)},e)})}}}const I=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1})=>{let[a,o]=i.useState(500),s=()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0);o(n?window.innerHeight-r-t:r+t)};return i.useEffect(()=>{if(s(),r){if(typeof r==`string`){let e=document.getElementById(r),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},L=({blockIds:e=[],margin:t=0,substract:n=!0,dynamic:r=!1,onChange:a})=>{let[o,s]=i.useState({height:500,width:500}),c=i.useCallback(()=>{let r=e.reduce((e,t)=>e+(document.getElementById(t)?.clientHeight||0),0),i=e.reduce((e,t)=>e+(document.getElementById(t)?.clientWidth||0),0),o=n?window.innerHeight-r-t:r+t,c=n?window.innerWidth-i-t:i+t;s(e=>e.height===o&&e.width===c?e:{height:o,width:c}),a?.({blocksWidth:i,blocksHeight:r,remainingWidth:c,remainingHeight:o})},[e,t,n,a]);return i.useEffect(()=>{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(r)if(typeof r==`string`){let e=document.getElementById(r);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,r,e.join(`,`)]),o},R=()=>{let[e,t]=i.useState(!1),n=i.useRef(null),r=i.useRef(null);return C(()=>{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}},z=({offset:e}={})=>{let[t,n]=i.useState(!0),r=i.useRef(null);return C(()=>{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}},B=({threshold:e=.1,root:t=null,rootMargin:n,onInteractionStart:r,onInteractionEnd:a}={})=>{let[o,s]=i.useState(!1),c=i.useRef(null);return i.useEffect(()=>{if(!c.current)return;let i=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting?o||(r?.(),s(!0)):o&&(a?.(),s(!1))},{threshold:e,root:t,...n&&{rootMargin:n}});return i.observe(c.current),()=>{i.disconnect()}},[e,t,n,r,a,o]),{ref:c,isIntersecting:o}};export{v as C,l as D,u as E,s as O,y as S,g as T,w as _,C as a,b,z as c,E as d,A as f,D as g,k as h,L as i,c as k,N as l,M as m,F as n,I as o,P as p,T as r,B as s,S as t,R as u,j as v,d as w,x,O as y};