@sohanemon/utils 6.3.9 → 6.4.1
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 +1 -1
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.cts +97 -1
- package/dist/components/index.d.ts +97 -1
- package/dist/components/index.js +1 -1
- package/dist/{functions-RGYSp3WG.cjs → functions-D2KKIJqd.cjs} +1 -1
- package/dist/hooks/index.cjs +1 -1
- package/dist/hooks/index.d.cts +336 -22
- package/dist/hooks/index.d.ts +336 -22
- package/dist/hooks/index.js +1 -1
- package/dist/hooks-BLpQegFa.cjs +1 -0
- package/dist/hooks-CjfNonIh.js +1 -0
- package/dist/{index-BZaFEd2-.d.ts → index-CKE8ocfo.d.ts} +479 -59
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +890 -57
- package/dist/index.d.ts +443 -1
- package/dist/schedule-BqFAJlSO.d.cts +43 -0
- package/package.json +3 -2
- package/dist/hooks-B_cvGdEl.cjs +0 -1
- package/dist/hooks-qAybqDks.js +0 -1
- package/dist/schedule-CRsY0oqG.d.cts +0 -15
package/README.md
CHANGED
|
@@ -354,7 +354,7 @@ useWindowEvent<K extends keyof WindowEventMap>(
|
|
|
354
354
|
options?: boolean | AddEventListenerOptions
|
|
355
355
|
): void
|
|
356
356
|
|
|
357
|
-
useQuerySelector<T extends Element>(selector: string): T | null
|
|
357
|
+
useQuerySelector<T extends Element>(selector: string | React.RefObject<T | null>): T | null
|
|
358
358
|
|
|
359
359
|
useIsClient(): boolean
|
|
360
360
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";const e=require(`../hooks-
|
|
1
|
+
"use client";const e=require(`../hooks-BLpQegFa.cjs`),t=require(`../functions-D2KKIJqd.cjs`);let n=require(`react`);n=e.D(n);let r=require(`react/jsx-runtime`),i=require(`@iconify/react`);function a({className:i,html:a,sanitize:o=!1,executeScripts:s=!0,...c}){let l=n.useRef([]),u=n.useRef(null);e.E(()=>{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,r.jsx)(`div`,{ref:u,className:t.a(i),dangerouslySetInnerHTML:{__html:d},...c}):null}function o({breakpoint:t,as:i=`div`,fallback:a=n.Fragment,className:o,classNameFallback:s,...c}){let l=e.m(t.split(`-`).pop())===t.startsWith(`max`);return(0,r.jsx)(l?a:i,{className:l?s:o,...c})}const s=({side:e,offset:i=2,unit:a=`px`})=>{let[o,s]=n.useState(t.m?0:window.innerWidth),c=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],l={"bottom-left":e=>({bottom:`${e}rem`,left:`${e}rem`}),"bottom-right":e=>({bottom:`${e}rem`,right:`${e}rem`}),"top-right":e=>({top:`${e}rem`,right:`${e}rem`}),"top-left":e=>({top:`${e}rem`,left:`${e}rem`})},u=e||`bottom-left`,[d,f]=n.useState(u);n.useEffect(()=>{let e=()=>{s(window.innerWidth)};return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[]);let p=()=>{f(c[(c.indexOf(d)+1)%c.length])},m=``;m=o<640?`xs`:o>=640&&o<768?`sm`:o>=768&&o<1024?`md`:o>=1024&&o<1280?`lg`:o>=1280&&o<1536?`xl`:o>=1536&&o<1792?`2xl`:a===`rem`?`${(o/16).toFixed(1)}rem`:`${o}${a}`;let h={position:`fixed`,zIndex:50,display:`grid`,minHeight:`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`,...l[d](i)};return process.env.NODE_ENV===`production`?null:(0,r.jsx)(`button`,{type:`button`,style:h,onClick:p,children:m})};function c(){return e.E(()=>{let e=document.body;if(!e)return;let t=e=>{let t=getComputedStyle(e);if(t.overflow===`hidden`&&t.overflowY===`hidden`&&t.overflowX===`hidden`)return!1;let n=(t.overflowY===`auto`||t.overflowY===`scroll`)&&e.scrollHeight>e.clientHeight,r=(t.overflowX===`auto`||t.overflowX===`scroll`)&&e.scrollWidth>e.clientWidth;return n||r},n=e=>{t(e)?e.dataset.scrollable=`true`:delete e.dataset.scrollable},r=e=>{n(e);for(let t=0;t<e.children.length;t++){let n=e.children[t];r(n)}};requestIdleCallback(()=>r(e));let i=new MutationObserver(e=>{for(let t of e)t.type===`childList`?t.addedNodes.forEach(e=>{e instanceof HTMLElement&&r(e)}):t.type===`attributes`&&t.target instanceof HTMLElement&&n(t.target)});return i.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`style`,`class`]}),()=>i.disconnect()},[]),null}exports.HtmlInjector=a,Object.defineProperty(exports,`Iconify`,{enumerable:!0,get:function(){return i.Icon}}),exports.MediaWrapper=o,exports.ResponsiveIndicator=s,exports.TailwindIndicator=s,exports.ScrollTracker=e.S,exports.ScrollableMarker=c;
|
|
@@ -59,40 +59,136 @@ declare function HtmlInjector({
|
|
|
59
59
|
}: HtmlInjectorProps): react_jsx_runtime0.JSX.Element | null;
|
|
60
60
|
//#endregion
|
|
61
61
|
//#region src/components/media-wrapper.d.ts
|
|
62
|
+
/**
|
|
63
|
+
* Supported Tailwind CSS breakpoints for the MediaWrapper component.
|
|
64
|
+
*/
|
|
62
65
|
type BreakPoints = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'max-sm' | 'max-md' | 'max-lg' | 'max-xl' | 'max-2xl';
|
|
66
|
+
/**
|
|
67
|
+
* Props for the MediaWrapper component.
|
|
68
|
+
*/
|
|
63
69
|
type MediaWrapperProps = React.ComponentProps<'div'> & {
|
|
70
|
+
/** The breakpoint at which to switch between the main component and fallback. */
|
|
64
71
|
breakpoint: BreakPoints;
|
|
72
|
+
/** The component to render when the breakpoint matches. Defaults to 'div'. */
|
|
65
73
|
as?: React.ElementType;
|
|
74
|
+
/** The component to render when the breakpoint doesn't match. Defaults to React.Fragment. */
|
|
66
75
|
fallback?: React.ElementType;
|
|
76
|
+
/** Class name to apply to the fallback component. */
|
|
67
77
|
classNameFallback?: string;
|
|
68
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Conditionally renders different components based on Tailwind CSS breakpoints.
|
|
81
|
+
*
|
|
82
|
+
* Renders the main component when the viewport matches the specified breakpoint,
|
|
83
|
+
* otherwise renders the fallback component. Useful for responsive component switching.
|
|
84
|
+
*
|
|
85
|
+
* @param props - The component props
|
|
86
|
+
* @returns The appropriate component based on the current breakpoint
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```tsx
|
|
90
|
+
* // Show different content on mobile vs desktop
|
|
91
|
+
* <MediaWrapper breakpoint="md" as="article" fallback="aside">
|
|
92
|
+
* <p>This shows on medium screens and up</p>
|
|
93
|
+
* </MediaWrapper>
|
|
94
|
+
*
|
|
95
|
+
* // Use max-breakpoint for "up to" behavior
|
|
96
|
+
* <MediaWrapper breakpoint="max-lg" as="nav" fallback="div">
|
|
97
|
+
* <ul>Horizontal nav on large screens</ul>
|
|
98
|
+
* </MediaWrapper>
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
69
101
|
declare function MediaWrapper({
|
|
70
102
|
breakpoint,
|
|
71
103
|
as,
|
|
72
104
|
fallback,
|
|
73
|
-
classNameFallback,
|
|
74
105
|
className: classNameOriginal,
|
|
106
|
+
classNameFallback,
|
|
75
107
|
...props
|
|
76
108
|
}: MediaWrapperProps): react_jsx_runtime0.JSX.Element;
|
|
77
109
|
//#endregion
|
|
78
110
|
//#region src/components/responsive-indicator.d.ts
|
|
79
111
|
type Side = 'bottom-left' | 'bottom-right' | 'top-right' | 'top-left';
|
|
112
|
+
/**
|
|
113
|
+
* Props for the ResponsiveIndicator component.
|
|
114
|
+
*/
|
|
80
115
|
interface ResponsiveIndicatorProps {
|
|
116
|
+
/** The corner position of the indicator. Defaults to 'bottom-left'. */
|
|
81
117
|
side?: Side;
|
|
118
|
+
/** Offset from the corner in the specified unit. Defaults to 2. */
|
|
82
119
|
offset?: number;
|
|
120
|
+
/** Unit for the offset. Defaults to 'px'. */
|
|
83
121
|
unit?: 'px' | 'rem';
|
|
84
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* A development-only component that displays the current Tailwind CSS breakpoint.
|
|
125
|
+
*
|
|
126
|
+
* Shows the current viewport size as a small indicator in one of the corners.
|
|
127
|
+
* Automatically hides in production builds. Useful for responsive development.
|
|
128
|
+
*
|
|
129
|
+
* @param props - The component props
|
|
130
|
+
* @returns A positioned indicator showing current breakpoint, or null in production
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* // Shows current breakpoint in bottom-left corner
|
|
135
|
+
* <ResponsiveIndicator />
|
|
136
|
+
*
|
|
137
|
+
* // Shows in top-right with custom offset
|
|
138
|
+
* <ResponsiveIndicator side="top-right" offset={1} unit="rem" />
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
85
141
|
declare const ResponsiveIndicator: React.FC<ResponsiveIndicatorProps>;
|
|
86
142
|
//#endregion
|
|
87
143
|
//#region src/components/scroll-tracker.d.ts
|
|
144
|
+
/**
|
|
145
|
+
* Props for the ScrollTracker component.
|
|
146
|
+
*/
|
|
88
147
|
interface ScrollTrackerProps {
|
|
148
|
+
/** The child elements to render within the scrollable container. */
|
|
89
149
|
children: React.ReactNode;
|
|
90
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* A component that provides a scrollable container and context for scroll tracking.
|
|
153
|
+
*
|
|
154
|
+
* Wraps children in a scrollable div and provides a context with a ref to the container.
|
|
155
|
+
* Useful for components that need to track scroll position or attach scroll listeners.
|
|
156
|
+
*
|
|
157
|
+
* @param props - The component props
|
|
158
|
+
* @returns A scrollable container with context provider
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```tsx
|
|
162
|
+
* <ScrollTracker>
|
|
163
|
+
* <div>Scrollable content</div>
|
|
164
|
+
* </ScrollTracker>
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
91
167
|
declare const ScrollTracker: ({
|
|
92
168
|
children
|
|
93
169
|
}: ScrollTrackerProps) => react_jsx_runtime0.JSX.Element;
|
|
94
170
|
//#endregion
|
|
95
171
|
//#region src/components/scrollable-marker.d.ts
|
|
172
|
+
/**
|
|
173
|
+
* A component that automatically marks scrollable elements with a data attribute.
|
|
174
|
+
*
|
|
175
|
+
* Monitors the DOM for elements that can scroll and adds `data-scrollable="true"`
|
|
176
|
+
* attribute to them. Useful for styling scrollable elements or applying scroll-specific behavior.
|
|
177
|
+
* Uses MutationObserver to handle dynamic content changes.
|
|
178
|
+
*
|
|
179
|
+
* @returns null (invisible component that manages scrollable element detection)
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```tsx
|
|
183
|
+
* // Include once in your app to mark all scrollable elements
|
|
184
|
+
* <ScrollableMarker />
|
|
185
|
+
*
|
|
186
|
+
* // Then style scrollable elements in CSS
|
|
187
|
+
* [data-scrollable="true"] {
|
|
188
|
+
* border: 1px solid blue;
|
|
189
|
+
* }
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
96
192
|
declare function ScrollableMarker(): null;
|
|
97
193
|
//#endregion
|
|
98
194
|
export { HtmlInjector, Iconify, MediaWrapper, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker };
|
|
@@ -59,40 +59,136 @@ declare function HtmlInjector({
|
|
|
59
59
|
}: HtmlInjectorProps): react_jsx_runtime0.JSX.Element | null;
|
|
60
60
|
//#endregion
|
|
61
61
|
//#region src/components/media-wrapper.d.ts
|
|
62
|
+
/**
|
|
63
|
+
* Supported Tailwind CSS breakpoints for the MediaWrapper component.
|
|
64
|
+
*/
|
|
62
65
|
type BreakPoints = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'max-sm' | 'max-md' | 'max-lg' | 'max-xl' | 'max-2xl';
|
|
66
|
+
/**
|
|
67
|
+
* Props for the MediaWrapper component.
|
|
68
|
+
*/
|
|
63
69
|
type MediaWrapperProps = React.ComponentProps<'div'> & {
|
|
70
|
+
/** The breakpoint at which to switch between the main component and fallback. */
|
|
64
71
|
breakpoint: BreakPoints;
|
|
72
|
+
/** The component to render when the breakpoint matches. Defaults to 'div'. */
|
|
65
73
|
as?: React.ElementType;
|
|
74
|
+
/** The component to render when the breakpoint doesn't match. Defaults to React.Fragment. */
|
|
66
75
|
fallback?: React.ElementType;
|
|
76
|
+
/** Class name to apply to the fallback component. */
|
|
67
77
|
classNameFallback?: string;
|
|
68
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Conditionally renders different components based on Tailwind CSS breakpoints.
|
|
81
|
+
*
|
|
82
|
+
* Renders the main component when the viewport matches the specified breakpoint,
|
|
83
|
+
* otherwise renders the fallback component. Useful for responsive component switching.
|
|
84
|
+
*
|
|
85
|
+
* @param props - The component props
|
|
86
|
+
* @returns The appropriate component based on the current breakpoint
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```tsx
|
|
90
|
+
* // Show different content on mobile vs desktop
|
|
91
|
+
* <MediaWrapper breakpoint="md" as="article" fallback="aside">
|
|
92
|
+
* <p>This shows on medium screens and up</p>
|
|
93
|
+
* </MediaWrapper>
|
|
94
|
+
*
|
|
95
|
+
* // Use max-breakpoint for "up to" behavior
|
|
96
|
+
* <MediaWrapper breakpoint="max-lg" as="nav" fallback="div">
|
|
97
|
+
* <ul>Horizontal nav on large screens</ul>
|
|
98
|
+
* </MediaWrapper>
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
69
101
|
declare function MediaWrapper({
|
|
70
102
|
breakpoint,
|
|
71
103
|
as,
|
|
72
104
|
fallback,
|
|
73
|
-
classNameFallback,
|
|
74
105
|
className: classNameOriginal,
|
|
106
|
+
classNameFallback,
|
|
75
107
|
...props
|
|
76
108
|
}: MediaWrapperProps): react_jsx_runtime0.JSX.Element;
|
|
77
109
|
//#endregion
|
|
78
110
|
//#region src/components/responsive-indicator.d.ts
|
|
79
111
|
type Side = 'bottom-left' | 'bottom-right' | 'top-right' | 'top-left';
|
|
112
|
+
/**
|
|
113
|
+
* Props for the ResponsiveIndicator component.
|
|
114
|
+
*/
|
|
80
115
|
interface ResponsiveIndicatorProps {
|
|
116
|
+
/** The corner position of the indicator. Defaults to 'bottom-left'. */
|
|
81
117
|
side?: Side;
|
|
118
|
+
/** Offset from the corner in the specified unit. Defaults to 2. */
|
|
82
119
|
offset?: number;
|
|
120
|
+
/** Unit for the offset. Defaults to 'px'. */
|
|
83
121
|
unit?: 'px' | 'rem';
|
|
84
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* A development-only component that displays the current Tailwind CSS breakpoint.
|
|
125
|
+
*
|
|
126
|
+
* Shows the current viewport size as a small indicator in one of the corners.
|
|
127
|
+
* Automatically hides in production builds. Useful for responsive development.
|
|
128
|
+
*
|
|
129
|
+
* @param props - The component props
|
|
130
|
+
* @returns A positioned indicator showing current breakpoint, or null in production
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* // Shows current breakpoint in bottom-left corner
|
|
135
|
+
* <ResponsiveIndicator />
|
|
136
|
+
*
|
|
137
|
+
* // Shows in top-right with custom offset
|
|
138
|
+
* <ResponsiveIndicator side="top-right" offset={1} unit="rem" />
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
85
141
|
declare const ResponsiveIndicator: React.FC<ResponsiveIndicatorProps>;
|
|
86
142
|
//#endregion
|
|
87
143
|
//#region src/components/scroll-tracker.d.ts
|
|
144
|
+
/**
|
|
145
|
+
* Props for the ScrollTracker component.
|
|
146
|
+
*/
|
|
88
147
|
interface ScrollTrackerProps {
|
|
148
|
+
/** The child elements to render within the scrollable container. */
|
|
89
149
|
children: React.ReactNode;
|
|
90
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* A component that provides a scrollable container and context for scroll tracking.
|
|
153
|
+
*
|
|
154
|
+
* Wraps children in a scrollable div and provides a context with a ref to the container.
|
|
155
|
+
* Useful for components that need to track scroll position or attach scroll listeners.
|
|
156
|
+
*
|
|
157
|
+
* @param props - The component props
|
|
158
|
+
* @returns A scrollable container with context provider
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```tsx
|
|
162
|
+
* <ScrollTracker>
|
|
163
|
+
* <div>Scrollable content</div>
|
|
164
|
+
* </ScrollTracker>
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
91
167
|
declare const ScrollTracker: ({
|
|
92
168
|
children
|
|
93
169
|
}: ScrollTrackerProps) => react_jsx_runtime0.JSX.Element;
|
|
94
170
|
//#endregion
|
|
95
171
|
//#region src/components/scrollable-marker.d.ts
|
|
172
|
+
/**
|
|
173
|
+
* A component that automatically marks scrollable elements with a data attribute.
|
|
174
|
+
*
|
|
175
|
+
* Monitors the DOM for elements that can scroll and adds `data-scrollable="true"`
|
|
176
|
+
* attribute to them. Useful for styling scrollable elements or applying scroll-specific behavior.
|
|
177
|
+
* Uses MutationObserver to handle dynamic content changes.
|
|
178
|
+
*
|
|
179
|
+
* @returns null (invisible component that manages scrollable element detection)
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```tsx
|
|
183
|
+
* // Include once in your app to mark all scrollable elements
|
|
184
|
+
* <ScrollableMarker />
|
|
185
|
+
*
|
|
186
|
+
* // Then style scrollable elements in CSS
|
|
187
|
+
* [data-scrollable="true"] {
|
|
188
|
+
* border: 1px solid blue;
|
|
189
|
+
* }
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
96
192
|
declare function ScrollableMarker(): null;
|
|
97
193
|
//#endregion
|
|
98
194
|
export { HtmlInjector, Iconify, MediaWrapper, ResponsiveIndicator, ResponsiveIndicator as TailwindIndicator, ScrollTracker, ScrollableMarker };
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as e,m as t}from"../functions-DdPaJAsm.js";import{
|
|
1
|
+
"use client";import{a as e,m as t}from"../functions-DdPaJAsm.js";import{E as n,S as r,m as i}from"../hooks-CjfNonIh.js";import*as a from"react";import{jsx as o}from"react/jsx-runtime";import{Icon as s}from"@iconify/react";function c({className:t,html:r,sanitize:i=!1,executeScripts:s=!0,...c}){let l=a.useRef([]),u=a.useRef(null);n(()=>{if(l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),l.current=[],!(!s||!r))try{let e=document.createElement(`div`);e.innerHTML=r,e.querySelectorAll(`script`).forEach(e=>{let t=document.createElement(`script`);e.textContent&&(t.textContent=e.textContent),Array.from(e.attributes).forEach(e=>{t.setAttribute(e.name,e.value)}),t.onerror=e=>{console.error(`Script injection error:`,e)},document.body.appendChild(t),l.current.push(t)})}catch(e){console.error(`HTML injection error:`,e)}},[r,s]),a.useEffect(()=>()=>{l.current.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)})},[]);let d=a.useMemo(()=>{if(!r)return``;if(i){let e=document.createElement(`div`);e.innerHTML=r,e.querySelectorAll(`script`).forEach(e=>e.remove());let t=[`onclick`,`onload`,`onerror`,`onmouseover`];return e.querySelectorAll(`*`).forEach(e=>{t.forEach(t=>{e.hasAttribute(t)&&e.removeAttribute(t)})}),e.innerHTML}return r},[r,i]);return r?o(`div`,{ref:u,className:e(t),dangerouslySetInnerHTML:{__html:d},...c}):null}function l({breakpoint:e,as:t=`div`,fallback:n=a.Fragment,className:r,classNameFallback:s,...c}){let l=i(e.split(`-`).pop())===e.startsWith(`max`);return o(l?n:t,{className:l?s:r,...c})}const u=({side:e,offset:n=2,unit:r=`px`})=>{let[i,s]=a.useState(t?0:window.innerWidth),c=[`bottom-left`,`bottom-right`,`top-right`,`top-left`],l={"bottom-left":e=>({bottom:`${e}rem`,left:`${e}rem`}),"bottom-right":e=>({bottom:`${e}rem`,right:`${e}rem`}),"top-right":e=>({top:`${e}rem`,right:`${e}rem`}),"top-left":e=>({top:`${e}rem`,left:`${e}rem`})},u=e||`bottom-left`,[d,f]=a.useState(u);a.useEffect(()=>{let e=()=>{s(window.innerWidth)};return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[]);let p=()=>{f(c[(c.indexOf(d)+1)%c.length])},m=``;m=i<640?`xs`:i>=640&&i<768?`sm`:i>=768&&i<1024?`md`:i>=1024&&i<1280?`lg`:i>=1280&&i<1536?`xl`:i>=1536&&i<1792?`2xl`:r===`rem`?`${(i/16).toFixed(1)}rem`:`${i}${r}`;let h={position:`fixed`,zIndex:50,display:`grid`,minHeight:`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`,...l[d](n)};return process.env.NODE_ENV===`production`?null:o(`button`,{type:`button`,style:h,onClick:p,children:m})};function d(){return n(()=>{let e=document.body;if(!e)return;let t=e=>{let t=getComputedStyle(e);if(t.overflow===`hidden`&&t.overflowY===`hidden`&&t.overflowX===`hidden`)return!1;let n=(t.overflowY===`auto`||t.overflowY===`scroll`)&&e.scrollHeight>e.clientHeight,r=(t.overflowX===`auto`||t.overflowX===`scroll`)&&e.scrollWidth>e.clientWidth;return n||r},n=e=>{t(e)?e.dataset.scrollable=`true`:delete e.dataset.scrollable},r=e=>{n(e);for(let t=0;t<e.children.length;t++){let n=e.children[t];r(n)}};requestIdleCallback(()=>r(e));let i=new MutationObserver(e=>{for(let t of e)t.type===`childList`?t.addedNodes.forEach(e=>{e instanceof HTMLElement&&r(e)}):t.type===`attributes`&&t.target instanceof HTMLElement&&n(t.target)});return i.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`style`,`class`]}),()=>i.disconnect()},[]),null}export{c as HtmlInjector,s as Iconify,l as MediaWrapper,u as ResponsiveIndicator,u as TailwindIndicator,r as ScrollTracker,d as ScrollableMarker};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./hooks-
|
|
1
|
+
const e=require(`./hooks-BLpQegFa.cjs`);let t=require(`clsx`),n=require(`tailwind-merge`);const r=(e,t,n,r=`/`)=>{let i=``;if(n){let e=new Date;e.setTime(e.getTime()+n*24*60*60*1e3),i=`; expires=${e.toUTCString()}`}document.cookie=`${e}=${t||``}${i}; path=${r}`},i=(e,t=`/`)=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${t}`},a=e=>document.cookie.split(`; `).some(t=>t.startsWith(`${e}=`)),o=e=>({value:document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`))?.split(`=`)[1]}),s=e=>!e,c=e=>e==null,l=e=>{if(e==null)return!0;switch(typeof e){case`string`:case`number`:case`bigint`:case`boolean`:case`symbol`:return!0;default:return!1}};function u(e){if(typeof e!=`object`||!e||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function d(e,...t){let n,r={},i=t[t.length-1];i&&typeof i==`object`&&!Array.isArray(i)&&(i.arrayMerge!==void 0||i.clone!==void 0||i.customMerge!==void 0||i.maxDepth!==void 0)?(r={...r,...i},n=t.slice(0,-1)):n=t;let{arrayMerge:a=`replace`,clone:o=!0,customMerge:s,maxDepth:c=100}=r,l=new WeakMap;return d(e,n,0);function d(e,t,n){if(n>=c)return console.warn(`[deepmerge] Maximum depth ${c} exceeded. Returning target as-is.`),e;if(!u(e)&&!Array.isArray(e)){for(let e of t)if(e!==void 0)return e;return e}let r=o?Array.isArray(e)?[...e]:{...e}:e;for(let e of t)if(e!=null&&!l.has(e))if(l.set(e,r),Array.isArray(r)&&Array.isArray(e))r=f(r,e,a);else if(u(r)&&u(e)){let t=new Set([...Object.keys(r),...Object.keys(e),...Object.getOwnPropertySymbols(r),...Object.getOwnPropertySymbols(e)]);for(let i of t){let t=r[i],o=e[i];s&&s(i,t,o)!==void 0?r[i]=s(i,t,o):u(t)&&u(o)?r[i]=d(t,[o],n+1):Array.isArray(t)&&Array.isArray(o)?r[i]=f(t,o,a):o!==void 0&&(r[i]=o)}}else r=e;return r}function f(e,t,n){if(typeof n==`function`)return n(e,t);switch(n){case`concat`:return[...e,...t];case`merge`:let n=Math.max(e.length,t.length),r=[];for(let i=0;i<n;i++)i<e.length&&i<t.length?u(e[i])&&u(t[i])?r[i]=d(e[i],[t[i]],0):r[i]=t[i]:i<e.length?r[i]=e[i]:r[i]=t[i];return r;case`replace`:default:return[...t]}}}function f(e){return p(e)}function p(e){if(e!==null){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(p);if(u(e)){let t={};for(let n in e)t[n]=p(e[n]);return t}return e}}function m(e,t,n){if(typeof t!=`string`&&!Array.isArray(t))return n;let r=(()=>Array.isArray(t)?t:t===``?[]:String(t).split(`.`).filter(e=>e!==``))();if(!Array.isArray(r))return n;let i=e;for(let e of r){if(i==null)return n;let t=typeof e==`string`&&Array.isArray(i)&&/^\d+$/.test(e)?Number.parseInt(e,10):e;i=i[t]}return i===void 0?n:i}function h(e,t){return Object.assign(e,t)}function g(...e){return(0,n.twMerge)((0,t.clsx)(e))}function _(e,t){return console.warn(`isNavActive is deprecated. Use isLinkActive instead.`),RegExp(`^/?${e}(/|$)`).test(t)}function v({path:e,currentPath:t,locales:n=[`en`,`es`,`de`,`zh`,`bn`,`fr`,`it`,`nl`],exact:r=!0}){let i=RegExp(`^/?(${n.join(`|`)})/`),a=e=>e.replace(i,``).replace(/^\/+|\/+$/g,``),o=a(e),s=a(t);return r?o===s:s.startsWith(o)}function y(e){let t=e;return e.includes(`/public/`)&&(t=e.replace(`/public/`,`/`)),t.trim()}const b=(e,t)=>{let n;if(typeof e==`string`)n=document.querySelector(e);else if(e.current)n=e.current;else return;n&&n.scrollTo({top:t===`top`?0:n.scrollHeight-n.clientHeight,behavior:`smooth`})},x=(e,t=()=>{})=>{typeof window>`u`||!navigator.clipboard?.writeText||e&&navigator.clipboard.writeText(e).then(t)};function S(e){return(e.split(`.`).pop()||e).replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[-_|�\s]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const C=`àáãäâèéëêìíïîòóöôùúüûñç·/_,:;`,w=`aaaaaeeeeiiiioooouuuunc------`,T=e=>{if(typeof e!=`string`)throw TypeError(`Input must be a string`);let t=e.trim().toLowerCase(),n={};for(let e=0;e<29;e++)n[C.charAt(e)]=`aaaaaeeeeiiiioooouuuunc------`.charAt(e);return t=t.replace(RegExp(`[${C}]`,`g`),e=>n[e]||e),t.replace(/[^a-z0-9 -]/g,``).replace(/\s+/g,`-`).replace(/-+/g,`-`).replace(/^-+/,``).replace(/-+$/,``)||``},E=typeof window>`u`,D=e=>E?Buffer.from(e).toString(`base64`):window.btoa(e),O=(e=1e3,t)=>new Promise(n=>{if(t?.aborted)return n();let r=setTimeout(()=>{a(),n()},e);function i(){clearTimeout(r),a(),n()}function a(){t?.removeEventListener(`abort`,i)}t&&t.addEventListener(`abort`,i,{once:!0})});function k(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.immediate??!1,i,a,o,s;function c(){return s=e.apply(o,a),a=void 0,o=void 0,s}let l=function(...e){return a=e,o=this,i===void 0&&r&&(s=c.call(this)),i!==void 0&&clearTimeout(i),i=setTimeout(c.bind(this),t),s};return Object.defineProperty(l,`isPending`,{get(){return i!==void 0}}),l}function A(e,t=100,n){if(typeof e!=`function`)throw TypeError(`Expected the first parameter to be a function, got \`${typeof e}\`.`);if(t<0)throw RangeError("`wait` must not be negative.");let r=n?.leading??!0,i=n?.trailing??!0,a,o,s,c,l;function u(){c=Date.now(),l=e.apply(s,o),o=void 0,s=void 0}function d(){a=void 0,i&&o&&u()}let f=function(...e){let n=c?Date.now()-c:1/0;return o=e,s=this,n>=t?r?u():a=setTimeout(d,t):!a&&i&&(a=setTimeout(d,t-n)),l};return Object.defineProperty(f,`isPending`,{get(){return a!==void 0}}),f}function j(e,...t){let n=t.length===1&&Array.isArray(t[0])?t[0]:t,r=0;return e.replace(/%s/g,()=>{let e=n[r++];return e===void 0?``:String(e)})}const M=(...e)=>t=>{for(let n of e)n&&(typeof n==`function`?n(t):n.current=t)};function N(e,t){let n=document.getElementById(e);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`,...t}),window.history.pushState(null,``,`#${e}`))}function P(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function F(e,t={}){if(!e)return``;let{lowercase:n=!0,removeAccents:r=!0,removeNonAlphanumeric:i=!0}=t,a=e.normalize(`NFC`);return r&&(a=a.normalize(`NFD`).replace(/\p{M}/gu,``)),i&&(a=a.replace(/^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$/gu,``)),n&&(a=a.toLocaleLowerCase()),a}async function I(e,{interval:t=5e3,timeout:n=300*1e3,jitter:r=!0,signal:i}={}){let a=Date.now(),o=i?.aborted??!1,s=()=>{o=!0};i?.addEventListener(`abort`,s,{once:!0});try{for(let s=0;;s++){if(o)throw Error(`Polling aborted`);let s=await e();if(s)return s;if(Date.now()-a>=n)throw Error(`Polling timed out`,{cause:`Polling timed out after ${n}ms`});await O(r?t+(Math.random()-.5)*t*.2:t,i)}}catch(e){throw e}finally{i?.removeEventListener(`abort`,s)}}function L(e,t={}){let{retry:n=0,delay:r=0}=t,i=Date.now(),a=async t=>{try{await e();let t=Date.now()-i;console.log(`⚡[schedule.ts] Completed in ${t}ms`)}catch(e){if(console.log(`⚡[schedule.ts] err:`,e),t>0)console.log(`⚡[schedule.ts] Retrying in ${r}ms...`),setTimeout(()=>a(t-1),r);else{let e=Date.now()-i;console.log(`⚡[schedule.ts] Failed after ${e}ms`)}}};setTimeout(()=>a(n),0)}function R(e){if(e instanceof Promise)return e.then(e=>[null,e]).catch(e=>[e,null]);try{return[null,e()]}catch(t){return console.log(`\x1b[31m🛡 [shield]\x1b[0m ${e.name} failed →`,t),[t,null]}}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return O}});
|
package/dist/hooks/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";const e=require(`../hooks-
|
|
1
|
+
"use client";const e=require(`../hooks-BLpQegFa.cjs`);require(`../functions-D2KKIJqd.cjs`),exports.useAction=e.w,exports.useAsync=e.C,exports.useClickOutside=e.t,exports.useCopyToClipboard=e.n,exports.useDebounce=e.r,exports.useDomCalculation=e.i,exports.useEffectOnce=e.a,exports.useHeightCalculation=e.o,exports.useIntersection=e.s,exports.useIsAtTop=e.c,exports.useIsClient=e.l,exports.useIsScrolling=e.u,exports.useIsomorphicEffect=e.d,exports.useLocalStorage=e.f,exports.useLockScroll=e.p,exports.useMediaQuery=e.m,exports.useQuerySelector=e.h,exports.useSchedule=e.T,exports.useScheduledEffect=e.E,exports.useScrollTracker=e.x,exports.useSessionStorage=e.g,exports.useTimeout=e._,exports.useUpdateEffect=e.v,exports.useUrlParams=e.y,exports.useWindowEvent=e.b;
|