{"version":3,"file":"react-gallery-layouts.mjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/utils.ts","../src/hooks/useWindowResize.ts","../src/components/GridGallery.tsx","../src/components/JustifiedGallery.tsx","../src/components/MasonryGallery.tsx","../src/components/StackGallery.tsx","../src/components/Gallery.tsx"],"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","/**\n * @license React\n * react-jsx-runtime.development.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\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%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).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%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)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%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)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\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","import { GalleryColumns, GalleryGutter, GalleryItem, WindowSize } from './types';\n/**\n * Calculate aspect ratio from width and height\n */\nexport const calculateAspectRatio = (width: number, height: number): number => {\n  return width / height;\n};\n\n/**\n * Normalize all items to ensure they have aspect ratio\n */\nexport const normalizeItems = (items: GalleryItem[]): GalleryItem[] => {\n  return items.map(item => {\n    // If item already has aspectRatio, use it\n    if (item.aspectRatio) {\n      return item;\n    }\n    \n    // If item has width and height, calculate aspect ratio\n    if (item.width && item.height) {\n      return {\n        ...item,\n        aspectRatio: calculateAspectRatio(item.width, item.height)\n      };\n    }\n    \n    // Default to square aspect ratio if no dimensions provided\n    return {\n      ...item,\n      aspectRatio: 1\n    };\n  });\n};\n\n/**\n * Calculate width for an item given a target height and aspect ratio\n */\nexport const calculateWidth = (height: number, aspectRatio: number): number => {\n  return height * aspectRatio;\n};\n\n/**\n * Calculate height for an item given a target width and aspect ratio\n */\nexport const calculateHeight = (width: number, aspectRatio: number): number => {\n  return width / aspectRatio;\n};\n\n/**\n * Determine how many columns to use based on responsive settings\n */\nexport const getColumnsCount = (columns: GalleryColumns = 3, windowSize: WindowSize): number => {\n  if (typeof columns === 'number') {\n    return columns;\n  }\n  \n  // For SSR, return a default value\n  if (typeof window === 'undefined') {\n    return columns.default || 3;\n  }\n  \n  const breakpoints = Object.keys(columns)\n    .filter(breakpoint => breakpoint !== 'default')\n    .map(Number)\n    .sort((a, b) => a - b);\n  \n  for (let i = breakpoints.length - 1; i >= 0; i--) {\n    if (windowSize.width >= breakpoints[i]) {\n      return columns[breakpoints[i]];\n    }\n  }\n  \n  return columns.default || 3;\n}; \n\n/**\n * Determine how many columns to use based on responsive settings\n */\nexport const getGutter = (gutter: GalleryGutter = 10, windowSize: WindowSize): number => {\n  if (typeof gutter === 'number') {\n    return gutter;\n  }\n  // for SSR, return a default value\n  if (typeof window === 'undefined') {\n    return gutter.default || 10;\n  }\n\n  const breakpoints = Object.keys(gutter)\n    .filter(breakpoint => breakpoint !== 'default')\n    .map(Number)\n    .sort((a, b) => a - b);\n\n  for (let i = breakpoints.length - 1; i >= 0; i--) {\n    if (windowSize.width >= breakpoints[i]) {\n      return gutter[breakpoints[i]];\n    }\n  }\n\n  return gutter.default || 10;\n};\n\n\n\nexport const debounce = (func: Function, delay: number) => {\n  let timeout: NodeJS.Timeout;\n  return (...args: any[]) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func(...args), delay);\n  };\n};","import { useEffect, useState } from 'react';\nimport { WindowSize } from '../types';\nimport { debounce } from '../utils';\n\nconst useWindowResize = (): WindowSize => {\n  const [windowSize, setWindowSize] = useState<WindowSize>({\n    width: typeof window !== 'undefined' ? window.innerWidth : 0,\n    height: typeof window !== 'undefined' ? window.innerHeight : 0,\n  });\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n\n    const handleResize = debounce(() => {\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight,\n      });\n    }, 300); // 300ms debounce delay\n\n    window.addEventListener('resize', handleResize);\n    \n    // Call handler right away to update initial size\n    handleResize();\n\n    return () => window.removeEventListener('resize', handleResize);\n  }, []);\n\n  return windowSize;\n};\n\nexport default useWindowResize;\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { GridGalleryProps, GalleryItem } from '../types';\nimport { getColumnsCount, getGutter } from '../utils';\nimport useWindowResize from '../hooks/useWindowResize';\nimport '../styles/gallery.css';\n\ninterface GridGalleryItemProps {\n  item: GalleryItem;\n  index: number;\n  itemHeight: number;\n  aspectRatio?: number;\n  gutterSize: number;\n  itemClassName?: string;\n  itemWidth: number;\n  itemStyle?: React.CSSProperties;\n  lazyLoad?: boolean;\n  maxColSpan?: number;\n  onItemClick?: (item: GalleryItem, index: number) => void;\n  renderItem?: (item: GalleryItem, lazyLoad: boolean, index: number) => React.ReactNode;\n}\n\nconst GridGalleryItem: React.FC<GridGalleryItemProps> = ({\n  item,\n  index,\n  itemHeight,\n  aspectRatio,\n  gutterSize,\n  itemClassName = '',\n  itemStyle = {},\n  itemWidth,\n  onItemClick,\n  renderItem,\n  lazyLoad = false,\n  maxColSpan = 12,\n}) => {\n  const colSpan = item.colSpan || 1;\n  const rowSpan = item.rowSpan || 1;\n\n  const [$itemHeight, setItemHeight] = useState(itemHeight);\n\n  useEffect(() => {\n    const effectiveAspectRatio = item.aspectRatio || aspectRatio;\n    setItemHeight(effectiveAspectRatio ? itemWidth / effectiveAspectRatio : itemHeight);\n  }, [itemHeight, aspectRatio, item.aspectRatio, itemWidth]);\n\n  const defaultRenderItem = (item: GalleryItem, index: number) => (\n    <img\n      src={item.src}\n      alt={item.alt || `Gallery item ${index}`}\n      loading={lazyLoad ? \"lazy\" : undefined}\n    />\n  );\n\n  return (\n    <div\n      className={`gallery-item gallery-item-grid ${itemClassName}`}\n      style={{\n        gridColumn: `span ${Math.min(colSpan, maxColSpan)}`,\n        gridRow: `span ${rowSpan}`,\n        height: $itemHeight * rowSpan + gutterSize * (rowSpan - 1),\n        ...itemStyle,\n      }}\n      onClick={onItemClick ? () => onItemClick(item, index) : undefined}\n    >\n      {renderItem\n        ? renderItem(item, lazyLoad, index)\n        : defaultRenderItem(item, index)\n      }\n    </div>\n  );\n};\n\nconst GridGallery: React.FC<GridGalleryProps> = ({\n  items,\n  columns = 3,\n  gutter = 10,\n  itemHeight = 200,\n  aspectRatio,\n  className = '',\n  containerWidth,\n  style = {},\n  itemClassName = '',\n  itemStyle = {},\n  lazyLoad = false,\n  onItemClick,\n  renderItem,\n}) => {\n  const windowSize = useWindowResize();\n  const columnsCount = useMemo(() => getColumnsCount(columns, windowSize), [columns, windowSize]);\n\n  // Calculate the effective gutter value\n  const gutterSize = useMemo(() => getGutter(gutter, windowSize), [gutter, windowSize]);\n  const itemWidth = useMemo(() => ((containerWidth - gutterSize * (columnsCount - 1))) / columnsCount, [containerWidth, gutterSize, columnsCount]);\n\n  return (\n    <div\n      className={`gallery-layout layout-grid ${className}`}\n      style={{\n        gridTemplateColumns: `repeat(${columnsCount}, 1fr)`,\n        gap: gutterSize,\n        ...style\n      }}\n    >\n      {items.map((item, index) => (\n        <GridGalleryItem\n          key={item.id || `grid-item-${index}`}\n          item={item}\n          index={index}\n          itemWidth={itemWidth}\n          itemHeight={itemHeight}\n          aspectRatio={aspectRatio}\n          gutterSize={gutterSize}\n          itemClassName={itemClassName}\n          itemStyle={itemStyle}\n          onItemClick={onItemClick}\n          renderItem={renderItem}\n          lazyLoad={lazyLoad}\n          maxColSpan={columnsCount}\n        />\n      ))}\n    </div>\n  );\n};\n\nexport default GridGallery; ","import React, { useMemo } from 'react';\nimport { JustifiedGalleryProps, GalleryItem } from '../types';\nimport { normalizeItems, calculateWidth, getGutter } from '../utils';\nimport useWindowResize from '../hooks/useWindowResize';\nimport '../styles/gallery.css';\n\ninterface RowItem extends GalleryItem {\n  calculatedWidth: number;\n  calculatedHeight: number;\n}\n\ninterface Row {\n  items: RowItem[];\n  width: number;\n}\n\nconst JustifiedGallery: React.FC<JustifiedGalleryProps> = ({\n  items,\n  targetRowHeight = 200,\n  containerWidth,\n  maxRowHeight = 400,\n  containerPadding = 0,\n  gutter = 10,\n  renderItem,\n  className = '',\n  style = {},\n  itemClassName = '',\n  itemStyle = {},\n  onItemClick,\n  lazyLoad = false,\n}) => {\n  const windowSize = useWindowResize();\n  const normalizedItems = useMemo(() => normalizeItems(items), [items]);\n  const gutterSize = useMemo(() => getGutter(gutter, windowSize), [gutter, windowSize]);\n  // Calculate rows - handle colSpan by adjusting aspect ratio\n  const rows = useMemo(() => {\n    if (!containerWidth) {\n      return [];\n    }\n    \n    const availableWidth = containerWidth - (2 * containerPadding);\n    const rows: Row[] = [];\n    let currentRow: RowItem[] = [];\n    let currentRowWidth = 0;\n    \n    // Process items with colSpan values considered\n    normalizedItems.forEach((item) => {\n      if (!item.aspectRatio) return;\n      \n      // Adjust the aspect ratio based on colSpan\n      const colSpan = item.colSpan || 1;\n      const effectiveAspectRatio = item.aspectRatio * colSpan;\n      \n      // Calculate item width based on target height and adjusted aspect ratio\n      const itemWidth = calculateWidth(targetRowHeight, effectiveAspectRatio);\n      \n      // Add item to current row if it fits\n      const newRowItem: RowItem = {\n        ...item,\n        calculatedWidth: itemWidth,\n        calculatedHeight: targetRowHeight,\n      };\n      \n      // If adding this item would exceed available width, complete the row\n      if (currentRow.length > 0 && currentRowWidth + itemWidth + (gutterSize * currentRow.length) > availableWidth) {\n        // Calculate scaling factor to fit items in the row\n        const rowWidth = currentRowWidth + (gutterSize * (currentRow.length - 1));\n        const scaleFactor = Math.min(availableWidth / rowWidth, maxRowHeight / targetRowHeight);\n        \n        // Scale items to fit\n        const scaledRow = currentRow.map(rowItem => ({\n          ...rowItem,\n          calculatedWidth: rowItem.calculatedWidth * scaleFactor,\n          calculatedHeight: rowItem.calculatedHeight * scaleFactor,\n        }));\n        \n        rows.push({\n          items: scaledRow,\n          width: rowWidth * scaleFactor,\n        });\n        \n        // Start a new row with the current item\n        currentRow = [newRowItem];\n        currentRowWidth = itemWidth;\n      } else {\n        // Add to current row\n        currentRow.push(newRowItem);\n        currentRowWidth += itemWidth;\n      }\n    });\n    \n    // Handle last row\n    if (currentRow.length > 0) {\n      const rowWidth = currentRowWidth + (gutterSize * (currentRow.length - 1));\n      \n      // For the last row, we can either justify it or left-align it\n      // Here we're opting to justify it like other rows for consistency\n      const scaleFactor = Math.min(availableWidth / rowWidth, maxRowHeight / targetRowHeight);\n      \n      const scaledRow = currentRow.map(rowItem => ({\n        ...rowItem,\n        calculatedWidth: rowItem.calculatedWidth * scaleFactor,\n        calculatedHeight: rowItem.calculatedHeight * scaleFactor,\n      }));\n      \n      rows.push({\n        items: scaledRow,\n        width: rowWidth * scaleFactor,\n      });\n    }\n    \n    return rows;\n  }, [normalizedItems, containerWidth, targetRowHeight, maxRowHeight, containerPadding, gutter]);\n  \n  const defaultRenderItem = (item: GalleryItem, index: number) => (\n    <img \n      src={item.src} \n      alt={item.alt || `Gallery item ${index}`}\n      loading={lazyLoad ? \"lazy\" : undefined}\n    />\n  );\n\n  return (\n    <div \n      className={`gallery-layout layout-justified ${className}`}\n      style={{ \n        padding: containerPadding,\n        ...style \n      }}\n    >\n      {rows.map((row, rowIndex) => (\n        <div \n          key={`row-${rowIndex}`}\n          className={`gallery-row`}\n          style={{ \n            marginBottom: rowIndex < rows.length - 1 ? gutterSize : 0,\n          }}\n        >\n          {row.items.map((item, itemIndex) => {\n            const itemKey = item.id || `justified-item-${rowIndex}-${itemIndex}`;\n            return (\n              <div \n                key={itemKey}\n                className={`gallery-item gallery-item-justified ${itemClassName}`}\n                style={{\n                  width: item.calculatedWidth,\n                  height: item.calculatedHeight,\n                  marginRight: itemIndex < row.items.length - 1 ? gutterSize : 0,\n                  ...itemStyle,\n                }}\n                onClick={onItemClick ? () => onItemClick(item, itemIndex) : undefined}\n              >\n                {renderItem \n                  ? renderItem(item, lazyLoad, itemIndex) \n                  : defaultRenderItem(item, itemIndex)\n                }\n              </div>\n            );\n          })}\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport default JustifiedGallery; ","import React, { useMemo } from 'react';\nimport { MasonryGalleryProps, GalleryItem } from '../types';\nimport { normalizeItems, getColumnsCount, getGutter } from '../utils';\nimport useWindowResize from '../hooks/useWindowResize';\nimport '../styles/gallery.css';\n\nconst MasonryGallery: React.FC<MasonryGalleryProps> = ({\n  items,\n  containerWidth,\n  columns = 3,\n  gutter = 10,\n  renderItem,\n  className = '',\n  style = {},\n  itemClassName = '',\n  itemStyle = {},\n  onItemClick,\n  lazyLoad = false,\n}) => {\n  const normalizedItems = useMemo(() => normalizeItems(items), [items]);\n  const windowSize = useWindowResize();\n  const columnsCount = useMemo(() => getColumnsCount(columns, windowSize), [columns, windowSize]);\n  const gutterSize = useMemo(() => getGutter(gutter, windowSize), [gutter, windowSize]);\n\n  const { itemsWithPosition, containerHeight } = useMemo(() => {\n    // Khởi tạo mảng theo dõi chiều cao các cột\n    const colYs: number[] = Array(columnsCount).fill(0);\n    let maxY = 0;\n\n    // Tính toán kích thước cột và gutter\n    const availableWidth = containerWidth || windowSize.width;\n    const columnWidth = Math.floor((availableWidth - (columnsCount - 1) * gutterSize) / columnsCount);\n    const effectiveGutter = gutterSize;\n\n    const itemsWithPosition = normalizedItems.map((item) => {\n      // Tính toán số cột mà item sẽ chiếm\n      const colSpan = Math.min(item.colSpan || 1, columnsCount);\n      \n      // Tìm vị trí tốt nhất cho item\n      let bestCol = 0;\n      let minY = Infinity;\n\n      // Tìm nhóm cột có chiều cao thấp nhất\n      for (let col = 0; col <= columnsCount - colSpan; col++) {\n        const groupHeight = Math.max(...colYs.slice(col, col + colSpan));\n        if (groupHeight < minY) {\n          minY = groupHeight;\n          bestCol = col;\n        }\n      }\n\n      // Tính toán chiều cao dựa trên tỷ lệ khung hình\n      const aspectRatio = item.height && item.width \n        ? item.height / item.width \n        : 1; // Fallback ratio\n      \n      const itemWidth = (columnWidth * colSpan) + ((colSpan - 1) * effectiveGutter);\n      const height = Math.round(aspectRatio * columnWidth);\n\n      // Cập nhật chiều cao cho các cột bị ảnh hưởng\n      for (let col = bestCol; col < bestCol + colSpan; col++) {\n        colYs[col] = minY + height + effectiveGutter;\n      }\n\n      // Cập nhật maxY\n      maxY = Math.max(maxY, minY + height + effectiveGutter);\n\n      // Tính toán vị trí tuyệt đối\n      const left = bestCol * (columnWidth + effectiveGutter);\n      const top = minY;\n\n      return {\n        ...item,\n        position: {\n          left: `${left}px`,\n          top: `${top}px`,\n          width: `${itemWidth}px`,\n          height: `${height}px`,\n        },\n      };\n    });\n\n    return {\n      itemsWithPosition,\n      containerHeight: maxY,\n    };\n  }, [normalizedItems, columnsCount, gutterSize, containerWidth, windowSize.width]);\n\n  const defaultRenderItem = (item: GalleryItem, index: number) => (\n    <img \n      src={item.src} \n      alt={item.alt || `Gallery item ${index}`}\n      loading={lazyLoad ? \"lazy\" : undefined}\n    />\n  );\n\n  return (\n    <div \n      className={`gallery-layout layout-masonry ${className}`}\n      style={{ \n        height: `${containerHeight}px`,\n        width: containerWidth ? `${containerWidth}px` : '100%',\n        ...style \n      }}\n    >\n      {itemsWithPosition.map((item, index) => {\n        const itemKey = item.id || `item-${index}`;\n        \n        return (\n          <div \n            key={itemKey}\n            className={`gallery-item gallery-item-masonry ${itemClassName}`}\n            style={{\n              position: 'absolute',\n              ...item.position,\n              ...itemStyle,\n            }}\n            onClick={onItemClick ? () => onItemClick(item, index) : undefined}\n          >\n            {renderItem \n              ? renderItem(item, lazyLoad, index) \n              : defaultRenderItem(item, index)\n            }\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default MasonryGallery;","import React, { useMemo } from 'react';\nimport { StackGalleryProps, GalleryItem } from '../types';\nimport { getColumnsCount, normalizeItems, getGutter } from '../utils';\nimport useWindowResize from '../hooks/useWindowResize';\nimport '../styles/gallery.css';\n\nconst StackGallery: React.FC<StackGalleryProps> = ({\n  items,\n  gutter = 10,\n  columns = 3,\n  maxWidth = '100%',\n  alignment = 'flex-start',\n  renderItem,\n  className = '',\n  style = {},\n  itemClassName = '',\n  itemStyle = {},\n  onItemClick,\n  lazyLoad = false,\n}) => {\n  const windowSize = useWindowResize();\n  const normalizedItems = useMemo(() => normalizeItems(items), [items]);\n  const columnsCount = useMemo(() => getColumnsCount(columns, windowSize), [columns, windowSize]);\n\n  // Calculate the effective gutter value\n  const gutterSize = useMemo(() => getGutter(gutter, windowSize), [gutter, windowSize]);\n\n  const defaultRenderItem = (item: GalleryItem, index: number) => (\n    <img\n      src={item.src}\n      alt={item.alt || `Gallery item ${index}`}\n      loading={lazyLoad ? \"lazy\" : undefined}\n    />\n  );\n\n  return (\n    <div\n      className={`gallery-layout layout-stack ${className}`}\n      style={{\n        width: maxWidth,\n        gap: gutterSize,\n        alignItems: alignment,\n        ...style\n      }}\n    >\n      {normalizedItems.map((item, index) => {\n        const itemKey = item.id || `stack-item-${index}`;\n        const colSpan = Math.min(item.colSpan || 1, columnsCount);\n        const rowSpan = item.rowSpan || 1;\n\n        // Calculate the width of this item based on colSpan\n        const itemWidth = `calc(${(100 / columnsCount) * colSpan}% - ${(columnsCount - colSpan) * gutterSize / columnsCount}px)`;\n\n        return (\n          <div\n            key={itemKey}\n            className={`gallery-item gallery-item-stack ${itemClassName}`}\n            style={{\n              width: '100%',\n              height: rowSpan > 1 ? `calc(100% + ${gutterSize}px * ${rowSpan - 1})` : '100%',\n              flexBasis: itemWidth,\n              flexGrow: 0,\n              flexShrink: 0,\n              marginBottom: rowSpan > 1 ? `calc(${gutterSize}px * ${rowSpan - 1})` : 0,\n              ...itemStyle,\n            }}\n            onClick={onItemClick ? () => onItemClick(item, index) : undefined}\n          >\n            {renderItem\n              ? renderItem(item, lazyLoad, index)\n              : defaultRenderItem(item, index)\n            }\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default StackGallery; ","import React, { useEffect, useRef, useState } from 'react';\nimport { GalleryProps } from '../types';\nimport GridGallery from './GridGallery';\nimport JustifiedGallery from './JustifiedGallery';\nimport MasonryGallery from './MasonryGallery';\nimport StackGallery from './StackGallery';\nimport '../styles/gallery.css';\n\nconst Gallery: React.FC<GalleryProps> = ({\n  items,\n  layout = 'masonry',\n  layoutOptions = {},\n  className = '',\n  style = {},\n  itemClassName = '',\n  itemStyle = {},\n  lazyLoad = false,\n  renderItem,\n  onItemClick,\n}) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n\n  // Update container width when window resizes\n  useEffect(() => {\n    const updateContainerWidth = () => {\n      if (containerRef.current) {\n        setContainerWidth(containerRef.current.clientWidth);\n      }\n    };\n\n    // Initial measurement\n    updateContainerWidth();\n\n    // Add resize listener\n    window.addEventListener('resize', updateContainerWidth);\n\n    // Clean up\n    return () => {\n      window.removeEventListener('resize', updateContainerWidth);\n    };\n  }, []);\n\n  // Render the appropriate gallery layout\n  const renderGallery = () => {\n    const commonProps = {\n      items,\n      renderItem,\n      className,\n      style,\n      itemClassName,\n      itemStyle,\n      onItemClick,\n      lazyLoad,\n    };\n\n    switch (layout) {\n      case 'masonry':\n        return (\n          <MasonryGallery\n            {...commonProps}\n            containerWidth={containerWidth}\n            columns={layoutOptions.masonry?.columns}\n            gutter={layoutOptions.masonry?.gutter}\n          />\n        );\n      case 'grid':\n        return (\n          <GridGallery\n            {...commonProps}\n            containerWidth={containerWidth}\n            columns={layoutOptions.grid?.columns}\n            gutter={layoutOptions.grid?.gutter}\n            itemHeight={layoutOptions.grid?.itemHeight}\n            aspectRatio={layoutOptions.grid?.aspectRatio}\n          />\n        );\n      case 'stack':\n        return (\n          <StackGallery\n            {...commonProps}\n            columns={layoutOptions.stack?.columns}\n            gutter={layoutOptions.stack?.gutter}\n            maxWidth={layoutOptions.stack?.maxWidth}\n          />\n        );\n      case 'justified':\n        return (\n          <JustifiedGallery\n            {...commonProps}\n            containerWidth={containerWidth}\n            targetRowHeight={layoutOptions.justified?.targetRowHeight}\n            maxRowHeight={layoutOptions.justified?.maxRowHeight}\n            containerPadding={layoutOptions.justified?.containerPadding}\n            gutter={layoutOptions.justified?.gutter}\n          />\n        );\n      default:\n        return (\n          <MasonryGallery\n            {...commonProps}\n            containerWidth={containerWidth}\n            columns={layoutOptions.masonry?.columns}\n            gutter={layoutOptions.masonry?.gutter}\n          />\n        );\n    }\n  };\n\n  return (\n    <div\n      ref={containerRef}\n      className={`gallery-container ${className}`}\n      style={style}\n    >\n      {renderGallery()}\n    </div>\n  );\n};\n\nexport default Gallery; "],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactSharedInternals","error","format","_len2","args","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","item","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","REACT_MODULE_REFERENCE","isValidElementType","type","getWrappedName","outerType","innerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","context","provider","outerName","lazyComponent","payload","init","assign","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","props","reenableLogs","ReactCurrentDispatcher","prefix","describeBuiltInComponentFrame","name","source","ownerFn","x","match","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","fn","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","s","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","Component","prototype","describeUnknownElementTypeFrameInDEV","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","checkPropTypes","typeSpecs","values","location","componentName","has","typeSpecName","error$1","err","ex","isArrayImpl","isArray","typeName","value","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","ReactCurrentOwner","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","didWarnAboutStringRefs","hasValidRef","config","getter","hasValidKey","warnIfStringRefCannotBeAutoConverted","self","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","ReactElement","key","ref","jsxDEV","maybeKey","propName","defaultProps","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","isValidElement","object","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","fileName","lineNumber","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","info","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","iterator","step","validatePropTypes","propTypes","_name","validateFragmentProps","fragment","keys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","sourceInfo","typeString","children","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","require$$1","calculateAspectRatio","width","height","normalizeItems","items","calculateWidth","aspectRatio","getColumnsCount","columns","windowSize","breakpoints","breakpoint","getGutter","gutter","debounce","func","delay","timeout","useWindowResize","setWindowSize","useState","useEffect","handleResize","GridGalleryItem","index","itemHeight","gutterSize","itemClassName","itemStyle","itemWidth","onItemClick","renderItem","lazyLoad","maxColSpan","colSpan","rowSpan","$itemHeight","setItemHeight","effectiveAspectRatio","defaultRenderItem","GridGallery","className","containerWidth","style","columnsCount","useMemo","JustifiedGallery","targetRowHeight","maxRowHeight","containerPadding","normalizedItems","rows","availableWidth","currentRow","currentRowWidth","newRowItem","rowWidth","scaleFactor","scaledRow","rowItem","row","rowIndex","itemIndex","itemKey","MasonryGallery","itemsWithPosition","containerHeight","colYs","maxY","columnWidth","effectiveGutter","bestCol","minY","col","groupHeight","left","top","StackGallery","maxWidth","alignment","Gallery","layout","layoutOptions","containerRef","useRef","setContainerWidth","updateContainerWidth","renderGallery","commonProps","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o"],"mappings":"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","x_google_ignoreList":[0,1,2]}