neurogrid-layout
Version:
🧠NeuroGrid — content-aware adaptive layout for React
31 lines (28 loc) • 15 kB
JavaScript
(function(C,w){typeof exports=="object"&&typeof module<"u"?w(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],w):(C=typeof globalThis<"u"?globalThis:C||self,w(C.NeuroGrid={},C.React))})(this,function(C,w){"use strict";var z={exports:{}},I={};/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Q;function Ce(){if(Q)return I;Q=1;var Y=w,_=Symbol.for("react.element"),g=Symbol.for("react.fragment"),T=Object.prototype.hasOwnProperty,R=Y.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,k={key:!0,ref:!0,__self:!0,__source:!0};function P(b,a,f){var l,c={},E=null,O=null;f!==void 0&&(E=""+f),a.key!==void 0&&(E=""+a.key),a.ref!==void 0&&(O=a.ref);for(l in a)T.call(a,l)&&!k.hasOwnProperty(l)&&(c[l]=a[l]);if(b&&b.defaultProps)for(l in a=b.defaultProps,a)c[l]===void 0&&(c[l]=a[l]);return{$$typeof:_,type:b,key:E,ref:O,props:c,_owner:R.current}}return I.Fragment=g,I.jsx=P,I.jsxs=P,I}var W={};/**
* @license React
* react-jsx-runtime.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var ee;function Pe(){return ee||(ee=1,process.env.NODE_ENV!=="production"&&function(){var Y=w,_=Symbol.for("react.element"),g=Symbol.for("react.portal"),T=Symbol.for("react.fragment"),R=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),P=Symbol.for("react.provider"),b=Symbol.for("react.context"),a=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),l=Symbol.for("react.suspense_list"),c=Symbol.for("react.memo"),E=Symbol.for("react.lazy"),O=Symbol.for("react.offscreen"),re=Symbol.iterator,ke="@@iterator";function Ae(e){if(e===null||typeof e!="object")return null;var r=re&&e[re]||e[ke];return typeof r=="function"?r:null}var A=Y.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function p(e){{for(var r=arguments.length,t=new Array(r>1?r-1:0),n=1;n<r;n++)t[n-1]=arguments[n];Fe("error",e,t)}}function Fe(e,r,t){{var n=A.ReactDebugCurrentFrame,u=n.getStackAddendum();u!==""&&(r+="%s",t=t.concat([u]));var s=t.map(function(o){return String(o)});s.unshift("Warning: "+r),Function.prototype.apply.call(console[e],console,s)}}var De=!1,Ie=!1,We=!1,Ye=!1,Le=!1,te;te=Symbol.for("react.module.reference");function $e(e){return!!(typeof e=="string"||typeof e=="function"||e===T||e===k||Le||e===R||e===f||e===l||Ye||e===O||De||Ie||We||typeof e=="object"&&e!==null&&(e.$$typeof===E||e.$$typeof===c||e.$$typeof===P||e.$$typeof===b||e.$$typeof===a||e.$$typeof===te||e.getModuleId!==void 0))}function Me(e,r,t){var n=e.displayName;if(n)return n;var u=r.displayName||r.name||"";return u!==""?t+"("+u+")":t}function ne(e){return e.displayName||"Context"}function S(e){if(e==null)return null;if(typeof e.tag=="number"&&p("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case T:return"Fragment";case g:return"Portal";case k:return"Profiler";case R:return"StrictMode";case f:return"Suspense";case l:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case b:var r=e;return ne(r)+".Consumer";case P:var t=e;return ne(t._context)+".Provider";case a:return Me(e,e.render,"ForwardRef");case c:var n=e.displayName||null;return n!==null?n:S(e.type)||"Memo";case E:{var u=e,s=u._payload,o=u._init;try{return S(o(s))}catch{return null}}}return null}var j=Object.assign,L=0,ae,ie,oe,ue,se,le,fe;function ce(){}ce.__reactDisabledLog=!0;function Ne(){{if(L===0){ae=console.log,ie=console.info,oe=console.warn,ue=console.error,se=console.group,le=console.groupCollapsed,fe=console.groupEnd;var e={configurable:!0,enumerable:!0,value:ce,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}L++}}function Ve(){{if(L--,L===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:j({},e,{value:ae}),info:j({},e,{value:ie}),warn:j({},e,{value:oe}),error:j({},e,{value:ue}),group:j({},e,{value:se}),groupCollapsed:j({},e,{value:le}),groupEnd:j({},e,{value:fe})})}L<0&&p("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var B=A.ReactCurrentDispatcher,G;function M(e,r,t){{if(G===void 0)try{throw Error()}catch(u){var n=u.stack.trim().match(/\n( *(at )?)/);G=n&&n[1]||""}return`
`+G+e}}var q=!1,N;{var Ue=typeof WeakMap=="function"?WeakMap:Map;N=new Ue}function de(e,r){if(!e||q)return"";{var t=N.get(e);if(t!==void 0)return t}var n;q=!0;var u=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var s;s=B.current,B.current=null,Ne();try{if(r){var o=function(){throw Error()};if(Object.defineProperty(o.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(o,[])}catch(y){n=y}Reflect.construct(e,[],o)}else{try{o.call()}catch(y){n=y}e.call(o.prototype)}}else{try{throw Error()}catch(y){n=y}e()}}catch(y){if(y&&n&&typeof y.stack=="string"){for(var i=y.stack.split(`
`),h=n.stack.split(`
`),d=i.length-1,v=h.length-1;d>=1&&v>=0&&i[d]!==h[v];)v--;for(;d>=1&&v>=0;d--,v--)if(i[d]!==h[v]){if(d!==1||v!==1)do if(d--,v--,v<0||i[d]!==h[v]){var m=`
`+i[d].replace(" at new "," at ");return e.displayName&&m.includes("<anonymous>")&&(m=m.replace("<anonymous>",e.displayName)),typeof e=="function"&&N.set(e,m),m}while(d>=1&&v>=0);break}}}finally{q=!1,B.current=s,Ve(),Error.prepareStackTrace=u}var D=e?e.displayName||e.name:"",x=D?M(D):"";return typeof e=="function"&&N.set(e,x),x}function ze(e,r,t){return de(e,!1)}function Be(e){var r=e.prototype;return!!(r&&r.isReactComponent)}function V(e,r,t){if(e==null)return"";if(typeof e=="function")return de(e,Be(e));if(typeof e=="string")return M(e);switch(e){case f:return M("Suspense");case l:return M("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case a:return ze(e.render);case c:return V(e.type,r,t);case E:{var n=e,u=n._payload,s=n._init;try{return V(s(u),r,t)}catch{}}}return""}var $=Object.prototype.hasOwnProperty,ve={},pe=A.ReactDebugCurrentFrame;function U(e){if(e){var r=e._owner,t=V(e.type,e._source,r?r.type:null);pe.setExtraStackFrame(t)}else pe.setExtraStackFrame(null)}function Ge(e,r,t,n,u){{var s=Function.call.bind($);for(var o in e)if(s(e,o)){var i=void 0;try{if(typeof e[o]!="function"){var h=Error((n||"React class")+": "+t+" type `"+o+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[o]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw h.name="Invariant Violation",h}i=e[o](r,o,n,t,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(d){i=d}i&&!(i instanceof Error)&&(U(u),p("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",n||"React class",t,o,typeof i),U(null)),i instanceof Error&&!(i.message in ve)&&(ve[i.message]=!0,U(u),p("Failed %s type: %s",t,i.message),U(null))}}}var qe=Array.isArray;function J(e){return qe(e)}function Je(e){{var r=typeof Symbol=="function"&&Symbol.toStringTag,t=r&&e[Symbol.toStringTag]||e.constructor.name||"Object";return t}}function Ke(e){try{return he(e),!1}catch{return!0}}function he(e){return""+e}function ge(e){if(Ke(e))return p("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Je(e)),he(e)}var ye=A.ReactCurrentOwner,Xe={key:!0,ref:!0,__self:!0,__source:!0},Ee,me;function He(e){if($.call(e,"ref")){var r=Object.getOwnPropertyDescriptor(e,"ref").get;if(r&&r.isReactWarning)return!1}return e.ref!==void 0}function Ze(e){if($.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function Qe(e,r){typeof e.ref=="string"&&ye.current}function er(e,r){{var t=function(){Ee||(Ee=!0,p("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};t.isReactWarning=!0,Object.defineProperty(e,"key",{get:t,configurable:!0})}}function rr(e,r){{var t=function(){me||(me=!0,p("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};t.isReactWarning=!0,Object.defineProperty(e,"ref",{get:t,configurable:!0})}}var tr=function(e,r,t,n,u,s,o){var i={$$typeof:_,type:e,key:r,ref:t,props:o,_owner:s};return i._store={},Object.defineProperty(i._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(i,"_self",{configurable:!1,enumerable:!1,writable:!1,value:n}),Object.defineProperty(i,"_source",{configurable:!1,enumerable:!1,writable:!1,value:u}),Object.freeze&&(Object.freeze(i.props),Object.freeze(i)),i};function nr(e,r,t,n,u){{var s,o={},i=null,h=null;t!==void 0&&(ge(t),i=""+t),Ze(r)&&(ge(r.key),i=""+r.key),He(r)&&(h=r.ref,Qe(r,u));for(s in r)$.call(r,s)&&!Xe.hasOwnProperty(s)&&(o[s]=r[s]);if(e&&e.defaultProps){var d=e.defaultProps;for(s in d)o[s]===void 0&&(o[s]=d[s])}if(i||h){var v=typeof e=="function"?e.displayName||e.name||"Unknown":e;i&&er(o,v),h&&rr(o,v)}return tr(e,i,h,u,n,ye.current,o)}}var K=A.ReactCurrentOwner,be=A.ReactDebugCurrentFrame;function F(e){if(e){var r=e._owner,t=V(e.type,e._source,r?r.type:null);be.setExtraStackFrame(t)}else be.setExtraStackFrame(null)}var X;X=!1;function H(e){return typeof e=="object"&&e!==null&&e.$$typeof===_}function Re(){{if(K.current){var e=S(K.current.type);if(e)return`
Check the render method of \``+e+"`."}return""}}function ar(e){return""}var _e={};function ir(e){{var r=Re();if(!r){var t=typeof e=="string"?e:e.displayName||e.name;t&&(r=`
Check the top-level render call using <`+t+">.")}return r}}function we(e,r){{if(!e._store||e._store.validated||e.key!=null)return;e._store.validated=!0;var t=ir(r);if(_e[t])return;_e[t]=!0;var n="";e&&e._owner&&e._owner!==K.current&&(n=" It was passed a child from "+S(e._owner.type)+"."),F(e),p('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',t,n),F(null)}}function Te(e,r){{if(typeof e!="object")return;if(J(e))for(var t=0;t<e.length;t++){var n=e[t];H(n)&&we(n,r)}else if(H(e))e._store&&(e._store.validated=!0);else if(e){var u=Ae(e);if(typeof u=="function"&&u!==e.entries)for(var s=u.call(e),o;!(o=s.next()).done;)H(o.value)&&we(o.value,r)}}}function or(e){{var r=e.type;if(r==null||typeof r=="string")return;var t;if(typeof r=="function")t=r.propTypes;else if(typeof r=="object"&&(r.$$typeof===a||r.$$typeof===c))t=r.propTypes;else return;if(t){var n=S(r);Ge(t,e.props,"prop",n,e)}else if(r.PropTypes!==void 0&&!X){X=!0;var u=S(r);p("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",u||"Unknown")}typeof r.getDefaultProps=="function"&&!r.getDefaultProps.isReactClassApproved&&p("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function ur(e){{for(var r=Object.keys(e.props),t=0;t<r.length;t++){var n=r[t];if(n!=="children"&&n!=="key"){F(e),p("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",n),F(null);break}}e.ref!==null&&(F(e),p("Invalid attribute `ref` supplied to `React.Fragment`."),F(null))}}var Oe={};function Se(e,r,t,n,u,s){{var o=$e(e);if(!o){var i="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(i+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var h=ar();h?i+=h:i+=Re();var d;e===null?d="null":J(e)?d="array":e!==void 0&&e.$$typeof===_?(d="<"+(S(e.type)||"Unknown")+" />",i=" Did you accidentally export a JSX literal instead of a component?"):d=typeof e,p("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",d,i)}var v=nr(e,r,t,u,s);if(v==null)return v;if(o){var m=r.children;if(m!==void 0)if(n)if(J(m)){for(var D=0;D<m.length;D++)Te(m[D],e);Object.freeze&&Object.freeze(m)}else p("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Te(m,e)}if($.call(r,"key")){var x=S(e),y=Object.keys(r).filter(function(vr){return vr!=="key"}),Z=y.length>0?"{key: someKey, "+y.join(": ..., ")+": ...}":"{key: someKey}";if(!Oe[x+Z]){var dr=y.length>0?"{"+y.join(": ..., ")+": ...}":"{}";p(`A props object containing a "key" prop is being spread into JSX:
let props = %s;
<%s {...props} />
React keys must be passed directly to JSX without using spread:
let props = %s;
<%s key={someKey} {...props} />`,Z,x,dr,x),Oe[x+Z]=!0}}return e===T?ur(v):or(v),v}}function sr(e,r,t){return Se(e,r,t,!0)}function lr(e,r,t){return Se(e,r,t,!1)}var fr=lr,cr=sr;W.Fragment=T,W.jsx=fr,W.jsxs=cr}()),W}process.env.NODE_ENV==="production"?z.exports=Ce():z.exports=Pe();var je=z.exports;const xe=({children:Y})=>{const _=w.useRef(null);return w.useEffect(()=>{if(!_.current)return;const g=Array.from(_.current.querySelectorAll(".neuro-block")),T=()=>{g.forEach(a=>{const f=a.scrollHeight,l=a.querySelectorAll(".mini").length,c=f+l*50;a.hasAttribute("data-size-manual")||(c>500?a.dataset.size="full":c>300?a.dataset.size="wide":a.removeAttribute("data-size"))})},R=(a,f)=>a.dataset.size==="full"?f:a.dataset.size==="wide"?Math.min(2,f):1,k=()=>{let a=window.innerWidth<=600?1:window.innerWidth<=900?2:3;g.forEach(l=>l.style.gridColumn="");let f=0;for(let l=0;l<g.length;l++){const c=R(g[l],a);if(f+c>a){const E=a-f,O=g[l-1];O&&(O.style.gridColumn=`span ${R(O,a)+E}`),f=0}f=(f+c)%a}if(f){const l=a-f,c=g.at(-1);c&&(c.style.gridColumn=`span ${R(c,a)+l}`)}},P=()=>{let a=window.innerWidth<=600?1:window.innerWidth<=900?2:3,f=0;for(let E=0;E<g.length;E++)f=(f+R(g[E],a))%a;if(a===1||f===0)return;const l=a-f,c=g.at(-1);c&&(c.style.gridColumn=`span ${R(c,a)+l}`)},b=()=>{g.forEach(a=>{a.style.gridColumn="",a.removeAttribute("data-force-row")}),T(),P(),k()};return b(),window.addEventListener("resize",()=>requestAnimationFrame(b)),()=>window.removeEventListener("resize",()=>requestAnimationFrame(b))},[]),je.jsx("div",{className:"neuro-grid",ref:_,children:Y})};C.NeuroGrid=xe,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});