Merge pull request #1 from a2nt/react

IMPR: converting lightbox to ReactJS
This commit is contained in:
Tony Air 2021-01-31 04:29:34 +07:00 committed by GitHub
commit 38df177de7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 1693 additions and 184 deletions

132
dist/css/app.css vendored
View File

@ -1 +1,131 @@
.meta-lightbox-overlay{position:fixed;top:0;left:0;z-index:99998;width:100%;height:100%;overflow:hidden;visibility:hidden;opacity:0;box-sizing:border-box}.meta-lightbox-overlay.meta-lightbox-open{visibility:visible;opacity:1}.meta-lightbox-wrap{position:absolute;top:10%;bottom:10%;left:10%;right:10%}.meta-lightbox-content,.meta-lightbox-wrap{display:flex;align-items:center;text-align:center;justify-content:center}.meta-lightbox-content{flex-direction:row;color:#fff;width:100%;height:100%}.meta-lightbox-content .meta-lightbox-ajax{color:#212529}.meta-lightbox-content .meta-lightbox-zoom-wrapper{display:block;height:100%;width:100%}.meta-lightbox-content .meta-lightbox-zoom-wrapper:after{color:#fff;font:normal normal normal 14px/1 FontAwesome;content:"\f00e";position:absolute;bottom:1em;right:1em;text-shadow:1px 1px 1px #000}.meta-lightbox-content .meta-lightbox-zoom-wrapper.no-zoom:after{display:none}.meta-lightbox-title-wrap{position:absolute;bottom:0;left:0;width:100%;z-index:99999;text-align:center}.meta-lightbox-nav{display:none}.meta-lightbox-prev{position:absolute;top:50%;left:0}.meta-lightbox-next{position:absolute;top:50%;right:0}.meta-lightbox-close{position:absolute;top:2%;right:2%;line-height:1em}.meta-lightbox-image{text-align:center}.meta-lightbox-image img{max-width:100%;max-height:100%;width:auto;height:auto;vertical-align:middle}.meta-lightbox-content iframe{width:100%;height:100%}.meta-lightbox-ajax,.meta-lightbox-inline{max-height:100%;overflow:auto}.meta-lightbox-error{display:flex;flex-direction:column;justify-content:center;text-align:center;width:100%;height:100%;color:#fff;text-shadow:0 1px 1px #000}.meta-lightbox-error .alert{margin:0;text-shadow:none}.meta-lightbox-error p{display:table-cell;vertical-align:middle}.meta-lightbox-notouch .meta-lightbox-effect-fade,.meta-lightbox-notouch .meta-lightbox-effect-fadeScale,.meta-lightbox-notouch .meta-lightbox-effect-fall,.meta-lightbox-notouch .meta-lightbox-effect-slideDown,.meta-lightbox-notouch .meta-lightbox-effect-slideLeft,.meta-lightbox-notouch .meta-lightbox-effect-slideRight,.meta-lightbox-notouch .meta-lightbox-effect-slideUp{transition:all .2s ease-in-out}.meta-lightbox-effect-fadeScale .meta-lightbox-wrap{transition:all .3s;transform:scale(.7)}.meta-lightbox-effect-fadeScale.meta-lightbox-open .meta-lightbox-wrap{transform:scale(1)}.meta-lightbox-effect-slideDown .meta-lightbox-wrap,.meta-lightbox-effect-slideLeft .meta-lightbox-wrap,.meta-lightbox-effect-slideRight .meta-lightbox-wrap,.meta-lightbox-effect-slideUp .meta-lightbox-wrap{transition:all .3s cubic-bezier(.25,.5,.5,.9)}.meta-lightbox-effect-slideLeft .meta-lightbox-wrap{transform:translateX(-10%)}.meta-lightbox-effect-slideRight .meta-lightbox-wrap{transform:translateX(10%)}.meta-lightbox-effect-slideLeft.meta-lightbox-open .meta-lightbox-wrap,.meta-lightbox-effect-slideRight.meta-lightbox-open .meta-lightbox-wrap{transform:translateX(0)}.meta-lightbox-effect-slideDown .meta-lightbox-wrap{transform:translateY(-10%)}.meta-lightbox-effect-slideUp .meta-lightbox-wrap{transform:translateY(10%)}.meta-lightbox-effect-slideDown.meta-lightbox-open .meta-lightbox-wrap,.meta-lightbox-effect-slideUp.meta-lightbox-open .meta-lightbox-wrap{transform:translateY(0)}.meta-lightbox-body-effect-fall .meta-lightbox-effect-fall{perspective:1000px}.meta-lightbox-effect-fall .meta-lightbox-wrap{transition:all .3s ease-out;transform:translateZ(300px)}.meta-lightbox-effect-fall.meta-lightbox-open .meta-lightbox-wrap{transform:translateZ(0)}.meta-lightbox-theme-default.meta-lightbox-overlay{background:#666;background:rgba(0,0,0,.6)}.meta-lightbox-theme-default .meta-lightbox-nav{top:10%;width:20%;height:80%;background-repeat:no-repeat;background-position:50% 50%;opacity:.5;color:#fff;font-size:3em;text-decoration:none;text-shadow:1px 1px 0 #000}@media (min-width:576px){.meta-lightbox-theme-default .meta-lightbox-nav{width:8%}}.meta-lightbox-theme-default .meta-lightbox-nav .fa{position:absolute;top:50%;left:50%;margin-top:-1em;margin-left:-.2em}.meta-lightbox-theme-default .meta-lightbox-nav:hover{color:#007bff;opacity:1;background-color:rgba(0,0,0,.5)}.meta-lightbox-theme-default .meta-lightbox-close{display:block;opacity:.5;color:#fff;text-decoration:none;font-size:2em;text-shadow:1px 1px 0 #000;text-align:center;width:1.2em;height:1.2em;line-height:1.2em}.meta-lightbox-theme-default .meta-lightbox-close:focus{color:#007bff;opacity:1;background-color:rgba(0,0,0,.5)}.meta-lightbox-theme-default .meta-lightbox-title{background:#000;color:#fff;padding:7px 15px}.meta-lightbox-theme-default .meta-lightbox-ajax,.meta-lightbox-theme-default .meta-lightbox-inline{color:#000;background:#fff;padding:2em;box-shadow:0 1px 1px rgba(0,0,0,.6)}@media (max-width:576px){.meta-lightbox-wrap{top:5px!important;bottom:5px;left:5px;right:5px}.meta-lightbox-theme-default .meta-lightbox-nav{height:100%;opacity:1;font-size:2em}.meta-lightbox-theme-default .meta-lightbox-nav .fa{margin-left:-.4em}.meta-lightbox-theme-default .meta-lightbox-close{opacity:1}}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0; }
.meta-MetaWindow .meta-spinner_embed,
.meta-MetaWindow .meta-spinner,
.meta-MetaWindow .meta-error {
display: none;
align-items: center;
justify-content: center;
z-index: 2;
text-align: center; }
.meta-MetaWindow .meta-spinner_embed,
.meta-MetaWindow .meta-spinner {
font-size: 2rem;
color: #fff;
font-weight: bold;
text-transform: uppercase;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0; }
.meta-MetaWindow .meta-spinner_embed {
display: flex; }
.meta-MetaWindow-overlay {
background: rgba(96, 125, 139, 0.8);
display: none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
align-items: center;
justify-content: center; }
.meta-MetaWindow-overlay__open {
display: flex; }
.meta-MetaWindow-overlay__loading .meta-spinner {
display: flex; }
.meta-MetaWindow-overlay__error .meta-content {
justify-content: center; }
.meta-MetaWindow-overlay__error .meta-error {
display: flex; }
.meta-MetaWindow .meta-close {
font-size: 1.2rem;
color: #212121;
text-shadow: #fff 0 0 0.25em;
position: absolute;
top: 0;
right: 0;
padding: 0.5em 0.651em;
border: 0;
background: none;
z-index: 2; }
.meta-MetaWindow .meta-close:hover, .meta-MetaWindow .meta-close:focus {
color: #eceff1;
background: #2196f3;
text-shadow: none; }
.meta-MetaWindow .meta-content {
position: relative;
width: 90%;
height: 90%;
display: flex;
flex-direction: column; }
.meta-MetaWindow .meta-wrap {
max-height: 100%;
max-width: 100%;
width: 100%;
overflow: auto; }
.meta-MetaWindow .meta-wrap img {
max-width: 100%;
max-height: 100%; }
.meta-MetaWindow__text .meta-close {
background: #fff; }
.meta-MetaWindow__text .meta-content {
background: #fff;
color: #000;
padding: 1rem 1rem;
padding-right: 0; }
.meta-MetaWindow__text .meta-wrap {
padding-right: 1rem; }
.meta-MetaWindow__image .typography,
.meta-MetaWindow__image .meta-wrap, .meta-MetaWindow__video .typography,
.meta-MetaWindow__video .meta-wrap {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
max-height: 100%;
max-width: 100%;
min-height: 100%; }
.meta-MetaWindow__video:before, .meta-MetaWindow__embed:before {
content: "";
display: block;
position: relative;
width: 100%;
padding-top: 56.25%; }
.meta-MetaWindow__video a[rel='nofollow noreferrer noopener'], .meta-MetaWindow__embed a[rel='nofollow noreferrer noopener'] {
color: #fff;
font-size: 1.2rem;
font-weight: bold; }
.meta-MetaWindow__video a[rel='nofollow noreferrer noopener']:before, .meta-MetaWindow__embed a[rel='nofollow noreferrer noopener']:before {
content: 'Unable to load. Please follow the provided link: ';
display: block; }
.meta-MetaWindow__video iframe, .meta-MetaWindow__embed iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%; }

140
dist/index.html vendored
View File

@ -1,3 +1,139 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content=""><meta name="author" content=""><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"/><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.0/css/all.css"/><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script><title>Meta-lightbox Demo</title><style>.wrapper {
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="description" content="Meta Lightbox" />
<meta name="author" content="Tony Air" />
<title>Meta-lightbox Demo</title>
<style>
.wrapper {
padding: 2rem;
}</style><link href="css/app.css" rel="stylesheet"></head><body><div class="wrapper"><h1>Meta-lightbox Demo</h1><p><a href="../src/img/photo1.png" data-toggle="lightbox" data-lightbox-gallery="demo" data-title="That's first link">Click me to start</a></p><p><a href="../src/img/photo2.jpg" data-toggle="lightbox" data-lightbox-gallery="demo">Use data-toggle="lightbox" attribute to attach lightbox action and href to specify URL.</a></p><p><a href="../src/img/photo1.png" data-toggle="lightbox" data-lightbox-gallery="demo" data-title="Use data-title attribute to specify lightbox title">Use data-lightbox-gallery="YOUR_GALLERY_NAME" to group ligthboxes and use next/prev arrows</a></p><p data-toggle="lightbox" data-href="https://youtu.be/GgnClrx8N2k" data-lightbox-gallery="demo" data-title="Yes you can link vimeo and youtube videos as long as AJAX content">You can use data-href attribute to specify link and attach lightbox to another element</p><p><b>Note:</b> You can add jquery-zoom plugin and lighbox will zoom photos on hover.</p></div><script src="js/app.js"></script></body></html>
}
</style>
<link href="css/app.css" rel="stylesheet"></head>
<body>
<div class="wrapper">
<h1>Meta-lightbox Demo</h1>
NODE_ENV: development <style>
[data-toggle='lightbox']:hover,
[data-toggle='lightbox']:focus {
text-decoration: underline;
}
</style>
<h2>Loading data</h2>
<p>
<a
href="../src/img/photo1.png"
data-toggle="lightbox"
data-lightbox-gallery="demo"
data-title="That's first link"
>Load an Image</a
>
<br />
<a href="../src/test.json" data-toggle="lightbox">
Load JSON
</a>
<br />
<a href="../src/test-pajax.html" data-toggle="lightbox">
Load Partial AJAX HTML </a
><br />
<a href="../src/not-found.html" data-toggle="lightbox"> Not Found test </a>
</p>
<h2>Embeds</h2>
<p>
<a
href="https://www.youtube.com/watch?v=WYvZZYthDRI"
data-toggle="lightbox"
data-embed="true"
>Embed Youtube link</a
>
<br />
<a
href="https://vimeo.com/26216129"
data-toggle="lightbox"
data-embed="true"
>Embed Vimeo link</a
>
<br />
<a
href="https://soundcloud.com/littlenapoleon/led-zeppelin-vs-rolling-stones"
data-toggle="lightbox"
data-embed="true"
>Embed SoundCloud link</a
><br />
<a
href="https://www.instagram.com/p/CKl5n87hf7R/"
data-toggle="lightbox"
data-embed="true"
>Embed Instagram</a
>
</p>
<h2>Other</h2>
<p>
<a
href="../src/img/photo2.jpg"
data-toggle="lightbox"
data-lightbox-gallery="demo"
>
Use [data-toggle="lightbox"] attribute to attach lightbox action and
[href] to specify URL.
</a>
</p>
<p>
<a
href="../src/img/photo1.png"
data-toggle="lightbox"
data-lightbox-gallery="demo"
data-title="Use data-title attribute to specify lightbox title"
>
Use [data-lightbox-gallery="YOUR_GALLERY_NAME"] to group ligthboxes with
next/prev arrows
</a>
</p>
<p
data-toggle="lightbox"
data-href="https://youtu.be/GgnClrx8N2k"
data-lightbox-gallery="demo"
data-title="Yes you can link vimeo and youtube videos as long as AJAX content"
>
Use [data-toggle="lightbox"] + [data-href] attribute to toggle lightbox on
regular elements.
<b>Click me!</b>
</p>
<p>
<b>Note:</b> You can add jquery-zoom plugin and lighbox will
zoom photos on hover.
</p>
<div id="App"></div>
</div>
<!-- That's optional dependencies -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
/>
<link
rel="stylesheet"
href="https://use.fontawesome.com/releases/v5.12.0/css/all.css"
/>
<!-- React is required -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<!-- jQuery is required -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="js/app.js"></script></body>
</html>

445
dist/js/app.js vendored
View File

@ -1,2 +1,443 @@
/*! For license information please see app.js.LICENSE.txt */
!function(){"use strict";var t={n:function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,{a:o}),o},d:function(e,o){for(var a in o)t.o(o,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:o[a]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e=jQuery,o="ajax-load",a="back-online",n="load";function _typeof(t){return(_typeof="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function _typeof(t){return typeof t}:function _typeof(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _defineProperties(t,e){for(var o=0;o<e.length;o++){var a=e[o];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}!function($){var t=window,e=$(t),i=document,c=$("body"),l="MetaLightboxUI",r='<div class="meta-lightbox-error"><div class="alert alert-error alert-danger">Connection failure.</div></div>',s=function(){function MetaLightboxUI(){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,MetaLightboxUI)}return function _createClass(t,e,o){return e&&_defineProperties(t.prototype,e),o&&_defineProperties(t,o),t}(MetaLightboxUI,null,[{key:"init",value:function init(){console.log("".concat(l,": init ..."));var t=this;t.isMSIE=0;try{t.isHidpi=t.is_hdpi()}catch(e){console.log("".concat(l,": catch"))}$(".js".concat(l,',[data-toggle="lightbox"],[data-lightbox-gallery]')).on("click",(function(e){e.preventDefault(),e.stopPropagation();var o=$(e.currentTarget);t.show(o)})),$(".js".concat(l,"-close-inline")).on("click",(function(t){$(t.currentTarget).parents(".meta-lightbox-overlay").removeClass("meta-lightbox-open")}))}},{key:"is_hdpi",value:function is_hdpi(){console.log("".concat(l,": isHidpi"));return t.devicePixelRatio>1||t.matchMedia&&t.matchMedia("(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)").matches}},{key:"show",value:function show(t){console.log("".concat(l,": show"));var e=this;if(e.constructLightbox()){var o=e.$content;if(o){if(c.addClass("meta-lightbox-body-effect-fade"),e.process(o,t),t.data("lightbox-gallery")){var a=$('[data-lightbox-gallery="'.concat(t.data("lightbox-gallery"),'"]'));1===a.length?$(".meta-lightbox-nav").hide():$(".meta-lightbox-nav").show(),$(".meta-lightbox-prev").off("click").on("click",(function(o){o.preventDefault();var n=a.index(t),i=a.eq(n-1);i.length||(i=a.last()),setTimeout((function(){e.show(i)}),10)})),$(".meta-lightbox-next").off("click").on("click",(function(o){o.preventDefault();var n=a.index(t),i=a.eq(n+1);i.length||(i=a.first()),setTimeout((function(){e.show(i)}),10)}))}setTimeout((function(){e.$overlay.addClass("meta-lightbox-open")}),1)}}}},{key:"constructLightbox",value:function constructLightbox(){console.log("".concat(l,": constructLightbox"));var t=this,e=$("<div>",{class:"meta-lightbox-overlay meta-lightbox-theme-default meta-lightbox-effect-fade"}),o=$("<div>",{class:"meta-lightbox-wrap"}),a=$("<div>",{class:"meta-lightbox-content"}),n=$('<a href="#" class="meta-lightbox-nav meta-lightbox-prev"><i class="fas fa fa-chevron-left"></i> <span class="sr-only">Previous</span></a><a href="#" class="meta-lightbox-nav meta-lightbox-next"><i class="fa fas fa-chevron-right"></i> <span class="sr-only">Next</span></a>'),i=$('<a href="#" class="meta-lightbox-close fas fa fa-times" title="Close"><span class="sr-only">Close</span></a>'),r=$("<div>",{class:"meta-lightbox-title-wrap"});return t.$overlay||(t.isMSIE&&e.addClass("meta-lightbox-ie"),o.append(a),o.append(r),e.append(o),e.append(n),e.append(i),c.append(e),e.on("click",(function(e){e.preventDefault(),t.hide()})),i.on("click",(function(e){e.preventDefault(),t.hide()})),t.$overlay=e,t.$content=a,t.$title=r),t.$overlay}},{key:"setTitle",value:function setTitle(t){this.$title.html(t)}},{key:"process",value:function process(o,a){console.log("".concat(l,": process"));var n=this,c=a.attr("href")&&a.attr("href").length?a.attr("href"):a.data("href");n.$content.attr("class","meta-lightbox-content"),n.$content.addClass(a.data("lightbox-class")),c.length||(console.log(a),console.error("".concat(l,": href(attr/data) is missing")));var s=$("#PageLoading .loading-spinner"),f=s.length?s.clone():"";if(n.$content.append(f).addClass("meta-lightbox-loading"),c.match(/\.(jpeg|jpg|gif|png|svg)$/i)||"image"===a.data("force")){$.ajax({url:c,success:function success(){var t=$("<img>",{src:c}),a=$('<div class="meta-lightbox-image"></div>'),i=$('<span class="meta-lightbox-zoom-wrapper"></span>');i.append(t),a.append(i),a.css({"line-height":"".concat(o.height(),"px"),height:"".concat(o.height(),"px")}),e.resize((function(){a.css({"line-height":"".concat(o.height(),"px"),height:"".concat(o.height(),"px")})})),"undefined"!==typeof i.zoom?i.zoom():i.addClass("no-zoom"),n.$content.html(a),n.contentLoaded()},error:function error(t,e){var o=$(r);n.$content.html(o),n.contentLoaded()}});var d=a.data("title")?a.data("title"):a.attr("title");n.setTitle(d),"function"===typeof ga&&ga("send","event","meta","Image Click",c)}else if(c.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/)||"youtube"===a.data("force")||"vimeo"===a.data("force")){var h,g=c.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/),u="meta-lightbox-video";if("youtube"==g[1]&&(h="https://www.youtube.com/embed/".concat(g[4]),u="".concat(u," meta-lightbox-youtube")),"youtu"==g[1]&&(h="https://www.youtube.com/embed/".concat(g[3]),u="".concat(u," meta-lightbox-youtube")),"youtube-nocookie"==g[1]&&(h="https://www.youtube-nocookie.com/embed/".concat(g[4]),u="".concat(u," meta-lightbox-youtube")),"vimeo"==g[1]&&(h="https://player.vimeo.com/video/".concat(g[3]),u="".concat(u," meta-lightbox-vimeo")),!h)return console.warn("".concat(l,": Video loading bad URL")),!1;if(!n.loadIframe(h,u))return a.addClass("meta-offline"),!1;a.removeClass("meta-offline");var m=a.data("title")?a.data("title"):a.attr("title");n.setTitle(m),"function"===typeof ga&&ga("send","event","meta","Video Click",g)}else if("#"==c.substring(0,1)||"inline"===a.data("force"))$(c).length?(wrap=$('<div class="meta-lightbox-inline" />'),wrap.append($(c).clone().show()),wrap.outerHeight()<n.$content.height()&&wrap.css({position:"relative",top:"50%","margin-top":"".concat(-wrap.outerHeight()/2,"px")}),e.resize((function(){wrap.outerHeight()<n.$content.height()&&wrap.css({position:"relative",top:"50%","margin-top":"".concat(-wrap.outerHeight()/2,"px")})})),n.$content.html(wrap),n.contentLoaded()):(wrap=$(r),n.$content.html(wrap),n.contentLoaded()),$(".meta-lightbox-title-wrap").html(""),"function"===typeof ga&&ga("send","event","meta","inline HTML click",c);else{if(a.data("force-iframe")||"iframe"===a.data("force"))return console.log("".concat(l,": IFrame forced")),n.loadIframe(c,"meta-lightbox-iframe-content")?(a.removeClass("meta-offline"),!0):(a.addClass("meta-offline"),!1);console.log("".concat(l,": loading AJAX")),$.ajax({sync:!1,async:!0,url:c,dataType:"html",method:"GET",cache:!1,statusCode:{404:function _(){console.log("".concat(l,": page not found")),t.location.href=url},302:function _(){console.log("".concat(l,": redirect 302")),t.location.href=url}},error:function error(t,e){console.log("".concat(l,": AJAX request failure.").concat(t.statusText));var o=$(r);n.$content.html(o),n.contentLoaded(),"function"===typeof ga&&ga("send","event","error","AJAX ERROR",t.statusText)},success:function success(e,o,a){console.log("".concat(l,": AJAX success"));try{var c=$.parseJSON(e);if("object"===_typeof(c)){if(console.log("".concat(l,": AJAX JSON")),"object"===_typeof(c.regions)&&"undefinded"!==typeof c.regions.LayoutAjax){var r=$('<div class="meta-lightbox-ajax" />');r.html(c.regions.LayoutAjax),n.$content.html(r),n.contentLoaded()}var s=a.getResponseHeader("X-Title"),f=a.getResponseHeader("X-Link");s&&s.length&&f&&f.length&&f!==t.location.href&&f.substring(0,f.indexOf("#"))!==t.location.href.replace($("base").attr("href"),"/")&&($(".meta-lightbox-ajax").data("curr-title",i.title),$(".meta-lightbox-ajax").data("curr-link",t.location.href),"undefined"!==typeof t.localStorage&&"/"!==f&&t.localStorage.setItem("current-page",f),i.URL!==f&&i.URL!==$("base").attr("href")+f&&i.URL!=="".concat($("base").attr("href"),"/").concat(f)&&t.history.pushState({title:s,page:f,ajax:"true"},s,f),$(".meta-lightbox-title-wrap").html(""),"function"===typeof ga&&(ga("set",{page:f.replace($("base").attr("href"),""),title:s}),ga("send","pageview")))}}catch(h){console.log("".concat(l,": AJAX HTML"));var d=$('<div class="meta-lightbox-ajax" />');d.append(e),n.$content.html(d),n.contentLoaded()}n.contentLoaded()}})}}},{key:"loadIframe",value:function loadIframe(t,e){var o=this,a=$("<iframe>",{src:t,class:e,frameborder:0,vspace:0,hspace:0,scrolling:"auto",allowtransparency:"true"});return console.log("".concat(l,": loading iframe")),c.append('<div id="MetaIFramePreload" class="hidden d-none iframe-preload" style="display:none"></div>'),$("#MetaIFramePreload").html(a),a.on("load",(function(){if(c.hasClass("is-offline"))return console.warn("".concat(l,": Unable to load iframe offline")),!1;o.finishIFrameLoading()})),a}},{key:"finishIFrameLoading",value:function finishIFrameLoading(){var t=this,e=$("#MetaIFramePreload");if(!e.length)return console.warn("".concat(l,": iframe preload not found")),!1;var o=e.find("iframe");if(!o.length)return console.warn("".concat(l,": iframe preload > iframe not found")),!1;console.log("".concat(l,": the iframe was loaded")),e.html(""),e.remove(),t.$content.addClass("iframe-delay"),t.$content.html(o),t.contentLoaded(),setTimeout((function(){t.$content.removeClass("iframe-delay")}),1e3)}},{key:"contentLoaded",value:function contentLoaded(){var t=this;t.$content.removeClass("meta-lightbox-loading"),$(".meta-lightbox-content .js".concat(l,',.meta-lightbox-content [data-toggle="lightbox"],.meta-lightbox-content [data-lightbox-gallery]')).on("click",(function(e){e.preventDefault(),e.stopPropagation();var o=$(e.currentTarget);t.show(o)})),$(".js".concat(l,"-close")).on("click",(function(e){e.preventDefault(),t.hide()})),setTimeout((function(){e.trigger("meta-lightbox-loaded")}),1),setTimeout((function(){c.addClass("meta-lightbox-body-effect-fade")}),600)}},{key:"hide",value:function hide(e){var o=this.$overlay,a=$(".meta-lightbox-ajax").data("curr-title"),n=$(".meta-lightbox-ajax").data("curr-link");a&&n&&("undefined"!==typeof t.localStorage&&"/"!==n&&t.localStorage.setItem("current-page",n),i.URL!==n&&i.URL!==$("base").attr("href")+n&&i.URL!=="".concat($("base").attr("href"),"/").concat(n)&&t.history.replaceState({title:a,page:n,ajax:"true"},a,n)),o.removeClass("meta-lightbox-open"),c.removeClass("meta-lightbox-body-effect-fade"),$(".meta-lightbox-content .meta-lightbox-zoom-wrapper").trigger("zoom.destroy"),this.isMSIE&&(o.find("iframe").attr("src"," "),o.find("iframe").remove()),$(".meta-lightbox-prev").off("click"),$(".meta-lightbox-next").off("click"),$(".meta-lightbox-content").empty(),c.removeClass("meta-lightbox-body-effect-fade")}}]),MetaLightboxUI}();e.on("MetaLightboxUI.init ".concat(o," ").concat(n),(function(){s.init()})),e.on("".concat(a),(function(){$(".meta-offline").removeClass("meta-offline"),console.log("".concat(l,": reloading iframe")),s.finishIFrameLoading();var t=$(".meta-lightbox-content iframe");t.length&&t.attr("src",t.attr("src"))})),t.MetaLightboxUI=s}(t.n(e)())}();
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js":
/*!*********************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js ***!
\*********************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js\");\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js":
/*!********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js ***!
\********************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js\");\n\nvar cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js\");\n\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js\");\n\nvar buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js\");\n\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js\");\n\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js\");\n\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest(); // HTTP basic authentication\n\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); // Set the request timeout in MS\n\n request.timeout = config.timeout; // Listen for ready state\n\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n } // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n\n\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n } // Prepare the response\n\n\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response); // Clean up request\n\n request = null;\n }; // Handle browser request cancellation (as opposed to a manual cancellation)\n\n\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Handle low level network errors\n\n\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request)); // Clean up request\n\n request = null;\n }; // Handle timeout\n\n\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n } // Add headers to the request\n\n\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n } // Add withCredentials to request if needed\n\n\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n } // Add responseType to request if needed\n\n\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n } // Handle progress if needed\n\n\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n } // Not all browsers support upload events\n\n\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel); // Clean up request\n\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n } // Send the request\n\n\n request.send(requestData);\n });\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js":
/*!*************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js ***!
\*************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js\");\n\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js\");\n\nvar mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js\");\n\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js\");\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\n\n\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance\n\n utils.extend(instance, Axios.prototype, context); // Copy context to instance\n\n utils.extend(instance, context);\n return instance;\n} // Create the default instance to be exported\n\n\nvar axios = createInstance(defaults); // Expose Axios class to allow class inheritance\n\naxios.Axios = Axios; // Factory for creating new instances\n\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n}; // Expose Cancel & CancelToken\n\n\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js\"); // Expose all/spread\n\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js\"); // Expose isAxiosError\n\naxios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js\");\nmodule.exports = axios; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = axios;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js":
/*!*********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js ***!
\*********************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js":
/*!**************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js ***!
\**************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js\");\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\n\n\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n\n\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js":
/*!***********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js ***!
\***********************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js":
/*!******************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js ***!
\******************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nvar buildURL = __webpack_require__(/*! ../helpers/buildURL */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js\");\n\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js\");\n\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js\");\n\nvar mergeConfig = __webpack_require__(/*! ./mergeConfig */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js\");\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\n\n\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\n\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config); // Set config.method\n\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n } // Hook up interceptors middleware\n\n\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n}; // Provide aliases for supported request methods\n\n\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js ***!
\*******************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n\n\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\n\n\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\n\n\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js":
/*!**************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js ***!
\**************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js\");\n\nvar combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js\");\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\n\n\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n\n return requestedURL;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js":
/*!************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js ***!
\************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js\");\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\n\n\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js ***!
\****************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js\");\n\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js\");\n\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js\");\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\n\n\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config); // Ensure headers exist\n\n config.headers = config.headers || {}; // Transform request data\n\n config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers\n\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers);\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config); // Transform response data\n\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config); // Transform response data\n\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js":
/*!*************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js ***!
\*************************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n\n return error;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js":
/*!************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js ***!
\************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\n\n\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = ['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys).concat(directMergeKeys);\n var otherKeys = Object.keys(config1).concat(Object.keys(config2)).filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n utils.forEach(otherKeys, mergeDeepProperties);\n return config;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js":
/*!*******************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js ***!
\*******************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js\");\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\n\n\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js":
/*!**************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js ***!
\**************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\n\n\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js":
/*!****************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js ***!
\****************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js\");\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js\");\n }\n\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n /* Ignore */\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js":
/*!********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js ***!
\********************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n return fn.apply(thisArg, args);\n };\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js":
/*!************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js ***!
\************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\n\n\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js":
/*!***************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js ***!
\***************************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js":
/*!***********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js ***!
\***********************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : // Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
\*****************************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js ***!
\****************************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = function isAxiosError(payload) {\n return _typeof(payload) === 'object' && payload.isAxiosError === true;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
\*******************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : // Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js":
/*!***********************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
\***********************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js ***!
\****************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js\"); // Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\n\n\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\n\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js":
/*!**********************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js ***!
\**********************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js?");
/***/ }),
/***/ "./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js":
/*!*************************************************************************!*\
!*** ./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js ***!
\*************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval("\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js\");\n/*global toString:true*/\n// utils is a library of generic helper functions non-specific to axios\n\n\nvar toString = Object.prototype.toString;\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\n\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\n\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\n\n\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\n\n\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBufferView(val) {\n var result;\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n\n return result;\n}\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\n\n\nfunction isString(val) {\n return typeof val === 'string';\n}\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\n\n\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\n\n\nfunction isObject(val) {\n return val !== null && _typeof(val) === 'object';\n}\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\n\n\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\n\n\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\n\n\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\n\n\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\n\n\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\n\n\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\n\n\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\n\n\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (_typeof(obj) !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction merge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\n\n\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js?");
/***/ }),
/***/ "./node_modules/.pnpm/balanced-match@1.0.0/node_modules/balanced-match/index.js":
/*!**************************************************************************************!*\
!*** ./node_modules/.pnpm/balanced-match@1.0.0/node_modules/balanced-match/index.js ***!
\**************************************************************************************/
/***/ (function(module) {
"use strict";
eval("\n\nmodule.exports = balanced;\n\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n var r = range(a, b, str);\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\n\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [begs.pop(), bi];\n } else {\n beg = begs.pop();\n\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [left, right];\n }\n }\n\n return result;\n}\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/balanced-match@1.0.0/node_modules/balanced-match/index.js?");
/***/ }),
/***/ "./node_modules/.pnpm/brace-expansion@2.0.0/node_modules/brace-expansion/index.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/brace-expansion@2.0.0/node_modules/brace-expansion/index.js ***!
\****************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("var balanced = __webpack_require__(/*! balanced-match */ \"./node_modules/.pnpm/balanced-match@1.0.0/node_modules/balanced-match/index.js\");\n\nmodule.exports = expandTop;\nvar escSlash = '\\0SLASH' + Math.random() + '\\0';\nvar escOpen = '\\0OPEN' + Math.random() + '\\0';\nvar escClose = '\\0CLOSE' + Math.random() + '\\0';\nvar escComma = '\\0COMMA' + Math.random() + '\\0';\nvar escPeriod = '\\0PERIOD' + Math.random() + '\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash).split('\\\\{').join(escOpen).split('\\\\}').join(escClose).split('\\\\,').join(escComma).split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\').split(escOpen).join('{').split(escClose).join('}').split(escComma).join(',').split(escPeriod).join('.');\n} // Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\n\n\nfunction parseCommaParts(str) {\n if (!str) return [''];\n var parts = [];\n var m = balanced('{', '}', str);\n if (!m) return str.split(',');\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n p[p.length - 1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n\n if (post.length) {\n p[p.length - 1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str) return []; // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\n\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\n\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n\n return [str];\n }\n\n var n;\n\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n\n if (n.length === 1) {\n var post = m.post.length ? expand(m.post, false) : [''];\n return post.map(function (p) {\n return m.pre + n[0] + p;\n });\n }\n }\n } // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n\n\n var pre = m.pre;\n var post = m.post.length ? expand(m.post, false) : [''];\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length);\n var incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1;\n var test = lte;\n var reverse = y < x;\n\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n\n var pad = n.some(isPadded);\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\') c = '';\n } else {\n c = String(i);\n\n if (pad) {\n var need = width - c.length;\n\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0) c = '-' + z + c.slice(1);else c = z + c;\n }\n }\n }\n\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion) expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/brace-expansion@2.0.0/node_modules/brace-expansion/index.js?");
/***/ }),
/***/ "./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js":
/*!********************************************************************************!*\
!*** ./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js ***!
\********************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("module.exports = minimatch;\nminimatch.Minimatch = Minimatch;\nvar path = {\n sep: '/'\n};\n\ntry {\n path = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\"Cannot find module 'path'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {};\n\nvar expand = __webpack_require__(/*! brace-expansion */ \"./node_modules/.pnpm/brace-expansion@2.0.0/node_modules/brace-expansion/index.js\");\n\nvar plTypes = {\n '!': {\n open: '(?:(?!(?:',\n close: '))[^/]*?)'\n },\n '?': {\n open: '(?:',\n close: ')?'\n },\n '+': {\n open: '(?:',\n close: ')+'\n },\n '*': {\n open: '(?:',\n close: ')*'\n },\n '@': {\n open: '(?:',\n close: ')'\n }\n}; // any single thing other than /\n// don't need to escape / when using new RegExp()\n\nvar qmark = '[^/]'; // * => any number of characters\n\nvar star = qmark + '*?'; // ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\n\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'; // not a ^ or / followed by a dot,\n// followed by anything, any number of times.\n\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'; // characters that need to be escaped in RegExp.\n\nvar reSpecials = charSet('().*{}+?[]^$\\\\!'); // \"abc\" -> { a:true, b:true, c:true }\n\nfunction charSet(s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true;\n return set;\n }, {});\n} // normalizes slashes.\n\n\nvar slashSplit = /\\/+/;\nminimatch.filter = filter;\n\nfunction filter(pattern, options) {\n options = options || {};\n return function (p, i, list) {\n return minimatch(p, pattern, options);\n };\n}\n\nfunction ext(a, b) {\n a = a || {};\n b = b || {};\n var t = {};\n Object.keys(b).forEach(function (k) {\n t[k] = b[k];\n });\n Object.keys(a).forEach(function (k) {\n t[k] = a[k];\n });\n return t;\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch;\n var orig = minimatch;\n\n var m = function minimatch(p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options));\n };\n\n m.Minimatch = function Minimatch(pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options));\n };\n\n return m;\n};\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch;\n return minimatch.defaults(def).Minimatch;\n};\n\nfunction minimatch(p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required');\n }\n\n if (!options) options = {}; // shortcut: comments match nothing.\n\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n } // \"\" only matches \"\"\n\n\n if (pattern.trim() === '') return p === '';\n return new Minimatch(pattern, options).match(p);\n}\n\nfunction Minimatch(pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options);\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required');\n }\n\n if (!options) options = {};\n pattern = pattern.trim(); // windows support: need to use /, not \\\n\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/');\n }\n\n this.options = options;\n this.set = [];\n this.pattern = pattern;\n this.regexp = null;\n this.negate = false;\n this.comment = false;\n this.empty = false; // make the set of regexps etc.\n\n this.make();\n}\n\nMinimatch.prototype.debug = function () {};\n\nMinimatch.prototype.make = make;\n\nfunction make() {\n // don't do it more than once.\n if (this._made) return;\n var pattern = this.pattern;\n var options = this.options; // empty patterns and comments match nothing.\n\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n\n if (!pattern) {\n this.empty = true;\n return;\n } // step 1: figure out negation, etc.\n\n\n this.parseNegate(); // step 2: expand braces\n\n var set = this.globSet = this.braceExpand();\n if (options.debug) this.debug = console.error;\n this.debug(this.pattern, set); // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit);\n });\n this.debug(this.pattern, set); // glob --> regexps\n\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this);\n }, this);\n this.debug(this.pattern, set); // filter out everything that didn't compile properly.\n\n set = set.filter(function (s) {\n return s.indexOf(false) === -1;\n });\n this.debug(this.pattern, set);\n this.set = set;\n}\n\nMinimatch.prototype.parseNegate = parseNegate;\n\nfunction parseNegate() {\n var pattern = this.pattern;\n var negate = false;\n var options = this.options;\n var negateOffset = 0;\n if (options.nonegate) return;\n\n for (var i = 0, l = pattern.length; i < l && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset);\n this.negate = negate;\n} // Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\n\n\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options);\n};\n\nMinimatch.prototype.braceExpand = braceExpand;\n\nfunction braceExpand(pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options;\n } else {\n options = {};\n }\n }\n\n pattern = typeof pattern === 'undefined' ? this.pattern : pattern;\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern');\n }\n\n if (options.nobrace || !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n\n return expand(pattern);\n} // parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\n\nMinimatch.prototype.parse = parse;\nvar SUBPARSE = {};\n\nfunction parse(pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long');\n }\n\n var options = this.options; // shortcuts\n\n if (!options.noglobstar && pattern === '**') return GLOBSTAR;\n if (pattern === '') return '';\n var re = '';\n var hasMagic = !!options.nocase;\n var escaping = false; // ? => one single character\n\n var patternListStack = [];\n var negativeLists = [];\n var stateChar;\n var inClass = false;\n var reClassStart = -1;\n var classStart = -1; // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))' : '(?!\\\\.)';\n var self = this;\n\n function clearStateChar() {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n\n default:\n re += '\\\\' + stateChar;\n break;\n }\n\n self.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n }\n\n for (var i = 0, len = pattern.length, c; i < len && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c); // skip over any that are escaped.\n\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c;\n escaping = false;\n continue;\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false;\n\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c); // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n\n if (inClass) {\n this.debug(' in class');\n if (c === '!' && i === classStart + 1) c = '^';\n re += c;\n continue;\n } // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n\n\n self.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c; // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n\n if (options.noext) clearStateChar();\n continue;\n\n case '(':\n if (inClass) {\n re += '(';\n continue;\n }\n\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n }); // negation is (?:(?!js)[^/]*)\n\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:';\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)';\n continue;\n }\n\n clearStateChar();\n hasMagic = true;\n var pl = patternListStack.pop(); // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n\n re += pl.close;\n\n if (pl.type === '!') {\n negativeLists.push(pl);\n }\n\n pl.reEnd = re.length;\n continue;\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|';\n escaping = false;\n continue;\n }\n\n clearStateChar();\n re += '|';\n continue;\n // these are mostly the same in regexp and glob\n\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n\n if (inClass) {\n re += '\\\\' + c;\n continue;\n }\n\n inClass = true;\n classStart = i;\n reClassStart = re.length;\n re += c;\n continue;\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c;\n escaping = false;\n continue;\n } // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n\n\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i);\n\n try {\n RegExp('[' + cs + ']');\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE);\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]';\n hasMagic = hasMagic || sp[1];\n inClass = false;\n continue;\n }\n } // finish up the class.\n\n\n hasMagic = true;\n inClass = false;\n re += c;\n continue;\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n\n if (escaping) {\n // no need\n escaping = false;\n } else if (reSpecials[c] && !(c === '^' && inClass)) {\n re += '\\\\';\n }\n\n re += c;\n } // switch\n\n } // for\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n\n\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1);\n sp = this.parse(cs, SUBPARSE);\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0];\n hasMagic = hasMagic || sp[1];\n } // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n\n\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length);\n this.debug('setting tail', re, pl); // maybe some even number of \\, then maybe 1 \\, followed by a |\n\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n } // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n\n\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n var t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n } // handle trailing things that only matter at the very end.\n\n\n clearStateChar();\n\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n } // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n\n\n var addPatternStart = false;\n\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(':\n addPatternStart = true;\n } // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n\n\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n];\n var nlBefore = re.slice(0, nl.reStart);\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd);\n var nlAfter = re.slice(nl.reEnd);\n nlLast += nlAfter; // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n\n var openParensBefore = nlBefore.split('(').length - 1;\n var cleanAfter = nlAfter;\n\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n\n nlAfter = cleanAfter;\n var dollar = '';\n\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$';\n }\n\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n re = newRe;\n } // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n\n\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n\n if (addPatternStart) {\n re = patternStart + re;\n } // parsing just a piece of a larger pattern.\n\n\n if (isSub === SUBPARSE) {\n return [re, hasMagic];\n } // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n\n\n if (!hasMagic) {\n return globUnescape(pattern);\n }\n\n var flags = options.nocase ? 'i' : '';\n\n try {\n var regExp = new RegExp('^' + re + '$', flags);\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.');\n }\n\n regExp._glob = pattern;\n regExp._src = re;\n return regExp;\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe();\n};\n\nMinimatch.prototype.makeRe = makeRe;\n\nfunction makeRe() {\n if (this.regexp || this.regexp === false) return this.regexp; // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n\n var set = this.set;\n\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n\n var options = this.options;\n var twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;\n var flags = options.nocase ? 'i' : '';\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return p === GLOBSTAR ? twoStar : typeof p === 'string' ? regExpEscape(p) : p._src;\n }).join('\\\\\\/');\n }).join('|'); // must match entire pattern\n // ending in a * or ** will make it less strict.\n\n re = '^(?:' + re + ')$'; // can match anything, as long as it's not this.\n\n if (this.negate) re = '^(?!' + re + ').*$';\n\n try {\n this.regexp = new RegExp(re, flags);\n } catch (ex) {\n this.regexp = false;\n }\n\n return this.regexp;\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {};\n var mm = new Minimatch(pattern, options);\n list = list.filter(function (f) {\n return mm.match(f);\n });\n\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n\n return list;\n};\n\nMinimatch.prototype.match = match;\n\nfunction match(f, partial) {\n this.debug('match', f, this.pattern); // short-circuit in the case of busted things.\n // comments, etc.\n\n if (this.comment) return false;\n if (this.empty) return f === '';\n if (f === '/' && partial) return true;\n var options = this.options; // windows: need to use /, not \\\n\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/');\n } // treat the test path as a set of pathparts.\n\n\n f = f.split(slashSplit);\n this.debug(this.pattern, 'split', f); // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set;\n this.debug(this.pattern, 'set', set); // Find the basename of the path by looking for the last non-empty segment\n\n var filename;\n var i;\n\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i];\n if (filename) break;\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i];\n var file = f;\n\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n\n var hit = this.matchOne(file, pattern, partial);\n\n if (hit) {\n if (options.flipNegate) return true;\n return !this.negate;\n }\n } // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n\n\n if (options.flipNegate) return false;\n return this.negate;\n} // set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\n\n\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options;\n this.debug('matchOne', {\n 'this': this,\n file: file,\n pattern: pattern\n });\n this.debug('matchOne', file.length, pattern.length);\n\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f); // should be impossible.\n // some invalid regexp stuff in the set.\n\n if (p === false) return false;\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]); // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n\n var fr = fi;\n var pr = pi + 1;\n\n if (pr === pl) {\n this.debug('** at the end'); // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' || !options.dot && file[fi].charAt(0) === '.') return false;\n }\n\n return true;\n } // ok, let's see if we can swallow whatever we can.\n\n\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee); // XXX remove this slice. Just pass the start index.\n\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee); // found a match.\n\n return true;\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' || !options.dot && swallowee.charAt(0) === '.') {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n } // ** swallows a segment, and continue.\n\n\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n } // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n\n\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) return true;\n }\n\n return false;\n } // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n\n\n var hit;\n\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase();\n } else {\n hit = f === p;\n }\n\n this.debug('string match', p, f, hit);\n } else {\n hit = f.match(p);\n this.debug('pattern match', p, f, hit);\n }\n\n if (!hit) return false;\n } // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n\n\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = fi === fl - 1 && file[fi] === '';\n return emptyFileEnd;\n } // should be unreachable.\n\n\n throw new Error('wtf?');\n}; // replace stuff like \\* with *\n\n\nfunction globUnescape(s) {\n return s.replace(/\\\\(.)/g, '$1');\n}\n\nfunction regExpEscape(s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js?");
/***/ }),
/***/ "./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.1+react@17.0.1/node_modules/react-tiny-oembed/lib/index.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.1+react@17.0.1/node_modules/react-tiny-oembed/lib/index.js ***!
\******************************************************************************************************************************/
/***/ (function(module, exports, __webpack_require__) {
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n!function (e, t) {\n \"object\" == ( false ? 0 : _typeof(exports)) && \"undefined\" != \"object\" ? t(exports, __webpack_require__(/*! react */ \"react\"), __webpack_require__(/*! minimatch */ \"./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js\"), __webpack_require__(/*! axios */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js\")) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! react */ \"react\"), __webpack_require__(/*! minimatch */ \"./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js\"), __webpack_require__(/*! axios */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;\n}(this, function (e, t, r, n) {\n \"use strict\";\n\n function o(e) {\n return e && \"object\" == _typeof(e) && \"default\" in e ? e : {\n default: e\n };\n }\n\n var i = o(t),\n c = o(r),\n s = o(n),\n _a = function a() {\n return (_a = Object.assign || function (e) {\n for (var t, r = 1, n = arguments.length; r < n; r++) {\n for (var o in t = arguments[r]) {\n Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n }\n }\n\n return e;\n }).apply(this, arguments);\n };\n\n function u(e, t, r, n) {\n return new (r || (r = Promise))(function (o, i) {\n function c(e) {\n try {\n a(n.next(e));\n } catch (e) {\n i(e);\n }\n }\n\n function s(e) {\n try {\n a(n.throw(e));\n } catch (e) {\n i(e);\n }\n }\n\n function a(e) {\n var t;\n e.done ? o(e.value) : (t = e.value, t instanceof r ? t : new r(function (e) {\n e(t);\n })).then(c, s);\n }\n\n a((n = n.apply(e, t || [])).next());\n });\n }\n\n function l(e, t) {\n var r,\n n,\n o,\n i,\n c = {\n label: 0,\n sent: function sent() {\n if (1 & o[0]) throw o[1];\n return o[1];\n },\n trys: [],\n ops: []\n };\n return i = {\n next: s(0),\n throw: s(1),\n return: s(2)\n }, \"function\" == typeof Symbol && (i[Symbol.iterator] = function () {\n return this;\n }), i;\n\n function s(i) {\n return function (s) {\n return function (i) {\n if (r) throw new TypeError(\"Generator is already executing.\");\n\n for (; c;) {\n try {\n if (r = 1, n && (o = 2 & i[0] ? n.return : i[0] ? n.throw || ((o = n.return) && o.call(n), 0) : n.next) && !(o = o.call(n, i[1])).done) return o;\n\n switch (n = 0, o && (i = [2 & i[0], o.value]), i[0]) {\n case 0:\n case 1:\n o = i;\n break;\n\n case 4:\n return c.label++, {\n value: i[1],\n done: !1\n };\n\n case 5:\n c.label++, n = i[1], i = [0];\n continue;\n\n case 7:\n i = c.ops.pop(), c.trys.pop();\n continue;\n\n default:\n if (!(o = c.trys, (o = o.length > 0 && o[o.length - 1]) || 6 !== i[0] && 2 !== i[0])) {\n c = 0;\n continue;\n }\n\n if (3 === i[0] && (!o || i[1] > o[0] && i[1] < o[3])) {\n c.label = i[1];\n break;\n }\n\n if (6 === i[0] && c.label < o[1]) {\n c.label = o[1], o = i;\n break;\n }\n\n if (o && c.label < o[2]) {\n c.label = o[2], c.ops.push(i);\n break;\n }\n\n o[2] && c.ops.pop(), c.trys.pop();\n continue;\n }\n\n i = t.call(e, c);\n } catch (e) {\n i = [6, e], n = 0;\n } finally {\n r = o = 0;\n }\n }\n\n if (5 & i[0]) throw i[1];\n return {\n value: i[0] ? i[1] : void 0,\n done: !0\n };\n }([i, s]);\n };\n }\n }\n\n var d = [{\n provider_name: \"YouTube\",\n provider_url: \"https://www.youtube.com/\",\n endpoints: [{\n schemes: [\"https://*.youtube.com/watch*\", \"https://*.youtube.com/v/*\", \"https://youtu.be/*\"],\n url: \"https://www.youtube.com/oembed\",\n discovery: !0\n }]\n }, {\n provider_name: \"Reddit\",\n provider_url: \"https://reddit.com/\",\n endpoints: [{\n schemes: [\"https://reddit.com/r/*/comments/*/*\", \"https://www.reddit.com/r/*/comments/*/*\"],\n url: \"https://www.reddit.com/oembed\"\n }]\n }, {\n provider_name: \"Flickr\",\n provider_url: \"https://www.flickr.com/\",\n endpoints: [{\n schemes: [\"http://*.flickr.com/photos/*\", \"http://flic.kr/p/*\", \"https://*.flickr.com/photos/*\", \"https://flic.kr/p/*\"],\n url: \"https://www.flickr.com/services/oembed/\",\n discovery: !0\n }]\n }, {\n provider_name: \"Vimeo\",\n provider_url: \"https://vimeo.com/\",\n endpoints: [{\n schemes: [\"https://vimeo.com/*\", \"https://vimeo.com/album/*/video/*\", \"https://vimeo.com/channels/*/*\", \"https://vimeo.com/groups/*/videos/*\", \"https://vimeo.com/ondemand/*/*\", \"https://player.vimeo.com/video/*\"],\n url: \"https://vimeo.com/api/oembed.{format}\",\n discovery: !0\n }]\n }, {\n provider_name: \"SoundCloud\",\n provider_url: \"http://soundcloud.com/\",\n endpoints: [{\n schemes: [\"http://soundcloud.com/*\", \"https://soundcloud.com/*\", \"https://soundcloud.app.goog.gl/*\"],\n url: \"https://soundcloud.com/oembed\"\n }]\n }, {\n provider_name: \"Twitter\",\n provider_url: \"http://www.twitter.com/\",\n endpoints: [{\n schemes: [\"https://twitter.com/*/status/*\", \"https://*.twitter.com/*/status/*\", \"https://twitter.com/*/moments/*\", \"https://*.twitter.com/*/moments/*\"],\n url: \"https://publish.twitter.com/oembed\"\n }]\n }, {\n provider_name: \"GIPHY\",\n provider_url: \"https://giphy.com\",\n endpoints: [{\n schemes: [\"https://giphy.com/gifs/*\", \"http://gph.is/*\", \"https://media.giphy.com/media/*/giphy.gif\"],\n url: \"https://giphy.com/services/oembed\",\n discovery: !0\n }]\n }];\n\n function m(e, t, r) {\n return u(this, void 0, void 0, function () {\n var n, o, i, c, a, u;\n return l(this, function (l) {\n switch (l.label) {\n case 0:\n if (n = p(r.url, t), o = n.base_url, i = n.requestInterceptor, c = n.responceInterceptor, !o) throw Error(\"Invalid url: cannot guess oembed endpoint\");\n return a = function (e, t) {\n e.endsWith(\"/\") && (e = e.slice(0, -1));\n var r = /\\{format\\}/gi;\n e.match(r) && (e = e.replace(r, \"json\"));\n if (!t) return e;\n var n = /\\{url\\}/gi,\n o = /\\{raw_url\\}/gi;\n if (t.match(o)) return t.replace(o, e);\n if (t.match(n)) return e = encodeURIComponent(e), t.replace(n, e);\n t.endsWith(\"/\") && (t = t.slice(0, -1));\n return t + \"/\" + e;\n }(o, e), u = s.default.create(), i && u.interceptors.request.use(i), c && u.interceptors.response.use(c), [4, u.get(a, {\n params: r\n })];\n\n case 1:\n return [2, l.sent().data];\n }\n });\n });\n }\n\n function p(e, t) {\n var r, n, o;\n return (t = t || d).forEach(function (t) {\n var i;\n t.endpoints.forEach(function (t) {\n (function (e, t) {\n var r = Boolean(t.find(function (t) {\n return c.default(e, t, {\n nocase: !0\n });\n }));\n return r || Boolean(t.find(function (t) {\n return c.default(e, t.replace(/\\*/g, \"**\"), {\n nocase: !0\n });\n }));\n })(e, t.schemes) && (i = t);\n }), i && (r = i.url, n = t.requestInterceptor, o = t.responceInterceptor);\n }), {\n base_url: r,\n requestInterceptor: n,\n responceInterceptor: o\n };\n }\n\n function f(e, r, n) {\n var o = [];\n t.useEffect(function () {\n var t = document.createElement(\"div\");\n return t.innerHTML = e, t.querySelectorAll(\"script\").forEach(function (e) {\n var t = document.createElement(\"script\");\n Array.from(e.attributes).forEach(function (e) {\n \"id\" !== e.nodeName && t.setAttribute(e.nodeName, e.nodeValue || \"\");\n }), t.innerHTML = e.innerHTML, Object.entries(r || {}).forEach(function (e) {\n var r = e[0],\n n = e[1];\n t.setAttribute(r, n);\n }), document.body.appendChild(t), o = o.concat(t);\n }), function () {\n o.forEach(function (e) {\n document.body.removeChild(e);\n }), o = [];\n };\n }, n || [e]);\n }\n\n e.default = function (e) {\n var r = e.url,\n n = e.proxy,\n o = e.style,\n c = e.options,\n s = e.providers,\n d = e.ImgComponent,\n p = e.LinkComponent,\n h = e.FallbackElement,\n v = e.LoadingFallbackElement,\n b = t.useState(void 0),\n w = b[0],\n y = b[1],\n _ = t.useState(\"idle\"),\n g = _[0],\n E = _[1],\n k = t.useState(\"\"),\n x = k[0],\n I = k[1];\n\n f(x, {\n defer: \"\"\n }), t.useEffect(function () {\n \"idle\" === g && function () {\n u(this, void 0, void 0, function () {\n var e, t;\n return l(this, function (o) {\n switch (o.label) {\n case 0:\n return o.trys.push([0, 2,, 3]), E(\"loading\"), [4, m(n, s, _a(_a({\n url: r,\n maxwidth: 700,\n maxheight: 500,\n align: \"center\"\n }, c), {\n format: \"json\"\n }))];\n\n case 1:\n if (!(e = o.sent())) throw Error(\"Nill embed responce\");\n return E(\"done\"), y(e), e.html && I(e.html), [3, 3];\n\n case 2:\n return t = o.sent(), console.error(\"Error\", t), E(\"error\"), [3, 3];\n\n case 3:\n return [2];\n }\n });\n });\n }();\n }, [g]);\n var q,\n S = i.default.createElement(\"a\", {\n href: r,\n target: \"_blank\",\n rel: \"nofollow noreferrer noopener\"\n }, r);\n return w && !w.html && (\"photo\" === w.type ? q = d ? i.default.createElement(d, {\n responce: w\n }) : i.default.createElement(\"img\", {\n alt: \"\",\n src: w.url\n }) : \"link\" === w.type && (q = p ? i.default.createElement(p, {\n responce: w\n }) : i.default.createElement(\"a\", {\n href: r,\n target: \"_blank\",\n rel: \"nofollow noreferrer noopener\"\n }, r))), \"loading\" === g || \"idle\" === g ? v || S : \"error\" === g ? h || S : i.default.createElement(\"span\", {\n style: o,\n className: \"__embed __embed_column\"\n }, q, x && i.default.createElement(\"span\", {\n className: \"__embed_column\",\n dangerouslySetInnerHTML: {\n __html: x\n }\n }), i.default.createElement(\"style\", null, \".__embed {\\n margin: auto;\\n width: 100%;\\n max-width: 700px;\\n} \\n.__embed iframe {\\n width: 100%;\\n margin: auto;\\n}\\n.__embed img, .__embed video {\\n width: 100%;\\n margin: 0;\\n}\\n.__embed blockquote {\\n margin: 0;\\n}\\n.__embed span {\\n border: 0;\\n} \\n.__embed_column {\\n width: 100%;\\n display: flex;\\n flex-direction: column;\\n}\"));\n }, e.defaultProviders = d, e.getEndpoint = p, e.requestEmbed = m, e.useScript = f, Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n});\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.1+react@17.0.1/node_modules/react-tiny-oembed/lib/index.js?");
/***/ }),
/***/ "./src/js/app.js":
/*!***********************************!*\
!*** ./src/js/app.js + 3 modules ***!
\***********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external \"React\"\nvar external_React_ = __webpack_require__(\"react\");\nvar external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);\n;// CONCATENATED MODULE: external \"ReactDOM\"\nvar external_ReactDOM_namespaceObject = ReactDOM;\nvar external_ReactDOM_default = /*#__PURE__*/__webpack_require__.n(external_ReactDOM_namespaceObject);\n;// CONCATENATED MODULE: ./src/scss/_window.scss\n// extracted by mini-css-extract-plugin\n\n// EXTERNAL MODULE: ./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.1+react@17.0.1/node_modules/react-tiny-oembed/lib/index.js\nvar lib = __webpack_require__(\"./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.1+react@17.0.1/node_modules/react-tiny-oembed/lib/index.js\");\nvar lib_default = /*#__PURE__*/__webpack_require__.n(lib);\n;// CONCATENATED MODULE: ./src/js/_window.jsx\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/*\n * Lightbox window\n */\n\n\n\nvar TelegramProvider = {\n provider_name: 'Instagram',\n provider_url: 'https://instagram.com',\n endpoints: [{\n schemes: ['http://instagram.com/*/p/*,', 'http://www.instagram.com/*/p/*,', 'https://instagram.com/*/p/*,', 'https://www.instagram.com/*/p/*,', 'http://instagram.com/p/*', 'http://instagr.am/p/*', 'http://www.instagram.com/p/*', 'http://www.instagr.am/p/*', 'https://instagram.com/p/*', 'https://instagr.am/p/*', 'https://www.instagram.com/p/*', 'https://www.instagr.am/p/*', 'http://instagram.com/tv/*', 'http://instagr.am/tv/*', 'http://www.instagram.com/tv/*', 'http://www.instagr.am/tv/*', 'https://instagram.com/tv/*', 'https://instagr.am/tv/*', 'https://www.instagram.com/tv/*', 'https://www.instagr.am/tv/*'],\n url: 'https://graph.facebook.com/v9.0/instagram_oembed',\n formats: ['json']\n }, {\n schemes: ['http://instagram.com/*/p/*,', 'http://www.instagram.com/*/p/*,', 'https://instagram.com/*/p/*,', 'https://www.instagram.com/*/p/*,', 'http://instagram.com/p/*', 'http://instagr.am/p/*', 'http://www.instagram.com/p/*', 'http://www.instagr.am/p/*', 'https://instagram.com/p/*', 'https://instagr.am/p/*', 'https://www.instagram.com/p/*', 'https://www.instagr.am/p/*', 'http://instagram.com/tv/*', 'http://instagr.am/tv/*', 'http://www.instagram.com/tv/*', 'http://www.instagr.am/tv/*', 'https://instagram.com/tv/*', 'https://instagr.am/tv/*', 'https://www.instagram.com/tv/*', 'https://www.instagr.am/tv/*'],\n url: 'https://api.instagram.com/oembed',\n formats: ['json']\n }]\n};\n\nvar axios = __webpack_require__(/*! axios */ \"./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js\");\n\nvar MetaWindow = /*#__PURE__*/function (_Component) {\n _inherits(MetaWindow, _Component);\n\n var _super = _createSuper(MetaWindow);\n\n function MetaWindow(props) {\n var _this;\n\n _classCallCheck(this, MetaWindow);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n content: '',\n type: [],\n shown: false,\n loading: false,\n error: false,\n embed: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"reset\", function () {\n var ui = _assertThisInitialized(_this);\n\n ui.setState({\n content: '',\n type: [],\n shown: false,\n loading: false,\n error: false,\n embed: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"embed\", function (link) {\n var ui = _assertThisInitialized(_this);\n\n console.log(\"\".concat(ui.name, \": embed\"));\n ui.reset();\n ui.setState({\n embed: link,\n loading: false,\n type: ['embed', 'video']\n });\n ui.show();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"load\", function (link) {\n var ui = _assertThisInitialized(_this);\n\n var axios = ui.axios;\n ui.reset();\n ui.setState({\n loading: true\n });\n ui.show();\n axios.get(link, {\n responseType: 'arraybuffer'\n }).then(function (resp) {\n // handle success\n console.log(\"\".concat(ui.name, \": response content-type: \").concat(resp.headers['content-type']));\n\n switch (resp.headers['content-type']) {\n case 'image/jpeg':\n case 'image/png':\n case 'image/svg+xml':\n case 'image/bmp':\n case 'image/gif':\n case 'image/tiff':\n case 'image/webp': // irregular types:\n\n case 'image/jpg':\n case 'image/svg':\n ui.setContent(\"<img src=\\\"data:\".concat(resp.headers['content-type'], \";base64,\").concat(ui._imageEncode(resp.data), \"\\\" />\"), 'image');\n break;\n\n case 'application/json':\n case 'application/ld+json': // irregular types:\n\n case 'application/json; charset=UTF-8':\n var json = JSON.parse(ui._abToString(resp.data));\n ui.setContent(\"\".concat(json['Content']), 'text html json');\n break;\n\n case 'text/html':\n case 'application/xhtml+xml':\n case 'text/plain': // irregular types:\n\n case 'text/html; charset=UTF-8':\n case 'application/xhtml+xml; charset=UTF-8':\n case 'text/plain; charset=UTF-8':\n ui.setContent(ui._abToString(resp.data), 'text html pajax');\n break;\n\n default:\n console.warn(\"\".concat(ui.name, \": Unknown response content-type!\"));\n break;\n }\n }).catch(function (error) {\n console.error(error);\n var msg = '';\n\n if (error.response) {\n switch (error.response.status) {\n case 404:\n msg = 'Not Found.';\n break;\n\n case 500:\n msg = 'Server issue, please try again latter.';\n break;\n\n default:\n msg = 'Something went wrong.';\n break;\n }\n } else if (error.request) {\n msg = 'No response received';\n } else {\n console.warn('Error', error.message);\n }\n\n ui.setState({\n error: msg\n });\n }).then(function () {\n ui.setState({\n loading: false\n });\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_abToString\", function (arrayBuffer) {\n return String.fromCharCode.apply(null, new Uint8Array(arrayBuffer));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_imageEncode\", function (arrayBuffer) {\n var u8 = new Uint8Array(arrayBuffer);\n var b64encoded = btoa([].reduce.call(new Uint8Array(arrayBuffer), function (p, c) {\n return p + String.fromCharCode(c);\n }, ''));\n return b64encoded;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setContent\", function (html, type) {\n var ui = _assertThisInitialized(_this);\n\n console.log(\"\".concat(ui.name, \": setContent\"));\n var typeArr = type ? type : ['html', 'text'];\n\n if (!Array.isArray(typeArr)) {\n typeArr = type.split(' ');\n }\n\n ui.setState({\n content: html,\n type: typeArr\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"show\", function () {\n var ui = _assertThisInitialized(_this);\n\n console.log(\"\".concat(ui.name, \": show\"));\n ui.setState({\n shown: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"hide\", function () {\n var ui = _assertThisInitialized(_this);\n\n console.log(\"\".concat(ui.name, \": hide\"));\n ui.setState({\n shown: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getHtml\", function () {\n var ui = _assertThisInitialized(_this);\n\n return {\n __html: ui.state.content\n };\n });\n\n var _ui = _assertThisInitialized(_this);\n\n _ui.name = _ui.constructor.name;\n console.log(\"\".concat(_ui.name, \": init\"));\n _ui.axios = axios;\n document.querySelectorAll('[data-toggle=\"lightbox\"]').forEach(function (i) {\n i.addEventListener('click', function (e) {\n e.preventDefault();\n var el = e.currentTarget;\n var link = el.getAttribute('href') || el.getAttribute('data-href');\n var embed = el.getAttribute('data-embed');\n\n if (embed) {\n _ui.embed(link);\n } else {\n _ui.load(link);\n }\n });\n });\n return _this;\n }\n\n _createClass(MetaWindow, [{\n key: \"render\",\n value: function render() {\n var ui = this;\n var name = ui.name;\n var content = ui.state.embed ? /*#__PURE__*/React.createElement(\"section\", {\n className: \"meta-wrap typography\"\n }, /*#__PURE__*/React.createElement((lib_default()), {\n url: ui.state.embed,\n providers: [].concat(_toConsumableArray(lib.defaultProviders), [TelegramProvider]),\n LoadingFallbackElement: /*#__PURE__*/React.createElement(\"div\", {\n className: \"meta-spinner_embed\"\n }, \"... Loading ...\")\n })) : /*#__PURE__*/React.createElement(\"section\", {\n className: \"meta-wrap typography\",\n dangerouslySetInnerHTML: ui.getHtml()\n });\n var className = \"meta-\".concat(name, \" meta-\").concat(name, \"__\").concat(ui.state.type.join(\" meta-\".concat(name, \"__\")));\n var overlayClassName = \"meta-\".concat(name, \"-overlay\").concat(ui.state.shown ? \" meta-\".concat(name, \"-overlay__open\") : '').concat(ui.state.loading ? \" meta-\".concat(name, \"-overlay__loading\") : '').concat(ui.state.error ? \" meta-\".concat(name, \"-overlay__error\") : '');\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: overlayClassName\n }, /*#__PURE__*/React.createElement(\"article\", {\n className: \"meta-content\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n className: \"meta-close fas fa fa-times a\",\n onClick: ui.hide\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"sr-only\"\n }, \"Close\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"meta-spinner\"\n }, \"... Loading ...\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"meta-error alert alert-danger\"\n }, ui.state.error), content)));\n }\n }]);\n\n return MetaWindow;\n}(external_React_.Component);\n\n/* harmony default export */ var _window = (MetaWindow);\n;// CONCATENATED MODULE: ./src/js/app.js\n/*\n * MetaLightbox\n * https://tony.twma.pro\n *\n */\n\n/*import '../scss/app.scss';\nimport './meta-lightbox';*/\n\n\n\nvar M = external_ReactDOM_default().render( /*#__PURE__*/external_React_default().createElement(_window, null), document.getElementById('App'));\nexternal_ReactDOM_default().render( /*#__PURE__*/external_React_default().createElement(_window, null), document.getElementById('App')); // display custom HTML content manually using JS\n//M.setContent('<b>ZZZZZZZZZAAAA11<a href=\"/\">BBBB</a>122</b>');\n//M.show();\n\n//# sourceURL=webpack://@a2nt/meta-lightbox/./src/js/app.js_+_3_modules?");
/***/ }),
/***/ "react":
/*!************************!*\
!*** external "React" ***!
\************************/
/***/ (function(module) {
"use strict";
module.exports = React;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(__webpack_module_cache__[moduleId]) {
/******/ return __webpack_module_cache__[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
/******/ // startup
/******/ // Load entry module
/******/ __webpack_require__("./src/js/app.js");
/******/ // This entry module used 'exports' so it can't be inlined
/******/ })()
;

View File

@ -1 +0,0 @@
/*@cc_on!@*/

66
dist/records.json vendored
View File

@ -2,70 +2,36 @@
"HtmlWebpackCompiler": [
{
"chunks": {
"byName": {
"HtmlWebpackPlugin_0": 443
},
"bySource": {
"0 HtmlWebpackPlugin_0": 443
},
"usedIds": [
443
]
"byName": {},
"bySource": {},
"usedIds": []
},
"modules": {
"byIdentifier": {
"./node_modules/.pnpm/html-loader@1.3.2_webpack@5.16.0/node_modules/html-loader/dist/cjs.js!./src/html/meta-lightbox.html": 913,
"./node_modules/.pnpm/html-webpack-plugin@4.5.1_webpack@5.16.0/node_modules/html-webpack-plugin/lib/loader.js!./src/index.html": 864
},
"usedIds": [
864,
913
]
"byIdentifier": {},
"usedIds": []
}
}
],
"chunks": {
"byName": {
"app": 143
},
"bySource": {
"0 app": 143
},
"usedIds": [
143
]
"byName": {},
"bySource": {},
"usedIds": []
},
"mini-css-extract-plugin /mnt/data/srv/dist/repositories/meta-lightbox/node_modules/.pnpm/css-loader@5.0.1_webpack@5.16.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.2/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@10.1.1_node-sass@5.0.0+webpack@5.16.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/scss/app.scss": [
"mini-css-extract-plugin /mnt/data/srv/dist/repositories/meta-lightbox/node_modules/.pnpm/css-loader@5.0.1_webpack@5.17.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.2/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@10.1.1_node-sass@5.0.0+webpack@5.17.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/scss/_window.scss": [
{
"chunks": {
"byName": {
"mini-css-extract-plugin": 323
},
"bySource": {
"0 mini-css-extract-plugin": 323
},
"usedIds": [
323
]
"byName": {},
"bySource": {},
"usedIds": []
},
"modules": {
"byIdentifier": {
"./node_modules/.pnpm/babel-loader@8.2.2_f0c87bb7cbf8c08531ee428ecaa3548a/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.0.1_webpack@5.16.0/node_modules/css-loader/dist/runtime/api.js": 183,
"./node_modules/.pnpm/css-loader@5.0.1_webpack@5.16.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.2/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@10.1.1_node-sass@5.0.0+webpack@5.16.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/scss/app.scss": 71
},
"usedIds": [
71,
183
]
"byIdentifier": {},
"usedIds": []
}
}
],
"modules": {
"byIdentifier": {
"./node_modules/.pnpm/babel-loader@8.2.2_f0c87bb7cbf8c08531ee428ecaa3548a/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./src/js/app.js|7ed954facc636132a95507c37bb0d705": 527
},
"usedIds": [
527
]
"byIdentifier": {},
"usedIds": []
}
}

13
dist/report.html vendored

File diff suppressed because one or more lines are too long

View File

@ -1,21 +1,23 @@
{
"name": "@a2nt/meta-lightbox",
"version": "2.7.3",
"version": "2.8.6",
"description": "Universal Lightbox window",
"main": "src/js/app.js",
"author": "Tony Air <tony@twma.pro>",
"license": "BSD-2-Clause",
"publish-branch": "react",
"repository": {
"type": "git",
"url": "git+https://github.com/a2nt/meta-lightbox.git"
"url": "git+https://github.com/a2nt/meta-lightbox.git#react"
},
"private": false,
"engines": {
"yarn": ">= 1.0.0"
"node": ">= 12",
"yarn": ">= 1.22.0"
},
"scripts": {
"start": "cross-env NODE_ENV=development webpack-dev-server --https",
"dash": "cross-env NODE_ENV=development webpack-dashboard -- webpack-dev-server",
"start": "cross-env NODE_ENV=development webpack-dev-server --https --config webpack.config.serve.js",
"dash": "cross-env NODE_ENV=development webpack-dashboard -- webpack-dev-server --config webpack.config.serve.js",
"build": "cross-env NODE_ENV=production webpack --progress --stats-all",
"lint:check": "eslint ./src --config .eslintrc && sass-lint ./src --config .sasslintrc -v -q",
"lint:fix": "eslint ./src --config .eslintrc --fix && sass-lint ./src --config .sasslintrc -v -q --fix",
@ -28,19 +30,23 @@
"postuninstall": "npm run prunecaches",
"preinstall": "npx only-allow pnpm"
},
"browser": "./src/js/app.js",
"browserslist": [
"defaults",
"ie>=11"
],
"dependencies": {
"aos": "^2.3.4",
"axios": "^0.21.1",
"balanced-match": "^1.0.0",
"bootbox": "^5.5.2",
"bootstrap": "^4.6.0",
"bootstrap-confirmation2": "^4.2.0",
"bootstrap-datepicker": "^1.9.0",
"bootstrap-offcanvas": "^1.0.0",
"bootstrap-table": "^1.18.1",
"bootstrap-table": "^1.18.2",
"bootstrap-timepicker": "^0.5.2",
"brace-expansion": "^2.0.0",
"font-awesome": "^4.7.0",
"hammerjs": "^2.0.8",
"inputmask": "^5.0.5",
@ -54,19 +60,23 @@
"lodash.throttle": "^4.1.1",
"mapbox-gl": "^2.0.1",
"material-design-color": "^2.3.2",
"minimatch": "^3.0.4",
"moment": "^2.29.1",
"oembed-github-gist": "^1.0.0",
"offcanvas-bootstrap": "^2.5.2",
"popper.js": "*",
"react-tiny-oembed": "^1.0.1",
"select2": "^4.0.13",
"setimmediate": "^1.0.5",
"smooth-scroll": "^16.1.3",
"sockjs-client": "^1.5.0",
"sticky-sidebar": "^3.3.1",
"tablednd": "^1.0.5",
"yarn": "^1.22.10"
"tablednd": "^1.0.5"
},
"devDependencies": {
"@a2nt/image-sprite-webpack-plugin": "^0.2.5",
"@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-transform-react-jsx": "^7.12.12",
"@babel/preset-env": "^7.12.11",
@ -85,16 +95,18 @@
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jquery": "^1.5.1",
"eslint-plugin-react": "^7.22.0",
"events": "^3.2.0",
"exif-js": "^2.3.0",
"exports-loader": "^1.1.1",
"exports-loader": "^2.0.0",
"fast-levenshtein": "^3.0.0",
"fastest-levenshtein": "^1.0.12",
"favicons-webpack-plugin": "github:jantimon/favicons-webpack-plugin#benkostr-webpack-5",
"file-loader": "^6.2.0",
"font-awesome": "^4.7.0",
"hoist-non-react-statics": "^3.3.2",
"html-dom-parser": "^1.0.0",
"html-entities": "^1.4.0",
"html-loader": "^1.3.2",
"html-react-parser": "^1.2.1",
"html-webpack-plugin": "^4.5.1",
"image-minimizer-webpack-plugin": "^2.2.0",
"imagemin-jpegtran": "^7.0.0",
@ -104,8 +116,10 @@
"node-sass": "^5.0.0",
"object-assign": "^4.1.1",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-loader": "^4.1.0",
"postcss-loader": "^4.2.0",
"prop-types": "^15.7.2",
"punycode": "^2.1.1",
"querystring": "^0.2.0",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-hot-loader": "^4.13.0",
@ -120,18 +134,19 @@
"scheduler": "^0.20.1",
"script-ext-html-webpack-plugin": "^2.1.5",
"shallowequal": "^1.1.0",
"sockjs-client": "^1.5.0",
"strip-ansi": "^6.0.0",
"style-loader": "^2.0.0",
"svg-url-loader": "^7.1.1",
"terser-webpack-plugin": "^5.1.1",
"url": "^0.11.0",
"url-loader": "^4.1.1",
"webpack": "^5.16.0",
"webpack-bundle-analyzer": "^4.3.0",
"webpack": "^5.17.0",
"webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^4.4.0",
"webpack-dev-server": "^4.0.0-beta.0",
"webpack-manifest-plugin": "^3.0.0",
"webpack-merge": "^5.7.3"
"webpack-merge": "^5.7.3",
"yarn": "^1.22.10"
},
"stylelint": {
"rules": {

View File

@ -1 +0,0 @@
@import "../src/scss/index";

View File

@ -1,21 +1,95 @@
<style>
[data-toggle='lightbox']:hover,
[data-toggle='lightbox']:focus {
text-decoration: underline;
}
</style>
<h2>Loading data</h2>
<p>
<a
href="../src/img/photo1.png"
data-toggle="lightbox"
data-lightbox-gallery="demo"
data-title="That's first link"
>Click me to start</a>
>Load an Image</a
>
<br />
<a href="../src/test.json" data-toggle="lightbox">
Load JSON
</a>
<br />
<a href="../src/test-pajax.html" data-toggle="lightbox">
Load Partial AJAX HTML </a
><br />
<a href="../src/not-found.html" data-toggle="lightbox"> Not Found test </a>
</p>
<h2>Embeds</h2>
<p>
<a href="../src/img/photo2.jpg" data-toggle="lightbox" data-lightbox-gallery="demo">
Use data-toggle="lightbox" attribute to attach lightbox action and href to specify URL.
<a
href="https://www.youtube.com/watch?v=WYvZZYthDRI"
data-toggle="lightbox"
data-embed="true"
>Embed Youtube link</a
>
<br />
<a
href="https://vimeo.com/26216129"
data-toggle="lightbox"
data-embed="true"
>Embed Vimeo link</a
>
<br />
<a
href="https://soundcloud.com/littlenapoleon/led-zeppelin-vs-rolling-stones"
data-toggle="lightbox"
data-embed="true"
>Embed SoundCloud link</a
><br />
<a
href="https://www.instagram.com/p/CKl5n87hf7R/"
data-toggle="lightbox"
data-embed="true"
>Embed Instagram</a
>
</p>
<h2>Other</h2>
<p>
<a
href="../src/img/photo2.jpg"
data-toggle="lightbox"
data-lightbox-gallery="demo"
>
Use [data-toggle="lightbox"] attribute to attach lightbox action and
[href] to specify URL.
</a>
</p>
<p>
<a href="../src/img/photo1.png" data-toggle="lightbox" data-lightbox-gallery="demo" data-title="Use data-title attribute to specify lightbox title">
Use data-lightbox-gallery="YOUR_GALLERY_NAME" to group ligthboxes and use next/prev arrows
<a
href="../src/img/photo1.png"
data-toggle="lightbox"
data-lightbox-gallery="demo"
data-title="Use data-title attribute to specify lightbox title"
>
Use [data-lightbox-gallery="YOUR_GALLERY_NAME"] to group ligthboxes with
next/prev arrows
</a>
</p>
<p data-toggle="lightbox" data-href="https://youtu.be/GgnClrx8N2k" data-lightbox-gallery="demo" data-title="Yes you can link vimeo and youtube videos as long as AJAX content">
You can use data-href attribute to specify link and attach lightbox to another element
</p>
<p
data-toggle="lightbox"
data-href="https://youtu.be/GgnClrx8N2k"
data-lightbox-gallery="demo"
data-title="Yes you can link vimeo and youtube videos as long as AJAX content"
>
Use [data-toggle="lightbox"] + [data-href] attribute to toggle lightbox on
regular elements.
<b>Click me!</b>
</p>

View File

@ -2,14 +2,12 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<!-- That's optional dependencies -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.0/css/all.css" />
<!-- jQuery is required -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="description" content="Meta Lightbox" />
<meta name="author" content="Tony Air" />
<title>Meta-lightbox Demo</title>
<style>
.wrapper {
@ -20,8 +18,28 @@
<body>
<div class="wrapper">
<h1>Meta-lightbox Demo</h1>
<%= require('html-loader!./html/meta-lightbox.html') %>
<p><b>Note:</b> You can add jquery-zoom plugin and lighbox will zoom photos on hover.</p>
NODE_ENV: <%= NODE_ENV %> <%=
require('html-loader!./html/meta-lightbox.html') %>
<p>
<b>Note:</b> You can add jquery-zoom plugin and lighbox will
zoom photos on hover.
</p>
<div id="App"></div>
</div>
<!-- That's optional dependencies -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
/>
<link
rel="stylesheet"
href="https://use.fontawesome.com/releases/v5.12.0/css/all.css"
/>
<!-- React is required -->
<%= REACT_SCRIPTS %>
<!-- jQuery is required -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</body>
</html>
</html>

329
src/js/_window.jsx Executable file
View File

@ -0,0 +1,329 @@
/*
* Lightbox window
*/
import { Component } from 'react';
import styles from '../scss/_window.scss';
import Embed, { defaultProviders } from 'react-tiny-oembed';
const TelegramProvider = {
provider_name: 'Instagram',
provider_url: 'https://instagram.com',
endpoints: [
{
schemes: [
'http://instagram.com/*/p/*,',
'http://www.instagram.com/*/p/*,',
'https://instagram.com/*/p/*,',
'https://www.instagram.com/*/p/*,',
'http://instagram.com/p/*',
'http://instagr.am/p/*',
'http://www.instagram.com/p/*',
'http://www.instagr.am/p/*',
'https://instagram.com/p/*',
'https://instagr.am/p/*',
'https://www.instagram.com/p/*',
'https://www.instagr.am/p/*',
'http://instagram.com/tv/*',
'http://instagr.am/tv/*',
'http://www.instagram.com/tv/*',
'http://www.instagr.am/tv/*',
'https://instagram.com/tv/*',
'https://instagr.am/tv/*',
'https://www.instagram.com/tv/*',
'https://www.instagr.am/tv/*',
],
url: 'https://graph.facebook.com/v9.0/instagram_oembed',
formats: ['json'],
},
{
schemes: [
'http://instagram.com/*/p/*,',
'http://www.instagram.com/*/p/*,',
'https://instagram.com/*/p/*,',
'https://www.instagram.com/*/p/*,',
'http://instagram.com/p/*',
'http://instagr.am/p/*',
'http://www.instagram.com/p/*',
'http://www.instagr.am/p/*',
'https://instagram.com/p/*',
'https://instagr.am/p/*',
'https://www.instagram.com/p/*',
'https://www.instagr.am/p/*',
'http://instagram.com/tv/*',
'http://instagr.am/tv/*',
'http://www.instagram.com/tv/*',
'http://www.instagr.am/tv/*',
'https://instagram.com/tv/*',
'https://instagr.am/tv/*',
'https://www.instagram.com/tv/*',
'https://www.instagr.am/tv/*',
],
url: 'https://api.instagram.com/oembed',
formats: ['json'],
},
],
};
const axios = require('axios');
class MetaWindow extends Component {
state = {
content: '',
type: [],
shown: false,
loading: false,
error: false,
embed: false,
};
constructor(props) {
super(props);
const ui = this;
ui.name = ui.constructor.name;
console.log(`${ui.name}: init`);
ui.axios = axios;
document.querySelectorAll('[data-toggle="lightbox"]').forEach((i) => {
i.addEventListener('click', (e) => {
e.preventDefault();
const el = e.currentTarget;
const link =
el.getAttribute('href') || el.getAttribute('data-href');
const embed = el.getAttribute('data-embed');
if (embed) {
ui.embed(link);
} else {
ui.load(link);
}
});
});
}
reset = () => {
const ui = this;
ui.setState({
content: '',
type: [],
shown: false,
loading: false,
error: false,
embed: false,
});
};
embed = (link) => {
const ui = this;
console.log(`${ui.name}: embed`);
ui.reset();
ui.setState({
embed: link,
loading: false,
type: ['embed', 'video'],
});
ui.show();
};
load = (link) => {
const ui = this;
const axios = ui.axios;
ui.reset();
ui.setState({ loading: true });
ui.show();
axios
.get(link, {
responseType: 'arraybuffer',
})
.then((resp) => {
// handle success
console.log(
`${ui.name}: response content-type: ${resp.headers['content-type']}`,
);
switch (resp.headers['content-type']) {
case 'image/jpeg':
case 'image/png':
case 'image/svg+xml':
case 'image/bmp':
case 'image/gif':
case 'image/tiff':
case 'image/webp':
// irregular types:
case 'image/jpg':
case 'image/svg':
ui.setContent(
`<img src="data:${
resp.headers['content-type']
};base64,${ui._imageEncode(resp.data)}" />`,
'image',
);
break;
case 'application/json':
case 'application/ld+json':
// irregular types:
case 'application/json; charset=UTF-8':
const json = JSON.parse(ui._abToString(resp.data));
ui.setContent(`${json['Content']}`, 'text html json');
break;
case 'text/html':
case 'application/xhtml+xml':
case 'text/plain':
// irregular types:
case 'text/html; charset=UTF-8':
case 'application/xhtml+xml; charset=UTF-8':
case 'text/plain; charset=UTF-8':
ui.setContent(
ui._abToString(resp.data),
'text html pajax',
);
break;
default:
console.warn(
`${ui.name}: Unknown response content-type!`,
);
break;
}
})
.catch((error) => {
console.error(error);
let msg = '';
if (error.response) {
switch (error.response.status) {
case 404:
msg = 'Not Found.';
break;
case 500:
msg = 'Server issue, please try again latter.';
break;
default:
msg = 'Something went wrong.';
break;
}
} else if (error.request) {
msg = 'No response received';
} else {
console.warn('Error', error.message);
}
ui.setState({ error: msg });
})
.then(() => {
ui.setState({ loading: false });
});
};
_abToString = (arrayBuffer) => {
return String.fromCharCode.apply(null, new Uint8Array(arrayBuffer));
};
_imageEncode = (arrayBuffer) => {
let u8 = new Uint8Array(arrayBuffer);
let b64encoded = btoa(
[].reduce.call(
new Uint8Array(arrayBuffer),
function (p, c) {
return p + String.fromCharCode(c);
},
'',
),
);
return b64encoded;
};
setContent = (html, type) => {
const ui = this;
console.log(`${ui.name}: setContent`);
let typeArr = type ? type : ['html', 'text'];
if (!Array.isArray(typeArr)) {
typeArr = type.split(' ');
}
ui.setState({ content: html, type: typeArr });
};
show = () => {
const ui = this;
console.log(`${ui.name}: show`);
ui.setState({ shown: true });
};
hide = () => {
const ui = this;
console.log(`${ui.name}: hide`);
ui.setState({ shown: false });
};
getHtml = () => {
const ui = this;
return { __html: ui.state.content };
};
render() {
const ui = this;
const name = ui.name;
const content = ui.state.embed ? (
<section className="meta-wrap typography">
<Embed
url={ui.state.embed}
providers={[...defaultProviders, TelegramProvider]}
LoadingFallbackElement=<div className="meta-spinner_embed">
... Loading ...
</div>
/>
</section>
) : (
<section
className="meta-wrap typography"
dangerouslySetInnerHTML={ui.getHtml()}
></section>
);
const className = `meta-${name} meta-${name}__${ui.state.type.join(
` meta-${name}__`,
)}`;
const overlayClassName = `meta-${name}-overlay${
ui.state.shown ? ` meta-${name}-overlay__open` : ''
}${ui.state.loading ? ` meta-${name}-overlay__loading` : ''}${
ui.state.error ? ` meta-${name}-overlay__error` : ''
}`;
return (
<div className={className}>
<div className={overlayClassName}>
<article className="meta-content">
<button
className="meta-close fas fa fa-times a"
onClick={ui.hide}
>
<span className="sr-only">Close</span>
</button>
<div className="meta-spinner">... Loading ...</div>
<div className="meta-error alert alert-danger">
{ui.state.error}
</div>
{content}
</article>
</div>
</div>
);
}
}
export default MetaWindow;

View File

@ -4,5 +4,16 @@
*
*/
import '../scss/app.scss';
import './meta-lightbox';
/*import '../scss/app.scss';
import './meta-lightbox';*/
import React from 'react';
import ReactDOM from 'react-dom';
import MetaWindow from './_window.jsx';
const M = ReactDOM.render(<MetaWindow />, document.getElementById('App'));
ReactDOM.render(<MetaWindow />, document.getElementById('App'));
// display custom HTML content manually using JS
//M.setContent('<b>ZZZZZZZZZAAAA11<a href="/">BBBB</a>122</b>');
//M.show();

View File

@ -1,9 +1,36 @@
$white: #fff !default;
$black: #000 !default;
$lightbox-link-hover-color: #007bff !default;
$lightbox-breakpoint: 576px !default;
$body-color: #212529 !default;
@import 'material-design-color/material-color.scss';
$body-bg: $clr-white !default;
$body-color: $clr-black !default;
$grid-gutter-width: 2rem !default;
$grid-gutter-height: 2rem !default;
$meta-overlay-bg: transparentize($clr-blue-grey-500, 0.2) !default;
$meta-text-wrapper-bg: $body-bg !default;
$meta-text-wrapper-color: $body-color !default;
$meta-text-wrapper-padding-width: $grid-gutter-width/2 !default;
$meta-text-wrapper-padding-height: $grid-gutter-height/2 !default;
$meta-close-size: 1.2rem !default;
$meta-close-color: $clr-grey-900 !default;
$meta-close-hover-color: $clr-blue-grey-50 !default;
$meta-close-hover-bg: $clr-blue !default;
$meta-close-hover-shadow: $clr-white !default;
$meta-spinner-color: $clr-white !default;
$meta-spinner-weight: bold !default;
$meta-spinner-size: 2rem !default;
$meta-embed-loading-failed-color: $meta-spinner-color !default;
$meta-embed-loading-failed-size: 1.2rem !default;
$meta-embed-loading-failed-weight: $meta-spinner-weight !default;
$meta-video-width: 16 !default;
$meta-video-height: 9 !default;
// extra variables and mixings
$grid-breakpoints: (
xs: 0,
sm: 576px,
@ -11,7 +38,7 @@ $grid-breakpoints: (
lg: 992px,
xl: 1200px,
xxl: 1390px,
xxxl: 1590px
xxxl: 1590px,
) !default;
$container-max-widths: (
sm: 540px,
@ -19,5 +46,65 @@ $container-max-widths: (
lg: 960px,
xl: 1140px,
xxl: 1330px,
xxxl: 1560px
xxxl: 1560px,
) !default;
// hovers
@mixin hover-focus() {
&:hover,
&:focus {
@content;
}
}
@mixin hover-focus-active() {
&:hover,
&:focus,
&:active {
@content;
}
}
@mixin spinner_style() {
font-size: $meta-spinner-size;
color: $meta-spinner-color;
font-weight: $meta-spinner-weight;
text-transform: uppercase;
}
// screen reader
// Only display content to screen readers
//
// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin sr-only() {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
@mixin pseudo($display: block, $pos: absolute, $content: '') {
content: $content;
display: $display;
position: $pos;
}
@mixin responsive-ratio($x, $y, $pseudo: false) {
$padding: unquote(($y / $x) * 100 + '%');
@if $pseudo {
&:before {
@include pseudo($pos: relative);
width: 100%;
padding-top: $padding;
}
} @else {
padding-top: $padding;
}
}

158
src/scss/_window.scss Executable file
View File

@ -0,0 +1,158 @@
@import '_variables';
$module_name: 'meta-MetaWindow';
.sr-only {
@include sr-only();
}
.#{$module_name} {
// lightbox inner elements
.meta-spinner_embed,
.meta-spinner,
.meta-error {
display: none;
align-items: center;
justify-content: center;
z-index: 2;
text-align: center;
}
.meta-spinner_embed,
.meta-spinner {
@include spinner_style();
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.meta-spinner_embed {
display: flex;
}
&-overlay {
background: $meta-overlay-bg;
display: none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
align-items: center;
justify-content: center;
// meta states
&__open {
display: flex;
}
&__loading {
.meta-spinner {
display: flex;
}
}
&__error {
.meta-content {
justify-content: center;
}
.meta-error {
display: flex;
}
}
}
.meta-close {
font-size: $meta-close-size;
color: $meta-close-color;
text-shadow: $meta-close-hover-shadow 0 0 0.25em;
position: absolute;
top: 0;
right: 0;
padding: 0.5em 0.651em;
border: 0;
background: none;
z-index: 2;
@include hover-focus() {
color: $meta-close-hover-color;
background: $meta-close-hover-bg;
text-shadow: none;
}
}
.meta-content {
position: relative;
width: 90%;
height: 90%;
display: flex;
flex-direction: column;
}
.meta-wrap {
max-height: 100%;
max-width: 100%;
width: 100%;
overflow: auto;
img {
max-width: 100%;
max-height: 100%;
}
}
// Lightbox types
&__text {
.meta-close {
background: $meta-text-wrapper-bg;
}
.meta-content {
background: $meta-text-wrapper-bg;
color: $meta-text-wrapper-color;
padding: $meta-text-wrapper-padding-height
$meta-text-wrapper-padding-width;
padding-right: 0;
}
.meta-wrap {
padding-right: $meta-text-wrapper-padding-width;
}
}
&__image,
&__video {
.typography,
.meta-wrap {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
max-height: 100%;
max-width: 100%;
min-height: 100%;
}
}
&__video,
&__embed {
@include responsive-ratio($meta-video-width, $meta-video-height, true);
a[rel='nofollow noreferrer noopener'] {
color: $meta-embed-loading-failed-color;
font-size: $meta-embed-loading-failed-size;
font-weight: $meta-embed-loading-failed-weight;
&:before {
content: 'Unable to load. Please follow the provided link: ';
display: block;
}
}
iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
}

84
src/test-pajax.html Executable file
View File

@ -0,0 +1,84 @@
<h2>Test <b>HTML</b>-content with PAJAX response</h2>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
https://twitter.com/reactjs/status/964689022747475968
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>
<p>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book. It has survived not only five centuries, but also
the leap into electronic typesetting, remaining essentially unchanged. It
was popularised in the 1960s with the release of Letraset sheets containing
Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
</p>

4
src/test.json Executable file
View File

@ -0,0 +1,4 @@
{
"Title": "Test Title!",
"Content": "Test <b>HTML</b>-content with JSON response"
}

View File

@ -22,7 +22,7 @@ const modules = [
];
const _addAppFiles = (theme) => {
const dirPath = path.resolve(__dirname, theme);
const dirPath = './' + theme;
let themeName = path.basename(theme);
if (themeName == '.') {
themeName = 'app';
@ -100,6 +100,8 @@ module.exports = {
entry: includes,
externals: {
jquery: 'jQuery',
react: 'React',
'react-dom': 'ReactDOM',
},
resolve: {
modules: modules,
@ -108,6 +110,8 @@ module.exports = {
$: require.resolve('jquery'),
jquery: require.resolve('jquery'),
jQuery: require.resolve('jquery'),
react: require.resolve('react'),
'react-dom': require.resolve('react-dom'),
},
},
};

View File

@ -1,8 +1,6 @@
/*
* Production assets generation
*/
const COMPRESS = true;
const webpack = require('webpack');
const commonVariables = require('./webpack.configuration');
const conf = commonVariables.configuration;
@ -24,12 +22,20 @@ const HtmlWebpackPlugin = require('html-webpack-plugin');
const UIInfo = require('./package.json');
const UIVERSION = JSON.stringify(UIInfo.version);
const NODE_ENV = conf.NODE_ENV || process.env.NODE_ENV;
const COMPRESS = NODE_ENV === 'production' ? true : false;
console.log('NODE_ENV: ' + NODE_ENV);
console.log('COMPRESS: ' + COMPRESS);
console.log('WebP images: ' + conf['webp']);
let plugins = [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
react: 'React',
'react-dom': 'ReactDOM',
Popper: ['popper.js', 'default'],
Util: 'exports-loader?Util!bootstrap/js/dist/util',
Alert: 'exports-loader?Alert!bootstrap/js/dist/alert',
@ -45,83 +51,100 @@ let plugins = [
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production'),
NODE_ENV: JSON.stringify(NODE_ENV),
},
UINAME: JSON.stringify(UIInfo.name),
UIVERSION: UIVERSION,
UIAUTHOR: JSON.stringify(UIInfo.author),
}),
new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false,
minimize: COMPRESS,
debug: !COMPRESS,
}),
new MiniCssExtractPlugin({
filename: 'css/[name].css',
//allChunks: true,
}),
new OptimizeCssAssetsPlugin({
//assetNameRegExp: /\.optimize\.css$/g,
cssProcessor: require('cssnano'),
cssProcessorPluginOptions: {
preset: ['default'],
},
cssProcessorOptions: {
zindex: true,
cssDeclarationSorter: true,
reduceIdents: false,
mergeIdents: true,
mergeRules: true,
mergeLonghand: true,
discardUnused: true,
discardOverridden: true,
discardDuplicates: true,
discardComments: {
removeAll: true,
},
},
canPrint: true,
}),
require('autoprefixer'),
new ImageminPlugin({
minimizerOptions: {
// Lossless optimization with custom option
// Feel free to experiment with options for better result for you
plugins: [
['gifsicle', { interlaced: true }],
['jpegtran', { progressive: true }],
['optipng', { optimizationLevel: 5 }],
[
'svgo',
{
plugins: [
{
removeViewBox: false,
},
],
},
],
],
},
}),
new ImageSpritePlugin({
exclude: /exclude|original|default-|icons|sprite|svg|logo|favicon/,
commentOrigin: false,
compress: COMPRESS,
extensions: ['png'],
indent: '',
log: true,
//outputPath: path.join(__dirname, conf.APPDIR, conf.DIST),
outputFilename: 'img/sprite-[hash].png',
padding: 0,
}),
];
if (COMPRESS) {
plugins.push(
new OptimizeCssAssetsPlugin({
//assetNameRegExp: /\.optimize\.css$/g,
cssProcessor: require('cssnano'),
cssProcessorPluginOptions: {
preset: ['default'],
},
cssProcessorOptions: {
zindex: true,
cssDeclarationSorter: true,
reduceIdents: false,
mergeIdents: true,
mergeRules: true,
mergeLonghand: true,
discardUnused: true,
discardOverridden: true,
discardDuplicates: true,
discardComments: {
removeAll: true,
},
},
canPrint: true,
}),
);
plugins.push(require('autoprefixer'));
plugins.push(
new ImageminPlugin({
minimizerOptions: {
// Lossless optimization with custom option
// Feel free to experiment with options for better result for you
plugins: [
['gifsicle', { interlaced: true }],
['jpegtran', { progressive: true }],
['optipng', { optimizationLevel: 5 }],
[
'svgo',
{
plugins: [
{
removeViewBox: false,
},
],
},
],
],
},
}),
);
plugins.push(
new ImageSpritePlugin({
exclude: /exclude|original|default-|icons|sprite|svg|logo|favicon/,
commentOrigin: false,
compress: COMPRESS,
extensions: ['png'],
indent: '',
log: true,
//outputPath: path.join(__dirname, conf.APPDIR, conf.DIST),
outputFilename: 'img/sprite-[hash].png',
padding: 0,
}),
);
}
const indexPath = path.join(__dirname, conf.APPDIR, conf.SRC, 'index.html');
if (filesystem.existsSync(indexPath)) {
plugins.push(
new HtmlWebpackPlugin({
publicPath: '',
template: path.join(conf.APPDIR, conf.SRC, 'index.html'),
templateParameters: {
NODE_ENV: NODE_ENV,
REACT_SCRIPTS:
NODE_ENV === 'production'
? '<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>'
: '<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>',
},
}),
);
}
@ -198,11 +221,12 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
plugins.push(
new BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false,
}),
);
const cfg = merge(common, {
mode: 'production',
mode: NODE_ENV,
cache: {
type: 'filesystem',
},
@ -274,7 +298,15 @@ const cfg = merge(common, {
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'], //Preset used for env setup
presets: [
'@babel/preset-env',
'@babel/react',
{
plugins: [
'@babel/plugin-proposal-class-properties',
],
},
], //Preset used for env setup
plugins: [['@babel/transform-react-jsx']],
cacheDirectory: true,
cacheCompression: true,

View File

@ -2,13 +2,13 @@
* Development assets generation
*/
const COMPRESS = false;
const path = require('path');
//const autoprefixer = require('autoprefixer');
const webpack = require('webpack');
const { merge } = require('webpack-merge');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const common = require('./webpack.config.common.js');
const commonVariables = require('./webpack.configuration');
@ -17,18 +17,24 @@ const conf = commonVariables.configuration;
const IP = process.env.IP || conf.HOSTNAME;
const PORT = process.env.PORT || conf.PORT;
const UIInfo = require('./node_modules/@a2nt/ss-bootstrap-ui-webpack-boilerplate/package.json');
const UIMetaInfo = require('./node_modules/@a2nt/meta-lightbox/package.json');
const UIInfo = require('./package.json');
const NODE_ENV = conf.NODE_ENV || process.env.NODE_ENV;
const COMPRESS = NODE_ENV === 'production' ? true : false;
console.log('NODE_ENV: ' + NODE_ENV);
console.log('COMPRESS: ' + COMPRESS);
console.log('WebP images: ' + conf['webp']);
const config = merge(common, {
mode: 'development',
entry: {
hot: [
/*hot: [
'react-hot-loader/patch',
'webpack-dev-server/client?https://' + conf.HOSTNAME + ':' + conf.PORT,
'webpack-dev-server/?https://' + conf.HOSTNAME + ':' + conf.PORT,
'webpack/hot/only-dev-server',
],
],*/
},
output: {
@ -46,10 +52,16 @@ const config = merge(common, {
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'], //Preset used for env setup
presets: [
'@babel/preset-env',
'@babel/react',
{
plugins: ['@babel/plugin-proposal-class-properties'],
},
], //Preset used for env setup
plugins: [['@babel/transform-react-jsx']],
cacheDirectory: true,
cacheCompression: false,
cacheCompression: true,
},
},
},
@ -117,20 +129,30 @@ const config = merge(common, {
Scrollspy: 'exports-loader?Scrollspy!bootstrap/js/dist/scrollspy',
Tab: 'exports-loader?Tab!bootstrap/js/dist/tab',
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.DefinePlugin({
UINAME: JSON.stringify(UIInfo.name),
UIVERSION: JSON.stringify(UIInfo.version),
UIAUTHOR: JSON.stringify(UIInfo.author),
UIMetaNAME: JSON.stringify(UIMetaInfo.name),
UIMetaVersion: JSON.stringify(UIMetaInfo.version),
}),
//new webpack.HotModuleReplacementPlugin(),
new MiniCssExtractPlugin(),
new HtmlWebpackPlugin({
publicPath: '',
template: path.join(conf.APPDIR, conf.SRC, 'index.html'),
templateParameters: {
NODE_ENV: NODE_ENV,
REACT_SCRIPTS:
NODE_ENV === 'production'
? '<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>'
: '<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>',
},
}),
],
devServer: {
host: IP,
port: PORT,
historyApiFallback: true,
historyApiFallback: false,
//hot: true,
/*clientLogLevel: 'info',
disableHostCheck: true,

View File

@ -5,10 +5,11 @@
Site\Templates\WebpackTemplateProvider:
APPDIR: ./
THEMESDIR: themes
HOSTNAME: localhost
HOSTNAME: 127.0.0.1
PORT: 3000
SRC: src
DIST: dist
TYPESJS: src/js/types
TYPESSCSS: src/scss/types
NODE_ENV: development #production,development
webp: false