@react-hive/honey-utils 3.31.0 โ†’ 3.32.0

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,6 +17,8 @@ A lightweight TypeScript utility library providing a collection of helper functi
17
17
  - ๐Ÿงฎ **Math Utilities** - Common mathematical calculations
18
18
  - ๐ŸŽฏ **Function Utilities** - Function handling helpers
19
19
  - ๐Ÿ–ฅ๏ธ **DOM Utilities** - Browser DOM manipulation helpers
20
+ - ๐Ÿงฌ **Encoding Utilities** - Base64 decoding and encoded JSON helpers
21
+ - ๐Ÿงพ **JSON Utilities** - Safe JSON parsing
20
22
  - ๐Ÿ“ฆ **Zero Dependencies** - Lightweight and dependency-free
21
23
  - ๐Ÿ“ **TypeScript Support** - Full TypeScript type definitions
22
24
 
@@ -100,6 +102,69 @@ const hash = hashString('background-color: red;');
100
102
  // โžœ 'e4k1z0x'
101
103
  ```
102
104
 
105
+ ### Encoding Utilities
106
+
107
+ ```ts
108
+ import { decodeBase64, decodeBase64Json } from '@react-hive/honey-utils';
109
+
110
+ /**
111
+ * Decode a base64 string
112
+ */
113
+ decodeBase64('SGVsbG8gd29ybGQ=');
114
+ // โžœ 'Hello world'
115
+
116
+ /**
117
+ * Decode unicode text from base64
118
+ */
119
+ decodeBase64('0J/RgNC40LLQtdGCINC80LjRgA==');
120
+ // โžœ 'ะŸั€ะธะฒะตั‚ ะผะธั€'
121
+
122
+ /**
123
+ * Decode and parse base64-encoded JSON
124
+ */
125
+ decodeBase64Json<{ name: string; age: number }>('eyJuYW1lIjoiTWlrZSIsImFnZSI6MzN9');
126
+ // โžœ { name: 'Mike', age: 33 }
127
+
128
+ /**
129
+ * Invalid base64 or invalid decoded JSON returns null
130
+ */
131
+ decodeBase64Json('invalid');
132
+ // โžœ null
133
+ ```
134
+
135
+ ### JSON Utilities
136
+
137
+ ```ts
138
+ import { parseJson } from '@react-hive/honey-utils';
139
+
140
+ /**
141
+ * Safely parse JSON
142
+ */
143
+ parseJson<{ name: string; age: number }>('{"name":"Mike","age":33}');
144
+ // โžœ { name: 'Mike', age: 33 }
145
+
146
+ /**
147
+ * Parse array JSON
148
+ */
149
+ parseJson<number[]>('[1,2,3]');
150
+ // โžœ [1, 2, 3]
151
+
152
+ /**
153
+ * Parse primitive JSON values
154
+ */
155
+ parseJson<boolean>('true');
156
+ // โžœ true
157
+
158
+ parseJson<null>('null');
159
+ // โžœ null
160
+
161
+ /**
162
+ * Invalid JSON returns null
163
+ */
164
+ parseJson('{name:"Mike"}');
165
+ // โžœ null
166
+ ```
167
+
103
168
  ### Array Utilities
104
169
 
105
170
  ```ts
@@ -559,6 +624,19 @@ function divide(a: number, b: number): number {
559
624
  - `getWordsInitials(input: string, maxWords?: number): string` - Returns the uppercase initials of the words in a string. The number of processed words can be limited via `maxWords`.
560
625
  - `splitMapJoin(input: string, separator: string, mapFn: (part: string, index: number) => string, joinWith?: string): string` - Splits a string by a separator, applies a transformation function to each trimmed part, and joins the results back together. Useful for processing comma-separated selectors or any delimited string.
561
626
 
627
+ ### Encoding Utilities
628
+
629
+ ---
630
+
631
+ - `decodeBase64(value: string): Nullable<string>` - Decodes a base64-encoded string into UTF-8 text. Returns `null` when decoding fails.
632
+ - `decodeBase64Json<Value>(value: string): Nullable<Value>` - Decodes a base64-encoded string and safely parses the decoded result as JSON. Returns `null` when base64 decoding fails or when the decoded value is not valid JSON.
633
+
634
+ ### JSON Utilities
635
+
636
+ ---
637
+
638
+ - `parseJson<Value>(value: string): Nullable<Value>` - Safely parses a JSON string. Returns the parsed value when parsing succeeds, or `null` when parsing fails.
639
+
562
640
  ### Color Utilities
563
641
 
564
642
  ---
@@ -644,7 +722,7 @@ function divide(a: number, b: number): number {
644
722
  ---
645
723
 
646
724
  - `resolveBoundedDelta(options: ResolveBoundedDeltaOptions): Nullable<number>` โ€“ Resolves the next numeric value by consuming a delta within fixed bounds. Prevents overshoot, partially consumes deltas at boundaries, and returns `null` when movement in the given direction is no longer possible. Useful for drag constraints, sliders, synthetic scrolling, and inertia systems.
647
- - `applyInertiaStep(options: ApplyInertiaStepOptions): Nullable<InertiaStepResult>` - Advances a value by **a single momentum (inertia) step** using velocity integration, exponential friction, optional velocity smoothing, and hard bounds. This function models momentum-driven motion and is intended to be called repeatedly from an animation loop (e.g. `requestAnimationFrame`). Returns the updated value and velocity while inertia remains active, or `null` when inertia has naturally completed or further movement is blocked by bounds. Common use cases include momentum scrolling, drag-to-scroll interactions, carousels, sliders, and timelines.
725
+ - `applyInertiaStep(options: ApplyInertiaStepOptions): Nullable<InertiaStepResult>` - Advances a value by a single momentum (inertia) step using velocity integration, exponential friction, optional velocity smoothing, and hard bounds. This function models momentum-driven motion and is intended to be called repeatedly from an animation loop (e.g. `requestAnimationFrame`). Returns the updated value and velocity while inertia remains active, or `null` when inertia has naturally completed or further movement is blocked by bounds. Common use cases include momentum scrolling, drag-to-scroll interactions, carousels, sliders, and timelines.
648
726
 
649
727
  #### Layout
650
728
 
package/dist/README.md CHANGED
@@ -17,6 +17,8 @@ A lightweight TypeScript utility library providing a collection of helper functi
17
17
  - ๐Ÿงฎ **Math Utilities** - Common mathematical calculations
18
18
  - ๐ŸŽฏ **Function Utilities** - Function handling helpers
19
19
  - ๐Ÿ–ฅ๏ธ **DOM Utilities** - Browser DOM manipulation helpers
20
+ - ๐Ÿงฌ **Encoding Utilities** - Base64 decoding and encoded JSON helpers
21
+ - ๐Ÿงพ **JSON Utilities** - Safe JSON parsing
20
22
  - ๐Ÿ“ฆ **Zero Dependencies** - Lightweight and dependency-free
21
23
  - ๐Ÿ“ **TypeScript Support** - Full TypeScript type definitions
22
24
 
@@ -100,6 +102,69 @@ const hash = hashString('background-color: red;');
100
102
  // โžœ 'e4k1z0x'
101
103
  ```
102
104
 
105
+ ### Encoding Utilities
106
+
107
+ ```ts
108
+ import { decodeBase64, decodeBase64Json } from '@react-hive/honey-utils';
109
+
110
+ /**
111
+ * Decode a base64 string
112
+ */
113
+ decodeBase64('SGVsbG8gd29ybGQ=');
114
+ // โžœ 'Hello world'
115
+
116
+ /**
117
+ * Decode unicode text from base64
118
+ */
119
+ decodeBase64('0J/RgNC40LLQtdGCINC80LjRgA==');
120
+ // โžœ 'ะŸั€ะธะฒะตั‚ ะผะธั€'
121
+
122
+ /**
123
+ * Decode and parse base64-encoded JSON
124
+ */
125
+ decodeBase64Json<{ name: string; age: number }>('eyJuYW1lIjoiTWlrZSIsImFnZSI6MzN9');
126
+ // โžœ { name: 'Mike', age: 33 }
127
+
128
+ /**
129
+ * Invalid base64 or invalid decoded JSON returns null
130
+ */
131
+ decodeBase64Json('invalid');
132
+ // โžœ null
133
+ ```
134
+
135
+ ### JSON Utilities
136
+
137
+ ```ts
138
+ import { parseJson } from '@react-hive/honey-utils';
139
+
140
+ /**
141
+ * Safely parse JSON
142
+ */
143
+ parseJson<{ name: string; age: number }>('{"name":"Mike","age":33}');
144
+ // โžœ { name: 'Mike', age: 33 }
145
+
146
+ /**
147
+ * Parse array JSON
148
+ */
149
+ parseJson<number[]>('[1,2,3]');
150
+ // โžœ [1, 2, 3]
151
+
152
+ /**
153
+ * Parse primitive JSON values
154
+ */
155
+ parseJson<boolean>('true');
156
+ // โžœ true
157
+
158
+ parseJson<null>('null');
159
+ // โžœ null
160
+
161
+ /**
162
+ * Invalid JSON returns null
163
+ */
164
+ parseJson('{name:"Mike"}');
165
+ // โžœ null
166
+ ```
167
+
103
168
  ### Array Utilities
104
169
 
105
170
  ```ts
@@ -559,6 +624,19 @@ function divide(a: number, b: number): number {
559
624
  - `getWordsInitials(input: string, maxWords?: number): string` - Returns the uppercase initials of the words in a string. The number of processed words can be limited via `maxWords`.
560
625
  - `splitMapJoin(input: string, separator: string, mapFn: (part: string, index: number) => string, joinWith?: string): string` - Splits a string by a separator, applies a transformation function to each trimmed part, and joins the results back together. Useful for processing comma-separated selectors or any delimited string.
561
626
 
627
+ ### Encoding Utilities
628
+
629
+ ---
630
+
631
+ - `decodeBase64(value: string): Nullable<string>` - Decodes a base64-encoded string into UTF-8 text. Returns `null` when decoding fails.
632
+ - `decodeBase64Json<Value>(value: string): Nullable<Value>` - Decodes a base64-encoded string and safely parses the decoded result as JSON. Returns `null` when base64 decoding fails or when the decoded value is not valid JSON.
633
+
634
+ ### JSON Utilities
635
+
636
+ ---
637
+
638
+ - `parseJson<Value>(value: string): Nullable<Value>` - Safely parses a JSON string. Returns the parsed value when parsing succeeds, or `null` when parsing fails.
639
+
562
640
  ### Color Utilities
563
641
 
564
642
  ---
@@ -644,7 +722,7 @@ function divide(a: number, b: number): number {
644
722
  ---
645
723
 
646
724
  - `resolveBoundedDelta(options: ResolveBoundedDeltaOptions): Nullable<number>` โ€“ Resolves the next numeric value by consuming a delta within fixed bounds. Prevents overshoot, partially consumes deltas at boundaries, and returns `null` when movement in the given direction is no longer possible. Useful for drag constraints, sliders, synthetic scrolling, and inertia systems.
647
- - `applyInertiaStep(options: ApplyInertiaStepOptions): Nullable<InertiaStepResult>` - Advances a value by **a single momentum (inertia) step** using velocity integration, exponential friction, optional velocity smoothing, and hard bounds. This function models momentum-driven motion and is intended to be called repeatedly from an animation loop (e.g. `requestAnimationFrame`). Returns the updated value and velocity while inertia remains active, or `null` when inertia has naturally completed or further movement is blocked by bounds. Common use cases include momentum scrolling, drag-to-scroll interactions, carousels, sliders, and timelines.
725
+ - `applyInertiaStep(options: ApplyInertiaStepOptions): Nullable<InertiaStepResult>` - Advances a value by a single momentum (inertia) step using velocity integration, exponential friction, optional velocity smoothing, and hard bounds. This function models momentum-driven motion and is intended to be called repeatedly from an animation loop (e.g. `requestAnimationFrame`). Returns the updated value and velocity while inertia remains active, or `null` when inertia has naturally completed or further movement is blocked by bounds. Common use cases include momentum scrolling, drag-to-scroll interactions, carousels, sliders, and timelines.
648
726
 
649
727
  #### Layout
650
728
 
@@ -0,0 +1,2 @@
1
+ import type { Nullable } from '~/types';
2
+ export declare const decodeBase64Json: <Value>(value: string) => Nullable<Value>;
@@ -0,0 +1,2 @@
1
+ import type { Nullable } from '~/types';
2
+ export declare const decodeBase64: (value: string) => Nullable<string>;
@@ -0,0 +1,2 @@
1
+ export * from './decode-base64';
2
+ export * from './decode-base64-json';
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{DATA_TRANSFER_JSON_MIME:()=>ne,FOCUSABLE_HTML_TAGS:()=>i,applyInertiaStep:()=>Ie,assert:()=>p,blobToFile:()=>be,calculateCenterOffset:()=>he,calculateEuclideanDistance:()=>Ce,calculateMovingSpeed:()=>Te,calculatePercentage:()=>Fe,camelToDashCase:()=>Le,camelToWords:()=>Ne,centerElementInContainer:()=>de,chunk:()=>N,clampOffsetToOverflow:()=>fe,cloneBlob:()=>n,compact:()=>k,compose:()=>h,definedProps:()=>De,delay:()=>Q,difference:()=>f,downloadFile:()=>ie,everyAsync:()=>G,fileListToFiles:()=>we,filterParallel:()=>q,filterSequential:()=>J,findAsync:()=>K,findCharIndices:()=>Xe,flattenTree:()=>He,forEachChar:()=>We,generateEphemeralId:()=>Me,getAdjacentItems:()=>X,getDOMRectIntersectionRatio:()=>Oe,getDataTransferJson:()=>ae,getElementOffsetRect:()=>r,getFocusableHtmlElements:()=>s,getLocalStorageCapabilities:()=>ge,getTreeChildren:()=>Ue,getWordsInitials:()=>Ye,getXOverflowWidth:()=>se,getYOverflowHeight:()=>ue,hasXOverflow:()=>oe,hasYOverflow:()=>ce,hashString:()=>Pe,hexWithAlpha:()=>ze,intersection:()=>m,invokeIfFunction:()=>Ae,isAnchorHtmlElement:()=>a,isArray:()=>R,isBlob:()=>M,isBool:()=>v,isContentEditableHtmlElement:()=>l,isDate:()=>I,isDecimal:()=>L,isDefined:()=>w,isEmptyArray:()=>j,isEmptyObject:()=>x,isError:()=>O,isFile:()=>ye,isFiniteNumber:()=>D,isFunction:()=>Y,isHtmlElementFocusable:()=>o,isInteger:()=>_,isLocalStorageReadable:()=>pe,isMap:()=>T,isNil:()=>y,isNilOrEmptyString:()=>Re,isNull:()=>g,isNumber:()=>S,isObject:()=>A,isPromise:()=>U,isRegExp:()=>C,isSet:()=>F,isString:()=>le,isSymbol:()=>P,isUndefined:()=>b,isValidDate:()=>E,moveFocusWithinContainer:()=>c,noop:()=>W,not:()=>$,once:()=>H,parse2DMatrix:()=>me,parseFileName:()=>je,pipe:()=>u,readFilesFromDataTransfer:()=>ve,reduceAsync:()=>Z,resolveAxisDelta:()=>Ee,resolveBoundedDelta:()=>xe,retry:()=>te,runParallel:()=>z,runSequential:()=>B,searchTree:()=>Be,setDataTransferJson:()=>re,someAsync:()=>V,splitMapJoin:()=>$e,splitStringIntoWords:()=>ke,timeout:()=>ee,toKebabCase:()=>_e,traverseFileSystemDirectory:()=>Se,unique:()=>d});const n=e=>new Blob([e],{type:e.type}),r=e=>new DOMRect(e.offsetLeft,e.offsetTop,e.clientWidth,e.clientHeight),a=e=>"A"===e.tagName,l=e=>"true"===e.getAttribute("contenteditable"),i=["INPUT","SELECT","TEXTAREA","BUTTON","A"],o=e=>{if(!e)return!1;const t=window.getComputedStyle(e);if("hidden"===t.visibility||"none"===t.display)return!1;if("disabled"in e&&e.disabled)return!1;const n=e.getAttribute("tabindex");return"-1"!==n&&(i.includes(e.tagName)?!a(e)||""!==e.href:!!l(e)||null!==n)},s=e=>Array.from(e.querySelectorAll("*")).filter(o),c=(e,t=null,{wrap:n=!0,getNextIndex:r}={})=>{const a=document.activeElement,l=t??a?.parentElement;if(!a||!l)return;const i=s(l);if(0===i.length)return;const o=i.indexOf(a);if(-1===o)return;let c;r?c=r(o,e,i):"next"===e?(c=o+1,c>=i.length&&(c=n?0:null)):(c=o-1,c<0&&(c=n?i.length-1:null)),null!==c&&i[c]?.focus()},u=(...e)=>t=>e.reduce((e,t)=>t(e),t),h=(...e)=>t=>e.reduceRight((e,t)=>t(e),t),f=(e,t)=>e.filter(e=>!t.includes(e)),d=e=>[...new Set(e)],m=(...e)=>{if(0===e.length)return[];if(1===e.length)return[...e[0]];const[t,...n]=e;return d(t).filter(e=>n.every(t=>t.includes(e)))};function p(e,t){if(!e)throw new Error(t)}const g=e=>null===e,y=e=>null==e,w=e=>null!=e,b=e=>void 0===e,S=e=>"number"==typeof e,v=e=>"boolean"==typeof e,A=e=>"object"==typeof e,x=e=>A(e)&&!g(e)&&0===Object.keys(e).length,I=e=>e instanceof Date,M=e=>e instanceof Blob,O=e=>e instanceof Error,E=e=>I(e)&&!isNaN(e.getTime()),C=e=>e instanceof RegExp,T=e=>e instanceof Map,F=e=>e instanceof Set,P=e=>"symbol"==typeof e,D=e=>S(e)&&isFinite(e),_=e=>S(e)&&Number.isInteger(e),L=e=>D(e)&&!Number.isInteger(e),N=(e,t)=>(p(t>0,"Chunk size must be greater than 0"),Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,(r+1)*t))),k=e=>e.filter(Boolean),R=e=>Array.isArray(e),j=e=>R(e)&&0===e.length,X=(e,t,n)=>{if(!e?.length||!t)return{previousItem:null,currentItem:null,nextItem:null};const r=e.findIndex(e=>n(e,t));return-1===r?{previousItem:null,currentItem:null,nextItem:null}:{previousItem:r>0?e[r-1]:null,currentItem:e[r],nextItem:r<e.length-1?e[r+1]:null}},W=()=>{},Y=e=>"function"==typeof e,$=e=>(...t)=>!e(...t),H=e=>{let t,n=!1;return function(...r){return n||(n=!0,t=e.apply(this,r)),t}},U=e=>Y(e?.then),B=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++)n.push(await t(e[r],r,e));return n},z=async(e,t)=>Promise.all(e.map(t)),J=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++){const a=e[r];await t(a,r,e)&&n.push(a)}return n},q=async(e,t)=>{const n=await z(e,async(e,n,r)=>!!await t(e,n,r)&&e);return k(n)},V=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return!0;return!1},G=async(e,t)=>{for(let n=0;n<e.length;n++)if(!await t(e[n],n,e))return!1;return!0},Z=async(e,t,n)=>{let r=n;for(let n=0;n<e.length;n++)r=await t(r,e[n],n,e);return r},K=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return e[n];return null},Q=e=>new Promise(t=>setTimeout(t,e)),ee=async(e,t,n="Operation timed out")=>{try{return await Promise.race([e,Q(t).then(()=>Promise.reject(new Error(n)))])}finally{}},te=(e,{maxAttempts:t=3,delayMs:n=300,backoff:r=!0,onRetry:a}={})=>async(...l)=>{let i;for(let o=1;o<=t;o++)try{return await e(...l)}catch(e){if(i=e,o<t){a?.(o,e);const t=r?n*2**(o-1):n;await Q(t)}}throw i},ne="application/json",re=(e,t)=>{e.setData(ne,JSON.stringify(t))},ae=e=>{const t=e.getData(ne);if(t)try{return JSON.parse(t)}catch{return}},le=e=>"string"==typeof e,ie=(e,{fileName:t,target:n}={})=>{if(b(document))return;const r=document.createElement("a");let a=null;try{const l=le(e)?e:a=URL.createObjectURL(e);r.href=l,t&&(r.download=t),n&&(r.target=n),document.body.appendChild(r),r.click()}finally{r.remove(),a&&setTimeout(()=>{p(a,"Object URL should not be null"),URL.revokeObjectURL(a)},0)}},oe=e=>e.scrollWidth>e.clientWidth,se=e=>Math.max(0,e.scrollWidth-e.clientWidth),ce=e=>e.scrollHeight>e.clientHeight,ue=e=>Math.max(0,e.scrollHeight-e.clientHeight),he=({containerSize:e,elementOffset:t,elementSize:n})=>-(t+n/2-e/2),fe=(e,t)=>t<=0?0:Math.max(-t,Math.min(e,0)),de=(e,t,{axis:n="both",shouldClamp:r=!0}={})=>{let a=0,l=0;if("x"===n||"both"===n){const n=he({containerSize:e.clientWidth,elementOffset:t.offsetLeft,elementSize:t.clientWidth});a=r?fe(n,se(e)):n}if("y"===n||"both"===n){const n=he({containerSize:e.clientHeight,elementOffset:t.offsetTop,elementSize:t.clientHeight});l=r?fe(n,ue(e)):n}e.style.transform=`translate(${a}px, ${l}px)`},me=e=>{const t=window.getComputedStyle(e).getPropertyValue("transform").match(/^matrix\((.+)\)$/);if(!t)return{translateX:0,translateY:0,scaleX:1,scaleY:1,skewX:0,skewY:0};const[n,r,a,l,i,o]=t[1].split(", ").map(parseFloat);return{translateX:i,translateY:o,scaleX:n,scaleY:l,skewX:a,skewY:r}},pe=()=>{if("undefined"==typeof window||!window.localStorage)return!1;try{return window.localStorage.getItem("__non_existing_key__"),!0}catch{return!1}},ge=()=>{if(!pe())return{readable:!1,writable:!1};try{const e="__test_write__";return window.localStorage.setItem(e,"1"),window.localStorage.removeItem(e),{readable:!0,writable:!0}}catch{}return{readable:!0,writable:!1}},ye=e=>e instanceof File,we=e=>{if(!e)return[];const t=[];for(let n=0;n<e.length;n++)t.push(e[n]);return t},be=(e,t)=>new File([e],t,{type:e.type}),Se=async(e,{skipFiles:t=[".DS_Store","Thumbs.db","desktop.ini","ehthumbs.db",".Spotlight-V100",".Trashes",".fseventsd","__MACOSX"]}={})=>{const n=new Set(t),r=await(async e=>{const t=e.createReader(),n=async()=>new Promise((e,r)=>{t.readEntries(async t=>{if(t.length)try{const r=await n();e([...t,...r])}catch(e){r(e)}else e([])},r)});return n()})(e);return(await z(r,async e=>e.isDirectory?Se(e,{skipFiles:t}):n.has(e.name)?[]:[await new Promise((t,n)=>{e.file(t,n)})])).flat()},ve=async(e,t={})=>{const n=e?.items;if(!n)return[];const r=[];for(let e=0;e<n.length;e++){const a=n[e];if("webkitGetAsEntry"in a){const e=a.webkitGetAsEntry?.();if(e?.isDirectory){r.push(Se(e,t));continue}if(e?.isFile){r.push(new Promise((t,n)=>e.file(e=>t([e]),n)));continue}}const l=a.getAsFile();l&&r.push(Promise.resolve([l]))}return(await Promise.all(r)).flat()},Ae=(e,...t)=>"function"==typeof e?e(...t):e,xe=({delta:e,value:t,min:n,max:r})=>{if(0===e)return null;const a=t+e;return e<0?t<=n?null:Math.max(a,n):e>0?t>=r?null:Math.min(a,r):null},Ie=({value:e,min:t,max:n,velocityPxMs:r,deltaTimeMs:a,friction:l=.002,minVelocityPxMs:i=.01,emaAlpha:o=.2})=>{if(Math.abs(r)<i)return null;const s=xe({delta:r*a,value:e,min:t,max:n});if(null===s)return null;const c=r*Math.exp(-l*a),u=o>0?r*(1-o)+c*o:c;return Math.abs(u)<i?null:{value:s,velocityPxMs:u}},Me=()=>`${Math.floor(1e3*performance.now()).toString(36)}${Math.random().toString(36).slice(2,10)}`,Oe=(e,t)=>Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left))*Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top))/(t.width*t.height),Ee=(e,t,{allowFallback:n=!0,invert:r=!0}={})=>{const a=r?-1:1;switch(t){case"x":return{deltaX:a*(0!==e.deltaX?e.deltaX:n?e.deltaY:0),deltaY:0};case"y":return{deltaX:0,deltaY:a*e.deltaY};default:return{deltaX:a*e.deltaX,deltaY:a*e.deltaY}}},Ce=(e,t,n,r)=>{const a=n-e,l=r-t;return Math.hypot(a,l)},Te=(e,t)=>Math.abs(e/t),Fe=(e,t)=>e*t/100,Pe=e=>{let t=5381;for(let n=0;n<e.length;n++)t=33*t^e.charCodeAt(n);return(t>>>0).toString(36)},De=e=>Object.entries(e).reduce((e,[t,n])=>(void 0!==n&&(e[t]=n),e),{}),_e=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Le=e=>{const t=e.charAt(0),n=e.slice(1);return t.toLowerCase()+n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)},Ne=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),ke=e=>0===e.length?[]:e.split(" ").filter(Boolean),Re=e=>""===e||y(e),je=e=>{const t=e.lastIndexOf(".");return t<=0||t===e.length-1?[e,""]:[e.slice(0,t),e.slice(t+1).toLowerCase()]},Xe=(e,t)=>{if(0===e.length)return[];const n=t.charCodeAt(0),r=[];for(let t=0;t<e.length;t++)e.charCodeAt(t)===n&&r.push(t);return r},We=(e,t,n)=>{if(0===e.length)return;const r=e.length;for(let a=0;a<r;a++){const l=e[a],i={charIndex:a,prevChar:a>0?e[a-1]:null,nextChar:a<r-1?e[a+1]:null};n?.(l,i)||t(l,i)}},Ye=(e,t=1/0)=>0===e.length?"":ke(e).slice(0,t).map(e=>e[0]).join("").toUpperCase(),$e=(e,t,n,r=t)=>e.split(t).map((e,t)=>n(e.trim(),t)).join(r),He=(e,t,n,r=[],a=void 0,l=0)=>(e?.forEach(e=>{const{[n]:i,...o}=e,s=e[n],c=Array.isArray(s);if(r.push({...o,parentId:a,depthLevel:l,childCount:c?s.length:0}),c){const a=e[t];He(s,t,n,r,a,l+1)}}),r),Ue=(e,t,n)=>e.filter(e=>e.parentId===t&&(!n||n(e))),Be=(e,t,n,r)=>{const a=ke(r.toLowerCase());if(!a.length)return e;const l=e.reduce((e,n,r)=>(e[n[t]]=r,e),{});return e.reduce((r,i)=>{const o=i[n];if(!o)return r;if(r.some(e=>e[t]===i[t]))return r;const s=ke(o.toLowerCase());if(a.every(e=>s.some(t=>t.startsWith(e))))if(b(i.parentId)){r.push(i);const n=a=>{a.childCount&&e.forEach(e=>{e.parentId===a[t]&&(r.push(e),n(e))})};n(i)}else{const t=n=>{const a=l[n.parentId],i=e[a];b(i.parentId)||t(i);const o=r.length?r[r.length-1].parentId:null;(g(o)||o!==n.parentId)&&(p(i,"[@react-hive/honey-utils]: Parent node was not found."),r.push(i))};t(i),r.push(i)}return r},[])},ze=(e,t)=>{p(t>=0&&t<=1,`[@react-hive/honey-utils]: Alpha "${t}" must be a number between 0 and 1.`);const n=e.match(/^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/);p(n,`[@react-hive/honey-utils]: Invalid hex format: ${e}`);const r=n[1];return`#${(3===r.length?r[0]+r[0]+r[1]+r[1]+r[2]+r[2]:r)+Math.round(255*t).toString(16).toUpperCase().padStart(2,"0")}`};module.exports=t})();
1
+ (()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{DATA_TRANSFER_JSON_MIME:()=>ne,FOCUSABLE_HTML_TAGS:()=>i,applyInertiaStep:()=>Ie,assert:()=>p,blobToFile:()=>we,calculateCenterOffset:()=>fe,calculateEuclideanDistance:()=>Ee,calculateMovingSpeed:()=>Te,calculatePercentage:()=>Fe,camelToDashCase:()=>_e,camelToWords:()=>Le,centerElementInContainer:()=>de,chunk:()=>L,clampOffsetToOverflow:()=>he,cloneBlob:()=>n,compact:()=>R,compose:()=>f,decodeBase64:()=>qe,decodeBase64Json:()=>Ve,definedProps:()=>De,delay:()=>Q,difference:()=>h,downloadFile:()=>ie,everyAsync:()=>V,fileListToFiles:()=>be,filterParallel:()=>Z,filterSequential:()=>J,findAsync:()=>K,findCharIndices:()=>Xe,flattenTree:()=>Ye,forEachChar:()=>$e,generateEphemeralId:()=>Me,getAdjacentItems:()=>X,getDOMRectIntersectionRatio:()=>Oe,getDataTransferJson:()=>ae,getElementOffsetRect:()=>r,getFocusableHtmlElements:()=>s,getLocalStorageCapabilities:()=>ge,getTreeChildren:()=>He,getWordsInitials:()=>Be,getXOverflowWidth:()=>se,getYOverflowHeight:()=>ue,hasXOverflow:()=>oe,hasYOverflow:()=>ce,hashString:()=>Pe,hexWithAlpha:()=>Ue,intersection:()=>m,invokeIfFunction:()=>ve,isAnchorHtmlElement:()=>a,isArray:()=>j,isBlob:()=>M,isBool:()=>A,isContentEditableHtmlElement:()=>l,isDate:()=>I,isDecimal:()=>_,isDefined:()=>b,isEmptyArray:()=>k,isEmptyObject:()=>x,isError:()=>O,isFile:()=>ye,isFiniteNumber:()=>D,isFunction:()=>B,isHtmlElementFocusable:()=>o,isInteger:()=>N,isLocalStorageReadable:()=>pe,isMap:()=>T,isNil:()=>y,isNilOrEmptyString:()=>je,isNull:()=>g,isNumber:()=>S,isObject:()=>v,isPromise:()=>H,isRegExp:()=>E,isSet:()=>F,isString:()=>le,isSymbol:()=>P,isUndefined:()=>w,isValidDate:()=>C,moveFocusWithinContainer:()=>c,noop:()=>$,not:()=>W,once:()=>Y,parse2DMatrix:()=>me,parseFileName:()=>ke,parseJson:()=>Je,pipe:()=>u,readFilesFromDataTransfer:()=>Ae,reduceAsync:()=>G,resolveAxisDelta:()=>Ce,resolveBoundedDelta:()=>xe,retry:()=>te,runParallel:()=>U,runSequential:()=>z,searchTree:()=>ze,setDataTransferJson:()=>re,someAsync:()=>q,splitMapJoin:()=>We,splitStringIntoWords:()=>Re,timeout:()=>ee,toKebabCase:()=>Ne,traverseFileSystemDirectory:()=>Se,unique:()=>d});const n=e=>new Blob([e],{type:e.type}),r=e=>new DOMRect(e.offsetLeft,e.offsetTop,e.clientWidth,e.clientHeight),a=e=>"A"===e.tagName,l=e=>"true"===e.getAttribute("contenteditable"),i=["INPUT","SELECT","TEXTAREA","BUTTON","A"],o=e=>{if(!e)return!1;const t=window.getComputedStyle(e);if("hidden"===t.visibility||"none"===t.display)return!1;if("disabled"in e&&e.disabled)return!1;const n=e.getAttribute("tabindex");return"-1"!==n&&(i.includes(e.tagName)?!a(e)||""!==e.href:!!l(e)||null!==n)},s=e=>Array.from(e.querySelectorAll("*")).filter(o),c=(e,t=null,{wrap:n=!0,getNextIndex:r}={})=>{const a=document.activeElement,l=t??a?.parentElement;if(!a||!l)return;const i=s(l);if(0===i.length)return;const o=i.indexOf(a);if(-1===o)return;let c;r?c=r(o,e,i):"next"===e?(c=o+1,c>=i.length&&(c=n?0:null)):(c=o-1,c<0&&(c=n?i.length-1:null)),null!==c&&i[c]?.focus()},u=(...e)=>t=>e.reduce((e,t)=>t(e),t),f=(...e)=>t=>e.reduceRight((e,t)=>t(e),t),h=(e,t)=>e.filter(e=>!t.includes(e)),d=e=>[...new Set(e)],m=(...e)=>{if(0===e.length)return[];if(1===e.length)return[...e[0]];const[t,...n]=e;return d(t).filter(e=>n.every(t=>t.includes(e)))};function p(e,t){if(!e)throw new Error(t)}const g=e=>null===e,y=e=>null==e,b=e=>null!=e,w=e=>void 0===e,S=e=>"number"==typeof e,A=e=>"boolean"==typeof e,v=e=>"object"==typeof e,x=e=>v(e)&&!g(e)&&0===Object.keys(e).length,I=e=>e instanceof Date,M=e=>e instanceof Blob,O=e=>e instanceof Error,C=e=>I(e)&&!isNaN(e.getTime()),E=e=>e instanceof RegExp,T=e=>e instanceof Map,F=e=>e instanceof Set,P=e=>"symbol"==typeof e,D=e=>S(e)&&isFinite(e),N=e=>S(e)&&Number.isInteger(e),_=e=>D(e)&&!Number.isInteger(e),L=(e,t)=>(p(t>0,"Chunk size must be greater than 0"),Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,(r+1)*t))),R=e=>e.filter(Boolean),j=e=>Array.isArray(e),k=e=>j(e)&&0===e.length,X=(e,t,n)=>{if(!e?.length||!t)return{previousItem:null,currentItem:null,nextItem:null};const r=e.findIndex(e=>n(e,t));return-1===r?{previousItem:null,currentItem:null,nextItem:null}:{previousItem:r>0?e[r-1]:null,currentItem:e[r],nextItem:r<e.length-1?e[r+1]:null}},$=()=>{},B=e=>"function"==typeof e,W=e=>(...t)=>!e(...t),Y=e=>{let t,n=!1;return function(...r){return n||(n=!0,t=e.apply(this,r)),t}},H=e=>B(e?.then),z=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++)n.push(await t(e[r],r,e));return n},U=async(e,t)=>Promise.all(e.map(t)),J=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++){const a=e[r];await t(a,r,e)&&n.push(a)}return n},Z=async(e,t)=>{const n=await U(e,async(e,n,r)=>!!await t(e,n,r)&&e);return R(n)},q=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return!0;return!1},V=async(e,t)=>{for(let n=0;n<e.length;n++)if(!await t(e[n],n,e))return!1;return!0},G=async(e,t,n)=>{let r=n;for(let n=0;n<e.length;n++)r=await t(r,e[n],n,e);return r},K=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return e[n];return null},Q=e=>new Promise(t=>setTimeout(t,e)),ee=async(e,t,n="Operation timed out")=>{try{return await Promise.race([e,Q(t).then(()=>Promise.reject(new Error(n)))])}finally{}},te=(e,{maxAttempts:t=3,delayMs:n=300,backoff:r=!0,onRetry:a}={})=>async(...l)=>{let i;for(let o=1;o<=t;o++)try{return await e(...l)}catch(e){if(i=e,o<t){a?.(o,e);const t=r?n*2**(o-1):n;await Q(t)}}throw i},ne="application/json",re=(e,t)=>{e.setData(ne,JSON.stringify(t))},ae=e=>{const t=e.getData(ne);if(t)try{return JSON.parse(t)}catch{return}},le=e=>"string"==typeof e,ie=(e,{fileName:t,target:n}={})=>{if(w(document))return;const r=document.createElement("a");let a=null;try{const l=le(e)?e:a=URL.createObjectURL(e);r.href=l,t&&(r.download=t),n&&(r.target=n),document.body.appendChild(r),r.click()}finally{r.remove(),a&&setTimeout(()=>{p(a,"Object URL should not be null"),URL.revokeObjectURL(a)},0)}},oe=e=>e.scrollWidth>e.clientWidth,se=e=>Math.max(0,e.scrollWidth-e.clientWidth),ce=e=>e.scrollHeight>e.clientHeight,ue=e=>Math.max(0,e.scrollHeight-e.clientHeight),fe=({containerSize:e,elementOffset:t,elementSize:n})=>-(t+n/2-e/2),he=(e,t)=>t<=0?0:Math.max(-t,Math.min(e,0)),de=(e,t,{axis:n="both",shouldClamp:r=!0}={})=>{let a=0,l=0;if("x"===n||"both"===n){const n=fe({containerSize:e.clientWidth,elementOffset:t.offsetLeft,elementSize:t.clientWidth});a=r?he(n,se(e)):n}if("y"===n||"both"===n){const n=fe({containerSize:e.clientHeight,elementOffset:t.offsetTop,elementSize:t.clientHeight});l=r?he(n,ue(e)):n}e.style.transform=`translate(${a}px, ${l}px)`},me=e=>{const t=window.getComputedStyle(e).getPropertyValue("transform").match(/^matrix\((.+)\)$/);if(!t)return{translateX:0,translateY:0,scaleX:1,scaleY:1,skewX:0,skewY:0};const[n,r,a,l,i,o]=t[1].split(", ").map(parseFloat);return{translateX:i,translateY:o,scaleX:n,scaleY:l,skewX:a,skewY:r}},pe=()=>{if("undefined"==typeof window||!window.localStorage)return!1;try{return window.localStorage.getItem("__non_existing_key__"),!0}catch{return!1}},ge=()=>{if(!pe())return{readable:!1,writable:!1};try{const e="__test_write__";return window.localStorage.setItem(e,"1"),window.localStorage.removeItem(e),{readable:!0,writable:!0}}catch{}return{readable:!0,writable:!1}},ye=e=>e instanceof File,be=e=>{if(!e)return[];const t=[];for(let n=0;n<e.length;n++)t.push(e[n]);return t},we=(e,t)=>new File([e],t,{type:e.type}),Se=async(e,{skipFiles:t=[".DS_Store","Thumbs.db","desktop.ini","ehthumbs.db",".Spotlight-V100",".Trashes",".fseventsd","__MACOSX"]}={})=>{const n=new Set(t),r=await(async e=>{const t=e.createReader(),n=async()=>new Promise((e,r)=>{t.readEntries(async t=>{if(t.length)try{const r=await n();e([...t,...r])}catch(e){r(e)}else e([])},r)});return n()})(e);return(await U(r,async e=>e.isDirectory?Se(e,{skipFiles:t}):n.has(e.name)?[]:[await new Promise((t,n)=>{e.file(t,n)})])).flat()},Ae=async(e,t={})=>{const n=e?.items;if(!n)return[];const r=[];for(let e=0;e<n.length;e++){const a=n[e];if("webkitGetAsEntry"in a){const e=a.webkitGetAsEntry?.();if(e?.isDirectory){r.push(Se(e,t));continue}if(e?.isFile){r.push(new Promise((t,n)=>e.file(e=>t([e]),n)));continue}}const l=a.getAsFile();l&&r.push(Promise.resolve([l]))}return(await Promise.all(r)).flat()},ve=(e,...t)=>"function"==typeof e?e(...t):e,xe=({delta:e,value:t,min:n,max:r})=>{if(0===e)return null;const a=t+e;return e<0?t<=n?null:Math.max(a,n):e>0?t>=r?null:Math.min(a,r):null},Ie=({value:e,min:t,max:n,velocityPxMs:r,deltaTimeMs:a,friction:l=.002,minVelocityPxMs:i=.01,emaAlpha:o=.2})=>{if(Math.abs(r)<i)return null;const s=xe({delta:r*a,value:e,min:t,max:n});if(null===s)return null;const c=r*Math.exp(-l*a),u=o>0?r*(1-o)+c*o:c;return Math.abs(u)<i?null:{value:s,velocityPxMs:u}},Me=()=>`${Math.floor(1e3*performance.now()).toString(36)}${Math.random().toString(36).slice(2,10)}`,Oe=(e,t)=>Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left))*Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top))/(t.width*t.height),Ce=(e,t,{allowFallback:n=!0,invert:r=!0}={})=>{const a=r?-1:1;switch(t){case"x":return{deltaX:a*(0!==e.deltaX?e.deltaX:n?e.deltaY:0),deltaY:0};case"y":return{deltaX:0,deltaY:a*e.deltaY};default:return{deltaX:a*e.deltaX,deltaY:a*e.deltaY}}},Ee=(e,t,n,r)=>{const a=n-e,l=r-t;return Math.hypot(a,l)},Te=(e,t)=>Math.abs(e/t),Fe=(e,t)=>e*t/100,Pe=e=>{let t=5381;for(let n=0;n<e.length;n++)t=33*t^e.charCodeAt(n);return(t>>>0).toString(36)},De=e=>Object.entries(e).reduce((e,[t,n])=>(void 0!==n&&(e[t]=n),e),{}),Ne=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),_e=e=>{const t=e.charAt(0),n=e.slice(1);return t.toLowerCase()+n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)},Le=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),Re=e=>0===e.length?[]:e.split(" ").filter(Boolean),je=e=>""===e||y(e),ke=e=>{const t=e.lastIndexOf(".");return t<=0||t===e.length-1?[e,""]:[e.slice(0,t),e.slice(t+1).toLowerCase()]},Xe=(e,t)=>{if(0===e.length)return[];const n=t.charCodeAt(0),r=[];for(let t=0;t<e.length;t++)e.charCodeAt(t)===n&&r.push(t);return r},$e=(e,t,n)=>{if(0===e.length)return;const r=e.length;for(let a=0;a<r;a++){const l=e[a],i={charIndex:a,prevChar:a>0?e[a-1]:null,nextChar:a<r-1?e[a+1]:null};n?.(l,i)||t(l,i)}},Be=(e,t=1/0)=>0===e.length?"":Re(e).slice(0,t).map(e=>e[0]).join("").toUpperCase(),We=(e,t,n,r=t)=>e.split(t).map((e,t)=>n(e.trim(),t)).join(r),Ye=(e,t,n,r=[],a=void 0,l=0)=>(e?.forEach(e=>{const{[n]:i,...o}=e,s=e[n],c=Array.isArray(s);if(r.push({...o,parentId:a,depthLevel:l,childCount:c?s.length:0}),c){const a=e[t];Ye(s,t,n,r,a,l+1)}}),r),He=(e,t,n)=>e.filter(e=>e.parentId===t&&(!n||n(e))),ze=(e,t,n,r)=>{const a=Re(r.toLowerCase());if(!a.length)return e;const l=e.reduce((e,n,r)=>(e[n[t]]=r,e),{});return e.reduce((r,i)=>{const o=i[n];if(!o)return r;if(r.some(e=>e[t]===i[t]))return r;const s=Re(o.toLowerCase());if(a.every(e=>s.some(t=>t.startsWith(e))))if(w(i.parentId)){r.push(i);const n=a=>{a.childCount&&e.forEach(e=>{e.parentId===a[t]&&(r.push(e),n(e))})};n(i)}else{const t=n=>{const a=l[n.parentId],i=e[a];w(i.parentId)||t(i);const o=r.length?r[r.length-1].parentId:null;(g(o)||o!==n.parentId)&&(p(i,"[@react-hive/honey-utils]: Parent node was not found."),r.push(i))};t(i),r.push(i)}return r},[])},Ue=(e,t)=>{p(t>=0&&t<=1,`[@react-hive/honey-utils]: Alpha "${t}" must be a number between 0 and 1.`);const n=e.match(/^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/);p(n,`[@react-hive/honey-utils]: Invalid hex format: ${e}`);const r=n[1];return`#${(3===r.length?r[0]+r[0]+r[1]+r[1]+r[2]+r[2]:r)+Math.round(255*t).toString(16).toUpperCase().padStart(2,"0")}`},Je=e=>{try{return JSON.parse(e)}catch{return null}},Ze=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,qe=e=>{try{return Ze.test(e)?"undefined"!=typeof Buffer?Buffer.from(e,"base64").toString("utf-8"):decodeURIComponent(atob(e).split("").map(e=>`%${e.charCodeAt(0).toString(16).padStart(2,"0")}`).join("")):null}catch{return null}},Ve=e=>{const t=qe(e);return null===t?null:Je(t)};module.exports=t})();
2
2
  //# sourceMappingURL=index.cjs.map