@moontra/moonui 6.1.0 → 6.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/chunk-VXDFZPDA.global.js +33 -0
- package/dist/chunk-VXDFZPDA.global.js.map +1 -0
- package/dist/hooks/index.d.mts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.global.js +8 -8
- package/dist/hooks/index.global.js.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +1 -1
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.global.js +792 -152
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +190 -93
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +187 -90
- package/dist/index.mjs.map +1 -1
- package/dist/lib/theme.d.mts +1 -1
- package/dist/lib/theme.d.ts +1 -1
- package/dist/lib/theme.global.js +20 -7
- package/dist/lib/theme.global.js.map +1 -1
- package/dist/lib/theme.js +11 -6
- package/dist/lib/theme.js.map +1 -1
- package/dist/lib/theme.mjs +11 -6
- package/dist/lib/theme.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/ui/__tests__/input.test.tsx +4 -1
- package/src/components/ui/button.tsx +12 -1
- package/src/components/ui/input.tsx +15 -4
- package/src/components/ui/select.tsx +12 -1
- package/src/components/ui/textarea.tsx +15 -4
- package/dist/chunk-2EN7SB2G.global.js +0 -33
- package/dist/chunk-2EN7SB2G.global.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/** @license MoonUI v1.0.0 - MIT License - https://moonui.dev */
|
|
4
|
+
var B=Object.create;var $=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var me=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var G=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of H(t))!Y.call(e,o)&&o!==r&&$(e,o,{get:()=>t[o],enumerable:!(n=z(t,o))||n.enumerable});return e};var he=(e,t,r)=>(r=e!=null?B(W(e)):{},G(t||!e||!e.__esModule?$(r,"default",{value:e,enumerable:!0}):r,e));var b=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var Se=(e,t,r)=>(b(e,t,"read from private field"),r?r.call(e):t.get(e)),Ee=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},ke=(e,t,r,n)=>(b(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var V=d(u=>{"use strict";var y=Symbol.for("react.element"),J=Symbol.for("react.portal"),K=Symbol.for("react.fragment"),Q=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),Z=Symbol.for("react.provider"),ee=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),re=Symbol.for("react.suspense"),ne=Symbol.for("react.memo"),oe=Symbol.for("react.lazy"),j=Symbol.iterator;function ue(e){return e===null||typeof e!="object"?null:(e=j&&e[j]||e["@@iterator"],typeof e=="function"?e:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},P=Object.assign,g={};function p(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||x}p.prototype.isReactComponent={};p.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function I(){}I.prototype=p.prototype;function E(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||x}var k=E.prototype=new I;k.constructor=E;P(k,p.prototype);k.isPureReactComponent=!0;var O=Array.isArray,q=Object.prototype.hasOwnProperty,R={current:null},N={key:!0,ref:!0,__self:!0,__source:!0};function D(e,t,r){var n,o={},i=null,s=null;if(t!=null)for(n in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(i=""+t.key),t)q.call(t,n)&&!N.hasOwnProperty(n)&&(o[n]=t[n]);var f=arguments.length-2;if(f===1)o.children=r;else if(1<f){for(var c=Array(f),a=0;a<f;a++)c[a]=arguments[a+2];o.children=c}if(e&&e.defaultProps)for(n in f=e.defaultProps,f)o[n]===void 0&&(o[n]=f[n]);return{$$typeof:y,type:e,key:i,ref:s,props:o,_owner:R.current}}function ie(e,t){return{$$typeof:y,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function w(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}function se(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var C=/\/+/g;function S(e,t){return typeof e=="object"&&e!==null&&e.key!=null?se(""+e.key):t.toString(36)}function v(e,t,r,n,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(i){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case y:case J:s=!0}}if(s)return s=e,o=o(s),e=n===""?"."+S(s,0):n,O(o)?(r="",e!=null&&(r=e.replace(C,"$&/")+"/"),v(o,t,r,"",function(a){return a})):o!=null&&(w(o)&&(o=ie(o,r+(!o.key||s&&s.key===o.key?"":(""+o.key).replace(C,"$&/")+"/")+e)),t.push(o)),1;if(s=0,n=n===""?".":n+":",O(e))for(var f=0;f<e.length;f++){i=e[f];var c=n+S(i,f);s+=v(i,t,r,c,o)}else if(c=ue(e),typeof c=="function")for(e=c.call(e),f=0;!(i=e.next()).done;)i=i.value,c=n+S(i,f++),s+=v(i,t,r,c,o);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function _(e,t,r){if(e==null)return e;var n=[],o=0;return v(e,n,"","",function(i){return t.call(r,i,o++)}),n}function ce(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var l={current:null},m={transition:null},fe={ReactCurrentDispatcher:l,ReactCurrentBatchConfig:m,ReactCurrentOwner:R};function T(){throw Error("act(...) is not supported in production builds of React.")}u.Children={map:_,forEach:function(e,t,r){_(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return _(e,function(){t++}),t},toArray:function(e){return _(e,function(t){return t})||[]},only:function(e){if(!w(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};u.Component=p;u.Fragment=K;u.Profiler=X;u.PureComponent=E;u.StrictMode=Q;u.Suspense=re;u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=fe;u.act=T;u.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=P({},e.props),o=e.key,i=e.ref,s=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,s=R.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var f=e.type.defaultProps;for(c in t)q.call(t,c)&&!N.hasOwnProperty(c)&&(n[c]=t[c]===void 0&&f!==void 0?f[c]:t[c])}var c=arguments.length-2;if(c===1)n.children=r;else if(1<c){f=Array(c);for(var a=0;a<c;a++)f[a]=arguments[a+2];n.children=f}return{$$typeof:y,type:e.type,key:o,ref:i,props:n,_owner:s}};u.createContext=function(e){return e={$$typeof:ee,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:Z,_context:e},e.Consumer=e};u.createElement=D;u.createFactory=function(e){var t=D.bind(null,e);return t.type=e,t};u.createRef=function(){return{current:null}};u.forwardRef=function(e){return{$$typeof:te,render:e}};u.isValidElement=w;u.lazy=function(e){return{$$typeof:oe,_payload:{_status:-1,_result:e},_init:ce}};u.memo=function(e,t){return{$$typeof:ne,type:e,compare:t===void 0?null:t}};u.startTransition=function(e){var t=m.transition;m.transition={};try{e()}finally{m.transition=t}};u.unstable_act=T;u.useCallback=function(e,t){return l.current.useCallback(e,t)};u.useContext=function(e){return l.current.useContext(e)};u.useDebugValue=function(){};u.useDeferredValue=function(e){return l.current.useDeferredValue(e)};u.useEffect=function(e,t){return l.current.useEffect(e,t)};u.useId=function(){return l.current.useId()};u.useImperativeHandle=function(e,t,r){return l.current.useImperativeHandle(e,t,r)};u.useInsertionEffect=function(e,t){return l.current.useInsertionEffect(e,t)};u.useLayoutEffect=function(e,t){return l.current.useLayoutEffect(e,t)};u.useMemo=function(e,t){return l.current.useMemo(e,t)};u.useReducer=function(e,t,r){return l.current.useReducer(e,t,r)};u.useRef=function(e){return l.current.useRef(e)};u.useState=function(e){return l.current.useState(e)};u.useSyncExternalStore=function(e,t,r){return l.current.useSyncExternalStore(e,t,r)};u.useTransition=function(){return l.current.useTransition()};u.version="18.3.1"});var U=d(($e,L)=>{"use strict";L.exports=V()});var F=d(h=>{"use strict";var le=U(),ae=Symbol.for("react.element"),pe=Symbol.for("react.fragment"),ye=Object.prototype.hasOwnProperty,de=le.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,_e={key:!0,ref:!0,__self:!0,__source:!0};function A(e,t,r){var n,o={},i=null,s=null;r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(s=t.ref);for(n in t)ye.call(t,n)&&!_e.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:ae,type:e,key:i,ref:s,props:o,_owner:de.current}}h.Fragment=pe;h.jsx=A;h.jsxs=A});var ve=d((je,M)=>{"use strict";M.exports=F()});export{me as a,d as b,he as c,Se as d,Ee as e,ke as f,U as g,ve as h};
|
|
5
|
+
/*! Bundled license information:
|
|
6
|
+
|
|
7
|
+
react/cjs/react.production.min.js:
|
|
8
|
+
(**
|
|
9
|
+
* @license React
|
|
10
|
+
* react.production.min.js
|
|
11
|
+
*
|
|
12
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the MIT license found in the
|
|
15
|
+
* LICENSE file in the root directory of this source tree.
|
|
16
|
+
*)
|
|
17
|
+
|
|
18
|
+
react/cjs/react-jsx-runtime.production.min.js:
|
|
19
|
+
(**
|
|
20
|
+
* @license React
|
|
21
|
+
* react-jsx-runtime.production.min.js
|
|
22
|
+
*
|
|
23
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the MIT license found in the
|
|
26
|
+
* LICENSE file in the root directory of this source tree.
|
|
27
|
+
*)
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
if (typeof window !== 'undefined' && !window.React) {
|
|
31
|
+
console.warn('MoonUI: React not found. Please include React and ReactDOM before MoonUI.');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=chunk-VXDFZPDA.global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n"],"mappings":"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","names":["require_react_production_min","__commonJSMin","exports","l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","require_react","__commonJSMin","exports","module","require_react_jsx_runtime_production_min","__commonJSMin","exports","f","k","l","m","n","p","q","c","a","g","b","d","e","h","require_jsx_runtime","__commonJSMin","exports","module"]}
|
package/dist/hooks/index.d.mts
CHANGED
|
@@ -12,4 +12,4 @@ declare function useIntersectionObserver({ threshold, root, rootMargin, freezeOn
|
|
|
12
12
|
|
|
13
13
|
declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((val: T) => T)) => void];
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { UseIntersectionObserverOptions, useIntersectionObserver, useLocalStorage };
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -12,4 +12,4 @@ declare function useIntersectionObserver({ threshold, root, rootMargin, freezeOn
|
|
|
12
12
|
|
|
13
13
|
declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((val: T) => T)) => void];
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { UseIntersectionObserverOptions, useIntersectionObserver, useLocalStorage };
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
/** @license MoonUI v1.0.0 - MIT License - https://moonui.dev */
|
|
4
|
-
"use client";import{c as u,g as p,h as b}from"../chunk-
|
|
4
|
+
"use client";import{c as u,g as p,h as b}from"../chunk-VXDFZPDA.global.js";var n=u(p()),O=u(b());function E({threshold:t=0,root:a=null,rootMargin:i="0%",freezeOnceVisible:o=!1,initialIsIntersecting:d=!1,onChange:e}={}){let[r,s]=n.useState(null),[c,m]=n.useState(d),f=n.useRef(!1);return n.useEffect(()=>{if(!r||!window.IntersectionObserver||f.current&&o)return;let w=new IntersectionObserver(([I])=>{if(f.current)return;let v=I.isIntersecting;m(v),e?.(v,I),v&&o&&(f.current=!0)},{threshold:t,root:a,rootMargin:i});return w.observe(r),()=>w.disconnect()},[r,t,a,i,o,e]),{ref:s,isIntersecting:c}}var l=u(p()),g="moonui:local-storage";function S(t,a){let[i,o]=(0,l.useState)(()=>{if(typeof window>"u")return a;try{let e=window.localStorage.getItem(t);return e?JSON.parse(e):a}catch(e){return console.error(`Error reading localStorage key "${t}":`,e),a}}),d=e=>{try{let r=e instanceof Function?e(i):e;o(r),typeof window<"u"&&(r===void 0?window.localStorage.removeItem(t):window.localStorage.setItem(t,JSON.stringify(r)),window.dispatchEvent(new CustomEvent(g,{detail:{key:t,value:r}})))}catch(r){console.error(`Error setting localStorage key "${t}":`,r)}};return(0,l.useEffect)(()=>{if(typeof window>"u")return;let e=s=>{if(s.key===t&&s.newValue!==null)try{o(JSON.parse(s.newValue))}catch(c){console.error(`Error parsing localStorage value for key "${t}":`,c)}},r=s=>{let c=s.detail;c&&c.key===t&&o(c.value)};return window.addEventListener("storage",e),window.addEventListener(g,r),()=>{window.removeEventListener("storage",e),window.removeEventListener(g,r)}},[t]),[i,d]}export{E as useIntersectionObserver,S as useLocalStorage};
|
|
5
5
|
|
|
6
6
|
if (typeof window !== 'undefined' && !window.React) {
|
|
7
7
|
console.warn('MoonUI: React not found. Please include React and ReactDOM before MoonUI.');
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=index.global.js.
|
|
9
|
+
//# sourceMappingURL=index.global.js.mape,t,r){this.props=e,this.context=t,this.refs=A,this.updater=r||M}var L=x.prototype=new F;L.constructor=x;q(L,d.prototype);L.isPureReactComponent=!0;var V=Array.isArray,z=Object.prototype.hasOwnProperty,k={current:null},B={key:!0,ref:!0,__self:!0,__source:!0};function J(e,t,r){var n,o={},u=null,c=null;if(t!=null)for(n in t.ref!==void 0&&(c=t.ref),t.key!==void 0&&(u=""+t.key),t)z.call(t,n)&&!B.hasOwnProperty(n)&&(o[n]=t[n]);var l=arguments.length-2;if(l===1)o.children=r;else if(1<l){for(var i=Array(l),a=0;a<l;a++)i[a]=arguments[a+2];o.children=i}if(e&&e.defaultProps)for(n in l=e.defaultProps,l)o[n]===void 0&&(o[n]=l[n]);return{$$typeof:y,type:e,key:u,ref:c,props:o,_owner:k.current}}function _e(e,t){return{$$typeof:y,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function C(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}function we(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var D=/\/+/g;function R(e,t){return typeof e=="object"&&e!==null&&e.key!=null?we(""+e.key):t.toString(36)}function w(e,t,r,n,o){var u=typeof e;(u==="undefined"||u==="boolean")&&(e=null);var c=!1;if(e===null)c=!0;else switch(u){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case y:case ce:c=!0}}if(c)return c=e,o=o(c),e=n===""?"."+R(c,0):n,V(o)?(r="",e!=null&&(r=e.replace(D,"$&/")+"/"),w(o,t,r,"",function(a){return a})):o!=null&&(C(o)&&(o=_e(o,r+(!o.key||c&&c.key===o.key?"":(""+o.key).replace(D,"$&/")+"/")+e)),t.push(o)),1;if(c=0,n=n===""?".":n+":",V(e))for(var l=0;l<e.length;l++){u=e[l];var i=n+R(u,l);c+=w(u,t,r,i,o)}else if(i=he(e),typeof i=="function")for(e=i.call(e),l=0;!(u=e.next()).done;)u=u.value,i=n+R(u,l++),c+=w(u,t,r,i,o);else if(u==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function _(e,t,r){if(e==null)return e;var n=[],o=0;return w(e,n,"","",function(u){return t.call(r,u,o++)}),n}function Se(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var f={current:null},S={transition:null},Ee={ReactCurrentDispatcher:f,ReactCurrentBatchConfig:S,ReactCurrentOwner:k};function H(){throw Error("act(...) is not supported in production builds of React.")}s.Children={map:_,forEach:function(e,t,r){_(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return _(e,function(){t++}),t},toArray:function(e){return _(e,function(t){return t})||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};s.Component=d;s.Fragment=ie;s.Profiler=fe;s.PureComponent=x;s.StrictMode=le;s.Suspense=ye;s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Ee;s.act=H;s.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=q({},e.props),o=e.key,u=e.ref,c=e._owner;if(t!=null){if(t.ref!==void 0&&(u=t.ref,c=k.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(i in t)z.call(t,i)&&!B.hasOwnProperty(i)&&(n[i]=t[i]===void 0&&l!==void 0?l[i]:t[i])}var i=arguments.length-2;if(i===1)n.children=r;else if(1<i){l=Array(i);for(var a=0;a<i;a++)l[a]=arguments[a+2];n.children=l}return{$$typeof:y,type:e.type,key:o,ref:u,props:n,_owner:c}};s.createContext=function(e){return e={$$typeof:pe,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:ae,_context:e},e.Consumer=e};s.createElement=J;s.createFactory=function(e){var t=J.bind(null,e);return t.type=e,t};s.createRef=function(){return{current:null}};s.forwardRef=function(e){return{$$typeof:de,render:e}};s.isValidElement=C;s.lazy=function(e){return{$$typeof:me,_payload:{_status:-1,_result:e},_init:Se}};s.memo=function(e,t){return{$$typeof:ve,type:e,compare:t===void 0?null:t}};s.startTransition=function(e){var t=S.transition;S.transition={};try{e()}finally{S.transition=t}};s.unstable_act=H;s.useCallback=function(e,t){return f.current.useCallback(e,t)};s.useContext=function(e){return f.current.useContext(e)};s.useDebugValue=function(){};s.useDeferredValue=function(e){return f.current.useDeferredValue(e)};s.useEffect=function(e,t){return f.current.useEffect(e,t)};s.useId=function(){return f.current.useId()};s.useImperativeHandle=function(e,t,r){return f.current.useImperativeHandle(e,t,r)};s.useInsertionEffect=function(e,t){return f.current.useInsertionEffect(e,t)};s.useLayoutEffect=function(e,t){return f.current.useLayoutEffect(e,t)};s.useMemo=function(e,t){return f.current.useMemo(e,t)};s.useReducer=function(e,t,r){return f.current.useReducer(e,t,r)};s.useRef=function(e){return f.current.useRef(e)};s.useState=function(e){return f.current.useState(e)};s.useSyncExternalStore=function(e,t,r){return f.current.useSyncExternalStore(e,t,r)};s.useTransition=function(){return f.current.useTransition()};s.version="18.3.1"});var E=m((Te,Y)=>{"use strict";Y.exports=W()});var K=m(b=>{"use strict";var be=E(),ge=Symbol.for("react.element"),Oe=Symbol.for("react.fragment"),Ie=Object.prototype.hasOwnProperty,Re=be.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,xe={key:!0,ref:!0,__self:!0,__source:!0};function G(e,t,r){var n,o={},u=null,c=null;r!==void 0&&(u=""+r),t.key!==void 0&&(u=""+t.key),t.ref!==void 0&&(c=t.ref);for(n in t)Ie.call(t,n)&&!xe.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:ge,type:e,key:u,ref:c,props:o,_owner:Re.current}}b.Fragment=Oe;b.jsx=G;b.jsxs=G});var $=m((Ne,Q)=>{"use strict";Q.exports=K()});var ke={};ue(ke,{useIntersectionObserver:()=>X,useLocalStorage:()=>Z});module.exports=se(ke);var p=h(E()),Le=h($());function X({threshold:e=0,root:t=null,rootMargin:r="0%",freezeOnceVisible:n=!1,initialIsIntersecting:o=!1,onChange:u}={}){let[c,l]=p.useState(null),[i,a]=p.useState(o),O=p.useRef(!1);return p.useEffect(()=>{if(!c||!window.IntersectionObserver||O.current&&n)return;let j=new IntersectionObserver(([N])=>{if(O.current)return;let I=N.isIntersecting;a(I),u?.(I,N),I&&n&&(O.current=!0)},{threshold:e,root:t,rootMargin:r});return j.observe(c),()=>j.disconnect()},[c,e,t,r,n,u]),{ref:l,isIntersecting:i}}var g=h(E()),T="moonui:local-storage";function Z(e,t){let[r,n]=(0,g.useState)(()=>{if(typeof window>"u")return t;try{let u=window.localStorage.getItem(e);return u?JSON.parse(u):t}catch(u){return console.error(`Error reading localStorage key "${e}":`,u),t}}),o=u=>{try{let c=u instanceof Function?u(r):u;n(c),typeof window<"u"&&(c===void 0?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(c)),window.dispatchEvent(new CustomEvent(T,{detail:{key:e,value:c}})))}catch(c){console.error(`Error setting localStorage key "${e}":`,c)}};return(0,g.useEffect)(()=>{if(typeof window>"u")return;let u=l=>{if(l.key===e&&l.newValue!==null)try{n(JSON.parse(l.newValue))}catch(i){console.error(`Error parsing localStorage value for key "${e}":`,i)}},c=l=>{let i=l.detail;i&&i.key===e&&n(i.value)};return window.addEventListener("storage",u),window.addEventListener(T,c),()=>{window.removeEventListener("storage",u),window.removeEventListener(T,c)}},[e]),[r,o]}
|
|
10
10
|
/*! Bundled license information:
|
|
11
11
|
|
|
12
|
-
react/cjs/react.production.js:
|
|
12
|
+
react/cjs/react.production.min.js:
|
|
13
13
|
(**
|
|
14
14
|
* @license React
|
|
15
|
-
* react.production.js
|
|
15
|
+
* react.production.min.js
|
|
16
16
|
*
|
|
17
|
-
* Copyright (c)
|
|
17
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the MIT license found in the
|
|
20
20
|
* LICENSE file in the root directory of this source tree.
|
|
21
21
|
*)
|
|
22
22
|
|
|
23
|
-
react/cjs/react-jsx-runtime.production.js:
|
|
23
|
+
react/cjs/react-jsx-runtime.production.min.js:
|
|
24
24
|
(**
|
|
25
25
|
* @license React
|
|
26
|
-
* react-jsx-runtime.production.js
|
|
26
|
+
* react-jsx-runtime.production.min.js
|
|
27
27
|
*
|
|
28
|
-
* Copyright (c)
|
|
28
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
29
29
|
*
|
|
30
30
|
* This source code is licensed under the MIT license found in the
|
|
31
31
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"],"mappings":";2EAEA,IAAAA,EAAuB,OAkEPC,EAAA,OA1DT,SAASC,EAAwB,CACtC,UAAAC,EAAY,EACZ,KAAAC,EAAO,KACP,WAAAC,EAAa,KACb,kBAAAC,EAAoB,GACpB,sBAAAC,EAAwB,GACxB,SAAAC,CACF,EAAoC,CAAC,EAAG,CACtC,GAAM,CAACC,EAAKC,CAAM,EAAU,WAAyB,IAAI,EACnD,CAACC,EAAgBC,CAAiB,EAAU,WAASL,CAAqB,EAC1EM,EAAe,SAAO,EAAK,EAEjC,OAAM,YAAU,IAAM,CACpB,GAAI,CAACJ,GAAO,CAAC,OAAO,sBAAyBI,EAAO,SAAWP,EAC7D,OAGF,IAAMQ,EAAW,IAAI,qBACnB,CAAC,CAACC,CAAK,IAAM,CAMX,GAAIF,EAAO,QACT,OAGF,IAAMG,EAAwBD,EAAM,eACpCH,EAAkBI,CAAqB,EACvCR,IAAWQ,EAAuBD,CAAK,EAEnCC,GAAyBV,IAC3BO,EAAO,QAAU,GAErB,EACA,CAAE,UAAAV,EAAW,KAAAC,EAAM,WAAAC,CAAW,CAChC,EAEA,OAAAS,EAAS,QAAQL,CAAG,EAEb,IAAMK,EAAS,WAAW,CACnC,EAAG,CAACL,EAAKN,EAAWC,EAAMC,EAAYC,EAAmBE,CAAQ,CAAC,EAE3D,CAAE,IAAKE,EAAQ,eAAAC,CAAe,CACvC,CCvDA,IAAAM,EAAoC,OAU9BC,EAAmB,uBAQlB,SAASC,EACdC,EACAC,EAC2C,CAG3C,GAAM,CAACC,EAAaC,CAAc,KAAI,YAAY,IAAM,CACtD,GAAI,OAAO,OAAW,IACpB,OAAOF,EAGT,GAAI,CAEF,IAAMG,EAAO,OAAO,aAAa,QAAQJ,CAAG,EAE5C,OAAOI,EAAO,KAAK,MAAMA,CAAI,EAAIH,CACnC,OAASI,EAAO,CAEd,eAAQ,MAAM,mCAAmCL,CAAG,KAAMK,CAAK,EACxDJ,CACT,CACF,CAAC,EAGKK,EAAYC,GAA+B,CAC/C,GAAI,CAEF,IAAMC,EAAeD,aAAiB,SAAWA,EAAML,CAAW,EAAIK,EAGtEJ,EAAeK,CAAY,EAGvB,OAAO,OAAW,MAChBA,IAAiB,OACnB,OAAO,aAAa,WAAWR,CAAG,EAElC,OAAO,aAAa,QAAQA,EAAK,KAAK,UAAUQ,CAAY,CAAC,EAI/D,OAAO,cACL,IAAI,YAA6BV,EAAkB,CACjD,OAAQ,CAAE,IAAAE,EAAK,MAAOQ,CAAa,CACrC,CAAC,CACH,EAEJ,OAASH,EAAO,CAEd,QAAQ,MAAM,mCAAmCL,CAAG,KAAMK,CAAK,CACjE,CACF,EAGA,sBAAU,IAAM,CACd,GAAI,OAAO,OAAW,IACpB,OAGF,IAAMI,EAAuBC,GAAoB,CAC/C,GAAIA,EAAE,MAAQV,GAAOU,EAAE,WAAa,KAClC,GAAI,CACFP,EAAe,KAAK,MAAMO,EAAE,QAAQ,CAAC,CACvC,OAASL,EAAO,CACd,QAAQ,MAAM,6CAA6CL,CAAG,KAAMK,CAAK,CAC3E,CAEJ,EAGMM,EAAmBD,GAAa,CACpC,IAAME,EAAUF,EAAmC,OAC/CE,GAAUA,EAAO,MAAQZ,GAC3BG,EAAeS,EAAO,KAAU,CAEpC,EAEA,cAAO,iBAAiB,UAAWH,CAAmB,EACtD,OAAO,iBAAiBX,EAAkBa,CAAe,EAClD,IAAM,CACX,OAAO,oBAAoB,UAAWF,CAAmB,EACzD,OAAO,oBAAoBX,EAAkBa,CAAe,CAC9D,CACF,EAAG,CAACX,CAAG,CAAC,EAED,CAACE,EAAaI,CAAQ,CAC/B","names":["React","import_jsx_runtime","useIntersectionObserver","threshold","root","rootMargin","freezeOnceVisible","initialIsIntersecting","onChange","ref","setRef","isIntersecting","setIsIntersecting","frozen","observer","entry","isElementIntersecting","import_react","LOCAL_SYNC_EVENT","useLocalStorage","key","initialValue","storedValue","setStoredValue","item","error","setValue","value","valueToStore","handleStorageChange","e","handleLocalSync","detail"]} mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.3\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use client\";\n\n/**\n * `@moontra/moonui/hooks` — genel amaçlı React hook'ları.\n *\n * NEDEN AYRI ALT-YOL (`./hooks`), ana barrel değil:\n * `src/index.tsx` sözleşme gereği yalnızca iki bölüm içerir (`./components/ui`\n * re-export'u + `cn`). Hook'ları oraya eklemek o sözleşmeyi bozardı, bu yüzden\n * hook'lar kendi giriş noktasından yayımlanır:\n *\n * import { useLocalStorage } from \"@moontra/moonui/hooks\"\n *\n * KAPSAM: buraya yalnızca TESTİ OLAN hook'lar alınır. `src/` kökünde henüz\n * dışa açılmamış başka yardımcılar da var (`LazyLoad`, `useLazyImageLoading`,\n * `useIsInViewport`, `useMultipleIntersectionObserver`, `use-scroll-animation`,\n * `use-performance-optimizer` ve `use-toast.ts`'in yetim kopyası). Test\n * kapsamları olmadığı için public API'ye alınmadılar — eklenmeden önce test\n * yazılmalı.\n */\n\nexport { useIntersectionObserver } from \"../use-intersection-observer\";\nexport type { UseIntersectionObserverOptions } from \"../use-intersection-observer\";\n\nexport { useLocalStorage } from \"../use-local-storage\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"],"mappings":"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","names":["require_react_production","__commonJSMin","exports","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","assign","emptyObject","Component","props","context","updater","partialState","callback","ComponentDummy","PureComponent","pureComponentPrototype","isArrayImpl","noop","ReactSharedInternals","hasOwnProperty","ReactElement","type","key","refProp","cloneAndReplaceKey","oldElement","newKey","isValidElement","object","escape","escaperLookup","match","userProvidedKeyEscapeRegex","getElementKey","element","index","resolveThenable","thenable","fulfilledValue","error","mapIntoArray","children","array","escapedPrefix","nameSoFar","invokeCallback","c","nextNamePrefix","i","mapChildren","func","result","count","child","lazyInitializer","payload","ctor","moduleObject","reportGlobalError","event","Children","forEachFunc","forEachContext","n","size","fn","config","propName","childArray","defaultValue","childrenLength","render","compare","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","usable","action","initialState","permalink","deps","Context","value","initialValue","create","ref","passthrough","reducer","initialArg","init","subscribe","getSnapshot","getServerSnapshot","require_react","__commonJSMin","exports","module","require_react_jsx_runtime_production","__commonJSMin","exports","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","require_jsx_runtime","__commonJSMin","exports","module","hooks_exports","__export","useIntersectionObserver","useLocalStorage","__toCommonJS","React","import_jsx_runtime","useIntersectionObserver","threshold","root","rootMargin","freezeOnceVisible","initialIsIntersecting","onChange","ref","setRef","isIntersecting","setIsIntersecting","frozen","observer","entry","isElementIntersecting","import_react","LOCAL_SYNC_EVENT","useLocalStorage","key","initialValue","storedValue","setStoredValue","item","error","setValue","value","valueToStore","handleStorageChange","e","handleLocalSync","detail"]}
|
|
1
|
+
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"],"mappings":";2EAEA,IAAAA,EAAuB,OAkEPC,EAAA,OA1DT,SAASC,EAAwB,CACtC,UAAAC,EAAY,EACZ,KAAAC,EAAO,KACP,WAAAC,EAAa,KACb,kBAAAC,EAAoB,GACpB,sBAAAC,EAAwB,GACxB,SAAAC,CACF,EAAoC,CAAC,EAAG,CACtC,GAAM,CAACC,EAAKC,CAAM,EAAU,WAAyB,IAAI,EACnD,CAACC,EAAgBC,CAAiB,EAAU,WAASL,CAAqB,EAC1EM,EAAe,SAAO,EAAK,EAEjC,OAAM,YAAU,IAAM,CACpB,GAAI,CAACJ,GAAO,CAAC,OAAO,sBAAyBI,EAAO,SAAWP,EAC7D,OAGF,IAAMQ,EAAW,IAAI,qBACnB,CAAC,CAACC,CAAK,IAAM,CAMX,GAAIF,EAAO,QACT,OAGF,IAAMG,EAAwBD,EAAM,eACpCH,EAAkBI,CAAqB,EACvCR,IAAWQ,EAAuBD,CAAK,EAEnCC,GAAyBV,IAC3BO,EAAO,QAAU,GAErB,EACA,CAAE,UAAAV,EAAW,KAAAC,EAAM,WAAAC,CAAW,CAChC,EAEA,OAAAS,EAAS,QAAQL,CAAG,EAEb,IAAMK,EAAS,WAAW,CACnC,EAAG,CAACL,EAAKN,EAAWC,EAAMC,EAAYC,EAAmBE,CAAQ,CAAC,EAE3D,CAAE,IAAKE,EAAQ,eAAAC,CAAe,CACvC,CCvDA,IAAAM,EAAoC,OAU9BC,EAAmB,uBAQlB,SAASC,EACdC,EACAC,EAC2C,CAG3C,GAAM,CAACC,EAAaC,CAAc,KAAI,YAAY,IAAM,CACtD,GAAI,OAAO,OAAW,IACpB,OAAOF,EAGT,GAAI,CAEF,IAAMG,EAAO,OAAO,aAAa,QAAQJ,CAAG,EAE5C,OAAOI,EAAO,KAAK,MAAMA,CAAI,EAAIH,CACnC,OAASI,EAAO,CAEd,eAAQ,MAAM,mCAAmCL,CAAG,KAAMK,CAAK,EACxDJ,CACT,CACF,CAAC,EAGKK,EAAYC,GAA+B,CAC/C,GAAI,CAEF,IAAMC,EAAeD,aAAiB,SAAWA,EAAML,CAAW,EAAIK,EAGtEJ,EAAeK,CAAY,EAGvB,OAAO,OAAW,MAChBA,IAAiB,OACnB,OAAO,aAAa,WAAWR,CAAG,EAElC,OAAO,aAAa,QAAQA,EAAK,KAAK,UAAUQ,CAAY,CAAC,EAI/D,OAAO,cACL,IAAI,YAA6BV,EAAkB,CACjD,OAAQ,CAAE,IAAAE,EAAK,MAAOQ,CAAa,CACrC,CAAC,CACH,EAEJ,OAASH,EAAO,CAEd,QAAQ,MAAM,mCAAmCL,CAAG,KAAMK,CAAK,CACjE,CACF,EAGA,sBAAU,IAAM,CACd,GAAI,OAAO,OAAW,IACpB,OAGF,IAAMI,EAAuBC,GAAoB,CAC/C,GAAIA,EAAE,MAAQV,GAAOU,EAAE,WAAa,KAClC,GAAI,CACFP,EAAe,KAAK,MAAMO,EAAE,QAAQ,CAAC,CACvC,OAASL,EAAO,CACd,QAAQ,MAAM,6CAA6CL,CAAG,KAAMK,CAAK,CAC3E,CAEJ,EAGMM,EAAmBD,GAAa,CACpC,IAAME,EAAUF,EAAmC,OAC/CE,GAAUA,EAAO,MAAQZ,GAC3BG,EAAeS,EAAO,KAAU,CAEpC,EAEA,cAAO,iBAAiB,UAAWH,CAAmB,EACtD,OAAO,iBAAiBX,EAAkBa,CAAe,EAClD,IAAM,CACX,OAAO,oBAAoB,UAAWF,CAAmB,EACzD,OAAO,oBAAoBX,EAAkBa,CAAe,CAC9D,CACF,EAAG,CAACX,CAAG,CAAC,EAED,CAACE,EAAaI,CAAQ,CAC/B","names":["React","import_jsx_runtime","useIntersectionObserver","threshold","root","rootMargin","freezeOnceVisible","initialIsIntersecting","onChange","ref","setRef","isIntersecting","setIsIntersecting","frozen","observer","entry","isElementIntersecting","import_react","LOCAL_SYNC_EVENT","useLocalStorage","key","initialValue","storedValue","setStoredValue","item","error","setValue","value","valueToStore","handleStorageChange","e","handleLocalSync","detail"]} sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"],"mappings":"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","names":["require_react_production_min","__commonJSMin","exports","l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","require_react","__commonJSMin","exports","module","require_react_jsx_runtime_production_min","__commonJSMin","exports","f","k","l","m","n","p","q","c","a","g","b","d","e","h","require_jsx_runtime","__commonJSMin","exports","module","hooks_exports","__export","useIntersectionObserver","useLocalStorage","__toCommonJS","React","import_jsx_runtime","useIntersectionObserver","threshold","root","rootMargin","freezeOnceVisible","initialIsIntersecting","onChange","ref","setRef","isIntersecting","setIsIntersecting","frozen","observer","entry","isElementIntersecting","import_react","LOCAL_SYNC_EVENT","useLocalStorage","key","initialValue","storedValue","setStoredValue","item","error","setValue","value","valueToStore","handleStorageChange","e","handleLocalSync","detail"]}
|
package/dist/hooks/index.js
CHANGED
|
@@ -124,5 +124,5 @@ function useLocalStorage(key, initialValue) {
|
|
|
124
124
|
|
|
125
125
|
exports.useIntersectionObserver = useIntersectionObserver;
|
|
126
126
|
exports.useLocalStorage = useLocalStorage;
|
|
127
|
-
//# sourceMappingURL=
|
|
127
|
+
//# sourceMappingURL=out.js.map
|
|
128
128
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"names":["React","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"names":["useState","useEffect"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"]}
|
package/dist/hooks/index.mjs
CHANGED
package/dist/hooks/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"names":["useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/use-intersection-observer.tsx","../../src/use-local-storage.tsx"],"names":["useState","useEffect"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface UseIntersectionObserverOptions extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n initialIsIntersecting?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n}\n\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}) {\n const [ref, setRef] = React.useState<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(initialIsIntersecting);\n const frozen = React.useRef(false);\n\n React.useEffect(() => {\n if (!ref || !window.IntersectionObserver || (frozen.current && freezeOnceVisible)) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // freezeOnceVisible: bir kez görünür olduktan sonra state DONMALI.\n // frozen guard'ı yalnızca yukarıdaki effect girişinde vardı; effect'in\n // deps'i değişmediği için yeniden koşmuyor, dolayısıyla guard hiç\n // devreye girmiyordu. Canlı observer bir sonraki entry'de\n // setIsIntersecting(false) çağırıp donmayı bozuyordu.\n if (frozen.current) {\n return;\n }\n\n const isElementIntersecting = entry.isIntersecting;\n setIsIntersecting(isElementIntersecting);\n onChange?.(isElementIntersecting, entry);\n\n if (isElementIntersecting && freezeOnceVisible) {\n frozen.current = true;\n }\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => observer.disconnect();\n }, [ref, threshold, root, rootMargin, freezeOnceVisible, onChange]);\n\n return { ref: setRef, isIntersecting };\n}\n\n// Lazy load component wrapper\ninterface LazyLoadProps {\n children: React.ReactNode;\n placeholder?: React.ReactNode;\n threshold?: number;\n rootMargin?: string;\n className?: string;\n}\n\nexport function LazyLoad({\n children,\n placeholder = <div className=\"h-20 bg-muted animate-pulse rounded\" />,\n threshold = 0.1,\n rootMargin = \"50px\",\n className,\n}: LazyLoadProps) {\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold,\n rootMargin,\n freezeOnceVisible: true,\n });\n\n return (\n <div ref={ref} className={className}>\n {isIntersecting ? children : placeholder}\n </div>\n );\n}\n\n// Image lazy loading hook\nexport function useLazyImageLoading(\n imageSrc: string,\n options?: UseIntersectionObserverOptions\n) {\n const [src, setSrc] = React.useState<string | undefined>(undefined);\n const { ref, isIntersecting } = useIntersectionObserver({\n threshold: 0.01,\n rootMargin: \"50px\",\n ...options,\n });\n\n React.useEffect(() => {\n if (isIntersecting && imageSrc) {\n const img = new Image();\n img.src = imageSrc;\n img.onload = () => setSrc(imageSrc);\n }\n }, [isIntersecting, imageSrc]);\n\n return { ref, src, isLoaded: !!src };\n}\n\n// Viewport visibility hook\nexport function useIsInViewport(options?: UseIntersectionObserverOptions) {\n return useIntersectionObserver(options);\n}\n\n// Multiple elements observer\nexport function useMultipleIntersectionObserver(\n options: UseIntersectionObserverOptions = {}\n) {\n const [elements, setElements] = React.useState<Map<Element, boolean>>(new Map());\n const observer = React.useRef<IntersectionObserver | null>(null);\n\n React.useEffect(() => {\n if (!window.IntersectionObserver) return;\n\n observer.current = new IntersectionObserver(\n (entries) => {\n setElements((prev) => {\n const next = new Map(prev);\n entries.forEach((entry) => {\n next.set(entry.target, entry.isIntersecting);\n });\n return next;\n });\n },\n {\n threshold: options.threshold || 0,\n root: options.root || null,\n rootMargin: options.rootMargin || \"0%\",\n }\n );\n\n return () => observer.current?.disconnect();\n }, [options.threshold, options.root, options.rootMargin]);\n\n const observe = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.observe(element);\n }\n }, []);\n\n const unobserve = React.useCallback((element: Element | null) => {\n if (element && observer.current) {\n observer.current.unobserve(element);\n setElements((prev) => {\n const next = new Map(prev);\n next.delete(element);\n return next;\n });\n }\n }, []);\n\n return { observe, unobserve, elements };\n}","import { useState, useEffect } from 'react'\n\n/**\n * Aynı sekmedeki diğer hook instance'larını haberdar eden özel olay.\n *\n * Native `storage` olayı YALNIZCA diğer sekme/pencerelerde tetiklenir — değeri\n * yazan dokümanda hiç tetiklenmez. Bu yüzden aynı sayfada `useLocalStorage(\"k\")`\n * kullanan iki component birbirinden habersiz kalıyor, biri güncellenince\n * diğeri bayat değeri göstermeye devam ediyordu.\n */\nconst LOCAL_SYNC_EVENT = 'moonui:local-storage'\n\ninterface LocalSyncDetail {\n key: string\n value: unknown\n}\n\n// Local storage hook with error handling and SSR support\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n \n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n console.error(`Error reading localStorage key \"${key}\":`, error)\n return initialValue\n }\n })\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have the same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value\n \n // Save state\n setStoredValue(valueToStore)\n \n // Save to local storage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined) {\n window.localStorage.removeItem(key)\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n }\n\n // Aynı dokümandaki diğer instance'ları bilgilendir (bkz. LOCAL_SYNC_EVENT)\n window.dispatchEvent(\n new CustomEvent<LocalSyncDetail>(LOCAL_SYNC_EVENT, {\n detail: { key, value: valueToStore },\n })\n )\n }\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.error(`Error setting localStorage key \"${key}\":`, error)\n }\n }\n\n // Listen for changes to localStorage from other tabs/windows\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue))\n } catch (error) {\n console.error(`Error parsing localStorage value for key \"${key}\":`, error)\n }\n }\n }\n\n // Aynı sekmedeki kardeş instance'lar\n const handleLocalSync = (e: Event) => {\n const detail = (e as CustomEvent<LocalSyncDetail>).detail\n if (detail && detail.key === key) {\n setStoredValue(detail.value as T)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n window.addEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n window.removeEventListener(LOCAL_SYNC_EVENT, handleLocalSync)\n }\n }, [key])\n\n return [storedValue, setValue]\n}"]}
|