@react-hive/honey-layout 11.1.0 → 11.2.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/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/use-honey-decay.d.ts +51 -25
- package/dist/hooks/use-honey-latest.d.ts +18 -0
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.dev.cjs +123 -49
- package/dist/index.dev.cjs.map +1 -1
- package/dist/index.mjs +15 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -3
package/dist/index.dev.cjs
CHANGED
|
@@ -7945,9 +7945,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7945
7945
|
/* harmony export */ centerElementInContainer: () => (/* binding */ we),
|
|
7946
7946
|
/* harmony export */ chunk: () => (/* binding */ O),
|
|
7947
7947
|
/* harmony export */ cloneBlob: () => (/* binding */ oe),
|
|
7948
|
-
/* harmony export */ compact: () => (/* binding */
|
|
7948
|
+
/* harmony export */ compact: () => (/* binding */ A),
|
|
7949
7949
|
/* harmony export */ compose: () => (/* binding */ E),
|
|
7950
|
-
/* harmony export */ definedProps: () => (/* binding */
|
|
7950
|
+
/* harmony export */ definedProps: () => (/* binding */ ve),
|
|
7951
7951
|
/* harmony export */ delay: () => (/* binding */ H),
|
|
7952
7952
|
/* harmony export */ difference: () => (/* binding */ C),
|
|
7953
7953
|
/* harmony export */ downloadFile: () => (/* binding */ fe),
|
|
@@ -8007,7 +8007,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8007
8007
|
/* harmony export */ parse2DMatrix: () => (/* binding */ pe),
|
|
8008
8008
|
/* harmony export */ parseFileName: () => (/* binding */ K),
|
|
8009
8009
|
/* harmony export */ pipe: () => (/* binding */ P),
|
|
8010
|
-
/* harmony export */ readFilesFromDataTransfer: () => (/* binding */
|
|
8010
|
+
/* harmony export */ readFilesFromDataTransfer: () => (/* binding */ Ae),
|
|
8011
8011
|
/* harmony export */ reduceAsync: () => (/* binding */ U),
|
|
8012
8012
|
/* harmony export */ resolveAxisDelta: () => (/* binding */ Pe),
|
|
8013
8013
|
/* harmony export */ resolveBoundedDelta: () => (/* binding */ Oe),
|
|
@@ -8019,9 +8019,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8019
8019
|
/* harmony export */ timeout: () => (/* binding */ W),
|
|
8020
8020
|
/* harmony export */ toKebabCase: () => (/* binding */ V),
|
|
8021
8021
|
/* harmony export */ traverseFileSystemDirectory: () => (/* binding */ Se),
|
|
8022
|
-
/* harmony export */ unique: () => (/* binding */
|
|
8022
|
+
/* harmony export */ unique: () => (/* binding */ v)
|
|
8023
8023
|
/* harmony export */ });
|
|
8024
|
-
var e={};function t(e,t){if(!e)throw new Error(t)}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]})},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const n=e=>null===e,r=e=>null==e,l=e=>null!=e,a=e=>void 0===e,i=e=>"number"==typeof e,o=e=>"boolean"==typeof e,s=e=>"object"==typeof e,c=e=>s(e)&&!n(e)&&0===Object.keys(e).length,u=e=>e instanceof Date,f=e=>e instanceof Blob,h=e=>e instanceof Error,d=e=>u(e)&&!isNaN(e.getTime()),m=e=>e instanceof RegExp,y=e=>e instanceof Map,g=e=>e instanceof Set,w=e=>"symbol"==typeof e,p=e=>i(e)&&isFinite(e),b=e=>i(e)&&Number.isInteger(e),x=e=>p(e)&&!Number.isInteger(e),M=e=>Array.isArray(e),S=e=>M(e)&&0===e.length,
|
|
8024
|
+
var e={};function t(e,t){if(!e)throw new Error(t)}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]})},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const n=e=>null===e,r=e=>null==e,l=e=>null!=e,a=e=>void 0===e,i=e=>"number"==typeof e,o=e=>"boolean"==typeof e,s=e=>"object"==typeof e,c=e=>s(e)&&!n(e)&&0===Object.keys(e).length,u=e=>e instanceof Date,f=e=>e instanceof Blob,h=e=>e instanceof Error,d=e=>u(e)&&!isNaN(e.getTime()),m=e=>e instanceof RegExp,y=e=>e instanceof Map,g=e=>e instanceof Set,w=e=>"symbol"==typeof e,p=e=>i(e)&&isFinite(e),b=e=>i(e)&&Number.isInteger(e),x=e=>p(e)&&!Number.isInteger(e),M=e=>Array.isArray(e),S=e=>M(e)&&0===e.length,A=e=>e.filter(Boolean),v=e=>[...new Set(e)],O=(e,n)=>(t(n>0,"Chunk size must be greater than 0"),Array.from({length:Math.ceil(e.length/n)},(t,r)=>e.slice(r*n,(r+1)*n))),k=(...e)=>{if(0===e.length)return[];if(1===e.length)return[...e[0]];const[t,...n]=e;return v(t).filter(e=>n.every(t=>t.includes(e)))},C=(e,t)=>e.filter(e=>!t.includes(e)),P=(...e)=>t=>e.reduce((e,t)=>t(e),t),E=(...e)=>t=>e.reduceRight((e,t)=>t(e),t),T=()=>{},X=e=>"function"==typeof e,_=e=>(...t)=>!e(...t),z=e=>{let t,n=!1;return function(...r){return n||(n=!0,t=e.apply(this,r)),t}},L=e=>X(e?.then),Y=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++)n.push(await t(e[r],r,e));return n},R=async(e,t)=>Promise.all(e.map(t)),j=async(e,t)=>{const n=[];for(let r=0;r<e.length;r++){const l=e[r];await t(l,r,e)&&n.push(l)}return n},N=async(e,t)=>{const n=await R(e,async(e,n,r)=>!!await t(e,n,r)&&e);return A(n)},F=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return!0;return!1},I=async(e,t)=>{for(let n=0;n<e.length;n++)if(!await t(e[n],n,e))return!1;return!0},U=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},$=async(e,t)=>{for(let n=0;n<e.length;n++)if(await t(e[n],n,e))return e[n];return null},H=e=>new Promise(t=>setTimeout(t,e)),W=async(e,t,n="Operation timed out")=>{try{return await Promise.race([e,H(t).then(()=>Promise.reject(new Error(n)))])}finally{}},B=(e,{maxAttempts:t=3,delayMs:n=300,backoff:r=!0,onRetry:l}={})=>async(...a)=>{let i;for(let o=1;o<=t;o++)try{return await e(...a)}catch(e){if(i=e,o<t){l?.(o,e);const t=r?n*2**(o-1):n;await H(t)}}throw i},D=e=>"string"==typeof e,V=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Z=e=>{const t=e.charAt(0),n=e.slice(1);return t.toLowerCase()+n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)},G=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),q=e=>0===e.length?[]:e.split(" ").filter(Boolean),J=e=>""===e||r(e),K=e=>{const t=e.lastIndexOf(".");return t<=0||t===e.length-1?[e,""]:[e.slice(0,t),e.slice(t+1).toLowerCase()]},Q=(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},ee=(e,t,n)=>{if(0===e.length)return;const r=e.length;for(let l=0;l<r;l++){const a=e[l],i={charIndex:l,prevChar:l>0?e[l-1]:null,nextChar:l<r-1?e[l+1]:null};n?.(a,i)||t(a,i)}},te=(e,t=1/0)=>0===e.length?"":q(e).slice(0,t).map(e=>e[0]).join("").toUpperCase(),ne=(e,...t)=>"function"==typeof e?e(...t):e,re=(e,t,n,r)=>{const l=n-e,a=r-t;return Math.hypot(l,a)},le=(e,t)=>Math.abs(e/t),ae=(e,t)=>e*t/100,ie=e=>{let t=5381;for(let n=0;n<e.length;n++)t=33*t^e.charCodeAt(n);return(t>>>0).toString(36)},oe=e=>new Blob([e],{type:e.type}),se=e=>new DOMRect(e.offsetLeft,e.offsetTop,e.clientWidth,e.clientHeight),ce=e=>"A"===e.tagName,ue=e=>"true"===e.getAttribute("contenteditable"),fe=(e,{fileName:n,target:r}={})=>{if(a(document))return;const l=document.createElement("a");let i=null;try{const t=D(e)?e:i=URL.createObjectURL(e);l.href=t,n&&(l.download=n),r&&(l.target=r),document.body.appendChild(l),l.click()}finally{l.remove(),i&&setTimeout(()=>{t(i,"Object URL should not be null"),URL.revokeObjectURL(i)},0)}},he=e=>e.scrollWidth>e.clientWidth,de=e=>Math.max(0,e.scrollWidth-e.clientWidth),me=e=>e.scrollHeight>e.clientHeight,ye=e=>Math.max(0,e.scrollHeight-e.clientHeight),ge=({overflowSize:e,containerSize:t,elementOffset:n,elementSize:r})=>{if(e<=0)return 0;const l=n+r/2-t/2;return-Math.max(0,Math.min(l,e))},we=(e,t,{axis:n="both"}={})=>{let r=0,l=0;"x"!==n&&"both"!==n||(r=ge({overflowSize:de(e),containerSize:e.clientWidth,elementOffset:t.offsetLeft,elementSize:t.clientWidth})),"y"!==n&&"both"!==n||(l=ge({overflowSize:ye(e),containerSize:e.clientHeight,elementOffset:t.offsetTop,elementSize:t.clientHeight})),e.style.transform=`translate(${r}px, ${l}px)`},pe=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,l,a,i,o]=t[1].split(", ").map(parseFloat);return{translateX:i,translateY:o,scaleX:n,scaleY:a,skewX:l,skewY:r}},be=e=>e instanceof File,xe=e=>{if(!e)return[];const t=[];for(let n=0;n<e.length;n++)t.push(e[n]);return t},Me=(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 R(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 l=n[e];if("webkitGetAsEntry"in l){const e=l.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 a=l.getAsFile();a&&r.push(Promise.resolve([a]))}return(await Promise.all(r)).flat()},ve=e=>Object.entries(e).reduce((e,[t,n])=>(void 0!==n&&(e[t]=n),e),{}),Oe=({delta:e,value:t,min:n,max:r})=>{if(0===e)return null;const l=t+e;return e<0?t<=n?null:Math.max(l,n):e>0?t>=r?null:Math.min(l,r):null},ke=({value:e,min:t,max:n,velocityPxMs:r,deltaTimeMs:l,friction:a=.002,minVelocityPxMs:i=.01,emaAlpha:o=.2})=>{if(Math.abs(r)<i)return null;const s=Oe({delta:r*l,value:e,min:t,max:n});if(null===s)return null;const c=r*Math.exp(-a*l),u=o>0?r*(1-o)+c*o:c;return Math.abs(u)<i?null:{value:s,velocityPxMs:u}},Ce=(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),Pe=(e,t,{allowFallback:n=!0,invert:r=!0}={})=>{const l=r?-1:1;switch(t){case"x":return{deltaX:l*(0!==e.deltaX?e.deltaX:n?e.deltaY:0),deltaY:0};case"y":return{deltaX:0,deltaY:l*e.deltaY};default:return{deltaX:l*e.deltaX,deltaY:l*e.deltaY}}},Ee=["INPUT","SELECT","TEXTAREA","BUTTON","A"],Te=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&&(Ee.includes(e.tagName)?!ce(e)||""!==e.href:!!ue(e)||null!==n)},Xe=e=>Array.from(e.querySelectorAll("*")).filter(Te),_e=(e,t=null,{wrap:n=!0,getNextIndex:r}={})=>{const l=document.activeElement,a=t??l?.parentElement;if(!l||!a)return;const i=Xe(a);if(0===i.length)return;const o=i.indexOf(l);if(-1===o)return;let s;r?s=r(o,e,i):"next"===e?(s=o+1,s>=i.length&&(s=n?0:null)):(s=o-1,s<0&&(s=n?i.length-1:null)),null!==s&&i[s]?.focus()},ze=()=>{if("undefined"==typeof window||!window.localStorage)return!1;try{return window.localStorage.getItem("__non_existing_key__"),!0}catch{return!1}},Le=()=>{if(!ze())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}};
|
|
8025
8025
|
//# sourceMappingURL=index.mjs.map
|
|
8026
8026
|
|
|
8027
8027
|
/***/ },
|
|
@@ -13725,6 +13725,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
13725
13725
|
/* harmony export */ useHoneyDecay: () => (/* reexport safe */ _use_honey_decay__WEBPACK_IMPORTED_MODULE_13__.useHoneyDecay),
|
|
13726
13726
|
/* harmony export */ useHoneyDocumentKeyUpHandler: () => (/* reexport safe */ _use_honey_document_key_up_handler__WEBPACK_IMPORTED_MODULE_3__.useHoneyDocumentKeyUpHandler),
|
|
13727
13727
|
/* harmony export */ useHoneyDrag: () => (/* reexport safe */ _use_honey_drag__WEBPACK_IMPORTED_MODULE_2__.useHoneyDrag),
|
|
13728
|
+
/* harmony export */ useHoneyLatest: () => (/* reexport safe */ _use_honey_latest__WEBPACK_IMPORTED_MODULE_14__.useHoneyLatest),
|
|
13728
13729
|
/* harmony export */ useHoneyLayout: () => (/* reexport safe */ _use_honey_layout__WEBPACK_IMPORTED_MODULE_4__.useHoneyLayout),
|
|
13729
13730
|
/* harmony export */ useHoneyMediaQuery: () => (/* reexport safe */ _use_honey_media_query__WEBPACK_IMPORTED_MODULE_1__.useHoneyMediaQuery),
|
|
13730
13731
|
/* harmony export */ useHoneyOnChange: () => (/* reexport safe */ _use_honey_on_change__WEBPACK_IMPORTED_MODULE_0__.useHoneyOnChange),
|
|
@@ -13751,6 +13752,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
13751
13752
|
/* harmony import */ var _use_honey_raf_loop__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./use-honey-raf-loop */ "./src/hooks/use-honey-raf-loop.ts");
|
|
13752
13753
|
/* harmony import */ var _use_honey_timer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./use-honey-timer */ "./src/hooks/use-honey-timer.ts");
|
|
13753
13754
|
/* harmony import */ var _use_honey_decay__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./use-honey-decay */ "./src/hooks/use-honey-decay.ts");
|
|
13755
|
+
/* harmony import */ var _use_honey_latest__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./use-honey-latest */ "./src/hooks/use-honey-latest.ts");
|
|
13756
|
+
|
|
13754
13757
|
|
|
13755
13758
|
|
|
13756
13759
|
|
|
@@ -13783,12 +13786,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
13783
13786
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
13784
13787
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
13785
13788
|
/* harmony import */ var _react_hive_honey_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @react-hive/honey-utils */ "./node_modules/@react-hive/honey-utils/dist/index.mjs");
|
|
13786
|
-
/* harmony import */ var
|
|
13789
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ~/hooks */ "./src/hooks/index.ts");
|
|
13787
13790
|
|
|
13788
13791
|
|
|
13789
13792
|
|
|
13790
13793
|
/**
|
|
13791
|
-
* A bounded, velocity-based inertia (decay) hook built on top
|
|
13794
|
+
* A bounded, velocity-based inertia (decay) hook built on top
|
|
13795
|
+
* of {@link useHoneyRafLoop} and {@link applyInertiaStep}.
|
|
13792
13796
|
*
|
|
13793
13797
|
* This hook models **momentum-driven motion** where:
|
|
13794
13798
|
* - Motion starts with an initial velocity
|
|
@@ -13846,13 +13850,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
13846
13850
|
* );
|
|
13847
13851
|
* ```
|
|
13848
13852
|
*/
|
|
13849
|
-
const useHoneyDecay = ({ initialValue, min, max, friction = 0.002, minVelocityPxMs = 0.01, }) => {
|
|
13853
|
+
const useHoneyDecay = ({ initialValue, min, max, friction = 0.002, minVelocityPxMs = 0.01, emaAlpha = 0.2, onStop, }) => {
|
|
13850
13854
|
const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialValue);
|
|
13851
13855
|
const valueRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(initialValue);
|
|
13852
13856
|
const velocityPxMsRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);
|
|
13857
|
+
const hasActiveInertiaRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
|
|
13853
13858
|
const minRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(min);
|
|
13854
13859
|
const maxRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(max);
|
|
13860
|
+
const onStopRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_2__.useHoneyLatest)(onStop);
|
|
13855
13861
|
const frameHandler = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((deltaTimeMs, frameContext) => {
|
|
13862
|
+
// Ignore the first RAF tick
|
|
13863
|
+
if (deltaTimeMs === 0) {
|
|
13864
|
+
return;
|
|
13865
|
+
}
|
|
13856
13866
|
const result = (0,_react_hive_honey_utils__WEBPACK_IMPORTED_MODULE_1__.applyInertiaStep)({
|
|
13857
13867
|
value: valueRef.current,
|
|
13858
13868
|
velocityPxMs: velocityPxMsRef.current,
|
|
@@ -13861,50 +13871,66 @@ const useHoneyDecay = ({ initialValue, min, max, friction = 0.002, minVelocityPx
|
|
|
13861
13871
|
deltaTimeMs,
|
|
13862
13872
|
friction,
|
|
13863
13873
|
minVelocityPxMs,
|
|
13874
|
+
emaAlpha,
|
|
13864
13875
|
});
|
|
13865
|
-
if (
|
|
13876
|
+
if (result === null) {
|
|
13866
13877
|
velocityPxMsRef.current = 0;
|
|
13878
|
+
if (hasActiveInertiaRef.current) {
|
|
13879
|
+
hasActiveInertiaRef.current = false;
|
|
13880
|
+
onStopRef.current?.();
|
|
13881
|
+
}
|
|
13867
13882
|
frameContext.stop();
|
|
13868
13883
|
return;
|
|
13869
13884
|
}
|
|
13885
|
+
hasActiveInertiaRef.current = true;
|
|
13870
13886
|
valueRef.current = result.value;
|
|
13871
13887
|
velocityPxMsRef.current = result.velocityPxMs;
|
|
13872
13888
|
setValue(result.value);
|
|
13873
|
-
}, [friction, minVelocityPxMs]);
|
|
13874
|
-
const rafLoop = (0,
|
|
13889
|
+
}, [friction, minVelocityPxMs, emaAlpha]);
|
|
13890
|
+
const rafLoop = (0,_hooks__WEBPACK_IMPORTED_MODULE_2__.useHoneyRafLoop)(frameHandler);
|
|
13875
13891
|
const setBounds = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nextMin, nextMax) => {
|
|
13876
13892
|
minRef.current = nextMin;
|
|
13877
13893
|
maxRef.current = nextMax;
|
|
13878
|
-
|
|
13879
|
-
|
|
13880
|
-
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
13894
|
+
const currentValue = valueRef.current;
|
|
13895
|
+
if (currentValue < nextMin || currentValue > nextMax) {
|
|
13896
|
+
const nextValue = Math.min(Math.max(currentValue, nextMin), nextMax);
|
|
13897
|
+
valueRef.current = nextValue;
|
|
13898
|
+
velocityPxMsRef.current = 0;
|
|
13899
|
+
setValue(nextValue);
|
|
13900
|
+
if (hasActiveInertiaRef.current) {
|
|
13901
|
+
hasActiveInertiaRef.current = false;
|
|
13902
|
+
onStopRef.current?.();
|
|
13903
|
+
}
|
|
13904
|
+
rafLoop.stop();
|
|
13885
13905
|
}
|
|
13886
|
-
}, []);
|
|
13906
|
+
}, [rafLoop.stop]);
|
|
13887
13907
|
const start = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((velocityPxMs) => {
|
|
13888
13908
|
velocityPxMsRef.current = velocityPxMs;
|
|
13909
|
+
hasActiveInertiaRef.current = true;
|
|
13910
|
+
rafLoop.start();
|
|
13911
|
+
}, [rafLoop.start]);
|
|
13912
|
+
const startFrom = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nextValue, velocityPxMs) => {
|
|
13913
|
+
valueRef.current = nextValue;
|
|
13914
|
+
velocityPxMsRef.current = velocityPxMs;
|
|
13915
|
+
hasActiveInertiaRef.current = true;
|
|
13916
|
+
setValue(nextValue);
|
|
13889
13917
|
rafLoop.start();
|
|
13890
13918
|
}, [rafLoop.start]);
|
|
13891
13919
|
const stop = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
13920
|
+
if (hasActiveInertiaRef.current) {
|
|
13921
|
+
hasActiveInertiaRef.current = false;
|
|
13922
|
+
onStopRef.current?.();
|
|
13923
|
+
}
|
|
13892
13924
|
velocityPxMsRef.current = 0;
|
|
13893
13925
|
rafLoop.stop();
|
|
13894
13926
|
}, [rafLoop.stop]);
|
|
13895
|
-
const snapTo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nextValue) => {
|
|
13896
|
-
velocityPxMsRef.current = 0;
|
|
13897
|
-
valueRef.current = nextValue;
|
|
13898
|
-
rafLoop.stop();
|
|
13899
|
-
setValue(nextValue);
|
|
13900
|
-
}, [rafLoop.stop]);
|
|
13901
13927
|
return {
|
|
13902
13928
|
value,
|
|
13903
13929
|
isRunning: rafLoop.isRunning,
|
|
13904
13930
|
setBounds,
|
|
13905
13931
|
start,
|
|
13932
|
+
startFrom,
|
|
13906
13933
|
stop,
|
|
13907
|
-
snapTo,
|
|
13908
13934
|
};
|
|
13909
13935
|
};
|
|
13910
13936
|
|
|
@@ -14128,6 +14154,40 @@ const useHoneyDrag = (draggableElementRef, { skipOnEndDragWhenStopped = false, e
|
|
|
14128
14154
|
};
|
|
14129
14155
|
|
|
14130
14156
|
|
|
14157
|
+
/***/ },
|
|
14158
|
+
|
|
14159
|
+
/***/ "./src/hooks/use-honey-latest.ts"
|
|
14160
|
+
/*!***************************************!*\
|
|
14161
|
+
!*** ./src/hooks/use-honey-latest.ts ***!
|
|
14162
|
+
\***************************************/
|
|
14163
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
14164
|
+
|
|
14165
|
+
"use strict";
|
|
14166
|
+
__webpack_require__.r(__webpack_exports__);
|
|
14167
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14168
|
+
/* harmony export */ useHoneyLatest: () => (/* binding */ useHoneyLatest)
|
|
14169
|
+
/* harmony export */ });
|
|
14170
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
14171
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
14172
|
+
|
|
14173
|
+
/**
|
|
14174
|
+
* Stores the latest value in a stable ref.
|
|
14175
|
+
*
|
|
14176
|
+
* Guarantees that:
|
|
14177
|
+
* - `ref.current` always points to the latest value
|
|
14178
|
+
* - the ref object identity never changes
|
|
14179
|
+
*
|
|
14180
|
+
* Overload behavior:
|
|
14181
|
+
* - If a non-optional value is provided, `.current` is non-optional
|
|
14182
|
+
* - If an optional value is provided, `.current` is optional
|
|
14183
|
+
*/
|
|
14184
|
+
const useHoneyLatest = (value) => {
|
|
14185
|
+
const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(value);
|
|
14186
|
+
ref.current = value;
|
|
14187
|
+
return ref;
|
|
14188
|
+
};
|
|
14189
|
+
|
|
14190
|
+
|
|
14131
14191
|
/***/ },
|
|
14132
14192
|
|
|
14133
14193
|
/***/ "./src/hooks/use-honey-layout.ts"
|
|
@@ -14344,6 +14404,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14344
14404
|
/* harmony export */ });
|
|
14345
14405
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
14346
14406
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
14407
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ~/constants */ "./src/constants.ts");
|
|
14408
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ~/hooks */ "./src/hooks/index.ts");
|
|
14409
|
+
|
|
14410
|
+
|
|
14347
14411
|
|
|
14348
14412
|
/**
|
|
14349
14413
|
* A hook for running a controlled `requestAnimationFrame` loop.
|
|
@@ -14401,11 +14465,25 @@ const useHoneyRafLoop = (onFrame, { autoStart = false, resumeOnVisibility = fals
|
|
|
14401
14465
|
onError, } = {}) => {
|
|
14402
14466
|
const rafIdRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
14403
14467
|
const lastTimeMsRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
14404
|
-
const onFrameRef = (0,
|
|
14405
|
-
// Always keep the latest callback without restarting RAF
|
|
14406
|
-
onFrameRef.current = onFrame;
|
|
14468
|
+
const onFrameRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_2__.useHoneyLatest)(onFrame);
|
|
14407
14469
|
const [isRunning, setIsRunning] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
14470
|
+
const isRunningRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
|
|
14471
|
+
const stop = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
14472
|
+
if (!isRunningRef.current) {
|
|
14473
|
+
return;
|
|
14474
|
+
}
|
|
14475
|
+
isRunningRef.current = false;
|
|
14476
|
+
if (rafIdRef.current !== null) {
|
|
14477
|
+
cancelAnimationFrame(rafIdRef.current);
|
|
14478
|
+
rafIdRef.current = null;
|
|
14479
|
+
}
|
|
14480
|
+
lastTimeMsRef.current = null;
|
|
14481
|
+
setIsRunning(false);
|
|
14482
|
+
}, []);
|
|
14408
14483
|
const loop = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(timeMs => {
|
|
14484
|
+
if (!isRunningRef.current) {
|
|
14485
|
+
return;
|
|
14486
|
+
}
|
|
14409
14487
|
if (lastTimeMsRef.current === null) {
|
|
14410
14488
|
lastTimeMsRef.current = timeMs;
|
|
14411
14489
|
}
|
|
@@ -14419,36 +14497,33 @@ onError, } = {}) => {
|
|
|
14419
14497
|
onFrameRef.current(deltaTimeMs, {
|
|
14420
14498
|
stop,
|
|
14421
14499
|
});
|
|
14422
|
-
|
|
14500
|
+
if (isRunningRef.current) {
|
|
14501
|
+
rafIdRef.current = requestAnimationFrame(loop);
|
|
14502
|
+
}
|
|
14423
14503
|
}
|
|
14424
14504
|
catch (e) {
|
|
14505
|
+
if (_constants__WEBPACK_IMPORTED_MODULE_1__.__DEV__) {
|
|
14506
|
+
console.error(e);
|
|
14507
|
+
}
|
|
14425
14508
|
stop();
|
|
14426
14509
|
onError?.(e);
|
|
14427
14510
|
}
|
|
14428
|
-
}, [maxDeltaMs, onError]);
|
|
14511
|
+
}, [maxDeltaMs, stop, onError]);
|
|
14429
14512
|
const start = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
14430
|
-
if (
|
|
14513
|
+
if (isRunningRef.current) {
|
|
14431
14514
|
return;
|
|
14432
14515
|
}
|
|
14433
14516
|
lastTimeMsRef.current = null;
|
|
14517
|
+
isRunningRef.current = true;
|
|
14434
14518
|
setIsRunning(true);
|
|
14435
14519
|
rafIdRef.current = requestAnimationFrame(loop);
|
|
14436
14520
|
}, [loop]);
|
|
14437
|
-
const stop = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
14438
|
-
if (rafIdRef.current === null) {
|
|
14439
|
-
return;
|
|
14440
|
-
}
|
|
14441
|
-
cancelAnimationFrame(rafIdRef.current);
|
|
14442
|
-
rafIdRef.current = null;
|
|
14443
|
-
lastTimeMsRef.current = null;
|
|
14444
|
-
setIsRunning(false);
|
|
14445
|
-
}, []);
|
|
14446
14521
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
14447
14522
|
if (autoStart) {
|
|
14448
14523
|
start();
|
|
14449
14524
|
}
|
|
14450
14525
|
return stop;
|
|
14451
|
-
}, [autoStart
|
|
14526
|
+
}, [autoStart]);
|
|
14452
14527
|
// Pause when a tab is hidden (important for mobile)
|
|
14453
14528
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
14454
14529
|
const onVisibilityChange = () => {
|
|
@@ -14792,7 +14867,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14792
14867
|
/* harmony export */ });
|
|
14793
14868
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
14794
14869
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
14795
|
-
/* harmony import */ var
|
|
14870
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ~/hooks */ "./src/hooks/index.ts");
|
|
14796
14871
|
|
|
14797
14872
|
|
|
14798
14873
|
/**
|
|
@@ -14823,10 +14898,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14823
14898
|
*/
|
|
14824
14899
|
const useHoneyTimer = ({ initialTimeMs, targetTimeMs = 0, mode = 'countdown', autoStart = false, onEnd, }) => {
|
|
14825
14900
|
const [timeMs, setTimeMs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialTimeMs);
|
|
14826
|
-
const timeRef = (0,
|
|
14827
|
-
|
|
14828
|
-
const onEndRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(onEnd);
|
|
14829
|
-
onEndRef.current = onEnd;
|
|
14901
|
+
const timeRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useHoneyLatest)(timeMs);
|
|
14902
|
+
const onEndRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useHoneyLatest)(onEnd);
|
|
14830
14903
|
/**
|
|
14831
14904
|
* RAF frame handler responsible for advancing the timer.
|
|
14832
14905
|
*
|
|
@@ -14854,7 +14927,7 @@ const useHoneyTimer = ({ initialTimeMs, targetTimeMs = 0, mode = 'countdown', au
|
|
|
14854
14927
|
onEndRef.current?.();
|
|
14855
14928
|
}
|
|
14856
14929
|
}, [mode, targetTimeMs]);
|
|
14857
|
-
const rafLoop = (0,
|
|
14930
|
+
const rafLoop = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useHoneyRafLoop)(frameHandler);
|
|
14858
14931
|
const start = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
14859
14932
|
timeRef.current = initialTimeMs;
|
|
14860
14933
|
setTimeMs(initialTimeMs);
|
|
@@ -14877,7 +14950,7 @@ const useHoneyTimer = ({ initialTimeMs, targetTimeMs = 0, mode = 'countdown', au
|
|
|
14877
14950
|
if (autoStart) {
|
|
14878
14951
|
start();
|
|
14879
14952
|
}
|
|
14880
|
-
}, [autoStart
|
|
14953
|
+
}, [autoStart]);
|
|
14881
14954
|
return {
|
|
14882
14955
|
timeMs,
|
|
14883
14956
|
isRunning: rafLoop.isRunning,
|
|
@@ -15673,6 +15746,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
15673
15746
|
/* harmony export */ useHoneyDocumentKeyUpHandler: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyDocumentKeyUpHandler),
|
|
15674
15747
|
/* harmony export */ useHoneyDrag: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyDrag),
|
|
15675
15748
|
/* harmony export */ useHoneyGridContext: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_3__.useHoneyGridContext),
|
|
15749
|
+
/* harmony export */ useHoneyLatest: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyLatest),
|
|
15676
15750
|
/* harmony export */ useHoneyLayout: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyLayout),
|
|
15677
15751
|
/* harmony export */ useHoneyMediaQuery: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyMediaQuery),
|
|
15678
15752
|
/* harmony export */ useHoneyOnChange: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_5__.useHoneyOnChange),
|