commit e3f445cd0d63e4a33411a5d65654dde80999cad2 Author: mschwab82 Date: Sun Nov 20 21:46:36 2022 +0000 first commit diff --git a/.env b/.env new file mode 100644 index 0000000..af2ceab --- /dev/null +++ b/.env @@ -0,0 +1,24 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# https://symfony.com/doc/current/configuration/secrets.html +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=b0d53a61c5f01a98f6a4cabc3398e307 +###< symfony/framework-bundle ### + +###> symfony/mailer ### +# MAILER_DSN=null://null +###< symfony/mailer ### diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb90f8b --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> pentatrion/vite-bundle ### +/node_modules/ +/public/build/ +###< pentatrion/vite-bundle ### + diff --git a/README.md b/README.md new file mode 100644 index 0000000..3256500 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# portfolio diff --git a/assets/app.css b/assets/app.css new file mode 100644 index 0000000..3221ce1 --- /dev/null +++ b/assets/app.css @@ -0,0 +1,3 @@ +body { + background-color: #eeeeee; +} diff --git a/assets/app.js b/assets/app.js new file mode 100644 index 0000000..f12aab0 --- /dev/null +++ b/assets/app.js @@ -0,0 +1,3 @@ +import "./app.css"; + +console.log("Happy coding !!"); \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100755 index 0000000..c789e1d --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,9 @@ +import "../scss/style.scss"; + +import "./simple-lightbox.js"; + +(function () { + var $gallery = new SimpleLightbox(".gallery a", {}); +})(); + +// import "./pagination.js" diff --git a/assets/js/simple-lightbox.js b/assets/js/simple-lightbox.js new file mode 100644 index 0000000..e24b838 --- /dev/null +++ b/assets/js/simple-lightbox.js @@ -0,0 +1,3093 @@ +/*! + By André Rinas, www.andrerinas.de + Documentation, www.simplelightbox.de + Available for use under the MIT License + Version 2.10.3 +*/ +(function () { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw ((a.code = "MODULE_NOT_FOUND"), a); + } + var p = (n[i] = { exports: {} }); + e[i][0].call( + p.exports, + function (r) { + var n = e[i][1][r]; + return o(n || r); + }, + p, + p.exports, + r, + e, + n, + t + ); + } + return n[i].exports; + } + for ( + var u = "function" == typeof require && require, i = 0; + i < t.length; + i++ + ) + o(t[i]); + return o; + } + return r; +})()( + { + 1: [ + function (require, module, exports) { + (function (global) { + (function () { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true, + }); + exports["default"] = void 0; + + 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); + } + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = + (typeof Symbol !== "undefined" && o[Symbol.iterator]) || + o["@@iterator"]; + if (!it) { + if ( + Array.isArray(o) || + (it = _unsupportedIterableToArray(o)) || + (allowArrayLike && o && typeof o.length === "number") + ) { + if (it) o = it; + var i = 0; + var F = function F() {}; + return { + s: F, + n: function n() { + if (i >= o.length) return { done: true }; + return { done: false, value: o[i++] }; + }, + e: function e(_e) { + throw _e; + }, + f: F, + }; + } + throw new TypeError( + "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." + ); + } + var normalCompletion = true, + didErr = false, + err; + return { + s: function s() { + it = it.call(o); + }, + n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function e(_e2) { + didErr = true; + err = _e2; + }, + f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) throw err; + } + }, + }; + } + + function _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); + } + + function _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; + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _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); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) + _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _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; + } + + var SimpleLightbox = /*#__PURE__*/ (function () { + function SimpleLightbox(elements, options) { + var _this = this; + + _classCallCheck(this, SimpleLightbox); + + _defineProperty(this, "defaultOptions", { + sourceAttr: "href", + overlay: true, + overlayOpacity: 0.7, + spinner: true, + nav: true, + navText: ["‹", "›"], + captions: true, + captionDelay: 0, + captionSelector: "img", + captionType: "attr", + captionsData: "title", + captionPosition: "bottom", + captionClass: "", + close: true, + closeText: "×", + swipeClose: true, + showCounter: true, + fileExt: "png|jpg|jpeg|gif|webp", + animationSlide: true, + animationSpeed: 250, + preloading: true, + enableKeyboard: true, + loop: true, + rel: false, + docClose: true, + swipeTolerance: 50, + className: "simple-lightbox", + widthRatio: 0.8, + heightRatio: 0.9, + scaleImageToRatio: true, + disableRightClick: false, + disableScroll: true, + alertError: true, + alertErrorMessage: + "Image not found, next image will be loaded", + additionalHtml: false, + history: true, + throttleInterval: 0, + doubleTapZoom: 2, + maxZoom: 10, + htmlClass: "has-lightbox", + rtl: false, + fixedClass: "sl-fixed", + fadeSpeed: 300, + uniqueImages: true, + focus: true, + scrollZoom: true, + scrollZoomFactor: 0.5, + }); + + _defineProperty(this, "transitionPrefix", void 0); + + _defineProperty(this, "isPassiveEventsSupported", void 0); + + _defineProperty(this, "transitionCapable", false); + + _defineProperty( + this, + "isTouchDevice", + "ontouchstart" in window + ); + + _defineProperty( + this, + "isAppleDevice", + /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) + ); + + _defineProperty(this, "initialLocationHash", void 0); + + _defineProperty( + this, + "pushStateSupport", + "pushState" in history + ); + + _defineProperty(this, "isOpen", false); + + _defineProperty(this, "isAnimating", false); + + _defineProperty(this, "isClosing", false); + + _defineProperty(this, "isFadeIn", false); + + _defineProperty(this, "urlChangedOnce", false); + + _defineProperty(this, "hashReseted", false); + + _defineProperty(this, "historyHasChanges", false); + + _defineProperty(this, "historyUpdateTimeout", null); + + _defineProperty(this, "currentImage", void 0); + + _defineProperty(this, "eventNamespace", "simplelightbox"); + + _defineProperty(this, "domNodes", {}); + + _defineProperty(this, "loadedImages", []); + + _defineProperty(this, "initialImageIndex", 0); + + _defineProperty(this, "currentImageIndex", 0); + + _defineProperty(this, "initialSelector", null); + + _defineProperty(this, "globalScrollbarWidth", 0); + + _defineProperty(this, "controlCoordinates", { + swipeDiff: 0, + swipeYDiff: 0, + swipeStart: 0, + swipeEnd: 0, + swipeYStart: 0, + swipeYEnd: 0, + mousedown: false, + imageLeft: 0, + zoomed: false, + containerHeight: 0, + containerWidth: 0, + containerOffsetX: 0, + containerOffsetY: 0, + imgHeight: 0, + imgWidth: 0, + capture: false, + initialOffsetX: 0, + initialOffsetY: 0, + initialPointerOffsetX: 0, + initialPointerOffsetY: 0, + initialPointerOffsetX2: 0, + initialPointerOffsetY2: 0, + initialScale: 1, + initialPinchDistance: 0, + pointerOffsetX: 0, + pointerOffsetY: 0, + pointerOffsetX2: 0, + pointerOffsetY2: 0, + targetOffsetX: 0, + targetOffsetY: 0, + targetScale: 0, + pinchOffsetX: 0, + pinchOffsetY: 0, + limitOffsetX: 0, + limitOffsetY: 0, + scaleDifference: 0, + targetPinchDistance: 0, + touchCount: 0, + doubleTapped: false, + touchmoveCount: 0, + }); + + this.options = Object.assign(this.defaultOptions, options); + this.isPassiveEventsSupported = + this.checkPassiveEventsSupport(); + + if (typeof elements === "string") { + this.initialSelector = elements; + this.elements = Array.from( + document.querySelectorAll(elements) + ); + } else { + this.elements = + typeof elements.length !== "undefined" && + elements.length > 0 + ? Array.from(elements) + : [elements]; + } + + this.relatedElements = []; + this.transitionPrefix = this.calculateTransitionPrefix(); + this.transitionCapable = this.transitionPrefix !== false; + this.initialLocationHash = this.hash; // this should be handled by attribute selector IMHO! => 'a[rel=bla]'... + + if (this.options.rel) { + this.elements = this.getRelated(this.options.rel); + } + + if (this.options.uniqueImages) { + var imgArr = []; + this.elements = Array.from(this.elements).filter(function ( + element + ) { + var src = element.getAttribute(_this.options.sourceAttr); + + if (imgArr.indexOf(src) === -1) { + imgArr.push(src); + return true; + } + + return false; + }); + } + + this.createDomNodes(); + + if (this.options.close) { + this.domNodes.wrapper.appendChild(this.domNodes.closeButton); + } + + if (this.options.nav) { + this.domNodes.wrapper.appendChild(this.domNodes.navigation); + } + + if (this.options.spinner) { + this.domNodes.wrapper.appendChild(this.domNodes.spinner); + } + + this.addEventListener( + this.elements, + "click." + this.eventNamespace, + function (event) { + if (_this.isValidLink(event.currentTarget)) { + event.preventDefault(); + + if (_this.isAnimating) { + return false; + } + + _this.initialImageIndex = _this.elements.indexOf( + event.currentTarget + ); + + _this.openImage(event.currentTarget); + } + } + ); // close addEventListener click addEventListener doc + + if (this.options.docClose) { + this.addEventListener( + this.domNodes.wrapper, + [ + "click." + this.eventNamespace, + "touchstart." + this.eventNamespace, + ], + function (event) { + if ( + _this.isOpen && + event.target === event.currentTarget + ) { + _this.close(); + } + } + ); + } // disable rightclick + + if (this.options.disableRightClick) { + this.addEventListener( + document.body, + "contextmenu." + this.eventNamespace, + function (event) { + if ( + event.target.parentElement.classList.contains( + "sl-image" + ) + ) { + event.preventDefault(); + } + } + ); + } // keyboard-control + + if (this.options.enableKeyboard) { + this.addEventListener( + document.body, + "keyup." + this.eventNamespace, + this.throttle(function (event) { + _this.controlCoordinates.swipeDiff = 0; // keyboard control only if lightbox is open + + if (_this.isAnimating && event.key === "Escape") { + _this.currentImage.setAttribute("src", ""); + + _this.isAnimating = false; + return _this.close(); + } + + if (_this.isOpen) { + event.preventDefault(); + + if (event.key === "Escape") { + _this.close(); + } + + if ( + !_this.isAnimating && + ["ArrowLeft", "ArrowRight"].indexOf(event.key) > -1 + ) { + _this.loadImage(event.key === "ArrowRight" ? 1 : -1); + } + } + }, this.options.throttleInterval) + ); + } + + this.addEvents(); + } + + _createClass(SimpleLightbox, [ + { + key: "checkPassiveEventsSupport", + value: function checkPassiveEventsSupport() { + // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + // Test via a getter in the options object to see if the passive property is accessed + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, "passive", { + get: function get() { + supportsPassive = true; + }, + }); + window.addEventListener("testPassive", null, opts); + window.removeEventListener("testPassive", null, opts); + } catch (e) {} + + return supportsPassive; + }, + }, + { + key: "createDomNodes", + value: function createDomNodes() { + this.domNodes.overlay = document.createElement("div"); + this.domNodes.overlay.classList.add("sl-overlay"); + this.domNodes.overlay.dataset.opacityTarget = + this.options.overlayOpacity; + this.domNodes.closeButton = + document.createElement("button"); + this.domNodes.closeButton.classList.add("sl-close"); + this.domNodes.closeButton.innerHTML = + this.options.closeText; + this.domNodes.spinner = document.createElement("div"); + this.domNodes.spinner.classList.add("sl-spinner"); + this.domNodes.spinner.innerHTML = "
"; + this.domNodes.navigation = document.createElement("div"); + this.domNodes.navigation.classList.add("sl-navigation"); + this.domNodes.navigation.innerHTML = + '"); + this.domNodes.counter = document.createElement("div"); + this.domNodes.counter.classList.add("sl-counter"); + this.domNodes.counter.innerHTML = + '/'; + this.domNodes.caption = document.createElement("div"); + this.domNodes.caption.classList.add( + "sl-caption", + "pos-" + this.options.captionPosition + ); + + if (this.options.captionClass) { + this.domNodes.caption.classList.add( + this.options.captionClass + ); + } + + this.domNodes.image = document.createElement("div"); + this.domNodes.image.classList.add("sl-image"); + this.domNodes.wrapper = document.createElement("div"); + this.domNodes.wrapper.classList.add("sl-wrapper"); + this.domNodes.wrapper.setAttribute("tabindex", -1); + this.domNodes.wrapper.setAttribute("role", "dialog"); + this.domNodes.wrapper.setAttribute("aria-hidden", false); + + if (this.options.className) { + this.domNodes.wrapper.classList.add( + this.options.className + ); + } + + if (this.options.rtl) { + this.domNodes.wrapper.classList.add("sl-dir-rtl"); + } + }, + }, + { + key: "throttle", + value: function throttle(func, limit) { + var inThrottle; + return function () { + if (!inThrottle) { + func.apply(this, arguments); + inThrottle = true; + setTimeout(function () { + return (inThrottle = false); + }, limit); + } + }; + }, + }, + { + key: "isValidLink", + value: function isValidLink(element) { + return ( + !this.options.fileExt || + (element.getAttribute(this.options.sourceAttr) && + new RegExp("(" + this.options.fileExt + ")$", "i").test( + element.getAttribute(this.options.sourceAttr) + )) + ); + }, + }, + { + key: "calculateTransitionPrefix", + value: function calculateTransitionPrefix() { + var s = (document.body || document.documentElement).style; + return "transition" in s + ? "" + : "WebkitTransition" in s + ? "-webkit-" + : "MozTransition" in s + ? "-moz-" + : "OTransition" in s + ? "-o" + : false; + }, + }, + { + key: "toggleScrollbar", + value: function toggleScrollbar(type) { + var scrollbarWidth = 0; + var fixedElements = [].slice.call( + document.querySelectorAll("." + this.options.fixedClass) + ); + + if (type === "hide") { + var fullWindowWidth = window.innerWidth; + + if (!fullWindowWidth) { + var documentElementRect = + document.documentElement.getBoundingClientRect(); + fullWindowWidth = + documentElementRect.right - + Math.abs(documentElementRect.left); + } + + if ( + document.body.clientWidth < fullWindowWidth || + this.isAppleDevice + ) { + var scrollDiv = document.createElement("div"), + paddingRight = parseInt( + document.body.style.paddingRight || 0, + 10 + ); + scrollDiv.classList.add("sl-scrollbar-measure"); + document.body.appendChild(scrollDiv); + scrollbarWidth = + scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + document.body.dataset.originalPaddingRight = + paddingRight; + + if ( + scrollbarWidth > 0 || + (scrollbarWidth == 0 && this.isAppleDevice) + ) { + document.body.classList.add("hidden-scroll"); + document.body.style.paddingRight = + paddingRight + scrollbarWidth + "px"; + fixedElements.forEach(function (element) { + var actualPadding = element.style.paddingRight; + var calculatedPadding = + window.getComputedStyle(element)["padding-right"]; + element.dataset.originalPaddingRight = + actualPadding; + element.style.paddingRight = "".concat( + parseFloat(calculatedPadding) + scrollbarWidth, + "px" + ); + }); + } + } + } else { + document.body.classList.remove("hidden-scroll"); + document.body.style.paddingRight = + document.body.dataset.originalPaddingRight; + fixedElements.forEach(function (element) { + var padding = element.dataset.originalPaddingRight; + + if (typeof padding !== "undefined") { + element.style.paddingRight = padding; + } + }); + } + + return scrollbarWidth; + }, + }, + { + key: "close", + value: function close() { + var _this2 = this; + + if (!this.isOpen || this.isAnimating || this.isClosing) { + return false; + } + + this.isClosing = true; + var element = this.relatedElements[this.currentImageIndex]; + element.dispatchEvent(new Event("close.simplelightbox")); + + if (this.options.history) { + this.historyHasChanges = false; + + if (!this.hashReseted) { + this.resetHash(); + } + } + + this.removeEventListener( + document, + "focusin." + this.eventNamespace + ); + this.fadeOut(this.domNodes.overlay, this.options.fadeSpeed); + this.fadeOut( + document.querySelectorAll( + ".sl-image img, .sl-close, .sl-navigation, .sl-image .sl-caption, .sl-counter" + ), + this.options.fadeSpeed, + function () { + if (_this2.options.disableScroll) { + _this2.toggleScrollbar("show"); + } + + if ( + _this2.options.htmlClass && + _this2.options.htmlClass !== "" + ) { + document + .querySelector("html") + .classList.remove(_this2.options.htmlClass); + } + + document.body.removeChild(_this2.domNodes.wrapper); + document.body.removeChild(_this2.domNodes.overlay); + _this2.domNodes.additionalHtml = null; + element.dispatchEvent( + new Event("closed.simplelightbox") + ); + _this2.isClosing = false; + } + ); + this.currentImage = null; + this.isOpen = false; + this.isAnimating = false; // reset touchcontrol coordinates + + for (var key in this.controlCoordinates) { + this.controlCoordinates[key] = 0; + } + + this.controlCoordinates.mousedown = false; + this.controlCoordinates.zoomed = false; + this.controlCoordinates.capture = false; + this.controlCoordinates.initialScale = this.minMax( + 1, + 1, + this.options.maxZoom + ); + this.controlCoordinates.doubleTapped = false; + }, + }, + { + key: "hash", + get: function get() { + return window.location.hash.substring(1); + }, + }, + { + key: "preload", + value: function preload() { + var _this3 = this; + + var index = this.currentImageIndex, + length = this.relatedElements.length, + next = + index + 1 < 0 + ? length - 1 + : index + 1 >= length - 1 + ? 0 + : index + 1, + prev = + index - 1 < 0 + ? length - 1 + : index - 1 >= length - 1 + ? 0 + : index - 1, + nextImage = new Image(), + prevImage = new Image(); + nextImage.addEventListener("load", function (event) { + var src = event.target.getAttribute("src"); + + if (_this3.loadedImages.indexOf(src) === -1) { + //is this condition even required... setting multiple times will not change usage... + _this3.loadedImages.push(src); + } + + _this3.relatedElements[index].dispatchEvent( + new Event("nextImageLoaded." + _this3.eventNamespace) + ); + }); + nextImage.setAttribute( + "src", + this.relatedElements[next].getAttribute( + this.options.sourceAttr + ) + ); + prevImage.addEventListener("load", function (event) { + var src = event.target.getAttribute("src"); + + if (_this3.loadedImages.indexOf(src) === -1) { + _this3.loadedImages.push(src); + } + + _this3.relatedElements[index].dispatchEvent( + new Event("prevImageLoaded." + _this3.eventNamespace) + ); + }); + prevImage.setAttribute( + "src", + this.relatedElements[prev].getAttribute( + this.options.sourceAttr + ) + ); + }, + }, + { + key: "loadImage", + value: function loadImage(direction) { + var _this4 = this; + + var slideDirection = direction; + + if (this.options.rtl) { + direction = -direction; + } + + this.relatedElements[this.currentImageIndex].dispatchEvent( + new Event("change." + this.eventNamespace) + ); + this.relatedElements[this.currentImageIndex].dispatchEvent( + new Event( + (direction === 1 ? "next" : "prev") + + "." + + this.eventNamespace + ) + ); + var newIndex = this.currentImageIndex + direction; + + if ( + this.isAnimating || + ((newIndex < 0 || + newIndex >= this.relatedElements.length) && + this.options.loop === false) + ) { + return false; + } + + this.currentImageIndex = + newIndex < 0 + ? this.relatedElements.length - 1 + : newIndex > this.relatedElements.length - 1 + ? 0 + : newIndex; + this.domNodes.counter.querySelector( + ".sl-current" + ).innerHTML = this.currentImageIndex + 1; + + if (this.options.animationSlide) { + this.slide( + this.options.animationSpeed / 1000, + -100 * slideDirection - + this.controlCoordinates.swipeDiff + + "px" + ); + } + + this.fadeOut( + this.domNodes.image, + this.options.fadeSpeed, + function () { + _this4.isAnimating = true; + + if (!_this4.isClosing) { + setTimeout(function () { + var element = + _this4.relatedElements[_this4.currentImageIndex]; + + _this4.currentImage.setAttribute( + "src", + element.getAttribute(_this4.options.sourceAttr) + ); + + if ( + _this4.loadedImages.indexOf( + element.getAttribute(_this4.options.sourceAttr) + ) === -1 + ) { + _this4.show(_this4.domNodes.spinner); + } + + if ( + _this4.domNodes.image.contains( + _this4.domNodes.caption + ) + ) { + _this4.domNodes.image.removeChild( + _this4.domNodes.caption + ); + } + + _this4.adjustImage(slideDirection); + + if (_this4.options.preloading) _this4.preload(); + }, 100); + } else { + _this4.isAnimating = false; + } + } + ); + }, + }, + { + key: "adjustImage", + value: function adjustImage(direction) { + var _this5 = this; + + if (!this.currentImage) { + return false; + } + + var tmpImage = new Image(), + windowWidth = window.innerWidth * this.options.widthRatio, + windowHeight = + window.innerHeight * this.options.heightRatio; + tmpImage.setAttribute( + "src", + this.currentImage.getAttribute("src") + ); + this.currentImage.dataset.scale = 1; + this.currentImage.dataset.translateX = 0; + this.currentImage.dataset.translateY = 0; + this.zoomPanElement(0, 0, 1); + tmpImage.addEventListener("error", function (event) { + _this5.relatedElements[ + _this5.currentImageIndex + ].dispatchEvent( + new Event("error." + _this5.eventNamespace) + ); + + _this5.isAnimating = false; + _this5.isOpen = true; + _this5.domNodes.spinner.style.display = "none"; + var dirIsDefined = direction === 1 || direction === -1; + + if ( + _this5.initialImageIndex === _this5.currentImageIndex && + dirIsDefined + ) { + return _this5.close(); + } + + if (_this5.options.alertError) { + alert(_this5.options.alertErrorMessage); + } + + _this5.loadImage(dirIsDefined ? direction : 1); + }); + tmpImage.addEventListener("load", function (event) { + if (typeof direction !== "undefined") { + _this5.relatedElements[ + _this5.currentImageIndex + ].dispatchEvent( + new Event("changed." + _this5.eventNamespace) + ); + + _this5.relatedElements[ + _this5.currentImageIndex + ].dispatchEvent( + new Event( + (direction === 1 ? "nextDone" : "prevDone") + + "." + + _this5.eventNamespace + ) + ); + } // history + + if (_this5.options.history) { + _this5.updateURL(); + } + + if ( + _this5.loadedImages.indexOf( + _this5.currentImage.getAttribute("src") + ) === -1 + ) { + _this5.loadedImages.push( + _this5.currentImage.getAttribute("src") + ); + } + + var imageWidth = event.target.width, + imageHeight = event.target.height; + + if ( + _this5.options.scaleImageToRatio || + imageWidth > windowWidth || + imageHeight > windowHeight + ) { + var ratio = + imageWidth / imageHeight > windowWidth / windowHeight + ? imageWidth / windowWidth + : imageHeight / windowHeight; + imageWidth /= ratio; + imageHeight /= ratio; + } + + _this5.domNodes.image.style.top = + (window.innerHeight - imageHeight) / 2 + "px"; + _this5.domNodes.image.style.left = + (window.innerWidth - + imageWidth - + _this5.globalScrollbarWidth) / + 2 + + "px"; + _this5.domNodes.image.style.width = imageWidth + "px"; + _this5.domNodes.image.style.height = imageHeight + "px"; + _this5.domNodes.spinner.style.display = "none"; + + if (_this5.options.focus) { + _this5.forceFocus(); + } + + _this5.fadeIn( + _this5.currentImage, + _this5.options.fadeSpeed, + function () { + if (_this5.options.focus) { + _this5.domNodes.wrapper.focus(); + } + } + ); + + _this5.isOpen = true; + var captionContainer, captionText; + + if (typeof _this5.options.captionSelector === "string") { + captionContainer = + _this5.options.captionSelector === "self" + ? _this5.relatedElements[_this5.currentImageIndex] + : _this5.relatedElements[ + _this5.currentImageIndex + ].querySelector(_this5.options.captionSelector); + } else if ( + typeof _this5.options.captionSelector === "function" + ) { + captionContainer = _this5.options.captionSelector( + _this5.relatedElements[_this5.currentImageIndex] + ); + } + + if (_this5.options.captions && captionContainer) { + if (_this5.options.captionType === "data") { + captionText = + captionContainer.dataset[ + _this5.options.captionsData + ]; + } else if (_this5.options.captionType === "text") { + captionText = captionContainer.innerHTML; + } else { + captionText = captionContainer.getAttribute( + _this5.options.captionsData + ); + } + } + + if (!_this5.options.loop) { + if (_this5.currentImageIndex === 0) { + _this5.hide( + _this5.domNodes.navigation.querySelector(".sl-prev") + ); + } + + if ( + _this5.currentImageIndex >= + _this5.relatedElements.length - 1 + ) { + _this5.hide( + _this5.domNodes.navigation.querySelector(".sl-next") + ); + } + + if (_this5.currentImageIndex > 0) { + _this5.show( + _this5.domNodes.navigation.querySelector(".sl-prev") + ); + } + + if ( + _this5.currentImageIndex < + _this5.relatedElements.length - 1 + ) { + _this5.show( + _this5.domNodes.navigation.querySelector(".sl-next") + ); + } + } else { + if (_this5.relatedElements.length === 1) { + _this5.hide( + _this5.domNodes.navigation.querySelectorAll( + ".sl-prev, .sl-next" + ) + ); + } else { + _this5.show( + _this5.domNodes.navigation.querySelectorAll( + ".sl-prev, .sl-next" + ) + ); + } + } + + if (direction === 1 || direction === -1) { + if (_this5.options.animationSlide) { + _this5.slide(0, 100 * direction + "px"); + + setTimeout(function () { + _this5.slide( + _this5.options.animationSpeed / 1000, + 0 + "px" + ); + }, 50); + } + + _this5.fadeIn( + _this5.domNodes.image, + _this5.options.fadeSpeed, + function () { + _this5.isAnimating = false; + + _this5.setCaption(captionText, imageWidth); + } + ); + } else { + _this5.isAnimating = false; + + _this5.setCaption(captionText, imageWidth); + } + + if ( + _this5.options.additionalHtml && + !_this5.domNodes.additionalHtml + ) { + _this5.domNodes.additionalHtml = + document.createElement("div"); + + _this5.domNodes.additionalHtml.classList.add( + "sl-additional-html" + ); + + _this5.domNodes.additionalHtml.innerHTML = + _this5.options.additionalHtml; + + _this5.domNodes.image.appendChild( + _this5.domNodes.additionalHtml + ); + } + }); + }, + }, + { + key: "zoomPanElement", + value: function zoomPanElement( + targetOffsetX, + targetOffsetY, + targetScale + ) { + this.currentImage.style[ + this.transitionPrefix + "transform" + ] = + "translate(" + + targetOffsetX + + "," + + targetOffsetY + + ") scale(" + + targetScale + + ")"; + }, + }, + { + key: "minMax", + value: function minMax(value, min, max) { + return value < min ? min : value > max ? max : value; + }, + }, + { + key: "setZoomData", + value: function setZoomData( + initialScale, + targetOffsetX, + targetOffsetY + ) { + this.currentImage.dataset.scale = initialScale; + this.currentImage.dataset.translateX = targetOffsetX; + this.currentImage.dataset.translateY = targetOffsetY; + }, + }, + { + key: "hashchangeHandler", + value: function hashchangeHandler() { + if (this.isOpen && this.hash === this.initialLocationHash) { + this.hashReseted = true; + this.close(); + } + }, + }, + { + key: "addEvents", + value: function addEvents() { + var _this6 = this; + + // resize/responsive + this.addEventListener( + window, + "resize." + this.eventNamespace, + function (event) { + //this.adjustImage.bind(this) + if (_this6.isOpen) { + _this6.adjustImage(); + } + } + ); + this.addEventListener( + this.domNodes.closeButton, + [ + "click." + this.eventNamespace, + "touchstart." + this.eventNamespace, + ], + this.close.bind(this) + ); + + if (this.options.history) { + setTimeout(function () { + _this6.addEventListener( + window, + "hashchange." + _this6.eventNamespace, + function (event) { + if (_this6.isOpen) { + _this6.hashchangeHandler(); + } + } + ); + }, 40); + } + + this.addEventListener( + this.domNodes.navigation.getElementsByTagName("button"), + "click." + this.eventNamespace, + function (event) { + if (!event.currentTarget.tagName.match(/button/i)) { + return true; + } + + event.preventDefault(); + _this6.controlCoordinates.swipeDiff = 0; + + _this6.loadImage( + event.currentTarget.classList.contains("sl-next") + ? 1 + : -1 + ); + } + ); + + if (this.options.scrollZoom) { + var scale = 1; + this.addEventListener( + this.domNodes.image, + ["mousewheel", "DOMMouseScroll"], + function (event) { + if ( + _this6.controlCoordinates.mousedown || + _this6.isAnimating || + _this6.isClosing || + !_this6.isOpen + ) { + return true; + } + + if (_this6.controlCoordinates.containerHeight == 0) { + _this6.controlCoordinates.containerHeight = + _this6.getDimensions( + _this6.domNodes.image + ).height; + _this6.controlCoordinates.containerWidth = + _this6.getDimensions(_this6.domNodes.image).width; + _this6.controlCoordinates.imgHeight = + _this6.getDimensions(_this6.currentImage).height; + _this6.controlCoordinates.imgWidth = + _this6.getDimensions(_this6.currentImage).width; + _this6.controlCoordinates.containerOffsetX = + _this6.domNodes.image.offsetLeft; + _this6.controlCoordinates.containerOffsetY = + _this6.domNodes.image.offsetTop; + _this6.controlCoordinates.initialOffsetX = + parseFloat( + _this6.currentImage.dataset.translateX + ); + _this6.controlCoordinates.initialOffsetY = + parseFloat( + _this6.currentImage.dataset.translateY + ); + } + + event.preventDefault(); + var delta = event.delta || event.wheelDelta; + + if (delta === undefined) { + //we are on firefox + delta = event.detail; + } + + delta = Math.max(-1, Math.min(1, delta)); // cap the delta to [-1,1] for cross browser consistency + // apply zoom + + scale += + delta * _this6.options.scrollZoomFactor * scale; + scale = Math.max( + 1, + Math.min(_this6.options.maxZoom, scale) + ); + _this6.controlCoordinates.targetScale = scale; + var scrollTopPos = + document.documentElement.scrollTop || + document.body.scrollTop; + _this6.controlCoordinates.pinchOffsetX = event.pageX; + _this6.controlCoordinates.pinchOffsetY = + event.pageY - scrollTopPos || 0; // need to substract the scroll position + + _this6.controlCoordinates.limitOffsetX = + (_this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerWidth) / + 2; + _this6.controlCoordinates.limitOffsetY = + (_this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerHeight) / + 2; + _this6.controlCoordinates.scaleDifference = + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.initialScale; + _this6.controlCoordinates.targetOffsetX = + _this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerWidth + ? 0 + : _this6.minMax( + _this6.controlCoordinates.initialOffsetX - + ((_this6.controlCoordinates.pinchOffsetX - + _this6.controlCoordinates + .containerOffsetX - + _this6.controlCoordinates.containerWidth / + 2 - + _this6.controlCoordinates + .initialOffsetX) / + (_this6.controlCoordinates.targetScale - + _this6.controlCoordinates + .scaleDifference)) * + _this6.controlCoordinates.scaleDifference, + _this6.controlCoordinates.limitOffsetX * -1, + _this6.controlCoordinates.limitOffsetX + ); + _this6.controlCoordinates.targetOffsetY = + _this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerHeight + ? 0 + : _this6.minMax( + _this6.controlCoordinates.initialOffsetY - + ((_this6.controlCoordinates.pinchOffsetY - + _this6.controlCoordinates + .containerOffsetY - + _this6.controlCoordinates + .containerHeight / + 2 - + _this6.controlCoordinates + .initialOffsetY) / + (_this6.controlCoordinates.targetScale - + _this6.controlCoordinates + .scaleDifference)) * + _this6.controlCoordinates.scaleDifference, + _this6.controlCoordinates.limitOffsetY * -1, + _this6.controlCoordinates.limitOffsetY + ); + + _this6.zoomPanElement( + _this6.controlCoordinates.targetOffsetX + "px", + _this6.controlCoordinates.targetOffsetY + "px", + _this6.controlCoordinates.targetScale + ); + + if (_this6.controlCoordinates.targetScale > 1) { + _this6.controlCoordinates.zoomed = true; + + if ( + (!_this6.domNodes.caption.style.opacity || + _this6.domNodes.caption.style.opacity > 0) && + _this6.domNodes.caption.style.display !== "none" + ) { + _this6.fadeOut( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + } else { + if (_this6.controlCoordinates.initialScale === 1) { + _this6.controlCoordinates.zoomed = false; + + if ( + _this6.domNodes.caption.style.display === "none" + ) { + _this6.fadeIn( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + } + + _this6.controlCoordinates.initialPinchDistance = + null; + _this6.controlCoordinates.capture = false; + } + + _this6.controlCoordinates.initialPinchDistance = + _this6.controlCoordinates.targetPinchDistance; + _this6.controlCoordinates.initialScale = + _this6.controlCoordinates.targetScale; + _this6.controlCoordinates.initialOffsetX = + _this6.controlCoordinates.targetOffsetX; + _this6.controlCoordinates.initialOffsetY = + _this6.controlCoordinates.targetOffsetY; + + _this6.setZoomData( + _this6.controlCoordinates.targetScale, + _this6.controlCoordinates.targetOffsetX, + _this6.controlCoordinates.targetOffsetY + ); + + _this6.zoomPanElement( + _this6.controlCoordinates.targetOffsetX + "px", + _this6.controlCoordinates.targetOffsetY + "px", + _this6.controlCoordinates.targetScale + ); + } + ); + } + + this.addEventListener( + this.domNodes.image, + [ + "touchstart." + this.eventNamespace, + "mousedown." + this.eventNamespace, + ], + function (event) { + if ( + event.target.tagName === "A" && + event.type === "touchstart" + ) { + return true; + } + + if (event.type === "mousedown") { + event.preventDefault(); + _this6.controlCoordinates.initialPointerOffsetX = + event.clientX; + _this6.controlCoordinates.initialPointerOffsetY = + event.clientY; + _this6.controlCoordinates.containerHeight = + _this6.getDimensions(_this6.domNodes.image).height; + _this6.controlCoordinates.containerWidth = + _this6.getDimensions(_this6.domNodes.image).width; + _this6.controlCoordinates.imgHeight = + _this6.getDimensions(_this6.currentImage).height; + _this6.controlCoordinates.imgWidth = + _this6.getDimensions(_this6.currentImage).width; + _this6.controlCoordinates.containerOffsetX = + _this6.domNodes.image.offsetLeft; + _this6.controlCoordinates.containerOffsetY = + _this6.domNodes.image.offsetTop; + _this6.controlCoordinates.initialOffsetX = parseFloat( + _this6.currentImage.dataset.translateX + ); + _this6.controlCoordinates.initialOffsetY = parseFloat( + _this6.currentImage.dataset.translateY + ); + _this6.controlCoordinates.capture = true; + } else { + _this6.controlCoordinates.touchCount = + event.touches.length; + _this6.controlCoordinates.initialPointerOffsetX = + event.touches[0].clientX; + _this6.controlCoordinates.initialPointerOffsetY = + event.touches[0].clientY; + _this6.controlCoordinates.containerHeight = + _this6.getDimensions(_this6.domNodes.image).height; + _this6.controlCoordinates.containerWidth = + _this6.getDimensions(_this6.domNodes.image).width; + _this6.controlCoordinates.imgHeight = + _this6.getDimensions(_this6.currentImage).height; + _this6.controlCoordinates.imgWidth = + _this6.getDimensions(_this6.currentImage).width; + _this6.controlCoordinates.containerOffsetX = + _this6.domNodes.image.offsetLeft; + _this6.controlCoordinates.containerOffsetY = + _this6.domNodes.image.offsetTop; + + if (_this6.controlCoordinates.touchCount === 1) { + /* Single touch */ + if (!_this6.controlCoordinates.doubleTapped) { + _this6.controlCoordinates.doubleTapped = true; + setTimeout(function () { + _this6.controlCoordinates.doubleTapped = false; + }, 300); + } else { + _this6.currentImage.classList.add( + "sl-transition" + ); + + if (!_this6.controlCoordinates.zoomed) { + _this6.controlCoordinates.initialScale = + _this6.options.doubleTapZoom; + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + 0, + 0 + ); + + _this6.zoomPanElement( + 0 + "px", + 0 + "px", + _this6.controlCoordinates.initialScale + ); + + if ( + (!_this6.domNodes.caption.style.opacity || + _this6.domNodes.caption.style.opacity > + 0) && + _this6.domNodes.caption.style.display !== + "none" + ) { + _this6.fadeOut( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + + _this6.controlCoordinates.zoomed = true; + } else { + _this6.controlCoordinates.initialScale = 1; + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + 0, + 0 + ); + + _this6.zoomPanElement( + 0 + "px", + 0 + "px", + _this6.controlCoordinates.initialScale + ); + + _this6.controlCoordinates.zoomed = false; + } + + setTimeout(function () { + if (_this6.currentImage) { + _this6.currentImage.classList.remove( + "sl-transition" + ); + } + }, 200); + return false; + } + + _this6.controlCoordinates.initialOffsetX = + parseFloat( + _this6.currentImage.dataset.translateX + ); + _this6.controlCoordinates.initialOffsetY = + parseFloat( + _this6.currentImage.dataset.translateY + ); + } else if ( + _this6.controlCoordinates.touchCount === 2 + ) { + /* Pinch */ + _this6.controlCoordinates.initialPointerOffsetX2 = + event.touches[1].clientX; + _this6.controlCoordinates.initialPointerOffsetY2 = + event.touches[1].clientY; + _this6.controlCoordinates.initialOffsetX = + parseFloat( + _this6.currentImage.dataset.translateX + ); + _this6.controlCoordinates.initialOffsetY = + parseFloat( + _this6.currentImage.dataset.translateY + ); + _this6.controlCoordinates.pinchOffsetX = + (_this6.controlCoordinates.initialPointerOffsetX + + _this6.controlCoordinates + .initialPointerOffsetX2) / + 2; + _this6.controlCoordinates.pinchOffsetY = + (_this6.controlCoordinates.initialPointerOffsetY + + _this6.controlCoordinates + .initialPointerOffsetY2) / + 2; + _this6.controlCoordinates.initialPinchDistance = + Math.sqrt( + (_this6.controlCoordinates + .initialPointerOffsetX - + _this6.controlCoordinates + .initialPointerOffsetX2) * + (_this6.controlCoordinates + .initialPointerOffsetX - + _this6.controlCoordinates + .initialPointerOffsetX2) + + (_this6.controlCoordinates + .initialPointerOffsetY - + _this6.controlCoordinates + .initialPointerOffsetY2) * + (_this6.controlCoordinates + .initialPointerOffsetY - + _this6.controlCoordinates + .initialPointerOffsetY2) + ); + } + + _this6.controlCoordinates.capture = true; + } + + if (_this6.controlCoordinates.mousedown) return true; + + if (_this6.transitionCapable) { + _this6.controlCoordinates.imageLeft = parseInt( + _this6.domNodes.image.style.left, + 10 + ); + } + + _this6.controlCoordinates.mousedown = true; + _this6.controlCoordinates.swipeDiff = 0; + _this6.controlCoordinates.swipeYDiff = 0; + _this6.controlCoordinates.swipeStart = + event.pageX || event.touches[0].pageX; + _this6.controlCoordinates.swipeYStart = + event.pageY || event.touches[0].pageY; + return false; + } + ); + this.addEventListener( + this.domNodes.image, + [ + "touchmove." + this.eventNamespace, + "mousemove." + this.eventNamespace, + "MSPointerMove", + ], + function (event) { + if (!_this6.controlCoordinates.mousedown) { + return true; + } + + if (event.type === "touchmove") { + if (_this6.controlCoordinates.capture === false) { + return false; + } + + _this6.controlCoordinates.pointerOffsetX = + event.touches[0].clientX; + _this6.controlCoordinates.pointerOffsetY = + event.touches[0].clientY; + _this6.controlCoordinates.touchCount = + event.touches.length; + _this6.controlCoordinates.touchmoveCount++; + + if (_this6.controlCoordinates.touchCount > 1) { + /* Pinch */ + _this6.controlCoordinates.pointerOffsetX2 = + event.touches[1].clientX; + _this6.controlCoordinates.pointerOffsetY2 = + event.touches[1].clientY; + _this6.controlCoordinates.targetPinchDistance = + Math.sqrt( + (_this6.controlCoordinates.pointerOffsetX - + _this6.controlCoordinates.pointerOffsetX2) * + (_this6.controlCoordinates.pointerOffsetX - + _this6.controlCoordinates.pointerOffsetX2) + + (_this6.controlCoordinates.pointerOffsetY - + _this6.controlCoordinates.pointerOffsetY2) * + (_this6.controlCoordinates.pointerOffsetY - + _this6.controlCoordinates.pointerOffsetY2) + ); + + if ( + _this6.controlCoordinates.initialPinchDistance === + null + ) { + _this6.controlCoordinates.initialPinchDistance = + _this6.controlCoordinates.targetPinchDistance; + } + + if ( + Math.abs( + _this6.controlCoordinates.initialPinchDistance - + _this6.controlCoordinates.targetPinchDistance + ) >= 1 + ) { + /* Initialize helpers */ + _this6.controlCoordinates.targetScale = + _this6.minMax( + (_this6.controlCoordinates + .targetPinchDistance / + _this6.controlCoordinates + .initialPinchDistance) * + _this6.controlCoordinates.initialScale, + 1, + _this6.options.maxZoom + ); + _this6.controlCoordinates.limitOffsetX = + (_this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerWidth) / + 2; + _this6.controlCoordinates.limitOffsetY = + (_this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerHeight) / + 2; + _this6.controlCoordinates.scaleDifference = + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.initialScale; + _this6.controlCoordinates.targetOffsetX = + _this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerWidth + ? 0 + : _this6.minMax( + _this6.controlCoordinates.initialOffsetX - + ((_this6.controlCoordinates + .pinchOffsetX - + _this6.controlCoordinates + .containerOffsetX - + _this6.controlCoordinates + .containerWidth / + 2 - + _this6.controlCoordinates + .initialOffsetX) / + (_this6.controlCoordinates + .targetScale - + _this6.controlCoordinates + .scaleDifference)) * + _this6.controlCoordinates + .scaleDifference, + _this6.controlCoordinates.limitOffsetX * + -1, + _this6.controlCoordinates.limitOffsetX + ); + _this6.controlCoordinates.targetOffsetY = + _this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerHeight + ? 0 + : _this6.minMax( + _this6.controlCoordinates.initialOffsetY - + ((_this6.controlCoordinates + .pinchOffsetY - + _this6.controlCoordinates + .containerOffsetY - + _this6.controlCoordinates + .containerHeight / + 2 - + _this6.controlCoordinates + .initialOffsetY) / + (_this6.controlCoordinates + .targetScale - + _this6.controlCoordinates + .scaleDifference)) * + _this6.controlCoordinates + .scaleDifference, + _this6.controlCoordinates.limitOffsetY * + -1, + _this6.controlCoordinates.limitOffsetY + ); + + _this6.zoomPanElement( + _this6.controlCoordinates.targetOffsetX + "px", + _this6.controlCoordinates.targetOffsetY + "px", + _this6.controlCoordinates.targetScale + ); + + if (_this6.controlCoordinates.targetScale > 1) { + _this6.controlCoordinates.zoomed = true; + + if ( + (!_this6.domNodes.caption.style.opacity || + _this6.domNodes.caption.style.opacity > + 0) && + _this6.domNodes.caption.style.display !== + "none" + ) { + _this6.fadeOut( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + } + + _this6.controlCoordinates.initialPinchDistance = + _this6.controlCoordinates.targetPinchDistance; + _this6.controlCoordinates.initialScale = + _this6.controlCoordinates.targetScale; + _this6.controlCoordinates.initialOffsetX = + _this6.controlCoordinates.targetOffsetX; + _this6.controlCoordinates.initialOffsetY = + _this6.controlCoordinates.targetOffsetY; + } + } else { + _this6.controlCoordinates.targetScale = + _this6.controlCoordinates.initialScale; + _this6.controlCoordinates.limitOffsetX = + (_this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerWidth) / + 2; + _this6.controlCoordinates.limitOffsetY = + (_this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerHeight) / + 2; + _this6.controlCoordinates.targetOffsetX = + _this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerWidth + ? 0 + : _this6.minMax( + _this6.controlCoordinates.pointerOffsetX - + (_this6.controlCoordinates + .initialPointerOffsetX - + _this6.controlCoordinates + .initialOffsetX), + _this6.controlCoordinates.limitOffsetX * -1, + _this6.controlCoordinates.limitOffsetX + ); + _this6.controlCoordinates.targetOffsetY = + _this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerHeight + ? 0 + : _this6.minMax( + _this6.controlCoordinates.pointerOffsetY - + (_this6.controlCoordinates + .initialPointerOffsetY - + _this6.controlCoordinates + .initialOffsetY), + _this6.controlCoordinates.limitOffsetY * -1, + _this6.controlCoordinates.limitOffsetY + ); + + if ( + Math.abs( + _this6.controlCoordinates.targetOffsetX + ) === + Math.abs(_this6.controlCoordinates.limitOffsetX) + ) { + _this6.controlCoordinates.initialOffsetX = + _this6.controlCoordinates.targetOffsetX; + _this6.controlCoordinates.initialPointerOffsetX = + _this6.controlCoordinates.pointerOffsetX; + } + + if ( + Math.abs( + _this6.controlCoordinates.targetOffsetY + ) === + Math.abs(_this6.controlCoordinates.limitOffsetY) + ) { + _this6.controlCoordinates.initialOffsetY = + _this6.controlCoordinates.targetOffsetY; + _this6.controlCoordinates.initialPointerOffsetY = + _this6.controlCoordinates.pointerOffsetY; + } + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + _this6.controlCoordinates.targetOffsetX, + _this6.controlCoordinates.targetOffsetY + ); + + _this6.zoomPanElement( + _this6.controlCoordinates.targetOffsetX + "px", + _this6.controlCoordinates.targetOffsetY + "px", + _this6.controlCoordinates.targetScale + ); + } + } + /* Mouse Move implementation */ + + if ( + event.type === "mousemove" && + _this6.controlCoordinates.mousedown + ) { + if (event.type == "touchmove") return true; + event.preventDefault(); + if (_this6.controlCoordinates.capture === false) + return false; + _this6.controlCoordinates.pointerOffsetX = + event.clientX; + _this6.controlCoordinates.pointerOffsetY = + event.clientY; + _this6.controlCoordinates.targetScale = + _this6.controlCoordinates.initialScale; + _this6.controlCoordinates.limitOffsetX = + (_this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerWidth) / + 2; + _this6.controlCoordinates.limitOffsetY = + (_this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale - + _this6.controlCoordinates.containerHeight) / + 2; + _this6.controlCoordinates.targetOffsetX = + _this6.controlCoordinates.imgWidth * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerWidth + ? 0 + : _this6.minMax( + _this6.controlCoordinates.pointerOffsetX - + (_this6.controlCoordinates + .initialPointerOffsetX - + _this6.controlCoordinates.initialOffsetX), + _this6.controlCoordinates.limitOffsetX * -1, + _this6.controlCoordinates.limitOffsetX + ); + _this6.controlCoordinates.targetOffsetY = + _this6.controlCoordinates.imgHeight * + _this6.controlCoordinates.targetScale <= + _this6.controlCoordinates.containerHeight + ? 0 + : _this6.minMax( + _this6.controlCoordinates.pointerOffsetY - + (_this6.controlCoordinates + .initialPointerOffsetY - + _this6.controlCoordinates.initialOffsetY), + _this6.controlCoordinates.limitOffsetY * -1, + _this6.controlCoordinates.limitOffsetY + ); + + if ( + Math.abs( + _this6.controlCoordinates.targetOffsetX + ) === + Math.abs(_this6.controlCoordinates.limitOffsetX) + ) { + _this6.controlCoordinates.initialOffsetX = + _this6.controlCoordinates.targetOffsetX; + _this6.controlCoordinates.initialPointerOffsetX = + _this6.controlCoordinates.pointerOffsetX; + } + + if ( + Math.abs( + _this6.controlCoordinates.targetOffsetY + ) === + Math.abs(_this6.controlCoordinates.limitOffsetY) + ) { + _this6.controlCoordinates.initialOffsetY = + _this6.controlCoordinates.targetOffsetY; + _this6.controlCoordinates.initialPointerOffsetY = + _this6.controlCoordinates.pointerOffsetY; + } + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + _this6.controlCoordinates.targetOffsetX, + _this6.controlCoordinates.targetOffsetY + ); + + _this6.zoomPanElement( + _this6.controlCoordinates.targetOffsetX + "px", + _this6.controlCoordinates.targetOffsetY + "px", + _this6.controlCoordinates.targetScale + ); + } + + if (!_this6.controlCoordinates.zoomed) { + _this6.controlCoordinates.swipeEnd = + event.pageX || event.touches[0].pageX; + _this6.controlCoordinates.swipeYEnd = + event.pageY || event.touches[0].pageY; + _this6.controlCoordinates.swipeDiff = + _this6.controlCoordinates.swipeStart - + _this6.controlCoordinates.swipeEnd; + _this6.controlCoordinates.swipeYDiff = + _this6.controlCoordinates.swipeYStart - + _this6.controlCoordinates.swipeYEnd; + + if (_this6.options.animationSlide) { + _this6.slide( + 0, + -_this6.controlCoordinates.swipeDiff + "px" + ); + } + } + } + ); + this.addEventListener( + this.domNodes.image, + [ + "touchend." + this.eventNamespace, + "mouseup." + this.eventNamespace, + "touchcancel." + this.eventNamespace, + "mouseleave." + this.eventNamespace, + "pointerup", + "pointercancel", + "MSPointerUp", + "MSPointerCancel", + ], + function (event) { + if (_this6.isTouchDevice && event.type === "touchend") { + _this6.controlCoordinates.touchCount = + event.touches.length; + + if (_this6.controlCoordinates.touchCount === 0) { + /* No touch */ + /* Set attributes */ + if (_this6.currentImage) { + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + _this6.controlCoordinates.targetOffsetX, + _this6.controlCoordinates.targetOffsetY + ); + } + + if (_this6.controlCoordinates.initialScale === 1) { + _this6.controlCoordinates.zoomed = false; + + if ( + _this6.domNodes.caption.style.display === "none" + ) { + _this6.fadeIn( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + } + + _this6.controlCoordinates.initialPinchDistance = + null; + _this6.controlCoordinates.capture = false; + } else if ( + _this6.controlCoordinates.touchCount === 1 + ) { + /* Single touch */ + _this6.controlCoordinates.initialPointerOffsetX = + event.touches[0].clientX; + _this6.controlCoordinates.initialPointerOffsetY = + event.touches[0].clientY; + } else if (_this6.controlCoordinates.touchCount > 1) { + /* Pinch */ + _this6.controlCoordinates.initialPinchDistance = + null; + } + } + + if (_this6.controlCoordinates.mousedown) { + _this6.controlCoordinates.mousedown = false; + var possibleDir = true; + + if (!_this6.options.loop) { + if ( + _this6.currentImageIndex === 0 && + _this6.controlCoordinates.swipeDiff < 0 + ) { + possibleDir = false; + } + + if ( + _this6.currentImageIndex >= + _this6.relatedElements.length - 1 && + _this6.controlCoordinates.swipeDiff > 0 + ) { + possibleDir = false; + } + } + + if ( + Math.abs(_this6.controlCoordinates.swipeDiff) > + _this6.options.swipeTolerance && + possibleDir + ) { + _this6.loadImage( + _this6.controlCoordinates.swipeDiff > 0 ? 1 : -1 + ); + } else if (_this6.options.animationSlide) { + _this6.slide( + _this6.options.animationSpeed / 1000, + 0 + "px" + ); + } + + if ( + _this6.options.swipeClose && + Math.abs(_this6.controlCoordinates.swipeYDiff) > + 50 && + Math.abs(_this6.controlCoordinates.swipeDiff) < + _this6.options.swipeTolerance + ) { + _this6.close(); + } + } + } + ); + this.addEventListener( + this.domNodes.image, + ["dblclick"], + function (event) { + if (_this6.isTouchDevice) return; + _this6.controlCoordinates.initialPointerOffsetX = + event.clientX; + _this6.controlCoordinates.initialPointerOffsetY = + event.clientY; + _this6.controlCoordinates.containerHeight = + _this6.getDimensions(_this6.domNodes.image).height; + _this6.controlCoordinates.containerWidth = + _this6.getDimensions(_this6.domNodes.image).width; + _this6.controlCoordinates.imgHeight = + _this6.getDimensions(_this6.currentImage).height; + _this6.controlCoordinates.imgWidth = + _this6.getDimensions(_this6.currentImage).width; + _this6.controlCoordinates.containerOffsetX = + _this6.domNodes.image.offsetLeft; + _this6.controlCoordinates.containerOffsetY = + _this6.domNodes.image.offsetTop; + + _this6.currentImage.classList.add("sl-transition"); + + if (!_this6.controlCoordinates.zoomed) { + _this6.controlCoordinates.initialScale = + _this6.options.doubleTapZoom; + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + 0, + 0 + ); + + _this6.zoomPanElement( + 0 + "px", + 0 + "px", + _this6.controlCoordinates.initialScale + ); + + if ( + (!_this6.domNodes.caption.style.opacity || + _this6.domNodes.caption.style.opacity > 0) && + _this6.domNodes.caption.style.display !== "none" + ) { + _this6.fadeOut( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + + _this6.controlCoordinates.zoomed = true; + } else { + _this6.controlCoordinates.initialScale = 1; + + _this6.setZoomData( + _this6.controlCoordinates.initialScale, + 0, + 0 + ); + + _this6.zoomPanElement( + 0 + "px", + 0 + "px", + _this6.controlCoordinates.initialScale + ); + + _this6.controlCoordinates.zoomed = false; + + if ( + _this6.domNodes.caption.style.display === "none" + ) { + _this6.fadeIn( + _this6.domNodes.caption, + _this6.options.fadeSpeed + ); + } + } + + setTimeout(function () { + if (_this6.currentImage) { + _this6.currentImage.classList.remove( + "sl-transition" + ); + + _this6.currentImage.style[ + _this6.transitionPrefix + "transform-origin" + ] = null; + } + }, 200); + _this6.controlCoordinates.capture = true; + return false; + } + ); + }, + }, + { + key: "getDimensions", + value: function getDimensions(element) { + var styles = window.getComputedStyle(element), + height = element.offsetHeight, + width = element.offsetWidth, + borderTopWidth = parseFloat(styles.borderTopWidth), + borderBottomWidth = parseFloat(styles.borderBottomWidth), + paddingTop = parseFloat(styles.paddingTop), + paddingBottom = parseFloat(styles.paddingBottom), + borderLeftWidth = parseFloat(styles.borderLeftWidth), + borderRightWidth = parseFloat(styles.borderRightWidth), + paddingLeft = parseFloat(styles.paddingLeft), + paddingRight = parseFloat(styles.paddingRight); + return { + height: + height - + borderBottomWidth - + borderTopWidth - + paddingTop - + paddingBottom, + width: + width - + borderLeftWidth - + borderRightWidth - + paddingLeft - + paddingRight, + }; + }, + }, + { + key: "updateHash", + value: function updateHash() { + var newHash = "pid=" + (this.currentImageIndex + 1), + newURL = + window.location.href.split("#")[0] + "#" + newHash; + this.hashReseted = false; + + if (this.pushStateSupport) { + window.history[ + this.historyHasChanges ? "replaceState" : "pushState" + ]("", document.title, newURL); + } else { + // what is the browser target of this? + if (this.historyHasChanges) { + window.location.replace(newURL); + } else { + window.location.hash = newHash; + } + } + + if (!this.historyHasChanges) { + this.urlChangedOnce = true; + } + + this.historyHasChanges = true; + }, + }, + { + key: "resetHash", + value: function resetHash() { + this.hashReseted = true; + + if (this.urlChangedOnce) { + history.back(); + } else { + if (this.pushStateSupport) { + history.pushState( + "", + document.title, + window.location.pathname + window.location.search + ); + } else { + window.location.hash = ""; + } + } // + //in case an history operation is still pending + + clearTimeout(this.historyUpdateTimeout); + }, + }, + { + key: "updateURL", + value: function updateURL() { + clearTimeout(this.historyUpdateTimeout); + + if (!this.historyHasChanges) { + this.updateHash(); // first time + } else { + this.historyUpdateTimeout = setTimeout( + this.updateHash.bind(this), + 800 + ); + } + }, + }, + { + key: "setCaption", + value: function setCaption(captionText, imageWidth) { + var _this7 = this; + + if ( + this.options.captions && + captionText && + captionText !== "" && + typeof captionText !== "undefined" + ) { + this.hide(this.domNodes.caption); + this.domNodes.caption.style.width = imageWidth + "px"; + this.domNodes.caption.innerHTML = captionText; + this.domNodes.image.appendChild(this.domNodes.caption); + setTimeout(function () { + _this7.fadeIn( + _this7.domNodes.caption, + _this7.options.fadeSpeed + ); + }, this.options.captionDelay); + } + }, + }, + { + key: "slide", + value: function slide(speed, pos) { + if (!this.transitionCapable) { + return (this.domNodes.image.style.left = pos); + } + + this.domNodes.image.style[ + this.transitionPrefix + "transform" + ] = "translateX(" + pos + ")"; + this.domNodes.image.style[ + this.transitionPrefix + "transition" + ] = + this.transitionPrefix + "transform " + speed + "s linear"; + }, + }, + { + key: "getRelated", + value: function getRelated(rel) { + var elems; + + if (rel && rel !== false && rel !== "nofollow") { + elems = Array.from(this.elements).filter(function ( + element + ) { + return element.getAttribute("rel") === rel; + }); + } else { + elems = this.elements; + } + + return elems; + }, + }, + { + key: "openImage", + value: function openImage(element) { + var _this8 = this; + + element.dispatchEvent( + new Event("show." + this.eventNamespace) + ); + + if (this.options.disableScroll) { + this.globalScrollbarWidth = this.toggleScrollbar("hide"); + } + + if ( + this.options.htmlClass && + this.options.htmlClass !== "" + ) { + document + .querySelector("html") + .classList.add(this.options.htmlClass); + } + + document.body.appendChild(this.domNodes.wrapper); + this.domNodes.wrapper.appendChild(this.domNodes.image); + + if (this.options.overlay) { + document.body.appendChild(this.domNodes.overlay); + } + + this.relatedElements = this.getRelated(element.rel); + + if (this.options.showCounter) { + if ( + this.relatedElements.length == 1 && + this.domNodes.wrapper.contains(this.domNodes.counter) + ) { + this.domNodes.wrapper.removeChild( + this.domNodes.counter + ); + } else if ( + this.relatedElements.length > 1 && + !this.domNodes.wrapper.contains(this.domNodes.counter) + ) { + this.domNodes.wrapper.appendChild( + this.domNodes.counter + ); + } + } + + this.isAnimating = true; + this.currentImageIndex = + this.relatedElements.indexOf(element); + var targetURL = element.getAttribute( + this.options.sourceAttr + ); + this.currentImage = document.createElement("img"); + this.currentImage.style.display = "none"; + this.currentImage.setAttribute("src", targetURL); + this.currentImage.dataset.scale = 1; + this.currentImage.dataset.translateX = 0; + this.currentImage.dataset.translateY = 0; + + if (this.loadedImages.indexOf(targetURL) === -1) { + this.loadedImages.push(targetURL); + } + + this.domNodes.image.innerHTML = ""; + this.domNodes.image.setAttribute("style", ""); + this.domNodes.image.appendChild(this.currentImage); + this.fadeIn(this.domNodes.overlay, this.options.fadeSpeed); + this.fadeIn( + [ + this.domNodes.counter, + this.domNodes.navigation, + this.domNodes.closeButton, + ], + this.options.fadeSpeed + ); + this.show(this.domNodes.spinner); + this.domNodes.counter.querySelector( + ".sl-current" + ).innerHTML = this.currentImageIndex + 1; + this.domNodes.counter.querySelector(".sl-total").innerHTML = + this.relatedElements.length; + this.adjustImage(); + + if (this.options.preloading) { + this.preload(); + } + + setTimeout(function () { + element.dispatchEvent( + new Event("shown." + _this8.eventNamespace) + ); + }, this.options.animationSpeed); + }, + }, + { + key: "forceFocus", + value: function forceFocus() { + var _this9 = this; + + this.removeEventListener( + document, + "focusin." + this.eventNamespace + ); + this.addEventListener( + document, + "focusin." + this.eventNamespace, + function (event) { + if ( + document !== event.target && + _this9.domNodes.wrapper !== event.target && + !_this9.domNodes.wrapper.contains(event.target) + ) { + _this9.domNodes.wrapper.focus(); + } + } + ); + }, // utility + }, + { + key: "addEventListener", + value: function addEventListener( + elements, + events, + callback, + opts + ) { + elements = this.wrap(elements); + events = this.wrap(events); + + var _iterator = _createForOfIteratorHelper(elements), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var element = _step.value; + + if (!element.namespaces) { + element.namespaces = {}; + } // save the namespaces addEventListener the DOM element itself + + var _iterator2 = _createForOfIteratorHelper(events), + _step2; + + try { + for ( + _iterator2.s(); + !(_step2 = _iterator2.n()).done; + + ) { + var event = _step2.value; + var options = opts || false; + var needsPassiveFix = + ["touchstart", "touchmove"].indexOf( + event.split(".")[0] + ) >= 0; + + if ( + needsPassiveFix && + this.isPassiveEventsSupported + ) { + if (_typeof(options) === "object") { + options.passive = true; + } else { + options = { + passive: true, + }; + } + } + + element.namespaces[event] = callback; + element.addEventListener( + event.split(".")[0], + callback, + options + ); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + }, + }, + { + key: "removeEventListener", + value: function removeEventListener(elements, events) { + elements = this.wrap(elements); + events = this.wrap(events); + + var _iterator3 = _createForOfIteratorHelper(elements), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var element = _step3.value; + + var _iterator4 = _createForOfIteratorHelper(events), + _step4; + + try { + for ( + _iterator4.s(); + !(_step4 = _iterator4.n()).done; + + ) { + var event = _step4.value; + + if ( + element.namespaces && + element.namespaces[event] + ) { + element.removeEventListener( + event.split(".")[0], + element.namespaces[event] + ); + delete element.namespaces[event]; + } + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + }, + }, + { + key: "fadeOut", + value: function fadeOut(elements, duration, callback) { + var _this10 = this; + + elements = this.wrap(elements); + + var _iterator5 = _createForOfIteratorHelper(elements), + _step5; + + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) { + var element = _step5.value; + element.style.opacity = + parseFloat(element) || + window + .getComputedStyle(element) + .getPropertyValue("opacity"); + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + + this.isFadeIn = false; + + var step = 16.66666 / (duration || this.options.fadeSpeed), + fade = function fade() { + var currentOpacity = parseFloat( + elements[0].style.opacity + ); + + if ((currentOpacity -= step) < 0) { + var _iterator6 = _createForOfIteratorHelper(elements), + _step6; + + try { + for ( + _iterator6.s(); + !(_step6 = _iterator6.n()).done; + + ) { + var element = _step6.value; + element.style.display = "none"; // element.style.opacity = ''; + + element.style.opacity = 1; + } + } catch (err) { + _iterator6.e(err); + } finally { + _iterator6.f(); + } + + callback && callback.call(_this10, elements); + } else { + var _iterator7 = _createForOfIteratorHelper(elements), + _step7; + + try { + for ( + _iterator7.s(); + !(_step7 = _iterator7.n()).done; + + ) { + var _element = _step7.value; + _element.style.opacity = currentOpacity; + } + } catch (err) { + _iterator7.e(err); + } finally { + _iterator7.f(); + } + + requestAnimationFrame(fade); + } + }; + + fade(); + }, + }, + { + key: "fadeIn", + value: function fadeIn( + elements, + duration, + callback, + display + ) { + var _this11 = this; + + elements = this.wrap(elements); + + var _iterator8 = _createForOfIteratorHelper(elements), + _step8; + + try { + for (_iterator8.s(); !(_step8 = _iterator8.n()).done; ) { + var element = _step8.value; + element.style.opacity = 0; + element.style.display = display || "block"; + } + } catch (err) { + _iterator8.e(err); + } finally { + _iterator8.f(); + } + + this.isFadeIn = true; + + var opacityTarget = parseFloat( + elements[0].dataset.opacityTarget || 1 + ), + step = + (16.66666 * opacityTarget) / + (duration || this.options.fadeSpeed), + fade = function fade() { + var currentOpacity = parseFloat( + elements[0].style.opacity + ); + + if (!((currentOpacity += step) > opacityTarget)) { + var _iterator9 = _createForOfIteratorHelper(elements), + _step9; + + try { + for ( + _iterator9.s(); + !(_step9 = _iterator9.n()).done; + + ) { + var element = _step9.value; + element.style.opacity = currentOpacity; + } + } catch (err) { + _iterator9.e(err); + } finally { + _iterator9.f(); + } + + if (!_this11.isFadeIn) return; + requestAnimationFrame(fade); + } else { + var _iterator10 = + _createForOfIteratorHelper(elements), + _step10; + + try { + for ( + _iterator10.s(); + !(_step10 = _iterator10.n()).done; + + ) { + var _element2 = _step10.value; + _element2.style.opacity = opacityTarget; + } + } catch (err) { + _iterator10.e(err); + } finally { + _iterator10.f(); + } + + callback && callback.call(_this11, elements); + } + }; + + fade(); + }, + }, + { + key: "hide", + value: function hide(elements) { + elements = this.wrap(elements); + + var _iterator11 = _createForOfIteratorHelper(elements), + _step11; + + try { + for ( + _iterator11.s(); + !(_step11 = _iterator11.n()).done; + + ) { + var element = _step11.value; + + if (element.style.display != "none") { + element.dataset.initialDisplay = + element.style.display; + } + + element.style.display = "none"; + } + } catch (err) { + _iterator11.e(err); + } finally { + _iterator11.f(); + } + }, + }, + { + key: "show", + value: function show(elements, display) { + elements = this.wrap(elements); + + var _iterator12 = _createForOfIteratorHelper(elements), + _step12; + + try { + for ( + _iterator12.s(); + !(_step12 = _iterator12.n()).done; + + ) { + var element = _step12.value; + element.style.display = + element.dataset.initialDisplay || display || "block"; + } + } catch (err) { + _iterator12.e(err); + } finally { + _iterator12.f(); + } + }, + }, + { + key: "wrap", + value: function wrap(input) { + return typeof input[Symbol.iterator] === "function" && + typeof input !== "string" + ? input + : [input]; + }, + }, + { + key: "on", + value: function on(events, callback) { + events = this.wrap(events); + + var _iterator13 = _createForOfIteratorHelper(this.elements), + _step13; + + try { + for ( + _iterator13.s(); + !(_step13 = _iterator13.n()).done; + + ) { + var element = _step13.value; + + if (!element.fullyNamespacedEvents) { + element.fullyNamespacedEvents = {}; + } + + var _iterator14 = _createForOfIteratorHelper(events), + _step14; + + try { + for ( + _iterator14.s(); + !(_step14 = _iterator14.n()).done; + + ) { + var event = _step14.value; + element.fullyNamespacedEvents[event] = callback; + element.addEventListener(event, callback); + } + } catch (err) { + _iterator14.e(err); + } finally { + _iterator14.f(); + } + } + } catch (err) { + _iterator13.e(err); + } finally { + _iterator13.f(); + } + + return this; + }, + }, + { + key: "off", + value: function off(events) { + events = this.wrap(events); + + var _iterator15 = _createForOfIteratorHelper(this.elements), + _step15; + + try { + for ( + _iterator15.s(); + !(_step15 = _iterator15.n()).done; + + ) { + var element = _step15.value; + + var _iterator16 = _createForOfIteratorHelper(events), + _step16; + + try { + for ( + _iterator16.s(); + !(_step16 = _iterator16.n()).done; + + ) { + var event = _step16.value; + + if ( + typeof element.fullyNamespacedEvents !== + "undefined" && + event in element.fullyNamespacedEvents + ) { + element.removeEventListener( + event, + element.fullyNamespacedEvents[event] + ); + } + } + } catch (err) { + _iterator16.e(err); + } finally { + _iterator16.f(); + } + } + } catch (err) { + _iterator15.e(err); + } finally { + _iterator15.f(); + } + + return this; + }, // api + }, + { + key: "open", + value: function open(elem) { + elem = elem || this.elements[0]; + + if ( + typeof jQuery !== "undefined" && + elem instanceof jQuery + ) { + elem = elem.get(0); + } + + this.initialImageIndex = this.elements.indexOf(elem); + + if (this.initialImageIndex > -1) { + this.openImage(elem); + } + }, + }, + { + key: "next", + value: function next() { + this.loadImage(1); + }, + }, + { + key: "prev", + value: function prev() { + this.loadImage(-1); + }, // get some useful data + }, + { + key: "getLighboxData", + value: function getLighboxData() { + return { + currentImageIndex: this.currentImageIndex, + currentImage: this.currentImage, + globalScrollbarWidth: this.globalScrollbarWidth, + }; + }, //close is exposed anyways.. + }, + { + key: "destroy", + value: function destroy() { + //remove all custom event listeners from elements + this.off([ + "close." + this.eventNamespace, + "closed." + this.eventNamespace, + "nextImageLoaded." + this.eventNamespace, + "prevImageLoaded." + this.eventNamespace, + "change." + this.eventNamespace, + "nextDone." + this.eventNamespace, + "prevDone." + this.eventNamespace, + "error." + this.eventNamespace, + "changed." + this.eventNamespace, + "next." + this.eventNamespace, + "prev." + this.eventNamespace, + "show." + this.eventNamespace, + "shown." + this.eventNamespace, + ]); + this.removeEventListener( + this.elements, + "click." + this.eventNamespace + ); + this.removeEventListener( + document, + "focusin." + this.eventNamespace + ); + this.removeEventListener( + document.body, + "contextmenu." + this.eventNamespace + ); + this.removeEventListener( + document.body, + "keyup." + this.eventNamespace + ); + this.removeEventListener( + this.domNodes.navigation.getElementsByTagName("button"), + "click." + this.eventNamespace + ); + this.removeEventListener( + this.domNodes.closeButton, + "click." + this.eventNamespace + ); + this.removeEventListener( + window, + "resize." + this.eventNamespace + ); + this.removeEventListener( + window, + "hashchange." + this.eventNamespace + ); + this.close(); + + if (this.isOpen) { + document.body.removeChild(this.domNodes.wrapper); + document.body.removeChild(this.domNodes.overlay); + } + + this.elements = null; + }, + }, + { + key: "refresh", + value: function refresh() { + if (!this.initialSelector) { + throw "refreshing only works when you initialize using a selector!"; + } + + var options = this.options, + selector = this.initialSelector; + this.destroy(); + this.constructor(selector, options); + return this; + }, + }, + ]); + + return SimpleLightbox; + })(); + + var _default = SimpleLightbox; + exports["default"] = _default; + global.SimpleLightbox = SimpleLightbox; + }.call(this)); + }.call( + this, + typeof global !== "undefined" + ? global + : typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : {} + )); + }, + {}, + ], + }, + {}, + [1] +); diff --git a/assets/scss/album/basic.scss b/assets/scss/album/basic.scss new file mode 100755 index 0000000..21d2d90 --- /dev/null +++ b/assets/scss/album/basic.scss @@ -0,0 +1,8 @@ +@import "./details.scss"; +@import "./child.scss"; + +.my_album { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + grid-gap: 50px; +} diff --git a/assets/scss/album/child.scss b/assets/scss/album/child.scss new file mode 100644 index 0000000..e8bb7d4 --- /dev/null +++ b/assets/scss/album/child.scss @@ -0,0 +1,20 @@ +$ImageWidth: 260px; +$ImageHeight: 180px; + +$BDRadius: 15px; + + + +.my_album_child { + + + img { + display: block; + border-radius: $BDRadius; + width: $ImageWidth; + height: $ImageHeight; + object-fit: cover; + box-shadow: $BorderShadow; + } + +} \ No newline at end of file diff --git a/assets/scss/album/details.scss b/assets/scss/album/details.scss new file mode 100644 index 0000000..e69de29 diff --git a/assets/scss/breadcrumbs.scss b/assets/scss/breadcrumbs.scss new file mode 100755 index 0000000..bef486d --- /dev/null +++ b/assets/scss/breadcrumbs.scss @@ -0,0 +1,12 @@ +.my_breadcrumbs { + padding-top: 3rem; + padding-bottom: 1rem; + + margin: 0 auto; + max-width: 1200px; + + .my_border { + box-shadow: $BorderShadow; + border-radius: $BDRadius; + } +} diff --git a/assets/scss/container.scss b/assets/scss/container.scss new file mode 100755 index 0000000..eae0802 --- /dev/null +++ b/assets/scss/container.scss @@ -0,0 +1,10 @@ +@import "./gallery/basic.scss"; +@import "./album/basic.scss"; + +.my_container { + padding-top: 2rem; + padding-bottom: 3rem; + + margin: 0 auto; + max-width: 1200px; +} diff --git a/assets/scss/gallery/basic.scss b/assets/scss/gallery/basic.scss new file mode 100755 index 0000000..ff9c76e --- /dev/null +++ b/assets/scss/gallery/basic.scss @@ -0,0 +1,7 @@ +@import "./card.scss"; + +.my_gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + grid-gap: 50px; +} diff --git a/assets/scss/gallery/card.scss b/assets/scss/gallery/card.scss new file mode 100755 index 0000000..cf624ac --- /dev/null +++ b/assets/scss/gallery/card.scss @@ -0,0 +1,21 @@ +@import "./child.scss"; +@import "./simple-lightbox.scss"; + +.my_card { + cursor: pointer; + position: relative; + height: 0; + padding-bottom: 200px; + --offset-multiplier: 4px; + transition: transform 0.6s ease; + --translate: 0; + transform: translate(var(--translate), var(--translate)); + filter: brightness(70%); +} + +.my_card:hover { + --offset-multiplier: 6px; + --translate: calc(-1px * (var(--cards) - 1)); + transition: transform 0.3s ease; + filter: none; +} diff --git a/assets/scss/gallery/child.scss b/assets/scss/gallery/child.scss new file mode 100755 index 0000000..56b1f32 --- /dev/null +++ b/assets/scss/gallery/child.scss @@ -0,0 +1,71 @@ +$ImageWidth: 260px; +$ImageHeight: 180px; + +$BDRadius: 15px; +$BorderShadow: 0px 4px 8px rgba(0, 0, 0, 0.1), + 0px -4px 8px rgba(255, 255, 255, 0.8); + +.my_gallery_child { + position: absolute; + width: $ImageWidth; + height: $ImageHeight; + color: white; + box-sizing: border-box; + background-size: cover; + border-radius: $BDRadius; + transition: inherit; + --translate: calc(var(--offset) * var(--offset-multiplier)); + transform: translate(var(--translate), var(--translate)); + + .child-title { + text-decoration: none; + filter: none; + } + + img { + display: block; + border-radius: $BDRadius; + width: $ImageWidth; + height: $ImageHeight; + object-fit: cover; + box-shadow: $BorderShadow; + } +} + +.my_gallery_child:nth-child(1) { + display: flex; + padding-top: 0.5rem; + justify-items: left; + font-size: 30px; + + div:hover { + filter: none; + } + + --offset: 0; + z-index: 4; +} +.my_gallery_child:nth-child(2) { + box-shadow: $BorderShadow; + + --offset: 1; + z-index: 3; +} +.my_gallery_child:nth-child(3) { + box-shadow: $BorderShadow; + + --offset: 2; + z-index: 2; +} +.my_gallery_child:nth-child(4) { + box-shadow: $BorderShadow; + + --offset: 3; + z-index: 1; +} +.my_gallery_child:nth-child(5) { + box-shadow: $BorderShadow; + + --offset: 4; + z-index: 0; +} \ No newline at end of file diff --git a/assets/scss/gallery/simple-lightbox.scss b/assets/scss/gallery/simple-lightbox.scss new file mode 100644 index 0000000..6e86ec5 --- /dev/null +++ b/assets/scss/gallery/simple-lightbox.scss @@ -0,0 +1,326 @@ +// You can customize Simplelightbox with the following variables: + +$sl-font-family: Arial, Baskerville, monospace !default; +$sl-overlay-background: #fff !default; +$sl-navigation-color: #000 !default; +$sl-caption-color: #fff !default; +$sl-caption-background: rgba(0, 0, 0, 0.8) !default; + +$sl-counter-fontsize: 1rem !default; +$sl-caption-fontsize: 1rem !default; +$sl-close-fontsize: 3rem !default; + +$sl-breakpoint-medium: 35.5em !default; // 568px, when 1em == 16px +$sl-breakpoint-large: 50em !default; // 800px, when 1em == 16px + +$sl-arrow-fontsize-small: 2rem !default; +$sl-arrow-fontsize-medium: 3rem !default; +$sl-arrow-fontsize-large: 3rem !default; +$sl-img-border-small: 0 none !default; +$sl-img-border-medium: 0 none !default; +$sl-img-border-large: 0 none !default; +$sl-iframe-border-small: 0 none !default; +$sl-iframe-border-medium: 0 none !default; +$sl-iframe-border-large: 0 none !default; + +$add-vendor-prefixes: true !default; + +body.hidden-scroll { + overflow: hidden; +} + +.sl-overlay { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + background: $sl-overlay-background; + display: none; + z-index: 1035; +} + +.sl-wrapper { + z-index: 1040; + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; + + * { + box-sizing: border-box; + } + button { + border: 0 none; + background: transparent; + font-size: 28px; + padding: 0; + cursor: pointer; + &:hover { + opacity: 0.7; + } + } + + .sl-close { + display: none; + position: fixed; + right: 30px; + top: 30px; + z-index: 10060; + margin-top: -14px; + margin-right: -14px; + height: 44px; + width: 44px; + line-height: 44px; + font-family: $sl-font-family; + color: $sl-navigation-color; + font-size: $sl-close-fontsize; + } + + .sl-counter { + display: none; + position: fixed; + top: 30px; + left: 30px; + z-index: 1060; + color: $sl-navigation-color; + font-size: $sl-counter-fontsize; + } + + .sl-navigation { + width: 100%; + display: none; + button { + position: fixed; + top: 50%; + margin-top: -22px; + height: 44px; + width: 22px; + line-height: 44px; + text-align: center; + display: block; + z-index: 10060; + font-family: $sl-font-family; + color: $sl-navigation-color; + &.sl-next { + right: 5px; + font-size: $sl-arrow-fontsize-small; + } + + &.sl-prev { + left: 5px; + font-size: $sl-arrow-fontsize-small; + } + + @media (min-width: $sl-breakpoint-medium) { + width: 44px; + + &.sl-next { + right: 10px; + font-size: $sl-arrow-fontsize-medium; + } + + &.sl-prev { + left: 10px; + font-size: $sl-arrow-fontsize-medium; + } + } + @media (min-width: $sl-breakpoint-large) { + width: 44px; + + &.sl-next { + right: 20px; + font-size: $sl-arrow-fontsize-large; + } + + &.sl-prev { + left: 20px; + font-size: $sl-arrow-fontsize-large; + } + } + } + } + + &.sl-dir-rtl { + .sl-navigation { + direction: ltr; + } + } + + .sl-image { + position: fixed; + @if $add-vendor-prefixes { + -ms-touch-action: none; + } + touch-action: none; + z-index: 10000; + img { + margin: 0; + padding: 0; + display: block; + border: $sl-img-border-small; + width: 100%; + height: auto; + border-radius: 15px; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1), + 0px -4px 8px rgba(255, 255, 255, 0.8); + @media (min-width: $sl-breakpoint-medium) { + border: $sl-img-border-medium; + } + @media (min-width: $sl-breakpoint-large) { + border: $sl-img-border-large; + } + } + iframe { + background: #000; + border: $sl-iframe-border-small; + @media (min-width: $sl-breakpoint-medium) { + border: $sl-iframe-border-medium; + } + @media (min-width: $sl-breakpoint-large) { + border: $sl-iframe-border-large; + } + } + .sl-caption { + display: none; + padding: 10px; + color: $sl-caption-color; + background: $sl-caption-background; + font-size: $sl-caption-fontsize; + position: absolute; + bottom: 0; + left: 0; + right: 0; + + &.pos-top { + bottom: auto; + top: 0; + } + + &.pos-outside { + bottom: auto; + } + } + + .sl-download { + display: none; + position: absolute; + bottom: 5px; + right: 5px; + color: $sl-navigation-color; + z-index: 1060; + } + } +} + +.sl-spinner { + display: none; + border: 5px solid #333; + border-radius: 40px; + height: 40px; + left: 50%; + margin: -20px 0 0 -20px; + opacity: 0; + position: fixed; + top: 50%; + width: 40px; + z-index: 1007; + @if $add-vendor-prefixes { + -webkit-animation: pulsate 1s ease-out infinite; + -moz-animation: pulsate 1s ease-out infinite; + -ms-animation: pulsate 1s ease-out infinite; + -o-animation: pulsate 1s ease-out infinite; + } + animation: pulsate 1s ease-out infinite; +} + +.sl-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.sl-transition { + @if $add-vendor-prefixes { + transition: -moz-transform ease 200ms; + transition: -ms-transform ease 200ms; + transition: -o-transform ease 200ms; + transition: -webkit-transform ease 200ms; + } + transition: transform ease 200ms; +} + +@-webkit-keyframes pulsate { + 0% { + transform: scale(0.1); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1.2); + opacity: 0; + } +} + +@keyframes pulsate { + 0% { + transform: scale(0.1); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1.2); + opacity: 0; + } +} + +@if $add-vendor-prefixes { + @-moz-keyframes pulsate { + 0% { + transform: scale(0.1); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1.2); + opacity: 0; + } + } + + @-o-keyframes pulsate { + 0% { + transform: scale(0.1); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1.2); + opacity: 0; + } + } + + @-ms-keyframes pulsate { + 0% { + transform: scale(0.1); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1.2); + opacity: 0; + } + } +} diff --git a/assets/scss/navigation.scss b/assets/scss/navigation.scss new file mode 100755 index 0000000..8a0c6dd --- /dev/null +++ b/assets/scss/navigation.scss @@ -0,0 +1,12 @@ +.my_navigation { + padding-top: 3rem; + padding-bottom: 1rem; + + margin: 0 auto; + max-width: 1200px; + + .my_border { + box-shadow: $BorderShadow; + border-radius: $BDRadius; + } +} diff --git a/assets/scss/pagination.scss b/assets/scss/pagination.scss new file mode 100644 index 0000000..6d314cc --- /dev/null +++ b/assets/scss/pagination.scss @@ -0,0 +1,96 @@ +@media (min-width: 580px) { + .images { + grid-template-columns: 25% 25% 25% 25%; + } +} +img { + height: auto; + width: 100%; + max-width: 100%; + vertical-align: middle; +} +.template { + transition: all 0.8s cubic-bezier(0.455, 0.03, 0.515, 0.955); + opacity: 0; + position: relative; + background: #707070; +} + +.template p { + position: absolute; + left: 0; + bottom: 0; + color: #fff; + text-transform: uppercase; + font-size: 13px; + letter-spacing: 1px; + margin: 0; + width: 100%; + background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)); + padding: 25px 10px 10px 10px; +} + +.template.animate { + transform: scale(1); + opacity: 1; +} + +#gallery-pagination { + margin: 30px 0; +} + +#btnNext, +#btnPrevious { + background: transparent; + color: #609ea5; + padding: 8px 28px; + border: 0; + font-size: 18px; + cursor: pointer; + outline: none; +} + +#gallery-pagination #page { + margin-left: 15px; + margin-right: 15px; + color: #707070; + font-style: italic; + font-size: 13px; +} + +.sr-only { + position: absolute !important; + overflow: hidden; + clip: rect(0 0 0 0); + height: 1px; + width: 1px; + margin: -1px; + padding: 0; + border: 0; +} + +#gallery-dots { + margin-bottom: 15px; +} + +.gallery-dot { + background: #609ea5; + border: 0; + padding: 0; + width: 50px; + height: 8px; + margin: 5px; + opacity: 0.4; + outline: none; + cursor: pointer; +} + +.gallery-dot.active { + opacity: 1; +} + +#gallery-pagination { + display: grid; + grid-template-columns: 1fr 3fr 1fr; + align-items: start; +} diff --git a/assets/scss/style.scss b/assets/scss/style.scss new file mode 100755 index 0000000..be23e3d --- /dev/null +++ b/assets/scss/style.scss @@ -0,0 +1,20 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +$BDRadius: 15px; +$BorderShadow: 0px 4px 8px rgba(0, 0, 0, 0.1), + 0px -4px 8px rgba(255, 255, 255, 0.8); + +@import "./navigation.scss"; +@import "./breadcrumbs.scss"; +@import "./container.scss"; +@import "gallery/basic.scss"; +@import "album/basic.scss"; +@import "./pagination.scss"; + +body { + margin-right: 40px; + margin-left: 40px; + align-items: center; +} diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..c933dc5 --- /dev/null +++ b/bin/console @@ -0,0 +1,17 @@ +#!/usr/bin/env php +=8.1", + "ext-ctype": "*", + "ext-iconv": "*", + "pentatrion/vite-bundle": "^2.3", + "symfony/asset": "6.1.*", + "symfony/console": "6.1.*", + "symfony/dependency-injection": "6.1.*", + "symfony/dotenv": "6.1.*", + "symfony/finder": "6.1.*", + "symfony/flex": "^2", + "symfony/framework-bundle": "6.1.*", + "symfony/mailer": "6.1.*", + "symfony/maker-bundle": "^1.47", + "symfony/runtime": "6.1.*", + "symfony/twig-bundle": "6.1.*", + "symfony/yaml": "6.1.*", + "twig/extra-bundle": "^3.4", + "twig/twig": "^2.12|^3.0" + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "symfony/flex": true, + "symfony/runtime": true + }, + "optimize-autoloader": true, + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "6.1.*" + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..0e0b921 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3741 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "64773ccfbc0c8ff081fc47ed84d3a57a", + "packages": [ + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2022-06-18T20:57:19+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + }, + "time": "2022-11-12T15:38:23+00:00" + }, + { + "name": "pentatrion/vite-bundle", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/lhapaipai/vite-bundle.git", + "reference": "7cd8acc6eac2f5ab402736c249ec430e67b1745e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lhapaipai/vite-bundle/zipball/7cd8acc6eac2f5ab402736c249ec430e67b1745e", + "reference": "7cd8acc6eac2f5ab402736c249ec430e67b1745e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/asset": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/http-client": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.9", + "phpstan/phpstan": "^1.8" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Pentatrion\\ViteBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Hugues Tavernier", + "email": "hugues.tavernier@protonmail.com" + } + ], + "description": "Vite integration for your Symfony app", + "keywords": [ + "bundle", + "symfony", + "vite", + "vitejs" + ], + "support": { + "issues": "https://github.com/lhapaipai/vite-bundle/issues", + "source": "https://github.com/lhapaipai/vite-bundle/tree/v2.3.0" + }, + "time": "2022-11-14T19:36:18+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "symfony/asset", + "version": "v6.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "6065b5edc36442cb1ba98dc40f7c7f6b9e154729" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/6065b5edc36442cb1ba98dc40f7c7f6b9e154729", + "reference": "6065b5edc36442cb1ba98dc40f7c7f6b9e154729", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/http-foundation": "<5.4" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v6.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-31T08:17:45+00:00" + }, + { + "name": "symfony/cache", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "ee5d5b88162684a1377706f9c25125e97685ee61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/ee5d5b88162684a1377706f9c25125e97685ee61", + "reference": "ee5d5b88162684a1377706f9c25125e97685ee61", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2|^3", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^5.4|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2eab7fa459af6d75c6463e63e633b667a9b761d3", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/config", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "a0645dc585d378b73c01115dd7ab9348f7d40c85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/a0645dc585d378b73c01115dd7ab9348f7d40c85", + "reference": "a0645dc585d378b73c01115dd7ab9348f7d40c85", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T15:00:40+00:00" + }, + { + "name": "symfony/console", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815", + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-26T21:42:49+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "b9c797c9d56afc290d4265854bafd01b4e379240" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b9c797c9d56afc290d4265854bafd01b4e379240", + "reference": "b9c797c9d56afc290d4265854bafd01b4e379240", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/service-contracts": "^1.1.6|^2.0|^3.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v6.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-28T16:00:52+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "568c11bcedf419e7e61f663912c3547b54de51df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/568c11bcedf419e7e61f663912c3547b54de51df", + "reference": "568c11bcedf419e7e61f663912c3547b54de51df", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-01T07:15:35+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/699a26ce5ec656c198bf6e26398b0f0818c7e504", + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-05T16:51:07+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "4d216a2beef096edf040a070117c39ca2abce307" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d216a2beef096edf040a070117c39ca2abce307", + "reference": "4d216a2beef096edf040a070117c39ca2abce307", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-21T20:29:40+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:42:06+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "0763da1bdcce1d48c06778d48249905c26d34a72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/0763da1bdcce1d48c06778d48249905c26d34a72", + "reference": "0763da1bdcce1d48c06778d48249905c26d34a72", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-07T09:39:47+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "d402e86ce94bb3eb1ca3d6bb0393285c791e2b14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d402e86ce94bb3eb1ca3d6bb0393285c791e2b14", + "reference": "d402e86ce94bb3eb1ca3d6bb0393285c791e2b14", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^5.4|^6.0" + }, + "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<5.4", + "symfony/console": "<5.4", + "symfony/dom-crawler": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/mime": "<5.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.1", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<5.4", + "symfony/web-profiler-bundle": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13.1", + "doctrine/persistence": "^1.3|^2|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/notifier": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/semaphore": "^5.4|^6.0", + "symfony/serializer": "^6.1", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/twig": "^2.10|^3.0" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/http-client", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "f515d066728774efb34347a87580621416ca8968" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/f515d066728774efb34347a87580621416ca8968", + "reference": "f515d066728774efb34347a87580621416ca8968", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/fd038f08c623ab5d22b26e9ba35afe8c79071800", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-22T07:30:54+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-12T09:44:59+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.1", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.1", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T18:06:36+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "7e19813c0b43387c55665780c4caea505cc48391" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7e19813c0b43387c55665780c4caea505cc48391", + "reference": "7e19813c0b43387c55665780c4caea505cc48391", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.48.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/2e428e8432e9879187672fe08f1cc335e2a31dd6", + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^4.11", + "php": ">=8.0", + "symfony/config": "^5.4.7|^6.0", + "symfony/console": "^5.4.7|^6.0", + "symfony/dependency-injection": "^5.4.7|^6.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^5.4.7|^6.0", + "symfony/finder": "^5.4.3|^6.0", + "symfony/framework-bundle": "^5.4.7|^6.0", + "symfony/http-kernel": "^5.4.7|^6.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.4", + "doctrine/orm": "<2.10", + "symfony/doctrine-bridge": "<5.4" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.4", + "doctrine/orm": "^2.10.0", + "symfony/http-client": "^5.4.7|^6.0", + "symfony/phpunit-bridge": "^5.4.7|^6.0", + "symfony/polyfill-php80": "^1.16.0", + "symfony/process": "^5.4.7|^6.0", + "symfony/security-core": "^5.4.7|^6.0", + "symfony/yaml": "^5.4.3|^6.0", + "twig/twig": "^2.0|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.48.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-14T10:48:46+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "f440f066d57691088d998d6e437ce98771144618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/f440f066d57691088d998d6e437ce98771144618", + "reference": "f440f066d57691088d998d6e437ce98771144618", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.2|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-19T08:10:53+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-18T13:12:43+00:00" + }, + { + "name": "symfony/runtime", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "e5d4d848656cbb1812d5f911b1bdec205c6e2fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/e5d4d848656cbb1812d5f911b1bdec205c6e2fac", + "reference": "e5d4d848656cbb1812d5f911b1bdec205c6e2fac", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.1" + }, + "conflict": { + "symfony/dotenv": "<5.4" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/console": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/runtime/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:18:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5", + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-10T09:34:31+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "10f4ccba086ca81bbac9ee5e065d9f99565b3983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/10f4ccba086ca81bbac9ee5e065d9f99565b3983", + "reference": "10f4ccba086ca81bbac9ee5e065d9f99565b3983", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.4", + "symfony/form": "<6.1", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "egulias/email-validator": "^2.1.10|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^6.1", + "symfony/html-sanitizer": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/html-sanitizer": "For using the HtmlSanitizerExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-19T08:10:53+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v6.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "a2abab10068525a7f5a879e40e411d369d688545" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a2abab10068525a7f5a879e40e411d369d688545", + "reference": "a2abab10068525a7f5a879e40e411d369d688545", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.1", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/framework-bundle": "<5.4", + "symfony/translation": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "symfony/asset": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v6.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-27T16:55:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f0adde127f24548e23cbde83bcaeadc491c551f", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-07T08:04:03+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "b49350f45cebbba6e5286485264b912f2bcfc9ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b49350f45cebbba6e5286485264b912f2bcfc9ef", + "reference": "b49350f45cebbba6e5286485264b912f2bcfc9ef", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-04T16:01:56+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "66c6b0cf52b00f74614a2cf7ae7db08ea1095931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/66c6b0cf52b00f74614a2cf7ae7db08ea1095931", + "reference": "66c6b0cf52b00f74614a2cf7ae7db08ea1095931", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-07T08:04:03+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "2e58256b0e9fe52f30149347c0547e4633304765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/2e58256b0e9fe52f30149347c0547e4633304765", + "reference": "2e58256b0e9fe52f30149347c0547e4633304765", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^2.12|^3.0", + "twig/html-extra": "^2.12|^3.0", + "twig/inky-extra": "^2.12|^3.0", + "twig/intl-extra": "^2.12|^3.0", + "twig/markdown-extra": "^2.12|^3.0", + "twig/string-extra": "^2.12|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-01-04T13:58:53+00:00" + }, + { + "name": "twig/twig", + "version": "v3.4.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58", + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.4.3" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-09-28T08:42:51+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.1", + "ext-ctype": "*", + "ext-iconv": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..f8da62d --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,9 @@ + ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Pentatrion\ViteBundle\PentatrionViteBundle::class => ['all' => true], +]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..6899b72 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..7853e9e --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,24 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + http_method_override: false + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native + + #esi: true + #fragments: true + php_errors: + log: true + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 0000000..56a650d --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/config/packages/pentatrion_vite.yaml b/config/packages/pentatrion_vite.yaml new file mode 100644 index 0000000..6156e14 --- /dev/null +++ b/config/packages/pentatrion_vite.yaml @@ -0,0 +1,14 @@ +# config/packages/pentatrion_vite.yaml +pentatrion_vite: + # Base public path when served in development or production + base: /build/ + # path to the web root relative to the Symfony project root directory + public_dir: /public + + script_attributes: + # you can define your attributes that you want to apply + # for all your script tags + + link_attributes: + # you can define your attributes that you want to apply + # for all your link tags \ No newline at end of file diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..4b766ce --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,12 @@ +framework: + router: + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 0000000..5ebcdb2 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ +=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz", + "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/daisyui": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.41.0.tgz", + "integrity": "sha512-M/MPbTERJK4iBIXRGQpQdHTmy53HRqrgca4rsbPhio1Sqq0w2GH/RJSVX8b14hYB0E9E8R+t5bHIeqW1oHT97A==", + "dependencies": { + "color": "^4.2", + "css-selector-tokenizer": "^0.8.0", + "postcss-js": "^4.0.0", + "tailwindcss": "^3" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.1.6" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "node_modules/esbuild": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz", + "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.14", + "@esbuild/linux-loong64": "0.15.14", + "esbuild-android-64": "0.15.14", + "esbuild-android-arm64": "0.15.14", + "esbuild-darwin-64": "0.15.14", + "esbuild-darwin-arm64": "0.15.14", + "esbuild-freebsd-64": "0.15.14", + "esbuild-freebsd-arm64": "0.15.14", + "esbuild-linux-32": "0.15.14", + "esbuild-linux-64": "0.15.14", + "esbuild-linux-arm": "0.15.14", + "esbuild-linux-arm64": "0.15.14", + "esbuild-linux-mips64le": "0.15.14", + "esbuild-linux-ppc64le": "0.15.14", + "esbuild-linux-riscv64": "0.15.14", + "esbuild-linux-s390x": "0.15.14", + "esbuild-netbsd-64": "0.15.14", + "esbuild-openbsd-64": "0.15.14", + "esbuild-sunos-64": "0.15.14", + "esbuild-windows-32": "0.15.14", + "esbuild-windows-64": "0.15.14", + "esbuild-windows-arm64": "0.15.14" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz", + "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz", + "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz", + "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz", + "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz", + "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz", + "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz", + "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz", + "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz", + "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz", + "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz", + "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz", + "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz", + "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz", + "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz", + "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz", + "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz", + "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz", + "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz", + "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz", + "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-symfony": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/vite-plugin-symfony/-/vite-plugin-symfony-0.7.0.tgz", + "integrity": "sha512-zDsNyL1XSsCVTgJfP0m3yfY6JtYC1yFybHFKSwypUQI0OCIm09hdGGi29BR9N/jLXNpS5SJZv+wt7c6RCSYUJg==", + "dev": true, + "dependencies": { + "sirv": "^2.0.2" + }, + "peerDependencies": { + "vite": "^3.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.14.tgz", + "integrity": "sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz", + "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==", + "dev": true, + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "daisyui": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.41.0.tgz", + "integrity": "sha512-M/MPbTERJK4iBIXRGQpQdHTmy53HRqrgca4rsbPhio1Sqq0w2GH/RJSVX8b14hYB0E9E8R+t5bHIeqW1oHT97A==", + "requires": { + "color": "^4.2", + "css-selector-tokenizer": "^0.8.0", + "postcss-js": "^4.0.0", + "tailwindcss": "^3" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "esbuild": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz", + "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.14", + "@esbuild/linux-loong64": "0.15.14", + "esbuild-android-64": "0.15.14", + "esbuild-android-arm64": "0.15.14", + "esbuild-darwin-64": "0.15.14", + "esbuild-darwin-arm64": "0.15.14", + "esbuild-freebsd-64": "0.15.14", + "esbuild-freebsd-arm64": "0.15.14", + "esbuild-linux-32": "0.15.14", + "esbuild-linux-64": "0.15.14", + "esbuild-linux-arm": "0.15.14", + "esbuild-linux-arm64": "0.15.14", + "esbuild-linux-mips64le": "0.15.14", + "esbuild-linux-ppc64le": "0.15.14", + "esbuild-linux-riscv64": "0.15.14", + "esbuild-linux-s390x": "0.15.14", + "esbuild-netbsd-64": "0.15.14", + "esbuild-openbsd-64": "0.15.14", + "esbuild-sunos-64": "0.15.14", + "esbuild-windows-32": "0.15.14", + "esbuild-windows-64": "0.15.14", + "esbuild-windows-arm64": "0.15.14" + } + }, + "esbuild-android-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz", + "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz", + "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz", + "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz", + "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz", + "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz", + "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz", + "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz", + "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz", + "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz", + "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz", + "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz", + "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz", + "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz", + "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz", + "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz", + "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz", + "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz", + "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz", + "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz", + "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true, + "optional": true, + "peer": true + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "vite-plugin-symfony": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/vite-plugin-symfony/-/vite-plugin-symfony-0.7.0.tgz", + "integrity": "sha512-zDsNyL1XSsCVTgJfP0m3yfY6JtYC1yFybHFKSwypUQI0OCIm09hdGGi29BR9N/jLXNpS5SJZv+wt7c6RCSYUJg==", + "dev": true, + "requires": { + "sirv": "^2.0.2" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7f46f96 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "license": "UNLICENSED", + "devDependencies": { + "vite": "^3.0", + "vite-plugin-symfony": "^0.7.0" + }, + "dependencies": { + "autoprefixer": "^10.4.13", + "daisyui": "^2.41.0", + "tailwindcss": "^3.2.4" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..116848f --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,3 @@ +module.exports = { + plugins: [require("tailwindcss"), require("autoprefixer")], +}; diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..9982c21 --- /dev/null +++ b/public/index.php @@ -0,0 +1,9 @@ +register('logger.service', 'LoggerService'); + $LoggerService = $LoggerBuilder->get('logger.service'); */ + + $album_id = $child->attributes->get('album_id'); + + $imagepath = $_SERVER['DOCUMENT_ROOT'] . '/images/gallery/'; + + $JSON = file_get_contents($imagepath . '01_JSON' . '/' . $album_id . '.json'); + + $items = json_decode($JSON, true); + + $img_count = count($items[$album_id]); + $per_page = 10; + $max_pages = ceil($img_count / $per_page); + + // $LoggerService->logData($_SERVER["REMOTE_ADDR"] . ' - ' . 'Album ' . $album_id . ' wurde aufgerufen'); + + + + return $this->render('album/album.html.twig', [ + 'album' => $album_id, + 'items' => $items, + 'img_count' => $img_count, + 'per_page' => $per_page, + 'max_pages' => $max_pages + ]); + } + + #[Route('/{album_id}/{image_id}', name: 'details')] + public function details(Request $child) + { + +/* $LoggerBuilder = new ContainerBuilder(); + $LoggerBuilder->register('logger.service', 'LoggerService'); + $LoggerService = $LoggerBuilder->get('logger.service'); */ + + $album_id = $child->attributes->get('album_id'); + $image_id = $child->attributes->get('image_id'); + + $imagepath = $_SERVER['DOCUMENT_ROOT'] . '/images/gallery/'; + + $JSON = file_get_contents($imagepath . '01_JSON' . '/' . $album_id . '.json'); + + $items = json_decode($JSON, true); + + $details_items = $items[$album_id][$image_id]; + $details_tags = $items[$album_id][$image_id]['Tags']; + + // $LoggerService->logData($_SERVER["REMOTE_ADDR"] . ' - ' . 'Bild ' . $image_id . ' aus Album ' . $album_id . ' wurde aufgerufen'); + + return $this->render('album/details.html.twig', [ + + 'album' => $album_id, + 'image' => $image_id, + 'items' => $details_items, + 'tags' => $details_tags + ]); + } +} diff --git a/src/Controller/GalleryController.php b/src/Controller/GalleryController.php new file mode 100644 index 0000000..863f86d --- /dev/null +++ b/src/Controller/GalleryController.php @@ -0,0 +1,77 @@ +logData($_SERVER["REMOTE_ADDR"].' - '.$_SERVER["HTTP_USER_AGENT"]); + + $imagepath = './images/gallery/'; + +/* $LoggerBuilder = new ContainerBuilder(); + $LoggerBuilder->register('logger.service', 'LoggerService'); + $LoggerService = $LoggerBuilder->get('logger.service'); */ + + $JSONBuilder = new ContainerBuilder(); + $JSONBuilder->register('json.service', 'JSONService'); + $JSONService = $JSONBuilder->get('json.service'); + + /* $DBBuilder = new ContainerBuilder(); + $DBBuilder->register('db.service', 'DBService'); + $DBService = $DBBuilder->get('db.service'); */ + +/* $MailerBuilder = new ContainerBuilder(); + $MailerBuilder->register('mailer.service', 'MailerService'); + $MailerService = $MailerBuilder->get('mailer.service'); */ + + /* + $containerBuilder + ->register('newsletter_manager', 'NewsletterManager') + ->addMethodCall('setMailer', [new Reference('mailer')]); + + $newsletterManager = $containerBuilder->get('newsletter_manager'); + + $MailerBuilder = new ContainerBuilder(); + $MailerBuilder->register('mailer.service', 'MailerService'); + $MailerService = $MailerBuilder->get('mailer.service'); + */ + + // $LoggerService->logData($_SERVER["REMOTE_ADDR"] . ' - ' . $_SERVER["HTTP_USER_AGENT"]); + + if (!file_exists($imagepath . '01_JSON/' . '01_All.json')) { + $JSONService->dirToArray($imagepath); + $JSONService->MergeJSON($imagepath); + } + + $JSON_File = $imagepath . '01_JSON' . '/' . '01_All' . '.json'; + + $JSON = file_get_contents($JSON_File); + $items = json_decode($JSON, true); + + $img_count = count($items); + $per_page = 10; + $max_pages = ceil($img_count / $per_page); + + // $show = array_slice($items, $per_page * intval($_GET['page']) - 1, $per_page); + + return $this->render('gallery/gallery.html.twig', [ + 'items' => $items, + 'img_count' => $img_count, + 'per_page' => $per_page, + 'max_pages' => $max_pages + ]); + } +} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..779cd1f --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,11 @@ + $value) { + if (!in_array($value,array(".","..","01_JSON"))) { + + if (is_dir($dir_albums . $value)) { + $filename = $imagepath.'01_JSON'.'/'.$value.'.json'; + + $result[$value][$value] = $this->dirToArray($dir_albums . $value); + + $json_encoded = json_encode($result[$value]); + file_put_contents($filename, $json_encoded); + } + else { + $value_image = $imagepath.'/'.$value; + getimagesize($value_image, $infos); + $exif = exif_read_data($value_image, 0, true); + + $tags = iptcparse($infos['APP13']); + + if(!isset(($tags['2#025']))) { + $tags['2#025'] = null; + } + + $metadata = array( + + 'ApertureFNumber' => $exif['COMPUTED']['ApertureFNumber'], + 'FocalLength' => substr($exif['EXIF']['FocalLength'], 0, -2), + 'ExposureTime' => $exif['EXIF']['ExposureTime'], + 'ISOSpeedRatings' => $exif['EXIF']['ISOSpeedRatings'], + 'DateTimeOriginal' => date('d.m.Y H:i:s', strtotime($exif['EXIF']['DateTimeOriginal'])), + 'Lens' => $exif['EXIF']['UndefinedTag:0xA434'], + 'Tags' => $tags['2#025'] + + /* 'Height' => $exif['COMPUTED']['Height'], + 'Width' => $exif['COMPUTED']['Width'], + 'Model' => $exif['IFD0']['Model'], + 'Artist' => $exif['IFD0']['Artist'], */ + ); + + $result[$value] = $metadata; + } + } + } + + return $result; + } + + function MergeJSON($dir_json) { + + $JSONFiles = new Finder(); + + $JSONFiles + ->name('*.json') + ->files()->in($dir_json); + + foreach ($JSONFiles as $file) { + $file->getContents(); + } + + $valle = array(); + + foreach($JSONFiles as $vurl) { + if (file_exists($vurl)) { + $vres = json_decode(file_get_contents($vurl), true); + $valle = array_merge($valle,$vres); + } + } + + $savedata2 = json_encode($valle); + $savefile2 = $dir_json.'/01_JSON/'.'01_All.json'; + + file_put_contents($savefile2, $savedata2, LOCK_EX); + } +} \ No newline at end of file diff --git a/src/Service/LogService.php b/src/Service/LogService.php new file mode 100644 index 0000000..e69de29 diff --git a/src/Service/MailerService.php b/src/Service/MailerService.php new file mode 100644 index 0000000..1a46e4a --- /dev/null +++ b/src/Service/MailerService.php @@ -0,0 +1,21 @@ +from('michael.schwab@outlook.com') + ->to('michael.schwab@gmx.ch') + ->subject('Site update just happened!') + ->text('Someone just updated the site. We told them:'); + + $mailer->send($email); + } +} \ No newline at end of file diff --git a/src/Twig/ViteExtension.php b/src/Twig/ViteExtension.php new file mode 100644 index 0000000..3cf542c --- /dev/null +++ b/src/Twig/ViteExtension.php @@ -0,0 +1,38 @@ + ['html']] + // Reference: https://twig.symfony.com/doc/2.x/advanced.html#automatic-escaping + new TwigFilter('filter_name', [$this, 'doSomething']), + ]; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('vite_entry_script_tags', [$this, 'renderViteScriptTags'], ['is_safe' => ['html']]), + new TwigFunction('vite_entry_link_tags', [$this, 'renderViteLinkTags'], ['is_safe' => ['html']]), + ]; + } + + public function renderViteScriptTags(string $entryName, array $options = []): string + { + return $this->entrypointRenderer->renderScripts($entryName, $options); + } + + public function renderViteLinkTags(string $entryName, array $options = []): string + { + return $this->entrypointRenderer->renderLinks($entryName, $options); + } +} diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..95d358f --- /dev/null +++ b/symfony.lock @@ -0,0 +1,107 @@ +{ + "pentatrion/vite-bundle": { + "version": "2.3", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "main", + "version": "1.0", + "ref": "33d48a1c831b2d29641175c8320e66a9f1c9911f" + }, + "files": [ + "config/routes/dev/pentatrion_vite.yaml" + ] + }, + "symfony/console": { + "version": "6.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "da0c8be8157600ad34f10ff0c9cc91232522e047" + }, + "files": [ + "bin/console" + ] + }, + "symfony/flex": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172" + }, + "files": [ + ".env" + ] + }, + "symfony/framework-bundle": { + "version": "6.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.4", + "ref": "3cd216a4d007b78d8554d44a5b1c0a446dab24fb" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/preload.php", + "config/routes/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/mailer": { + "version": "6.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "4.3", + "ref": "97a61eabb351d7f6cb7702039bcfe07fe9d7e03c" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.48", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/routing": { + "version": "6.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.1", + "ref": "a44010c0d06989bd4f154aa07d2542d47caf5b83" + }, + "files": [ + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/twig-bundle": { + "version": "6.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.4", + "ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "twig/extra-bundle": { + "version": "v3.4.0" + } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..b15b1ad --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,15 @@ +module.exports = { + content: [ + './templates/**/*.{twig,html,js}', + './public/**/*.html' + ], + future: { + // removeDeprecatedGapUtilities: true, + // purgeLayersByDefault: true, + }, + theme: { + extend: {}, + }, + variants: {}, + plugins: [require("daisyui")], + } \ No newline at end of file diff --git a/templates/about/index.html.twig b/templates/about/index.html.twig new file mode 100644 index 0000000..9a37565 --- /dev/null +++ b/templates/about/index.html.twig @@ -0,0 +1,20 @@ +{% extends 'base.html.twig' %} + +{% block title %}Hello AboutController!{% endblock %} + +{% block body %} + + +
+

Hello {{ controller_name }}! ✅

+ + This friendly message is coming from: + +
+{% endblock %} diff --git a/templates/album/album.html.twig b/templates/album/album.html.twig new file mode 100644 index 0000000..3f9cd80 --- /dev/null +++ b/templates/album/album.html.twig @@ -0,0 +1,35 @@ +{% extends 'base.html.twig' %} + +{% block title %}Home - + {{ album }} +{% endblock %} + +{% block album %} + +
+ {% for album_1, albums_1 in items %} + {% for album_2, albums_2 in albums_1 %} +
+
+ +
+
+ + +
+
+ {% endfor %} + {% endfor %} +
+{% endblock %} diff --git a/templates/album/details.html.twig b/templates/album/details.html.twig new file mode 100644 index 0000000..21ba3de --- /dev/null +++ b/templates/album/details.html.twig @@ -0,0 +1,63 @@ +{% extends 'base.html.twig' %} + +{% block title %}Home - + {{ album }} + - + {{ image }} +{% endblock %} + +{% block details %} + +
+
+ +
+ +
+

+

+
+
Blende
+
{{ items.ApertureFNumber }}
+
+
+
Brennweite
+
{{ items.FocalLength }} + mm
+
+
+
Verschlusszeit
+
{{ items.ExposureTime }} + sek.
+
+
+
ISO Wert
+
{{ items.ISOSpeedRatings }}
+
+
+
+
+
Objektiv
+
{{ items.Lens }}
+
+
+
Aufnahmedatum
+
{{ items.DateTimeOriginal }}
+
+
+
+
+
Tags
+
+ {% if items.Tags is not null %} + {% for tag_1, tags_1 in tags %} + #{{ tags_1 }} + {% endfor %} + {% endif %} +
+
+
+

+
+
+{% endblock %} diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..b77e969 --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,46 @@ + + + + + + + + {% block title %}{% endblock %} + +{{ vite_entry_link_tags('app') }} + + + + + + + {% block body %} + + {# {% block navigation %} +
{% include 'navigation.html.twig' %}
+ {% endblock %} #} + + {% block breadcrumbs %} +
{% include 'breadcrumbs.html.twig' %}
+ {% endblock %} + +
+ {% block gallery %}{% endblock %} + {% block album %}{% endblock %} + {% block details %}{% endblock %} +
+ + {% endblock %} + + {# {% block pagination %} +
{% include 'pagination.html.twig' %}
+ {% endblock %} #} + + + + + +{{ vite_entry_script_tags('app') }} + + + diff --git a/templates/breadcrumbs.html.twig b/templates/breadcrumbs.html.twig new file mode 100644 index 0000000..33f446e --- /dev/null +++ b/templates/breadcrumbs.html.twig @@ -0,0 +1,24 @@ +{% block breadcrumbs %} + +{% endblock %} diff --git a/templates/gallery/gallery.html.twig b/templates/gallery/gallery.html.twig new file mode 100644 index 0000000..6f57343 --- /dev/null +++ b/templates/gallery/gallery.html.twig @@ -0,0 +1,35 @@ +{% extends 'base.html.twig' %} + +{% block title %}Gallerien +{% endblock %} + +{% block gallery %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/navigation.html.twig b/templates/navigation.html.twig new file mode 100644 index 0000000..a5d0e75 --- /dev/null +++ b/templates/navigation.html.twig @@ -0,0 +1,60 @@ + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..83192a5 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,26 @@ +import { resolve } from "path"; +import { defineConfig } from "vite"; +import symfonyPlugin from "vite-plugin-symfony"; + +/* if you're using React */ +// import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [ + /* react(), // if you're using React */ + symfonyPlugin(), + ], + build: { + manifest: true, + emptyOutDir: true, + assetsDir: "", + cssCodeSplit: true, + format: "cjs", + outDir: "./public/build/", + rollupOptions: { + input: { + app: "./assets/js/main.js", + }, + }, + }, +});