@moontra/moonui 6.0.0 → 6.1.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.
@@ -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 S=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var j=t=>{throw TypeError(t)};var at=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Q=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of G(e))!W.call(t,o)&&o!==n&&S(t,o,{get:()=>e[o],enumerable:!(r=z(e,o))||r.enumerable});return t};var yt=(t,e,n)=>(n=t!=null?b(B(t)):{},Q(e||!t||!t.__esModule?S(n,"default",{value:t,enumerable:!0}):n,t));var w=(t,e,n)=>e.has(t)||j("Cannot "+n);var vt=(t,e,n)=>(w(t,e,"read from private field"),n?n.call(t):e.get(t)),Tt=(t,e,n)=>e.has(t)?j("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),Rt=(t,e,n,r)=>(w(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n);var x=_(u=>{"use strict";var R=Symbol.for("react.transitional.element"),X=Symbol.for("react.portal"),Z=Symbol.for("react.fragment"),J=Symbol.for("react.strict_mode"),V=Symbol.for("react.profiler"),K=Symbol.for("react.consumer"),F=Symbol.for("react.context"),tt=Symbol.for("react.forward_ref"),et=Symbol.for("react.suspense"),nt=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),rt=Symbol.for("react.activity"),P=Symbol.iterator;function ut(t){return t===null||typeof t!="object"?null:(t=P&&t[P]||t["@@iterator"],typeof t=="function"?t:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},$=Object.assign,Y={};function E(t,e,n){this.props=t,this.context=e,this.refs=Y,this.updater=n||N}E.prototype.isReactComponent={};E.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};E.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function k(){}k.prototype=E.prototype;function m(t,e,n){this.props=t,this.context=e,this.refs=Y,this.updater=n||N}var C=m.prototype=new k;C.constructor=m;$(C,E.prototype);C.isPureReactComponent=!0;var h=Array.isArray;function T(){}var i={H:null,A:null,T:null,S:null},M=Object.prototype.hasOwnProperty;function d(t,e,n){var r=n.ref;return{$$typeof:R,type:t,key:e,ref:r!==void 0?r:null,props:n}}function ot(t,e){return d(t.type,e,t.props)}function A(t){return typeof t=="object"&&t!==null&&t.$$typeof===R}function st(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){return e[n]})}var O=/\/+/g;function v(t,e){return typeof t=="object"&&t!==null&&t.key!=null?st(""+t.key):e.toString(36)}function ft(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(T,T):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e)},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function l(t,e,n,r,o){var s=typeof t;(s==="undefined"||s==="boolean")&&(t=null);var f=!1;if(t===null)f=!0;else switch(s){case"bigint":case"string":case"number":f=!0;break;case"object":switch(t.$$typeof){case R:case X:f=!0;break;case g:return f=t._init,l(f(t._payload),e,n,r,o)}}if(f)return o=o(t),f=r===""?"."+v(t,0):r,h(o)?(n="",f!=null&&(n=f.replace(O,"$&/")+"/"),l(o,e,n,"",function(q){return q})):o!=null&&(A(o)&&(o=ot(o,n+(o.key==null||t&&t.key===o.key?"":(""+o.key).replace(O,"$&/")+"/")+f)),e.push(o)),1;f=0;var p=r===""?".":r+":";if(h(t))for(var c=0;c<t.length;c++)r=t[c],s=p+v(r,c),f+=l(r,e,n,s,o);else if(c=ut(t),typeof c=="function")for(t=c.call(t),c=0;!(r=t.next()).done;)r=r.value,s=p+v(r,c++),f+=l(r,e,n,s,o);else if(s==="object"){if(typeof t.then=="function")return l(ft(t),e,n,r,o);throw e=String(t),Error("Objects are not valid as a React child (found: "+(e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)+"). If you meant to render a collection of children, use an array instead.")}return f}function a(t,e,n){if(t==null)return t;var r=[],o=0;return l(t,r,"","",function(s){return e.call(n,s,o++)}),r}function it(t){if(t._status===-1){var e=t._result;e=e(),e.then(function(n){(t._status===0||t._status===-1)&&(t._status=1,t._result=n)},function(n){(t._status===0||t._status===-1)&&(t._status=2,t._result=n)}),t._status===-1&&(t._status=0,t._result=e)}if(t._status===1)return t._result.default;throw t._result}var H=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)},ct={map:a,forEach:function(t,e,n){a(t,function(){e.apply(this,arguments)},n)},count:function(t){var e=0;return a(t,function(){e++}),e},toArray:function(t){return a(t,function(e){return e})||[]},only:function(t){if(!A(t))throw Error("React.Children.only expected to receive a single React element child.");return t}};u.Activity=rt;u.Children=ct;u.Component=E;u.Fragment=Z;u.Profiler=V;u.PureComponent=m;u.StrictMode=J;u.Suspense=et;u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i;u.__COMPILER_RUNTIME={__proto__:null,c:function(t){return i.H.useMemoCache(t)}};u.cache=function(t){return function(){return t.apply(null,arguments)}};u.cacheSignal=function(){return null};u.cloneElement=function(t,e,n){if(t==null)throw Error("The argument must be a React element, but you passed "+t+".");var r=$({},t.props),o=t.key;if(e!=null)for(s in e.key!==void 0&&(o=""+e.key),e)!M.call(e,s)||s==="key"||s==="__self"||s==="__source"||s==="ref"&&e.ref===void 0||(r[s]=e[s]);var s=arguments.length-2;if(s===1)r.children=n;else if(1<s){for(var f=Array(s),p=0;p<s;p++)f[p]=arguments[p+2];r.children=f}return d(t.type,o,r)};u.createContext=function(t){return t={$$typeof:F,_currentValue:t,_currentValue2:t,_threadCount:0,Provider:null,Consumer:null},t.Provider=t,t.Consumer={$$typeof:K,_context:t},t};u.createElement=function(t,e,n){var r,o={},s=null;if(e!=null)for(r in e.key!==void 0&&(s=""+e.key),e)M.call(e,r)&&r!=="key"&&r!=="__self"&&r!=="__source"&&(o[r]=e[r]);var f=arguments.length-2;if(f===1)o.children=n;else if(1<f){for(var p=Array(f),c=0;c<f;c++)p[c]=arguments[c+2];o.children=p}if(t&&t.defaultProps)for(r in f=t.defaultProps,f)o[r]===void 0&&(o[r]=f[r]);return d(t,s,o)};u.createRef=function(){return{current:null}};u.forwardRef=function(t){return{$$typeof:tt,render:t}};u.isValidElement=A;u.lazy=function(t){return{$$typeof:g,_payload:{_status:-1,_result:t},_init:it}};u.memo=function(t,e){return{$$typeof:nt,type:t,compare:e===void 0?null:e}};u.startTransition=function(t){var e=i.T,n={};i.T=n;try{var r=t(),o=i.S;o!==null&&o(n,r),typeof r=="object"&&r!==null&&typeof r.then=="function"&&r.then(T,H)}catch(s){H(s)}finally{e!==null&&n.types!==null&&(e.types=n.types),i.T=e}};u.unstable_useCacheRefresh=function(){return i.H.useCacheRefresh()};u.use=function(t){return i.H.use(t)};u.useActionState=function(t,e,n){return i.H.useActionState(t,e,n)};u.useCallback=function(t,e){return i.H.useCallback(t,e)};u.useContext=function(t){return i.H.useContext(t)};u.useDebugValue=function(){};u.useDeferredValue=function(t,e){return i.H.useDeferredValue(t,e)};u.useEffect=function(t,e){return i.H.useEffect(t,e)};u.useEffectEvent=function(t){return i.H.useEffectEvent(t)};u.useId=function(){return i.H.useId()};u.useImperativeHandle=function(t,e,n){return i.H.useImperativeHandle(t,e,n)};u.useInsertionEffect=function(t,e){return i.H.useInsertionEffect(t,e)};u.useLayoutEffect=function(t,e){return i.H.useLayoutEffect(t,e)};u.useMemo=function(t,e){return i.H.useMemo(t,e)};u.useOptimistic=function(t,e){return i.H.useOptimistic(t,e)};u.useReducer=function(t,e,n){return i.H.useReducer(t,e,n)};u.useRef=function(t){return i.H.useRef(t)};u.useState=function(t){return i.H.useState(t)};u.useSyncExternalStore=function(t,e,n){return i.H.useSyncExternalStore(t,e,n)};u.useTransition=function(){return i.H.useTransition()};u.version="19.2.3"});var pt=_((dt,I)=>{"use strict";I.exports=x()});var U=_(y=>{"use strict";var lt=Symbol.for("react.transitional.element"),Et=Symbol.for("react.fragment");function L(t,e,n){var r=null;if(n!==void 0&&(r=""+n),e.key!==void 0&&(r=""+e.key),"key"in e){n={};for(var o in e)o!=="key"&&(n[o]=e[o])}else n=e;return e=n.ref,{$$typeof:lt,type:t,key:r,ref:e!==void 0?e:null,props:n}}y.Fragment=Et;y.jsx=L;y.jsxs=L});var _t=_((St,D)=>{"use strict";D.exports=U()});export{at as a,_ as b,yt as c,vt as d,Tt as e,Rt as f,pt as g,_t as h};
5
+ /*! Bundled license information:
6
+
7
+ react/cjs/react.production.js:
8
+ (**
9
+ * @license React
10
+ * react.production.js
11
+ *
12
+ * Copyright (c) Meta Platforms, Inc. and 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.js:
19
+ (**
20
+ * @license React
21
+ * react-jsx-runtime.production.js
22
+ *
23
+ * Copyright (c) Meta Platforms, Inc. and 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-2EN7SB2G.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/react/jsx-runtime.js"],"sourcesContent":["/**\n * @license React\n * react.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_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n 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"],"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"]}
@@ -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 { UseIntersectionObserverOptions, useIntersectionObserver, useLocalStorage };
15
+ export { type UseIntersectionObserverOptions, useIntersectionObserver, useLocalStorage };
@@ -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 { UseIntersectionObserverOptions, useIntersectionObserver, useLocalStorage };
15
+ export { type 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-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};
4
+ "use client";import{c as u,g as p,h as b}from"../chunk-2EN7SB2G.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.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]}
9
+ //# sourceMappingURL=index.global.js.mapype=E.prototype;function I(e,t,n){this.props=e,this.context=t,this.refs=z,this.updater=n||D}var h=I.prototype=new G;h.constructor=I;q(h,E.prototype);h.isPureReactComponent=!0;var $=Array.isArray;function C(){}var c={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function A(e,t,n){var r=n.ref;return{$$typeof:O,type:e,key:t,ref:r!==void 0?r:null,props:n}}function ye(e,t){return A(e.type,t,e.props)}function b(e){return typeof e=="object"&&e!==null&&e.$$typeof===O}function me(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var Y=/\/+/g;function S(e,t){return typeof e=="object"&&e!==null&&e.key!=null?me(""+e.key):t.toString(36)}function Re(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(C,C):(e.status="pending",e.then(function(t){e.status==="pending"&&(e.status="fulfilled",e.value=t)},function(t){e.status==="pending"&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function p(e,t,n,r,o){var s=typeof e;(s==="undefined"||s==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(s){case"bigint":case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case O:case ue:i=!0;break;case U:return i=e._init,p(i(e._payload),t,n,r,o)}}if(i)return o=o(e),i=r===""?"."+S(e,0):r,$(o)?(n="",i!=null&&(n=i.replace(Y,"$&/")+"/"),p(o,t,n,"",function(T){return T})):o!=null&&(b(o)&&(o=ye(o,n+(o.key==null||e&&e.key===o.key?"":(""+o.key).replace(Y,"$&/")+"/")+i)),t.push(o)),1;i=0;var a=r===""?".":r+":";if($(e))for(var f=0;f<e.length;f++)r=e[f],s=a+S(r,f),i+=p(r,t,n,s,o);else if(f=_e(e),typeof f=="function")for(e=f.call(e),f=0;!(r=e.next()).done;)r=r.value,s=a+S(r,f++),i+=p(r,t,n,s,o);else if(s==="object"){if(typeof e.then=="function")return p(Re(e),t,n,r,o);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 i}function y(e,t,n){if(e==null)return e;var r=[],o=0;return p(e,r,"","",function(s){return t.call(n,s,o++)}),r}function Te(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var k=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},we={map:y,forEach:function(e,t,n){y(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return y(e,function(){t++}),t},toArray:function(e){return y(e,function(t){return t})||[]},only:function(e){if(!b(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};u.Activity=de;u.Children=we;u.Component=E;u.Fragment=ie;u.Profiler=fe;u.PureComponent=I;u.StrictMode=ce;u.Suspense=Ee;u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=c;u.__COMPILER_RUNTIME={__proto__:null,c:function(e){return c.H.useMemoCache(e)}};u.cache=function(e){return function(){return e.apply(null,arguments)}};u.cacheSignal=function(){return null};u.cloneElement=function(e,t,n){if(e==null)throw Error("The argument must be a React element, but you passed "+e+".");var r=q({},e.props),o=e.key;if(t!=null)for(s in t.key!==void 0&&(o=""+t.key),t)!V.call(t,s)||s==="key"||s==="__self"||s==="__source"||s==="ref"&&t.ref===void 0||(r[s]=t[s]);var s=arguments.length-2;if(s===1)r.children=n;else if(1<s){for(var i=Array(s),a=0;a<s;a++)i[a]=arguments[a+2];r.children=i}return A(e.type,o,r)};u.createContext=function(e){return e={$$typeof:le,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:ae,_context:e},e};u.createElement=function(e,t,n){var r,o={},s=null;if(t!=null)for(r in t.key!==void 0&&(s=""+t.key),t)V.call(t,r)&&r!=="key"&&r!=="__self"&&r!=="__source"&&(o[r]=t[r]);var i=arguments.length-2;if(i===1)o.children=n;else if(1<i){for(var a=Array(i),f=0;f<i;f++)a[f]=arguments[f+2];o.children=a}if(e&&e.defaultProps)for(r in i=e.defaultProps,i)o[r]===void 0&&(o[r]=i[r]);return A(e,s,o)};u.createRef=function(){return{current:null}};u.forwardRef=function(e){return{$$typeof:pe,render:e}};u.isValidElement=b;u.lazy=function(e){return{$$typeof:U,_payload:{_status:-1,_result:e},_init:Te}};u.memo=function(e,t){return{$$typeof:ve,type:e,compare:t===void 0?null:t}};u.startTransition=function(e){var t=c.T,n={};c.T=n;try{var r=e(),o=c.S;o!==null&&o(n,r),typeof r=="object"&&r!==null&&typeof r.then=="function"&&r.then(C,k)}catch(s){k(s)}finally{t!==null&&n.types!==null&&(t.types=n.types),c.T=t}};u.unstable_useCacheRefresh=function(){return c.H.useCacheRefresh()};u.use=function(e){return c.H.use(e)};u.useActionState=function(e,t,n){return c.H.useActionState(e,t,n)};u.useCallback=function(e,t){return c.H.useCallback(e,t)};u.useContext=function(e){return c.H.useContext(e)};u.useDebugValue=function(){};u.useDeferredValue=function(e,t){return c.H.useDeferredValue(e,t)};u.useEffect=function(e,t){return c.H.useEffect(e,t)};u.useEffectEvent=function(e){return c.H.useEffectEvent(e)};u.useId=function(){return c.H.useId()};u.useImperativeHandle=function(e,t,n){return c.H.useImperativeHandle(e,t,n)};u.useInsertionEffect=function(e,t){return c.H.useInsertionEffect(e,t)};u.useLayoutEffect=function(e,t){return c.H.useLayoutEffect(e,t)};u.useMemo=function(e,t){return c.H.useMemo(e,t)};u.useOptimistic=function(e,t){return c.H.useOptimistic(e,t)};u.useReducer=function(e,t,n){return c.H.useReducer(e,t,n)};u.useRef=function(e){return c.H.useRef(e)};u.useState=function(e){return c.H.useState(e)};u.useSyncExternalStore=function(e,t,n){return c.H.useSyncExternalStore(e,t,n)};u.useTransition=function(){return c.H.useTransition()};u.version="19.2.3"});var L=d((Ae,B)=>{"use strict";B.exports=J()});var Q=d(m=>{"use strict";var ge=Symbol.for("react.transitional.element"),Se=Symbol.for("react.fragment");function W(e,t,n){var r=null;if(n!==void 0&&(r=""+n),t.key!==void 0&&(r=""+t.key),"key"in t){n={};for(var o in t)o!=="key"&&(n[o]=t[o])}else n=t;return t=n.ref,{$$typeof:ge,type:e,key:r,ref:t!==void 0?t:null,props:n}}m.Fragment=Se;m.jsx=W;m.jsxs=W});var N=d((Le,X)=>{"use strict";X.exports=Q()});var Oe={};oe(Oe,{useIntersectionObserver:()=>Z,useLocalStorage:()=>F});module.exports=se(Oe);var l=_(L()),Ce=_(N());function Z({threshold:e=0,root:t=null,rootMargin:n="0%",freezeOnceVisible:r=!1,initialIsIntersecting:o=!1,onChange:s}={}){let[i,a]=l.useState(null),[f,T]=l.useState(o),w=l.useRef(!1);return l.useEffect(()=>{if(!i||!window.IntersectionObserver||w.current&&r)return;let j=new IntersectionObserver(([P])=>{if(w.current)return;let g=P.isIntersecting;T(g),s?.(g,P),g&&r&&(w.current=!0)},{threshold:e,root:t,rootMargin:n});return j.observe(i),()=>j.disconnect()},[i,e,t,n,r,s]),{ref:a,isIntersecting:f}}var R=_(L()),x="moonui:local-storage";function F(e,t){let[n,r]=(0,R.useState)(()=>{if(typeof window>"u")return t;try{let s=window.localStorage.getItem(e);return s?JSON.parse(s):t}catch(s){return console.error(`Error reading localStorage key "${e}":`,s),t}}),o=s=>{try{let i=s instanceof Function?s(n):s;r(i),typeof window<"u"&&(i===void 0?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(i)),window.dispatchEvent(new CustomEvent(x,{detail:{key:e,value:i}})))}catch(i){console.error(`Error setting localStorage key "${e}":`,i)}};return(0,R.useEffect)(()=>{if(typeof window>"u")return;let s=a=>{if(a.key===e&&a.newValue!==null)try{r(JSON.parse(a.newValue))}catch(f){console.error(`Error parsing localStorage value for key "${e}":`,f)}},i=a=>{let f=a.detail;f&&f.key===e&&r(f.value)};return window.addEventListener("storage",s),window.addEventListener(x,i),()=>{window.removeEventListener("storage",s),window.removeEventListener(x,i)}},[e]),[n,o]}
10
10
  /*! Bundled license information:
11
11
 
12
- react/cjs/react.production.min.js:
12
+ react/cjs/react.production.js:
13
13
  (**
14
14
  * @license React
15
- * react.production.min.js
15
+ * react.production.js
16
16
  *
17
- * Copyright (c) Facebook, Inc. and its affiliates.
17
+ * Copyright (c) Meta Platforms, Inc. and 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.min.js:
23
+ react/cjs/react-jsx-runtime.production.js:
24
24
  (**
25
25
  * @license React
26
- * react-jsx-runtime.production.min.js
26
+ * react-jsx-runtime.production.js
27
27
  *
28
- * Copyright (c) Facebook, Inc. and its affiliates.
28
+ * Copyright (c) Meta Platforms, Inc. and 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"]} 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"]}
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"]}
@@ -124,5 +124,5 @@ function useLocalStorage(key, initialValue) {
124
124
 
125
125
  exports.useIntersectionObserver = useIntersectionObserver;
126
126
  exports.useLocalStorage = useLocalStorage;
127
- //# sourceMappingURL=out.js.map
127
+ //# sourceMappingURL=index.js.map
128
128
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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}"]}
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}"]}
@@ -102,5 +102,5 @@ function useLocalStorage(key, initialValue) {
102
102
  }
103
103
 
104
104
  export { useIntersectionObserver, useLocalStorage };
105
- //# sourceMappingURL=out.js.map
105
+ //# sourceMappingURL=index.mjs.map
106
106
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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}"]}
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}"]}