@uniweb/runtime 0.6.17 → 0.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/_importmap/@uniweb-core.js +2 -0
- package/dist/app/_importmap/@uniweb-core.js.map +1 -0
- package/dist/app/_importmap/react-dom.js +2 -0
- package/dist/app/_importmap/react-dom.js.map +1 -0
- package/dist/app/_importmap/react-jsx-dev-runtime.js +2 -0
- package/dist/app/_importmap/react-jsx-dev-runtime.js.map +1 -0
- package/dist/app/_importmap/react-jsx-runtime.js +2 -0
- package/dist/app/_importmap/react-jsx-runtime.js.map +1 -0
- package/dist/app/_importmap/react.js +2 -0
- package/dist/app/_importmap/react.js.map +1 -0
- package/dist/app/assets/_commonjsHelpers-CqkleIqs.js +2 -0
- package/dist/app/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
- package/dist/app/assets/_importmap_react-dWoQamCw.js +2 -0
- package/dist/app/assets/_importmap_react-dWoQamCw.js.map +1 -0
- package/dist/app/assets/index-C0udIITE.js +9 -0
- package/dist/app/assets/index-C0udIITE.js.map +1 -0
- package/dist/app/assets/index-C6TPxGbh.js +133 -0
- package/dist/app/assets/index-C6TPxGbh.js.map +1 -0
- package/dist/app/assets/index-CsyMBO9p.js +8 -0
- package/dist/app/assets/index-CsyMBO9p.js.map +1 -0
- package/dist/app/assets/index-kA4PVysc.js +2 -0
- package/dist/app/assets/index-kA4PVysc.js.map +1 -0
- package/dist/app/assets/jsx-runtime-C3x2e0aW.js +2 -0
- package/dist/app/assets/jsx-runtime-C3x2e0aW.js.map +1 -0
- package/dist/app/index.html +31 -0
- package/dist/app/manifest.json +19 -0
- package/package.json +2 -2
- package/src/hooks/useRememberScroll.js +71 -74
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var k={exports:{}},r={};var T;function X(){if(T)return r;T=1;var y=Symbol.for("react.element"),A=Symbol.for("react.portal"),D=Symbol.for("react.fragment"),U=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),L=Symbol.for("react.provider"),M=Symbol.for("react.context"),N=Symbol.for("react.forward_ref"),z=Symbol.for("react.suspense"),B=Symbol.for("react.memo"),H=Symbol.for("react.lazy"),w=Symbol.iterator;function W(e){return e===null||typeof e!="object"?null:(e=w&&e[w]||e["@@iterator"],typeof e=="function"?e:null)}var $={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,C={};function p(e,t,n){this.props=e,this.context=t,this.refs=C,this.updater=n||$}p.prototype.isReactComponent={},p.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function x(){}x.prototype=p.prototype;function v(e,t,n){this.props=e,this.context=t,this.refs=C,this.updater=n||$}var m=v.prototype=new x;m.constructor=v,b(m,p.prototype),m.isPureReactComponent=!0;var j=Array.isArray,O=Object.prototype.hasOwnProperty,S={current:null},g={key:!0,ref:!0,__self:!0,__source:!0};function P(e,t,n){var o,u={},c=null,s=null;if(t!=null)for(o in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(c=""+t.key),t)O.call(t,o)&&!g.hasOwnProperty(o)&&(u[o]=t[o]);var f=arguments.length-2;if(f===1)u.children=n;else if(1<f){for(var i=Array(f),a=0;a<f;a++)i[a]=arguments[a+2];u.children=i}if(e&&e.defaultProps)for(o in f=e.defaultProps,f)u[o]===void 0&&(u[o]=f[o]);return{$$typeof:y,type:e,key:c,ref:s,props:u,_owner:S.current}}function G(e,t){return{$$typeof:y,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function R(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}function J(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var I=/\/+/g;function E(e,t){return typeof e=="object"&&e!==null&&e.key!=null?J(""+e.key):t.toString(36)}function d(e,t,n,o,u){var c=typeof e;(c==="undefined"||c==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(c){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case y:case A:s=!0}}if(s)return s=e,u=u(s),e=o===""?"."+E(s,0):o,j(u)?(n="",e!=null&&(n=e.replace(I,"$&/")+"/"),d(u,t,n,"",function(a){return a})):u!=null&&(R(u)&&(u=G(u,n+(!u.key||s&&s.key===u.key?"":(""+u.key).replace(I,"$&/")+"/")+e)),t.push(u)),1;if(s=0,o=o===""?".":o+":",j(e))for(var f=0;f<e.length;f++){c=e[f];var i=o+E(c,f);s+=d(c,t,n,i,u)}else if(i=W(e),typeof i=="function")for(e=i.call(e),f=0;!(c=e.next()).done;)c=c.value,i=o+E(c,f++),s+=d(c,t,n,i,u);else if(c==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function _(e,t,n){if(e==null)return e;var o=[],u=0;return d(e,o,"","",function(c){return t.call(n,c,u++)}),o}function K(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 l={current:null},h={transition:null},Q={ReactCurrentDispatcher:l,ReactCurrentBatchConfig:h,ReactCurrentOwner:S};function q(){throw Error("act(...) is not supported in production builds of React.")}return r.Children={map:_,forEach:function(e,t,n){_(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return _(e,function(){t++}),t},toArray:function(e){return _(e,function(t){return t})||[]},only:function(e){if(!R(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},r.Component=p,r.Fragment=D,r.Profiler=F,r.PureComponent=v,r.StrictMode=U,r.Suspense=z,r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Q,r.act=q,r.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=b({},e.props),u=e.key,c=e.ref,s=e._owner;if(t!=null){if(t.ref!==void 0&&(c=t.ref,s=S.current),t.key!==void 0&&(u=""+t.key),e.type&&e.type.defaultProps)var f=e.type.defaultProps;for(i in t)O.call(t,i)&&!g.hasOwnProperty(i)&&(o[i]=t[i]===void 0&&f!==void 0?f[i]:t[i])}var i=arguments.length-2;if(i===1)o.children=n;else if(1<i){f=Array(i);for(var a=0;a<i;a++)f[a]=arguments[a+2];o.children=f}return{$$typeof:y,type:e.type,key:u,ref:c,props:o,_owner:s}},r.createContext=function(e){return e={$$typeof:M,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:L,_context:e},e.Consumer=e},r.createElement=P,r.createFactory=function(e){var t=P.bind(null,e);return t.type=e,t},r.createRef=function(){return{current:null}},r.forwardRef=function(e){return{$$typeof:N,render:e}},r.isValidElement=R,r.lazy=function(e){return{$$typeof:H,_payload:{_status:-1,_result:e},_init:K}},r.memo=function(e,t){return{$$typeof:B,type:e,compare:t===void 0?null:t}},r.startTransition=function(e){var t=h.transition;h.transition={};try{e()}finally{h.transition=t}},r.unstable_act=q,r.useCallback=function(e,t){return l.current.useCallback(e,t)},r.useContext=function(e){return l.current.useContext(e)},r.useDebugValue=function(){},r.useDeferredValue=function(e){return l.current.useDeferredValue(e)},r.useEffect=function(e,t){return l.current.useEffect(e,t)},r.useId=function(){return l.current.useId()},r.useImperativeHandle=function(e,t,n){return l.current.useImperativeHandle(e,t,n)},r.useInsertionEffect=function(e,t){return l.current.useInsertionEffect(e,t)},r.useLayoutEffect=function(e,t){return l.current.useLayoutEffect(e,t)},r.useMemo=function(e,t){return l.current.useMemo(e,t)},r.useReducer=function(e,t,n){return l.current.useReducer(e,t,n)},r.useRef=function(e){return l.current.useRef(e)},r.useState=function(e){return l.current.useState(e)},r.useSyncExternalStore=function(e,t,n){return l.current.useSyncExternalStore(e,t,n)},r.useTransition=function(){return l.current.useTransition()},r.version="18.3.1",r}var V;function Y(){return V||(V=1,k.exports=X()),k.exports}export{Y as r};
|
|
2
|
+
//# sourceMappingURL=index-kA4PVysc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-kA4PVysc.js","sources":["../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js","../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/index.js"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n"],"names":["l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","react_production_min","reactModule","require$$0"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{g as v}from"./_commonjsHelpers-CqkleIqs.js";import{r as y}from"./index-kA4PVysc.js";var i={exports:{}},t={};var m;function j(){if(m)return t;m=1;var a=y(),R=Symbol.for("react.element"),x=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,l=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,d={key:!0,ref:!0,__self:!0,__source:!0};function s(o,r,f){var e,n={},u=null,p=null;f!==void 0&&(u=""+f),r.key!==void 0&&(u=""+r.key),r.ref!==void 0&&(p=r.ref);for(e in r)c.call(r,e)&&!d.hasOwnProperty(e)&&(n[e]=r[e]);if(o&&o.defaultProps)for(e in r=o.defaultProps,r)n[e]===void 0&&(n[e]=r[e]);return{$$typeof:R,type:o,key:u,ref:p,props:n,_owner:l.current}}return t.Fragment=x,t.jsx=s,t.jsxs=s,t}var _;function E(){return _||(_=1,i.exports=j()),i.exports}var O=E();const k=v(O);export{k as a,O as j};
|
|
2
|
+
//# sourceMappingURL=jsx-runtime-C3x2e0aW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime-C3x2e0aW.js","sources":["../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","jsxRuntimeModule"],"mappings":"wJASa,IAAIA,EAAEC,EAAA,EAAiBC,EAAE,OAAO,IAAI,eAAe,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,UAAU,eAAeC,EAAEL,EAAE,mDAAmD,kBAAkBM,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,EAAE,EAClP,SAASC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAE,CAAA,EAAGC,EAAE,KAAKC,EAAE,KAAcJ,IAAT,SAAaG,EAAE,GAAGH,GAAYD,EAAE,MAAX,SAAiBI,EAAE,GAAGJ,EAAE,KAAcA,EAAE,MAAX,SAAiBK,EAAEL,EAAE,KAAK,IAAIE,KAAKF,EAAEL,EAAE,KAAKK,EAAEE,CAAC,GAAG,CAACL,EAAE,eAAeK,CAAC,IAAIC,EAAED,CAAC,EAAEF,EAAEE,CAAC,GAAG,GAAGH,GAAGA,EAAE,aAAa,IAAIG,KAAKF,EAAED,EAAE,aAAaC,EAAWG,EAAED,CAAC,IAAZ,SAAgBC,EAAED,CAAC,EAAEF,EAAEE,CAAC,GAAG,MAAM,CAAC,SAAST,EAAE,KAAKM,EAAE,IAAIK,EAAE,IAAIC,EAAE,MAAMF,EAAE,OAAOP,EAAE,OAAO,CAAC,CAAC,OAAAU,WAAiBZ,EAAEY,EAAA,IAAYR,EAAEQ,EAAA,KAAaR,sCCPxWS,EAAA,QAAiBf,EAAA","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
<meta charset="UTF-8" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
+
<title></title>
|
|
9
|
+
<script type="importmap">
|
|
10
|
+
{
|
|
11
|
+
"imports": {
|
|
12
|
+
"react": "/_importmap/react.js",
|
|
13
|
+
"react-dom": "/_importmap/react-dom.js",
|
|
14
|
+
"react/jsx-runtime": "/_importmap/react-jsx-runtime.js",
|
|
15
|
+
"react/jsx-dev-runtime": "/_importmap/react-jsx-dev-runtime.js",
|
|
16
|
+
"@uniweb/core": "/_importmap/@uniweb-core.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
</script>
|
|
20
|
+
<script type="module" crossorigin src="/assets/index-CsyMBO9p.js"></script>
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/_commonjsHelpers-CqkleIqs.js">
|
|
22
|
+
<link rel="modulepreload" crossorigin href="/assets/index-kA4PVysc.js">
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-C3x2e0aW.js">
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/_importmap_react-dWoQamCw.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/index-C0udIITE.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/index-C6TPxGbh.js">
|
|
27
|
+
</head>
|
|
28
|
+
<body>
|
|
29
|
+
<div id="root"></div>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.6.14",
|
|
3
|
+
"entry": "assets/index-CsyMBO9p.js",
|
|
4
|
+
"preloads": [
|
|
5
|
+
"assets/_commonjsHelpers-CqkleIqs.js",
|
|
6
|
+
"assets/index-kA4PVysc.js",
|
|
7
|
+
"assets/index-C0udIITE.js",
|
|
8
|
+
"assets/index-C6TPxGbh.js",
|
|
9
|
+
"assets/_importmap_react-dWoQamCw.js",
|
|
10
|
+
"assets/jsx-runtime-C3x2e0aW.js"
|
|
11
|
+
],
|
|
12
|
+
"importMap": {
|
|
13
|
+
"react": "_importmap/react.js",
|
|
14
|
+
"react-dom": "_importmap/react-dom.js",
|
|
15
|
+
"react/jsx-runtime": "_importmap/react-jsx-runtime.js",
|
|
16
|
+
"react/jsx-dev-runtime": "_importmap/react-jsx-dev-runtime.js",
|
|
17
|
+
"@uniweb/core": "_importmap/@uniweb-core.js"
|
|
18
|
+
}
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uniweb/runtime",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.19",
|
|
4
4
|
"description": "Minimal runtime for loading Uniweb foundations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@vitejs/plugin-react": "^4.5.2",
|
|
43
43
|
"vite": "^7.3.1",
|
|
44
|
-
"@uniweb/build": "0.8.
|
|
44
|
+
"@uniweb/build": "0.8.22"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -1,110 +1,107 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useRememberScroll Hook
|
|
3
3
|
*
|
|
4
|
-
* Remembers scroll position per
|
|
5
|
-
*
|
|
4
|
+
* Remembers scroll position per history entry and restores it on navigation.
|
|
5
|
+
* Uses React Router's location.key to track positions per history entry
|
|
6
|
+
* (not per page path), so back→forward navigations restore correctly.
|
|
6
7
|
*
|
|
7
8
|
* Behavior:
|
|
8
|
-
* -
|
|
9
|
-
* - Restores scroll position on back/forward (POP) navigation
|
|
10
|
-
* - Scrolls to top on new navigation (PUSH/REPLACE
|
|
9
|
+
* - Continuously saves scroll position via a passive scroll listener
|
|
10
|
+
* - Restores scroll position on back/forward (POP) navigation with retry
|
|
11
|
+
* - Scrolls to top on new navigation (PUSH/REPLACE)
|
|
12
|
+
* - Skips when location.hash is present (defers to useLinkInterceptor)
|
|
11
13
|
* - Optionally resets block states on scroll restoration
|
|
14
|
+
*
|
|
15
|
+
* Implementation note:
|
|
16
|
+
* Uniweb scrolls `window` (not a fixed-size container). When React swaps
|
|
17
|
+
* page content, the browser may clamp scrollY and fire scroll events BEFORE
|
|
18
|
+
* useEffect runs. To prevent those events from corrupting the saved position
|
|
19
|
+
* of the page we're leaving, useLayoutEffect captures the target value and
|
|
20
|
+
* updates the location key ref synchronously — before any scroll events.
|
|
12
21
|
*/
|
|
13
22
|
|
|
14
|
-
import { useEffect, useRef } from 'react'
|
|
23
|
+
import { useEffect, useLayoutEffect, useRef, useCallback } from 'react'
|
|
15
24
|
import { useLocation, useNavigationType } from 'react-router-dom'
|
|
16
25
|
|
|
26
|
+
/** In-memory scroll positions keyed by React Router's location.key. */
|
|
27
|
+
const scrollPositions = new Map()
|
|
28
|
+
|
|
17
29
|
/**
|
|
18
30
|
* useRememberScroll hook
|
|
19
31
|
*
|
|
20
32
|
* @param {Object} options
|
|
21
33
|
* @param {boolean} options.enabled - Enable scroll memory (default: true)
|
|
22
34
|
* @param {boolean} options.resetBlockStates - Reset block states on restore (default: true)
|
|
23
|
-
* @param {number} options.scrollDelay - Delay before restoring scroll (default: 0)
|
|
24
35
|
*/
|
|
25
36
|
export function useRememberScroll(options = {}) {
|
|
26
|
-
const { enabled = true, resetBlockStates = true
|
|
37
|
+
const { enabled = true, resetBlockStates = true } = options
|
|
27
38
|
|
|
28
39
|
const location = useLocation()
|
|
29
40
|
const navigationType = useNavigationType()
|
|
30
|
-
const
|
|
31
|
-
const
|
|
41
|
+
const locationKeyRef = useRef(location.key)
|
|
42
|
+
const savedScrollRef = useRef(null)
|
|
43
|
+
|
|
44
|
+
// Continuously save scroll position for the current location
|
|
45
|
+
const handleScroll = useCallback(() => {
|
|
46
|
+
scrollPositions.set(locationKeyRef.current, window.scrollY)
|
|
47
|
+
}, [])
|
|
32
48
|
|
|
33
49
|
useEffect(() => {
|
|
34
50
|
if (!enabled) return
|
|
35
51
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// Skip on first render
|
|
48
|
-
if (isFirstRender.current) {
|
|
49
|
-
isFirstRender.current = false
|
|
50
|
-
previousPathRef.current = currentPath
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Path hasn't changed (might be hash or search change)
|
|
55
|
-
if (previousPath === currentPath) {
|
|
56
|
-
return
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Save scroll position from previous page
|
|
60
|
-
const previousPage = website.getPage(previousPath)
|
|
61
|
-
if (previousPage) {
|
|
62
|
-
previousPage.scrollY = window.scrollY
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Determine scroll target:
|
|
66
|
-
// - POP (back/forward): restore saved position
|
|
67
|
-
// - PUSH/REPLACE (link click, programmatic): scroll to top
|
|
68
|
-
if (currentPage) {
|
|
69
|
-
const targetScroll = navigationType === 'POP' ? (currentPage.scrollY || 0) : 0
|
|
70
|
-
|
|
71
|
-
// Reset block states if requested (for animations, etc.)
|
|
72
|
-
if (resetBlockStates && typeof currentPage.resetBlockStates === 'function') {
|
|
73
|
-
currentPage.resetBlockStates()
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Apply scroll position
|
|
77
|
-
const restore = () => {
|
|
78
|
-
window.scrollTo(0, targetScroll)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (scrollDelay > 0) {
|
|
82
|
-
setTimeout(restore, scrollDelay)
|
|
83
|
-
} else {
|
|
84
|
-
// Use requestAnimationFrame for smoother restoration
|
|
85
|
-
requestAnimationFrame(restore)
|
|
86
|
-
}
|
|
52
|
+
window.addEventListener('scroll', handleScroll, { passive: true })
|
|
53
|
+
return () => window.removeEventListener('scroll', handleScroll)
|
|
54
|
+
}, [enabled, handleScroll])
|
|
55
|
+
|
|
56
|
+
// Synchronously capture saved scroll and update key BEFORE browser
|
|
57
|
+
// scroll events can fire (which would corrupt the previous page's value)
|
|
58
|
+
useLayoutEffect(() => {
|
|
59
|
+
if (navigationType === 'POP') {
|
|
60
|
+
savedScrollRef.current = scrollPositions.get(location.key) ?? null
|
|
61
|
+
} else {
|
|
62
|
+
savedScrollRef.current = null
|
|
87
63
|
}
|
|
64
|
+
locationKeyRef.current = location.key
|
|
65
|
+
}, [location.key, navigationType])
|
|
88
66
|
|
|
89
|
-
|
|
90
|
-
previousPathRef.current = currentPath
|
|
91
|
-
}, [location.pathname, navigationType, enabled, resetBlockStates, scrollDelay])
|
|
92
|
-
|
|
93
|
-
// Save scroll position before page unload
|
|
67
|
+
// On navigation: restore on POP, scroll to top on PUSH/REPLACE
|
|
94
68
|
useEffect(() => {
|
|
95
69
|
if (!enabled) return
|
|
96
70
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const page = uniweb?.activeWebsite?.activePage
|
|
100
|
-
if (page) {
|
|
101
|
-
page.
|
|
71
|
+
// Reset block states if requested (for animations, etc.)
|
|
72
|
+
if (resetBlockStates) {
|
|
73
|
+
const page = globalThis.uniweb?.activeWebsite?.activePage
|
|
74
|
+
if (page && typeof page.resetBlockStates === 'function') {
|
|
75
|
+
page.resetBlockStates()
|
|
102
76
|
}
|
|
103
77
|
}
|
|
104
78
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
79
|
+
// When hash is present, let useLinkInterceptor handle scrolling
|
|
80
|
+
if (location.hash) return
|
|
81
|
+
|
|
82
|
+
if (navigationType === 'POP') {
|
|
83
|
+
const saved = savedScrollRef.current
|
|
84
|
+
if (saved == null) return
|
|
85
|
+
|
|
86
|
+
// Retry scroll restoration as content may load asynchronously.
|
|
87
|
+
// Each frame: scroll, check if it landed, retry if the page
|
|
88
|
+
// wasn't tall enough yet (up to ~500ms at 60fps).
|
|
89
|
+
let raf
|
|
90
|
+
let attempts = 0
|
|
91
|
+
const tryRestore = () => {
|
|
92
|
+
window.scrollTo(0, saved)
|
|
93
|
+
if (Math.abs(window.scrollY - saved) > 5 && attempts < 30) {
|
|
94
|
+
attempts++
|
|
95
|
+
raf = requestAnimationFrame(tryRestore)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
raf = requestAnimationFrame(tryRestore)
|
|
99
|
+
|
|
100
|
+
return () => cancelAnimationFrame(raf)
|
|
101
|
+
} else {
|
|
102
|
+
window.scrollTo(0, 0)
|
|
103
|
+
}
|
|
104
|
+
}, [location.key, navigationType, enabled, resetBlockStates, location.hash])
|
|
108
105
|
}
|
|
109
106
|
|
|
110
107
|
export default useRememberScroll
|